Min Arduino Ping Display Robot (7 / 8 steg)
Steg 7: Gjort!-kod och teori
Hittar du massor av varianter på hur man kör PING sensorn, i huvudsak den praktiska tillämpningen av sensorn äger rum i den cykel loop () som implementerar protokollet för drift av komponenten PING.
Baserat på dess specifika kan du styra driften av sensorn genom en serie av pulser. Sammanfattningsvis kan vi säga att du använder en digital pin för att mäta en analog stift.
Förbättring: om du vill göra sval, du kan också infoga en temperatur sensortyp TMP36 för att förbättra behandlingen, detta är eftersom som ni vet, ljudet färdas med en hastighet av 343 m / s, detta värde ning är inte absolut eftersom det beror på luftens temperatur, bibliografin visar detta förhållande mellan som rusas av solitt (C) och luftens temperatur (t) C = 331.5 + (0,6 * t) , att veta temperaturen (och här hjälper det sensorn) vi så småningom sätta några rader kod för att genomföra behandlingen.
#include < Servo.h > Servo funktioner:
#include < LiquidCrystal.h >
LiquidCrystal lcd (3, 4, 5, 6, 11, 12);
Servo PingServo;
Servo LeftServo;
Servo RightServo;
int ultraSoundSignal = 7. Ultraljud signal stift
int val = 0;
int värde2 = 0;
int ultrasoundValue = 0;
int timecount = 0; ECHO counterint
ledPin = 13. LED är ansluten till digital stift 13
void setup() {
LCD.BEGIN (16, 2);
Serial.BEGIN (9600);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
LeftServo.attach(8);
RightServo.attach(9);
PingServo.attach(10);
pinMode (ledPin, produktionen);
}
void moveServoLeftTo (int vinkel, int längd) {
styr servo att flytta för en viss vinkel och för ett givet antal millisekunder
LeftServo.write(angle);
för (; längd > 0; längd-= 20) {
cykel för det angivna antalet millisekunder genom att subtrahera 20ms varje iteration
delay(20);
}
}
void moveServoRightTo (int vinkel, int längd) {
RightServo.write(angle);
för (; längd > 0; längd-= 20) {
Delay(20);
}
}
void loop() {
Funzioni Ping)))
timecount = 0;
Val = 0;
pinMode (ultraSoundSignal, produktionen); Switch signalpin att mata
digitalWrite (ultraSoundSignal, låg); Skicka låg puls
delayMicroseconds(2); Vänta 2 mikrosekunder
digitalWrite (ultraSoundSignal, hög); Skicka hög puls
delayMicroseconds(5); Vänta 5 mikrosekunder
digitalWrite (ultraSoundSignal, låg); HoldOff
pinMode (ultraSoundSignal, ingång); Switch signalpin att mata in
Val = digitalRead(ultraSoundSignal); Lägg till signal värde till val
While(val == low) {/ / Loop tills pin står ett högt värde
Val = digitalRead(ultraSoundSignal);
}
While(val == High) {/ / Loop tills pin står ett högt värde
Val = digitalRead(ultraSoundSignal);
timecount = timecount + 1; Räkna echo puls tid}
ultrasoundValue = timecount; Lägg till echo puls tid till ultrasoundValue
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print ("hinder cm");
LCD.Print(timecount/10);
Delay(200);
om (timecount > 0) {
digitalWrite (ledPin, hög);}
om (ultrasoundValue > 500) {
moveServoLeftTo(45,50);
moveServoRightTo(180,50);
}
om (ultrasoundValue < 500) {
moveServoLeftTo(180,40);
moveServoRightTo(180,40);
}
om (ultrasoundValue < 100) {
moveServoLeftTo(180,100);
moveServoRightTo(45,100);
}
}