Motion Following Robot (3 / 4 steg)
Steg 3: kod
Koden som jag gav möjliggör byte av avstånd tröskeln. Så med andra ord, hur långt sensorerna kan se. Jag kommer att lägga upp en ny instructable snart att visa hur du kan göra sensorerna ännu mer exakt med hjälp av en temperaturgivare. Slutligen, min kompis visade mig en cool sätt att felsökning riktigt snabb. Allt du gör är använda ett booleskt värde och något om uttalanden. Om boolean är sant, då seriell kommunikation kommer att vara på och kommunicera. Om boolean är falsk, då programmet kommer att gå mycket snabbare men inte kommunicera.
Jag bifogar filen .ino, annars kan du kopiera den från här:
/*************************************************************************************************
**************************************************************************************************
Förslaget följer skapade av Calvin Kielas-Jensen
Kontrollera med hjälp av en Arduino UNO Instructables.com kopplingsschemat.
Detta skript kan två ultraljud rad sensorer att följa rörelsen medan monterad på toppen av ett servo. Avståndet tröskeln kan ändras men bör inte ange alltför långt som sensorerna kommer att börja att misslyckas.
Alla är välkomna att använda och modifiera denna kod så länge jag får kredit. Tack för att respektera rörelsen för öppen källkod!
************************************************************************************************** *************************************************************************************************/
#include
Servo myservo;
CONST int Lin = 10, Rin = 12, Lout = 11, Rout = 13, serv = 9. inställningen sensor stift och servo pin
fastställa variabler för varaktighet / / och avståndet resultera i inches lång Rduration, Lduration, Rinches, Linches;
int tröskel = 10; Sensor tröskel i tum
int vinkel = 80. Första vinkeln
booleska debug = false; Seriell kommunikation för debuging. Värdet true för seriell kommunikation.
void setup() {/ / initiera seriell kommunikation: om (debug) {Serial.begin(9600);} myservo.attach(9); //attach servo till pin 9}
void loop() {//Most i sensor-koden har tagits från David Mellis PING sensor kod //I modifierat den för en 4-pin sensor som oppsed till 3 stift sensorn / / ge en kort låg puls förhand för att säkerställa en ren hög puls: pinMode (Rout, utgång), digitalWrite (Rout, låg); delayMicroseconds(2), digitalWrite (Rout, hög), delayMicroseconds(5), digitalWrite (Rout, låg);
Rduration = pulseIn (Rin, hög); pinMode (Lout, OUTPUT); digitalWrite (Lout, låg); delayMicroseconds(2); digitalWrite (Lout, hög); delayMicroseconds(5); digitalWrite (Lout, låg);
Lduration = pulseIn (Lin, hög);
konvertera tiden till ett avstånd Rinches = microsecondsToInches(Rduration); Linches = microsecondsToInches(Lduration); om (debug) {Serial.print ("vänster:"); Serial.Print(Linches); Serial.println ("i"); Serial.Print ("rätten:"); Serial.Print(Rinches); Serial.println ("i"); } follow(); }
lång microsecondsToInches(long microseconds) {
Enligt Parallaxs datablad för PING))), det finns
73.746 mikrosekunder per tum (dvs. ljud resor på 1130 fot per
det andra). Detta ger vägsträcka som ping, utgående
och tillbaka, så vi delar med 2 att få distansera av hindret.
Se: http://www.parallax.com/dl/docs/prod/acc/28015-PI...
återvända mikrosekunder / 74 / 2; }
void follow() {om (Linches < = tröskelvärde || Rinches < = tröskelvärde) {om (Linches + 2 < Rinches) {vinkel = vinkel - 2;} om (Rinches + 2 < Linches) {vinkel = vinkel + 2;}} om (vinkel > 160) {vinkel = 160;} om (vinkel < 0) {vinkel = 0;} myservo.write(angle); }