Innehållsförteckning:

Enkel Arduino Robotics -plattform !: 5 steg
Enkel Arduino Robotics -plattform !: 5 steg

Video: Enkel Arduino Robotics -plattform !: 5 steg

Video: Enkel Arduino Robotics -plattform !: 5 steg
Video: Infrared Obstacle Avoidance module for Arduino with code 2024, November
Anonim
Enkel Arduino Robotics -plattform!
Enkel Arduino Robotics -plattform!
Enkel Arduino Robotics -plattform!
Enkel Arduino Robotics -plattform!

Jag fick precis en Arduino efter att ha lekt med några AVR -mikrokontroller under Robotics -teammöten. Jag gillade idén om ett riktigt billigt programmerbart chip som kunde köra nästan allt från ett enkelt datorgränssnitt så jag fick en Arduino eftersom den redan har ett snyggt kort och USB -gränssnitt. För mitt första Arduino -projekt grävde jag fram ett Vex Robotics -kit som jag hade lagt från några tävlingar jag gjorde på gymnasiet. Jag hade alltid velat göra en datordriven robotplattform men Vex mikrokontroller kräver en programmeringskabel som jag inte hade. Jag bestämde mig för att använda min nya Arduino (och kanske senare ett blott AVR -chip om jag får det att fungera) för att driva plattformen. Så småningom vill jag skaffa en netbook och sedan kan jag köra roboten med hjälp av WiFi och se dess webbkamera på distans.

Jag lyckades få ett hyfsat seriellt protokoll och ett enkelt exempel som driver roboten med en Xbox 360 -kontroller ansluten till en Linux -dator.

Steg 1: Vad det kan göra …

Vad det kan göra …
Vad det kan göra …
Vad det kan göra …
Vad det kan göra …

Arduino är en mycket mångsidig plattform. Mitt grundläggande mål var bara att få Arduino att koppla ihop två Vex -motorer till datorn, men jag hade många ingångs-/utgångsstiften kvar och bestämde mig för att lägga till lite extra grejer. Just nu har jag en RGB -LED för seriell portstatus (grön om paketen är bra, röda om de är dåliga) och en PC -fläkt som drivs av en transistor. Jag kan också lägga till switchar och sensorer men jag har inte lagt någon av dem på det ännu. Det bästa med det är att du kan lägga till vad du vill till en Arduino -robot. Det krävs bara lite gränssnittskod för att styra extra saker och få inmatning till datorn.

Steg 2: Delar

Delar
Delar
Delar
Delar
Delar
Delar

Till min robot använde jag några olika delar. De flesta delarna var från gamla saker jag hade lagt runt min källare. 1) Arduino Duemilanove w/ ATMega328Detta är den nyaste Arduino, och sedan jag fick den för några dagar sedan har jag den nyaste. Koden är dock tillräckligt liten för att den enkelt ska passa på vilken Arduino som helst. Det kan förmodligen till och med passa på en ATTiny (om jag bygger en robotstyrenhet förutom Arduino ser ATTiny 2313 ut som ett bra val, den är mindre och billigare men har fortfarande gott om utgångar och ett seriellt UART -gränssnitt) 2) Vex Robotics PlatformI fick ett Vex-kit för några år sedan för att bygga en radiostyrd robot för att hämta saker till en gymnasietävling. Jag konstruerade den grundläggande "square bot" basen som har 4 hjul som drivs av två motorer. Du kan ersätta andra robotbaser om du har någon annan plattform du vill köra. Det viktiga att notera är att Vex-motorer i huvudsak är kontinuerliga rotationsservos, de använder pulsbreddsmodulering för att signalera hur snabbt och i vilken riktning de ska svänga. Vex -motorerna är trevliga eftersom de har ett högt intervall av driftspänningar, någonstans mellan ungefär 5 till 15 volt. Jag använder 12V eftersom jag hade ett 12V batteri. För de flesta vanliga hobbyservos behöver du en lägre spänning (ofta 6 volt). 3) Batteri En robot är värdelös utan strömförsörjning. För testning använder jag en standard 9V vägg-adapter från RadioShack, men för trådlös drift hittade jag ett 12V NiMH-batteri i en gammal bärbar dator. Även om den inte räcker till för att köra den bärbara datorn driver den min Vex -robot bra. Det kan också driva Arduino med hjälp av Vin -ingångsstiftet på strömkontakten, Arduino kommer att reglera 12V ner till 5 och till och med mata ut 5V -utgångsstiften på strömkontakten. 4) Basic Breadboard Jag använder för närvarande ett brödbräda för att koppla ihop allt. Så småningom får jag en trevligare prototypbräda och lödning på några mer permanenta anslutningar men för närvarande gör brödbrädan det enkelt att ändra saker. Min brödbräda är SparkFuns "basic breadboard", bara en brödbräda på en metallplatta med 3 terminaler. 5) MAX232-baserad RS232-TTL-omvandlare Om du vill köra din robot med en RS-232 seriell portanslutning (i motsats till Arduinos inbyggda i USB) kan du använda en RS232-TTL-omvandlare. Jag använder en MAX232 eftersom jag hade några av dem liggande och jag lödde den på en liten bit prototyper med de nödvändiga kondensatorerna. Jag behöver RS-232 eftersom min gamla bärbara dator bara har en USB-port och jag använder den för en spelkontroll för att driva roboten. fick en med min Arduino -beställning eftersom de lät cool). Lampan blinkar rött, grönt, blått i följd när Arduino startar för att visa att roboten har startat om och sedan lyser grönt när ett motorpaket har mottagits, blått när ett fläktpaket har mottagits och rött när det är dåligt eller okänt paketet har tagits emot. För att driva fläkten använde jag en standard NPN -transistor (samma som jag visade i min sista instruerbara) och ett motstånd mellan transistorn och Arduino (transistorn drog för mycket ström och värmde upp Arduino, så jag satte en begränsning motståndet för att stoppa det).

Steg 3: Arduino- och PC -programmering

Arduino och PC -programmering
Arduino och PC -programmering

För att programmera Arduino behöver du självklart Arduino -programvaran och en USB -kabel. Du kan också programmera Arduino med en seriell port och en TTL -nivåomvandlare om din dator har en serieport. Observera att USB -seriellt gränssnitt inte kommer att kommunicera med Arduinos ATMega -processor om det finns en nivåomvandlare ansluten till Arduinos seriepinnar (stift 0 och 1) så koppla bort det innan du använder USB. På Arduino behöver vi ett seriellt gränssnitt som gör det möjligt att PC för att styra motorerna. Vi kommer också att behöva ett PWM servodrivsystem för 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 har också lagt till några enkla lysdioder som blinkar, främst för statusindikering men också för att det ser coolt ut. På datorn måste vi öppna serieporten och skicka bildramar som Arduino -programmet kommer att förstå. Datorn måste också komma med motorvärden. Ett enkelt sätt att göra detta är att använda en USB -spelplatta eller joystick, jag använder en Xbox 360 -kontroller. Ett annat alternativ är att använda en nätverksansluten dator (antingen en netbook eller ett litet mini ITX -kort) på själva roboten för att köra trådlöst. Med en netbook kan du till och med använda inbyggd webbkamera för att strömma tillbaka ett videoflöde och köra din robot på distans. Jag använde Linux sockets -systemet för att göra nätverksprogrammering för min installation. Ett program ("joystickservern") körs på en separat dator som har en styrenhet ansluten till det, och ett annat program ("klienten") körs på nätboken som är ansluten till Arduino. Detta länkar de två datorerna och skickar joystickinformation till netbook, som sedan skickar ut seriella paket till Arduino som driver roboten. För att ansluta till Arduino med en Linux -dator (i C ++) måste du först öppna serieporten på rätt överföringshastighet och skicka sedan värdena med ett protokoll som du också har använt på Arduino -koden. Mitt serieformat är enkelt och effektivt. Jag använder 4 byte per "ram" för att skicka de två motorvarvtalen (var och en är en enda byte). Den första och sista byten är hårdkodade värden som används för att hindra Arduino från att skicka fel byte till PWM-koden och få motorerna att bli galen. Detta är det primära syftet med RGB -lysdioden, den blinkar rött när den seriella ramen var ofullständig. De 4 byten är följande: 255 (hårdkodad "start" -byte),,, 200 (hårdkodad "slut" -byte) För att säkerställa tillförlitlig mottagning av data, se till att du lägger tillräckligt med fördröjning mellan programslingorna. Om du kör din PC-kod för snabbt kommer den att översvämma porten och Arduino kan börja tappa eller till och med läsa fel byte. Även om den inte tappar information kan den också flyta över Arduinos seriella portbuffert. För Vex -motorerna använde jag Arduino Servo -biblioteket. Eftersom Vex -motorer bara är kontinuerliga rotationsmotorer använder de exakt samma signalering som servon använder. Men istället för att 90 grader är mittpunkten är det stopppunkten där motorn inte snurrar. Sänkning av "vinkeln" får motorn att börja snurra i ena riktningen, medan höjningen av vinkeln får den att snurra i den andra riktningen. Ju längre bort från mittpunkten du är, desto snabbare snurrar motorn. Även om det inte kommer att bryta någonting om du skickar värden större än 180 grader till motorerna, skulle jag rekommendera att begränsa värdena från 0 till 180 grader (som i detta fall är hastighetsökningar). Eftersom jag ville ha mer kontroll och mindre kontroll över robotkörning lade jag till en programvaru "hastighetsbegränsning" i mitt program som inte tillåter att hastigheten ökar över 30 "grader" i båda riktningarna (intervallet är 90 +/- 30). Jag planerar att lägga till ett kommando för seriell port som ändrar hastighetsbegränsningen, så att datorn kan ta bort gränsen i farten om du vill gå snabbt (jag har testat i små rum så jag vill inte att det ska snabba upp och krascha in i väggen, särskilt med en netbook på den). För mer information, ladda ner den bifogade koden i slutet av denna instruktionsbok.

Steg 4: Lägg till en Netbook för att utforska okända världar på avstånd

Lägg till en Netbook för att utforska okända världar på avstånd
Lägg till en Netbook för att utforska okända världar på avstånd
Lägg till en Netbook för att utforska okända världar på avstånd
Lägg till en Netbook för att utforska okända världar på avstånd

Med en fullständig dator ombord på din Arduino -robot kan du köra din robot så långt din WiFi kan nå utan sladdar för att begränsa roboten till ett område. En bra kandidat för det här jobbet är en netbook, eftersom netbooks är små, lätta, har ett inbyggt batteri, har WiFi och de flesta har även inbyggda webbkameror som kan användas för att strömma robotens vy tillbaka till en säker plats där du kan styra det. Om din netbook är utrustad med mobilt bredband är din räckvidd praktiskt taget obegränsad. Med tillräckligt med batterier kan du köra din robot till den lokala pizzaplatsen och göra en beställning över webbkameran (rekommenderas inte, robotar är vanligtvis inte tillåtna på pizzaplatser, även om det är människor som sannolikt kommer att försöka stjäla roboten och kanske även pizza). Det kan också vara ett bra sätt att utforska källarens mörka djup från din kontorsstol, men att lägga till några strålkastare kan vara till stor hjälp i det här fallet.

Det finns många sätt att få det att fungera, många är förmodligen mycket enklare än mina, även om jag inte är bekant med bearbetning eller skriptbaserade språk så jag valde att använda Linux och C ++ för att skapa en trådlös styrlänk mellan min basstation (aka gamla ThinkPad) och min nya Lenovo IdeaPad -netbook som är ansluten till Arduino -basen. Båda datorerna kör Ubuntu. Min ThinkPad är ansluten till skolans LAN och min IdeaPad är ansluten till min WiFi -åtkomstpunkt som också är ansluten till skolans LAN (jag kunde inte få en tillförlitlig videoström från skolans WiFi eftersom alla andra använder den, så jag ställde in upp min egen router för att ge en bra anslutning). En bra anslutning är särskilt viktig i mitt fall eftersom jag inte har implementerat någon felkontroll eller timeout. Om nätverksanslutningen plötsligt faller, fortsätter roboten tills den kraschar in i något eller jag springer och stoppar den. Detta är huvudfaktorn bakom mitt beslut att sakta ner drivlinan både genom att sänka motorerna och genomföra en programvaruhastighetsbegränsning.

Steg 5: Skaffa ett videoflöde

När din robotutforskare kan köra trådlöst vill du antagligen ha ett videoflöde från netbook så att du kan se var din robot är. Om du använder Ubuntu (eller till och med om du inte är det!) Rekommenderar jag att du använder VLC Media Player för att strömma. Om du inte har installerat det går du verkligen miste om det, så installera det med kommandot "sudo apt-get install vlc", leta efter VLC i Ubuntu Software Center (endast 9.10) eller ladda ner installationsprogrammet på videolan. org om du använder Windows. Du behöver VLC som körs på båda datorerna. VLC kan både strömma och spela strömmar i ett nätverk. På netbook (robot-PC) måste du först se till att din webbkamera (antingen inbyggd eller USB-ansluten) fungerar genom att klicka på Open Capture Device och prova Video för Linux 2 (vissa äldre enheter kan behöva Video för Linux istället för den nya 2-versionen). Du bör se kamerans vy på netbook -skärmen. För att strömma det, välj Streaming från Arkiv -menyn och välj sedan fliken Capture Device längst upp i fönstret som visas. Kom ihåg att Ubuntu (och många andra Linux distros) låter dig hålla ner Alt för att klicka och dra fönster som är för stora för din skärm (särskilt användbart på äldre netbooks, även om även min IdeaPad har en udda 1024x576 upplösning utan någon uppenbar anledning). För att minska fördröjningen, klicka på "Visa fler alternativ" och sänk värdet på cacheminnet. Hur mycket du kan sänka det beror ibland på enheten, det blir instabilt om du sänker det för mycket. Vid 300 ms kan du få en liten fördröjning men det är inte så illa.

Klicka sedan på Stream för att gå till nästa meny. Klicka på Nästa, välj sedan och lägg till HTTP som en ny destination. Ställ nu in transkodning för att göra strömmen mindre. Jag gjorde en anpassad profil som använder M-JPEG vid 60kb/s och 8fps. Detta beror på att användning av en avancerad codec som MPEG eller Theora kommer att äta upp massiv CPU -tid på en netbooks Atom -processor och detta kan leda till att ditt videoflöde stannar utan någon uppenbar anledning. MJPEG är en enkel codec som är lätt att använda vid låga bithastigheter. När du har startat din ström öppnar du VLC på din andra dator, öppnar en nätverksström, väljer HTTP och skriver sedan IP -adressen till din netbook (antingen lokal eller Internet beroende på hur du ansluter) följt av ": 8080". Du måste ange porten av någon udda anledning, annars ger det dig fel. Om du har en anständig anslutning bör du se webbkamerans flöde på din andra dator, men det kommer att ha en liten (ungefär en sekund) fördröjning. Jag vet inte exakt varför denna fördröjning uppstår, men jag kan inte komma på hur jag ska bli av med det. Öppna nu kontrollappen och börja köra din netbook -robot. Få en känsla för hur förseningen fungerar när du kör så att du inte kraschar i någonting. Om det fungerar är din netbook -robot klar.

Rekommenderad: