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

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
Zapojení

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

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