ArduRoller balans bot (2 / 8 steg)
Steg 2: Övergripande design
Hjärnan i systemet är den Arduino Uno, som innehåller en AVR microcontroller på 16MHz.
1000 gånger per sekund läser mikrokontroller det aktuella läget för gyroskop och accelerometer; uppdateringar dess inre modell av bot och från denna modell avgör hur snabbt att köra motorerna till bästa balans bot. (Koden är alla delade på min Github repo .)
Gyrot är en rate gyro, vilket innebär att dess produktion är proportionell mot den nuvarande klassa av rotation. För att uppskatta den nuvarande tilt, har mikrokontroller att summera de inkommande värden, som läses med hjälp av en analog till digital omvandlare. Tyvärr är inget gyro eller ADC perfekt, vilket resulterar i fel i summeringen som tenderar att växa med tiden. Om bot används endast en gyro för att försöka balansera sedan dess idé om "up" skulle sakta glida över tid och det skulle så småningom falla.
För att motverka den gyro tendens att glida, använder bot en 2D accelerometer för att mäta riktning mot gravitationen. När summera gyro värdena läggs i en bråkdel av accelerometer uppskattningen i beräkningen. Precis tillräckligt för att balansera ut drivan. Det går inte att lägga för mycket eftersom accelerometern är en mycket bullriga sensor - den tar upp vibrationer från hjulen och accelerationen av motorerna.
Gyro och accelerometer är monterade på axeln av rotation av hjulen att få den bästa signalen.
När mikrokontroller har beslutat hur snabbt att köra motorerna det använder pulse bredd modulering för att variera hastigheten och kör dem genom Ardumoto sköld. Skölden är nödvändigt eftersom motorerna drar betydligt mer ström än mikrokontroller kan leverera på egen hand.
Modulen BlueSMIRF ger serial-over-Bluetooth, så att bot för kommunikation i båda riktningarna med en annan Bluetooth-aktiverad enhet. Jag använder min Android-telefon för att reläa datan till konsolen över Android Debug Bridge. Jag planerar också att skicka signaler till andra sätt att använda min telefon som fjärrkontroll.