Enkla Arduino Robotics plattform! (3 / 5 steg)
Steg 3: Arduino och PC programmering
Arduinoen behöver vi ett seriellt gränssnitt som gör att datorn för att kontrollera motorerna. Vi behöver också en PWM servo drive system att skicka rätt signaler till Vex motorerna och se till att de går i rätt riktning när de får rätt värden. Jag lade också till några enkla LED blinkar, främst för statusindikation men också eftersom det ser coolt.
På datorn kommer vi att öppna serieporten och skicka ramar som Arduino programmet kommer att förstå. Datorn måste också komma med motor värden. Ett enkelt sätt att göra detta är att använda en USB-spelkontroll eller en styrspak, jag använder en Xbox 360-handkontrollen. Ett annat alternativ är att använda en dator i nätverk (en netbook eller en liten mini ITX styrelse) på roboten själv för att köra trådlöst. Med en netbook, kan du även använda den inbyggda webbkameran att strömma tillbaka en video foder och kör din robot distans. Jag använde Linux sockets-system att network programmering för min setup. Ett program ("joystick server") körs på en separat dator som har en styrenhet ansluten till det, och ett annat program ("klient") som körs på netbook ansluten till Arduino. Detta länkar de två datorerna och joystick informationen skickas till den netbook, som sedan skickar ut följetong paket till Arduino som driver robot.
Om du vill ansluta till Arduino med en Linux-dator (i C++) måste du först öppna den seriella porten på rätt baud och sedan skicka värdena med ett protokoll som har också använts på Arduinos kod. Min följetong format är enkel och effektiv. Jag använder 4 byte per "frame" för att skicka två motor rusar (var och en är en byte). De första och sista byte är hårdkodade värden som används för att hålla Arduino från skickar fel byte av PWM-koden och orsakar motorerna att bli galna. Detta är det primära syftet med RGB LED, det blinkar rött när den seriella ramen var ofullständig. 4 byte är följande:
255 (hårdkodade "start" byte),,, 200 (hårdkodade "end" byte)
För att säkerställa pålitlig mottagning av data, kontrollera att du satt nog fördröjning mellan program loopar. Om du kör PC koden för fort, det kommer att översvämma hamnen och Arduino får börja släppa eller ens mis läser byte. Även om det inte släppa information kan det också overflow Arduinos serieport buffert.
För Vex motors använde jag Arduino Servo biblioteket. Eftersom Vex motorer bara kontinuerlig rotation motorer, använder de den exakt samma signalering som servon använder. I stället för 90 grader är mittpunkten, emellertid det stopp punkt där motorn inte gör snurra. Sänka "vinkeln" orsakar motorn att börja snurra åt ett håll, samtidigt höja vinkeln gör det snurra åt andra hållet. Ju längre bort från mittpunkten du är, kommer att desto snabbare motor snurra. Medan det inte kommer att bryta något om du skickar värden större än 180 grader till motorerna, skulle jag råda begränsa värden från 0 till 180 grader (som i detta fall är hastigheten steg). Eftersom jag ville ha mer kontroll och mindre ur kontroll robot kör, jag la en programvara "hastighetsbegränsning" till mitt program som inte tillåter att hastigheten ökar över 30 "grader" i endera riktningen (är 90 +/-30). Jag planerar att lägga till en seriell port-kommando som ändrar hastighetsgränsen, så att datorn kan flytta gränsen på fluga om du vill gå snabbt (jag har testat i små rum så jag inte vill att påskynda och krascha in i väggen, särskilt med en netbook på det).
För mer information, ladda ner den bifogade uppförandekoden i slutet av detta Instructable.