Innholdsfortegnelse:

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

Video: Enkel Arduino Robotics -plattform !: 5 trinn

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

Jeg fikk akkurat en Arduino etter å ha lekt med noen AVR -mikrokontrollere under møter i Robotics -teamet. Jeg likte ideen om en veldig billig programmerbar brikke som kunne kjøre omtrent alt fra et enkelt datamaskingrensesnitt, så jeg fikk en Arduino fordi den allerede har et fint kort og USB -grensesnitt. For mitt første Arduino -prosjekt gravde jeg frem et Vex Robotics -sett jeg hadde liggende fra noen konkurranser jeg gjorde på videregående. Jeg hadde alltid ønsket å lage en datadrevet robotikkplattform, men Vex -mikrokontrolleren krever en programmeringskabel som jeg ikke hadde. Jeg bestemte meg for å bruke min nye Arduino (og kanskje senere en ren AVR -brikke hvis jeg får den til å fungere) for å kjøre plattformen. Til slutt vil jeg få en netbook, og så kan jeg kjøre roboten ved hjelp av WiFi og se webkameraet eksternt.

Jeg klarte å få en grei seriell protokoll og et enkelt eksempel som driver roboten ved hjelp av en Xbox 360 -kontroller koblet til en Linux -PC.

Trinn 1: Hva det kan gjøre …

Hva det kan gjøre …
Hva det kan gjøre …
Hva det kan gjøre …
Hva det kan gjøre …

Arduino er en veldig allsidig plattform. Mitt grunnleggende mål var bare å få Arduino til å koble to Vex -motorer til PC -en, men jeg hadde mange igjen input/output -pins og bestemte meg for å legge til noen ekstra ting. Akkurat nå har jeg en RGB LED for seriell portstatus (grønn hvis pakkene er gode, røde hvis de er dårlige) og en PC -vifte drevet av en transistor. Jeg kan også legge til brytere og sensorer, men jeg har ikke satt noen av dem på det ennå. Det beste med det er at du kan legge til hva du vil i en Arduino -robot. Det krever bare litt grensesnittkode for å kontrollere ekstra ting og få inngang til datamaskinen.

Trinn 2: Deler

Deler
Deler
Deler
Deler
Deler
Deler

For roboten min brukte jeg noen forskjellige deler. De fleste delene var fra gamle ting jeg hadde rundt kjelleren. 1) Arduino Duemilanove w/ ATMega328Dette er den nyeste Arduinoen, og siden jeg nettopp fikk den for noen dager siden har jeg den nyeste. Koden er imidlertid liten nok til at den lett skal passe på enhver Arduino. Det kan trolig passe på en ATTiny (hvis jeg bygger en robotkontroller bortsett fra Arduino, ser ATTiny 2313 ut som et godt valg, den er mindre og billigere, men har fortsatt mange utganger og et serielt UART -grensesnitt) 2) Vex Robotics PlatformI fikk et Vex-sett for noen år siden for å bygge en radiostyrt robot for å hente ting til en videregående konkurranse. Jeg konstruerte den grunnleggende "square bot" basen som har 4 hjul drevet av to motorer. Du kan erstatte andre robotbaser hvis du har en annen plattform du vil kjøre. Det viktige å merke seg er at Vex-motorer i hovedsak er servoer for kontinuerlig rotasjon, de bruker pulsbreddemodulasjon for å signalisere hvor raskt og i hvilken retning de skal svinge. Vex -motorene er fine fordi de har et høyt spekter av driftsspenninger, et sted mellom 5 og 15 volt. Jeg bruker 12V fordi jeg hadde et 12V batteri. For de fleste vanlige hobbyservoer trenger du en lavere spenning (ofte 6 volt). 3) Batteri En robot er ubrukelig uten strømforsyning. Til testing bruker jeg en standard 9V veggvortadapter fra RadioShack, men for trådløs drift fant jeg en 12V NiMH-batteripakke i en gammel bærbar datamaskin. Selv om den ikke holder nok kostnad for å kjøre den bærbare datamaskinen, driver den min Vex -robot helt fint. Det kan også drive Arduino ved hjelp av Vin -inngangspinnen på strømkontakten, Arduino vil regulere 12V ned til 5 og til og med sende den ut 5V -utgangspinnen på strømkontakten. 4) Grunnleggende brødbrett Jeg bruker for tiden et brødbrett for å koble alt sammen. Etter hvert får jeg et hyggeligere prototypebrett og loddetinn på noen mer permanente forbindelser, men foreløpig gjør brødbrettet det enkelt å endre ting. Mitt brødbrett er SparkFuns "grunnleggende brødbrett", bare et brødbrett på en metallplate med 3 terminaler. 5) MAX232-basert RS232-TTL-omformer Hvis du vil kjøre roboten din ved hjelp av en RS-232 seriell portforbindelse (i motsetning til Arduino's innebygde i USB) kan du bruke en RS232-TTL-omformer. Jeg bruker en MAX232 fordi jeg hadde noen av dem liggende og jeg loddet den på et lite stykke prototypebrett med de nødvendige kondensatorene. Jeg trenger RS-232 fordi den gamle bærbare datamaskinen min bare har en USB-port, og jeg bruker den til en spillkontroller for å kjøre roboten. fikk en med min Arduino -bestilling fordi de hørtes kult ut). Lyset blinker rødt, grønt, blått i rekkefølge når Arduino starter opp for å vise at roboten har startet på nytt og deretter lyser grønt når en motorpakke er mottatt, Blå når en viftepakke er mottatt, og rød når en dårlig eller ukjent pakken er mottatt. For å drive viften brukte jeg en standard NPN -transistor (de samme som jeg demonstrerte i min siste Instructable) og en motstand mellom transistoren og Arduino (transistoren tegnet for mye strøm og varmet opp Arduino, så jeg satte en begrensning motstand for å stoppe den).

Trinn 3: Arduino og PC -programmering

Arduino og PC -programmering
Arduino og PC -programmering

For å programmere Arduino trenger du åpenbart Arduino -programvaren og en USB -kabel. Du kan også programmere Arduino ved hjelp av en seriell port og en TTL -nivåomformer hvis PC -en din har en seriell port. Vær oppmerksom på at det serielle USB -grensesnittet ikke vil kommunisere med Arduino's ATMega -prosessor hvis det er en nivåomformer som er koblet til Arduinos serielle pinner (pinne 0 og 1), så koble den fra før du bruker USB. På Arduino trenger vi et serielt grensesnitt som tillater PC for å kontrollere motorene. Vi trenger også et PWM servodrivsystem for å sende de riktige signalene til Vex -motorene og sørge for at de går i riktige retninger når de får de riktige verdiene. Jeg har også lagt til noen enkle LED -blinker, hovedsakelig for statusindikasjon, men også fordi det ser kult ut. På PC -en må vi åpne den serielle porten og sende datarammer som Arduino -programmet vil forstå. PC -en må også komme med motorverdier. En enkel måte å gjøre dette på er å bruke en USB -spillpute eller joystick, jeg bruker en Xbox 360 -kontroller. Et annet alternativ er å bruke en datamaskin i nettverk (enten en netbook eller et lite mini ITX -kort) på selve roboten til å kjøre trådløst. Med en netbook kan du til og med bruke det innebygde webkameraet til å strømme tilbake en videofeed og kjøre roboten din eksternt. Jeg brukte Linux sockets -systemet til å gjøre nettverksprogrammering for oppsettet mitt. Ett program ("joystick -serveren") kjøres på en egen PC som har en kontroller koblet til den, og et annet program ("klienten") kjøres på nettboken som er koblet til Arduino. Dette kobler de to datamaskinene og sender joystickinformasjon til netbook, som deretter sender ut serielle pakker til Arduino som driver roboten. For å koble til Arduino ved hjelp av en Linux -PC (i C ++) må du først åpne serieporten på riktig baud rate og send deretter verdiene ved hjelp av en protokoll som du også har brukt på Arduino -koden. Mitt serieformat er enkelt og effektivt. Jeg bruker 4 byte per "ramme" for å sende de to motorhastighetene (hver er en byte). Den første og siste byten er hardkodede verdier som brukes for å hindre Arduino i å sende feil byte til PWM-koden og få motorene til å gå amok. Dette er hovedformålet med RGB -lysdioden, den blinker rødt når serierammen var ufullstendig. De 4 byte er som følger: 255 (hardkodet "start" -byte),,, 200 (hardkodet "slutt" -byte) For å sikre pålitelig mottak av dataene må du sette nok forsinkelse mellom programsløyfene. Hvis du kjører PC-koden for fort, vil den oversvømme porten, og Arduino kan begynne å falle eller til og med lese feil byte. Selv om den ikke slipper informasjon, kan den også flyte over Arduinos serielle portbuffer. For Vex -motorene brukte jeg Arduino Servo -biblioteket. Siden Vex -motorer bare er kontinuerlige rotasjonsmotorer, bruker de nøyaktig samme signalering som servoer bruker. I stedet for at 90 grader er midtpunktet, er det imidlertid stoppestedet der motoren ikke snurrer. Senking av "vinkelen" får motoren til å begynne å snurre i den ene retningen, mens den øker vinkelen får den til å snurre i den andre retningen. Jo lenger vekk fra sentrum du er, desto raskere vil motoren snurre. Selv om det ikke kommer til å ødelegge noe hvis du sender verdier større enn 180 grader til motorene, vil jeg råde deg til å begrense verdiene fra 0 til 180 grader (som i dette tilfellet er hastighetsøkninger). Fordi jeg ønsket mer kontroll og mindre ute av kontroll robotkjøring, la jeg til en programvare "fartsgrense" i programmet mitt som ikke tillater hastigheten å øke over 30 "grader" i begge retninger (rekkevidde er 90 +/- 30). Jeg planlegger å legge til en seriell portkommando som endrer fartsgrensen, slik at datamaskinen kan fjerne grensen i farten hvis du vil gå fort (jeg har testet i små rom, så jeg vil ikke at den skal øke hastigheten og krasjer i veggen, spesielt med en netbook på). For mer informasjon, last ned den vedlagte koden på slutten av denne instruksjonsboken.

Trinn 4: Legg til en netbook for å utforske ukjente verdener på avstand

Legg til en netbook for å utforske ukjente verdener på avstand
Legg til en netbook for å utforske ukjente verdener på avstand
Legg til en netbook for å utforske ukjente verdener på avstand
Legg til en netbook for å utforske ukjente verdener på avstand

Med en full PC ombord på din Arduino -robot, kan du kjøre roboten din så langt som WiFi kan nå uten ledninger for å begrense roboten til ett område. En god kandidat for denne jobben er en netbook, fordi netbooks er små, lette, har et innebygd batteri, har WiFi, og de fleste har til og med innebygde webkameraer som kan brukes til å streame robotens utsikt tilbake til et trygt sted hvor du kan kontrollere det. Hvis nettboken din er utstyrt med mobil bredbåndstjeneste, er rekkevidden din praktisk talt ubegrenset. Med nok batterier kan du kjøre roboten din til det lokale pizzastedet og legge inn en bestilling over webkameraet (anbefales ikke, roboter er vanligvis ikke tillatt på pizzasteder, selv om de sannsynligvis vil prøve å stjele roboten og kanskje til og med pizzaen). Det kan også være en god måte å utforske det mørke dypet i kjelleren din fra din komfortable kontorstol, selv om det kan være veldig nyttig å legge til noen frontlykter i dette tilfellet.

Det er mange måter å få dette til å fungere, mange er sannsynligvis mye enklere enn mine, selv om jeg ikke er kjent med prosessering eller skriptbaserte språk, så jeg valgte å bruke Linux og C ++ for å opprette en trådløs kontrollkobling mellom basestasjonen min (aka gamle ThinkPad) og min nye Lenovo IdeaPad -netbook som er koblet til Arduino -stasjon. Begge PC -ene kjører Ubuntu. Min ThinkPad er koblet til skolens LAN og min IdeaPad er koblet til WiFi -tilgangspunktet mitt som også er koblet til skolens LAN (jeg kunne ikke få en pålitelig videostrøm fra skolens WiFi siden alle andre bruker det, så jeg satte opp min egen ruter for å gi en god tilkobling). En god tilkobling er spesielt viktig i mitt tilfelle siden jeg ikke har implementert noen feilkontroll eller timeout. Hvis nettverkstilkoblingen plutselig faller, fortsetter roboten til den krasjer i noe eller jeg løper og stopper den. Dette er hovedfaktoren bak min beslutning om å bremse drivverket både ved å sette motorene ned og implementere en hastighet på programvaren.

Trinn 5: Få en videofeed

Etter at robotutforskeren din kan kjøre trådløst, vil du sannsynligvis ha en videofeed fra netbook, slik at du kan fortelle hvor roboten din er. Hvis du bruker Ubuntu (eller selv om du ikke er det!) Anbefaler jeg å bruke VLC Media Player for å streame. Hvis du ikke har installert det, går du virkelig glipp av det, så installer det med kommandoen "sudo apt-get install vlc", se etter VLC i Ubuntu Software Center (bare 9.10), eller last ned installasjonsprogrammet på videolan. org hvis du bruker Windows. Du trenger VLC på begge PC -ene. VLC er i stand til å streame så vel som å spille strømmer på et nettverk. På netbook (robot-PC) må du først kontrollere at webkameraet ditt (enten innebygd eller USB-tilkoblet) fungerer ved å klikke Open Capture Device og prøve Video for Linux 2 (noen eldre enheter kan trenge Video for Linux i stedet for den nye 2-versjonen). Du bør se kameraets visning på netbook -skjermen. For å streame den, velg Streaming fra Fil -menyen og velg deretter Capture Device -fanen øverst i vinduet som vises. Husk at Ubuntu (og mange andre Linux -distroer) lar deg holde nede Alt for å klikke og dra vinduer som er for store for skjermen (spesielt nyttig på eldre netbooks, selv om selv min IdeaPad har en merkelig 1024x576 oppløsning uten noen åpenbar grunn). For å redusere forsinkelsen, klikk på "Vis flere alternativer" og senk hurtigbufringsverdien. Mengden du noen ganger kan senke, avhenger av enheten, den blir ustabil hvis du senker den for mye. På 300 ms kan du få en liten forsinkelse, men det er ikke så ille.

Klikk deretter på Stream for å gå til neste meny. Klikk på Neste, velg og legg til HTTP som en ny destinasjon. Sett nå opp Transkoding for å gjøre bekken mindre. Jeg lagde en tilpasset profil som bruker M-JPEG ved 60 kb/s og 8 bps. Dette er fordi bruk av en avansert kodek som MPEG eller Theora vil spise opp massiv CPU -tid på en netbooks Atom -prosessor, og dette kan føre til at videostrømmen stopper uten noen åpenbar grunn. MJPEG er en enkel kodek som er enkel å bruke ved lave bithastigheter. Etter at du har startet strømmen, åpner du VLC på den andre PC -en, åpner en nettverksstrøm, velger HTTP, og skriver deretter inn IP -adressen til din netbook (enten lokal eller Internett avhengig av hvordan du kobler til) etterfulgt av ": 8080". Du må spesifisere porten av en eller annen merkelig grunn, ellers gir det deg feil. Hvis du har en anstendig tilkobling, bør du se webkameraets feed på den andre PC -en, men det vil ha en liten (omtrent et sekund) forsinkelse. Jeg vet ikke nøyaktig hvorfor denne forsinkelsen oppstår, men jeg kan ikke finne ut hvordan jeg skal bli kvitt den. Åpne nå kontrollappen og begynn å kjøre din netbook -robot. Få en følelse av hvordan forsinkelsen fungerer når du kjører, slik at du ikke krasjer i noe. Hvis det fungerer, er din netbook -robot ferdig.

Anbefalt: