Nils-Johan-själv Balancing robot (5 / 8 steg)
Steg 5: programvara
Arduino är känd för sin kodning miljö och stor öppen källkod användaren bibliotek vilket gör prototyping verkligen lätt.
Jag började med separat Accelerometer och gyroskop. Men allteftersom saker gått, jag har svårt att balans med computational overhead av beräkning av Beck & roll (med kalman/kompletterande filter). När jag bytte till MPU-6050, förbättrat det drastiskt balanseringen.
För att använda DMP MPU, använde jag Jeff RowbergI2CDev bibliotek. För att kalibrera mpu, använde jag Luis Rodenasskiss.
Nu kan vi bestämma vinkeln på bot med vertikal. Men hur kan vi beräkna mängden kraft behövs för att driva bot tillbaka till lodrät när det är obalanserad av vissa osäkra grader från vertikalt. Detta är där PID sparkar i. PID kommer att ange denna kraft som kommer att ändras beroende på tid och vinkel av vilken bot är obalanserad.
Jag går inte in på tekniska detaljer. Brett Beauregard skrev ett trevligt PID bibliotek med förklaring om du vill.
Att ytterligare påskynda motor svaret använde jag digitalIOPerformance bibliotek för att snabbt skriva Pins.
Slutligen för att lagra PID värderar i EEPROM av Arduino, EEPROMex bibliotek för effektivitet och ren kod.
Fullständiga koden kan hittas på GITHUB.