8. Ultrazvukově Ovládané Servo S Ř-duino

by prokyber in Circuits > Arduino

202 Views, 0 Favorites, 0 Comments

8. Ultrazvukově Ovládané Servo S Ř-duino

inbound4552798196001955102.jpg

Ahoj, v minulosti jsme si ukázali jak ovládat LEDku ultrazvukovým senzorem a také jak ovládat servo. Dnes využijeme našich nabytých schopností, abychom tyto dva projekty spojili. Vše co budeme potřebovat, abychom tento projekt dovedli do zdárného konce už známe, a tak doporučuji si zkusit pracovat samostatně před tím než si návod přečtete.

Supplies

  • Ř-duino - zde
  • USB-C - zde
  • HC-SR04 ultrazvukový senzor - zde
  • Nepájivé pole - zde
  • Vodiče - zde
  • Sg90 Servo - zde

Zapojení

Snímek obrazovky 2023-12-30 013648.png

Propojíme:

  • GND a Servo hnědý kabel
  • 5V a Servo červený kabel
  • PIN 3 a Servo poslední oranžový kabel


Nyní připojte váš ultrazvukový senzor na breadbordu jak je ukázáno na obrázku

  • GND a řádku do které je zapojen PIN GND HC-04
  • 3V3 a řádku do které je zapojen PIN VCC HC-04
  • PIN 7 a řádku do které je zapojen PIN TRIG HC-04
  • PIN 6 a řádku do které je zapojen PIN ECHO HC-04

Kód

Screenshot from 2023-09-12 18-41-52.png

Budeme používat ArduinoIDE. Než však začneme psát kód, budeme muset nastavit některé věci.

Nyní připojte desku k počítači, klikněte na nápis "Tools" na vrchní liště aplikace, vybertr "Board" a následně klikněte na "Ardduino Uno". Dále opět klikněte na "Tools", poté na "Port" a vy berte port na kterém je připojena vaše deska.


A nyní již pojďme psát kód.


(Vše napsáno po "//" nebo vepsané mezi "/* */" je comment. To znamená že se nejedná o kód ale o text napsaný, aby vám pomohl kódu porozumět. Zkuste si je přečíst a pokusit se pochopit co se v kódu děje.)

// Přidáme knihovnu pro ovládání Arduina pro možnost použití kódu na platformě PlatformIO
#include <Arduino.h>

// Přidáme knihovnu pro ovládání serva
#include <Servo.h>


// tyto piny ovládají a čtou z ultrazvukového senzoru
#define trigPin 7
#define echoPin 6


// definuje potřebné číselné proměné
float duration_us, distance_cm, last_pos;


// vytvoří reprezentaci serva
Servo myservo;


void setup() {
// přiřadí PIN 3 pro ovládání serva
myservo.attach(3);
// nastavuje trigPin na mód výstupu
pinMode(trigPin, OUTPUT);
// nastavuje echoPin na mód vstupu
pinMode(echoPin, INPUT_PULLUP);
}


void loop() {
// vytvoří 10 milisekundový puls na trigPin
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

// změří dobu trvání pulsu na echoPin
duration_us = pulseIn(echoPin, HIGH);

// výočet vzdálenosti
distance_cm = 0.017 * duration_us;


// nastavíme strop na 5Ocm
if(distance_cm > 50){
distance_cm = 50;
}

// vypočítá procento vzdálenosti z maxima a z toho vypočítá úhel
if(distance_cm <= last_pos - 2 || distance_cm >= last_pos + 2)
{
last_pos = distance_cm;
int procentoMaxVzdalenosti = distance_cm * 4;
myservo.write((180 / 100) * procentoMaxVzdalenosti);
}

}


Nyní klikněte na "Upload" (ikona šipečky) a máte hotovo :D