Arduino objekt undvikande Robot (3 / 4 steg)
Steg 3: Koden
Jag är inte stor på dela min kod, bara för att det är personligt för min setup och troligen har ingen användning för dig och din unika setup. Om du vill min kod, maila mig på cgmalantonio och jag kommer gärna skicka dig en kopia. Dock kommer jag att beskriva mitt arbete i pseudo-kod så du får idén.Kan få till det!
Jag ville först ha en funktion som använder ultraljud sensorn för att få avläsningar medan servomotor vände sig till 5 olika punkter:
(0 = vänster / / 45 = Front vänster / / 90 = Front / / 135 = Front höger / / 180 = höger)
Skanna den {
Jag använde en enkel ögla för att flytta servo i steg om 45, från 0 till 180 (och en annan för att föra den tillbaka till 0). Varje gång det når sin nästa punkt det kallar min "LowestNumber" funktion och tillför värde fick till en matris för 5 värden fick (höger / vänster-front / främre / höger-front / vänster).
ungefär så här:
för (int jag = 0; jag < 180; i = i + 45) {
myservo.write(i);
LowestNumber();
}
för (int jag = 180, jag > 0; i = i - 45) {
myservo.write(i);
LowestNumber();
}
Funktionen LowestNumber tar i 3 avläsningar, fördelade 50 millisekunder isär, från ultrasonic sensor. 3 avläsningar jämförs sedan mot varandra, och det lägsta värdet (närmast behandlingen) är accepterat och lagras i en variabel (LowestNumberResult). Detta nummer lagras sedan i en matris baserat på var servo är placerad. Ultrasonic sensorn är lite oförutsägbar ibland så jag kolla 3 gånger. Och med tanke på jag är bara orolig för det. slå något, jag hålla det lägsta numret.
ta ditt lägsta nummer
en = ultraljud. Ranging(Inc)
Delay(50)
b = ultraljud. Ranging(Inc)
Delay(50)
c = ultraljud. Ranging(Inc)
Delay(50)
om (en > b).
en = b
om (en > c)
en = c
När alla 5 positioner av servomotor har samlats ett avstånd från ultraljud sensorn, sedan vi hantera positioner korrekt.
}
Nu vet vi avstånd framför den ÅRAN läge. Vi börjar med att ta reda på vilken riktning är största avståndet och om vissa villkor uppfylls, vi kommer att gå i den riktningen.
Hantera {
Några av begränsningarna var som sådan:
-är alla riktningar större än 20 tum
göra säker alla banor är tydliga, kan vara valfritt antal,
behöver inte vara 20 tum
-om mest borterst riktning är mindre än den främre + 10 inches (vissa nummer), gå framåt
gynnar den främre riktningen innebär det inte att bara vända
runt i cirklar i mitten av rummet
till slut la jag ett andra meddelande, precis som denna,
säger om framsidan var tillräckligt tydlig, gå framåt två gånger
-om mest borterst riktning är vänster, se till vänster fram är klart
-om inte tydligt markera rätt
-om mest borterst riktning är rätt, se till höger fram är klart
-om inte tydliga check lämnade
-om mest borterst riktning är vänster front, se till vänster är klart
-om inte tydligt markera rätt
-om mest borterst riktning höger fram, göra säker rätt är klart
-om inte tydliga check lämnade
-om alla riktningar är mindre än 20 vi vill vända ÅRAN och prova nya mätningar
}
Extra {
Jag la lite extra funktioner för min 5-läges brytare.
Ström på
Väntar på ingång
-Om du närmar dig ÅRAN framifrån för nära, det ska backa upp och skaka huvudet tillbaka och fjärde
-Om du trycker på en riktning, det kommer gå i den riktningen
Center klickar du på
-startar en fråga, ingång 8 riktningar och det kommer att driva i de riktningarna
Center på igen
-driver självständigt och undviker väggar/föremål
Center klicka en tredje gång returnerar menyn för att starta
samt några huvud vänd av servo när en riktning är plockade (som om ÅRAN är ute där det kommer att vända)
}