Arduino mikro Quadcopter (5 / 5 steg)
Steg 5: kod
Jag skrev ett bibliotek och ett exempel program med mbed för en quadcopter som du hittar i här. Mbed är mycket snabbare än Arduino och har mer minne vilket det skulle kunna användas för större quadcopter.
I2C & PWM Clash
Innan programmet kunde skrivas finns ett behov att ta itu med vissa problem som uppstår på grund av ett begränsat antal stift tillgängliga ombord skalbagge. Från anslutningen bordet är det tydligt att även om det finns 4 PWM-utgångar, en av PWM används också för SCL (I2C till MPU6050). Därför två alternativ - antingen använda en extern bibliotekssökväg för att anpassa I2C på andra stift eller en extern bibliotekssökväg för att anpassa PWM utgångar på några stift. Både alternativ finns, men jag särskilt valde att använda SoftI2C biblioteket som tydligen det fungerar ännu bättre än Wire.h lib som har specifik hastighet och tråd längd problem. Också är PWM mycket viktigt i vårt fall alltså jag vill kunna hantera det på något sätt möjligt att justera för bästa funktion. Källkoden för den finns tillgänglig på github. Du kommer att märka att det finns
Avbryta Pin
Styrelsen har från dokumentation Leonardo avbrott på 0, 1, 2, 3 & 7 stift. Stift 0 & 1 finns men jag planerade att använda dem för seriell kommunikation (kanske senare på uppladdning skiss via bluetooth vilket inte är svårt att göra men kräver en annan modul HC-05). Därför kan ett annat externt bibliotek användas som gör det möjligt att lägga till ett avbrott i någon pin "PinChangeInterrupt.h" (av 2014-2015 NicoHood). Importera som genom Android: skiss -> inkluderar bibliotek -> hantera bibliotek -> Sök efter PinChangeInterrupt. Ett exempelkod ges som skiljer sig från vanliga avbrott biblioteket av följande rader:
pinMode (interruptPin, INPUT_PULLUP);
attachPinChangeInterrupt(digitalPinToPinChangeInterrupt(interruptPin), postInterruptFunction, RISING);
eller
attachPCINT(digitalPinToPCINT(interruptPin), postInterruptFunction, RISING);
MPU6050 bibliotek
Det finns MPU6050 bibliotek av Jeff Rowberg 2012. Den medföljande exempelkoden MPU6050_DMP6 används som den viktigaste koden för projektet.
Om du valt att använda min ram & motorer, sannolikt behöver du inte ändra koden något mera som PID-regulator har redan angetts för mer eller mindre bra prestanda. Men om du använder en annan bildruta, du kommer att behöva ange nya värden för PID-regulator. Det tar ganska lång tid om du gör det för första gången.