Stap 7: Gedaan!-CODE en theorie
U vindt tientallen varianten op het uitvoeren van de PING-sensor, in wezen de praktische werking van de sensor plaatsvindt in de cyclus lus die het protocol voor de werking van de component PING implementeert.
Op basis van de bijzondere bepalingen ervan kunt u de werking van de sensor door een reeks van pulsen. Samenvattend kunnen we zeggen dat u een digitale pin gebruikt voor het meten van een analoge pin.
Verbetering: als je wilt om cool, u kunt ook het invoegen van een temperatuur sensor type TMP36 ter verbetering van de lezing, dit is omdat zoals u weet, geluid reist met een snelheid van 343 m / s, deze waarde-ment is niet absoluut, want het hangt af van de temperatuur van de lucht, de bibliografie toont deze relatie tussen de snelheid van het geluid (C) en de temperatuur van de lucht (t) C = 331.5 + (0.6 * t) , te weten de temperatuur (en hier helpt het de sensor) wij uiteindelijk een paar lijnen van code uit te voeren van de lezing.
#include < Servo.h >
#include < LiquidCrystal.h >
LiquidCrystal lcd (3, 4, 5, 6, 11, 12);
Servo PingServo;
Servo LeftServo;
Servo RightServo;
int ultraSoundSignal = 7; Echografie signaal pin
int val = 0;
int val2 = 0;
int ultrasoundValue = 0;
int timecount = 0; ECHO counterint
ledPin = 13; LED aangesloten op digital pin 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, OUTPUT);
}
VOID moveServoLeftTo (int hoek, int duur) {}
bepaalt de servo voor een opgegeven hoek en voor een gegeven aantal milliseconden te verplaatsen
LeftServo.write(angle);
voor (; duur > 0; duur-= 20) {}
cyclus voor het opgegeven aantal milliseconden door af te trekken 20ms elke iteratie
vertraging(20);
}
}
VOID moveServoRightTo (int hoek, int duur) {}
RightServo.write(angle);
voor (; duur > 0; duur-= 20) {}
vertraging(20);
}
}
void loop {}
Funzioni Ping)))
timecount = 0;
Val = 0;
pinMode (ultraSoundSignal, OUTPUT); Schakelaar signalpin uitgang
digitalWrite (ultraSoundSignal, laag); Lage puls sturen
delayMicroseconds(2); Wacht 2 microseconden
digitalWrite (ultraSoundSignal, hoge); Hoge pols verzenden
delayMicroseconds(5); Wacht 5 microseconden
digitalWrite (ultraSoundSignal, laag); Holdoff
pinMode (ultraSoundSignal, INPUT); Schakelaar signalpin in te voeren
Val = digitalRead(ultraSoundSignal); Signaal waarde toevoegen aan val
while(Val == low) {/ / Loop totdat pin een hoge waarde leest
Val = digitalRead(ultraSoundSignal);
}
while(Val == High) {/ / Loop totdat pin een hoge waarde leest
Val = digitalRead(ultraSoundSignal);
timecount = timecount + 1; Aantal echo-puls tijd}
ultrasoundValue = timecount; Echo pulse tijd aan ultrasoundValue toevoegen
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print ("belemmering cm");
LCD.Print(timecount/10);
delay(200);
Als (timecount > 0) {}
digitalWrite (ledPin, hoge);}
Servo-functies:
Als (ultrasoundValue > 500) {}
moveServoLeftTo(45,50); servo beweegt links van 45 graden voor 500 milliseconden
moveServoRightTo(180,50);
}
Als (ultrasoundValue < 500) {}
moveServoLeftTo(180,40);
moveServoRightTo(180,40);
}
Als (ultrasoundValue < 100) {}
moveServoLeftTo(180,100);
moveServoRightTo(45,100);
}
}