Arduino R/C Lawnmower (painted) (1 / 11 steg)
Steg 1: Konfigurera
2. Ladda upp koden till Arduino (det är på sista sidan)
3. Kontrollera att du får en bra signal
Du kommer att behöva en R/C radio transmitter(Tx) och receiver(Rx) par, som är den dyraste delen av projektet, men kan användas för alla framtida projekt du kan ha med R/C. Jag gick med en 6-kanals FM-systemet, men jag har testat en 27mHz AM sändare/mottagare och det fungerar lika bra. Skönheten i Arduino är att om du vill justera Dödband eller motor-hastigheten på turn-on, (till skillnad från kommersiella ESC) det är lätt ändrande i Arduino IDE.
När du har din radio, allt du behöver göra är att ladda upp koden till din Arduino, koppla in 2 kanaler som du vill använda från din radiomottagare till Digital stift 2 och 3 av Arduino (dessa är 2 yttre mellanjobb stiften på Arduino) och du är redo att styra vad du vill. Om du inte har en smet pack för mottagaren, kan du köra hoppare ledningar från Arduino + 5v och jord till R/C receiever för makt, behöver du bara att leverera en enda kanal med GND och 5V (det inte är nödvändigt att driva varje kanal).
Ladda upp koden använder Aruino IDE (jag använder version 0016 på Ubuntu).
Jag började genom att kontrollera 3 lysdioder med 1 kanal på en skärbräda. Jag trådbundna en röd LED att vara framåt (digital pin 9), en gul lysdiod för omvänd digital PIN-kod (5) och en grön LED för Neutral (digital pin 12). Detta kan du justera koden för att passa behoven hos din radiosystem. Du kommer att ha släta 0-100% PWM kontroll av båda leds och neutralt ljus tänds när vänsterspaken är centrerad. Om det behövs kan du bredda Dödband för Neutral, men detta kommer att öka hastigheten på turn-on (som börjar vid 0% så det skulle sannolikt vara önskvärt). Se bilder.
----------------------------------------
Koden har 4 PWM utgångar för motorisk kontroll:
kanal 1 framåt = Arduino digital pin 9
kanal 1 bakåt = Arduino digital stift 5
kanal 2 framåt = Arduino digital stift 10
kanal 2 bakåt = Arduino digital stift 6
2 utgångar för Neutral indikatorlampor:
kanal 1 = digital stift 12
kanal 2 = digital stift 13
2 ingångar från R/C mottagaren ska gå till:
kanal 1 = digital stift 2
kanal 2 = digital stift 3
---------------------------------------
Om du är intresserad av att se dina avläsningar, slå på monitorn följetong i Arduino IDE (inställt på 9600bps) och du kan se faktiska realtids puls avläsningar för varje kanal, borde de läsa:
fullständig framåt = 2000 (2 millisekunder)
Center = 1500 (1.5 ms)
full omvänd = 1000 (1 ms)
Dessa värden återspeglar antalet mikrosekunder som puls signalen från R/C mottagaren håller hög (eller på 5v). Typiska Servo signalen som kommer från en R/C-mottagare är en puls vars längd varierar från ca 1 ms till 2 ms med 1.5 ms att vara Neutral (som bör också den ståndpunkt som vänsterspaken återgår till när du låter det gå). Sändaren läser vänsterspaken position och skickar puls längd om en gång varje 20milliseconds. Så det ständigt uppdatering för exakt kontroll (för mer info, leta upp PPM på wikipedia). Om du kontrollspaken sändaren fram, bör behandlingen gå upp till 2000, om du trycker det bakåt det bör gå ner till 1000. Du kan också använda en spänning mätare på denna punkt för att se att Digital stift 5, 6, 9 och 10 kommer att ändra från 0-5v beroende på positionen av kontroll pinnar på R/C sändare.
Om ni vet, koden använder Arduino's 2 externa avbrott för att fånga när Rx signal stift ändras stater (går från hög till låg eller vice versa), när den gör i början av varje signal, det anropar funktionen avbrott som läser digital delstaten PIN-koden och om hög, registreras värdet mikrosekunder på Arduino system timer0. Sedan tillbaka det till loopen tills stiftet går låg, då subtraherar det tidigare registrerade mikrosekund värdet från det nya aktuella mikrosekund värdet att avgöra hur länge pulsen stannade högt (som berättar positionen för vänsterspaken sändare). Det gör då som om och om igen riktigt snabb.
Jag har värden hindras från att 600-2400 i Arduino koden att hålla det enkelt. När det tar emot signalen och begränsar det, mappas detta värde vara proportionellt mellan 0 och 511, där 255 kommer att vara Neutral. Koden avgör sedan när värdet ändras och använder en funktion för att bestämma den lämpliga 0-255 PWM värde i rätt riktning och varje riktning har egen PWM utdata pin att styra H-bron.
På en sida notera:
För att underlätta, byggde jag en Arduino-baserad breakout styrelsen använda Radio Shack perf-board, en 28pin dopp uttag, en 16mhz oscillator och lite tråd. Jag lade också till en uppsättning kvinna-headers så att jag kan koppla min R/C mottagare direkt på breakout styrelsen. För säkra anslutningar när du klipper gräset, La jag skruv-terminaler på varje utgångsstiftet och var och en av de 6 kanalerna från mottagaren. Den också har en inbyggd 5v regulator att driva båda Atmega168 från Arduino och R/C mottagaren (som får ström när du ansluter den storbildsformat breakout). Så dirigera du bara hoppare ledningar från kanaler du vill använda på mottagaren, till Atmega digital stift 2 och 3. Jag lade också till 2 LED lampor som är hårt kabelansluten till digital stift 12 och 13 för neutralt ljus för varje kanal så jag kan lätt se när jag är i friläge.
Eftersom denna bot är en Tank steer setup med 1 drivmotorn på varje hjul, är kodningen mycket enkel där vänster spak styr vänster motor och rätt pinne rätt motor. Både pinnar framåt innebär gräsklippare går rakt fram, både bakåt och det går bakåt. Om du trycker på vänster fram och höger bakåt, gör det en zero-turn cirkel. Som ni kan föreställa er, är klipper gräset riktigt kul nu.