INHOUDSOPGAWE:

Eenvoudige Arduino Robotics -platform !: 5 stappe
Eenvoudige Arduino Robotics -platform !: 5 stappe

Video: Eenvoudige Arduino Robotics -platform !: 5 stappe

Video: Eenvoudige Arduino Robotics -platform !: 5 stappe
Video: Top 5 Arduino Displays 2024, Julie
Anonim
Eenvoudige Arduino Robotics -platform!
Eenvoudige Arduino Robotics -platform!
Eenvoudige Arduino Robotics -platform!
Eenvoudige Arduino Robotics -platform!

Ek het pas 'n Arduino gekry nadat ek tydens Robotics -spanvergaderings met 'n paar AVR -mikrobeheerders gespeel het. Ek hou van die idee van 'n baie goedkoop programmeerbare chip wat omtrent alles van 'n eenvoudige rekenaarkoppelvlak kan werk, so ek het 'n Arduino gekry omdat dit reeds 'n goeie bord en USB -koppelvlak het. Vir my eerste Arduino -projek het ek 'n Vex Robotics -kit opgestel wat ek opgestel het tydens 'n paar kompetisies wat ek op hoërskool gedoen het. Ek wou nog altyd 'n rekenaargedrewe robotika -platform maak, maar die Vex -mikrobeheerder benodig 'n programmeerkabel wat ek nie gehad het nie. Ek het besluit om my nuwe Arduino (en miskien later 'n kaal AVR -chip te gebruik as ek dit werk) om die platform te bestuur. Uiteindelik wil ek 'n netbook kry, en dan kan ek die robot bestuur met behulp van WiFi en die webcam op afstand sien.

Ek het daarin geslaag om 'n ordentlike seriële protokol en 'n eenvoudige voorbeeld te kry wat die robot dryf met 'n Xbox 360 -beheerder wat gekoppel is aan 'n Linux -rekenaar.

Stap 1: Wat dit kan doen …

Wat dit kan doen …
Wat dit kan doen …
Wat dit kan doen …
Wat dit kan doen …

Die Arduino is 'n baie veelsydige platform. My basiese doel was net om die Arduino te laat koppel tussen twee Vex -motors en die rekenaar, maar ek het baie oorblywende invoer-/uitsetpenne en besluit om ekstra dinge by te voeg. Op die oomblik het ek 'n RGB -LED vir seriële poortstatus (groen as die pakkies goed is, rooi as dit sleg is) en 'n rekenaarwaaier wat deur 'n transistor aangedryf word. Ek kan ook skakelaars en sensors byvoeg, maar ek het nog nie een daarvan geplaas nie. Die beste daarvan is dat u alles wat u wil by 'n Arduino -robot kan voeg. Dit verg slegs 'n bietjie koppelvlakkode om ekstra goed te beheer en insette op die rekenaar te kry.

Stap 2: Onderdele

Dele
Dele
Dele
Dele
Dele
Dele

Vir my robot het ek 'n paar verskillende dele gebruik. Die meeste dele was van ou goed wat ek in my kelder gelê het. Die kode is egter klein genoeg dat dit maklik op enige Arduino moet pas. Dit kan waarskynlik selfs op 'n ATTiny pas (as ek 'n robotbeheerder bou, afgesien van die Arduino, lyk die ATTiny 2313 na 'n goeie keuse, dit is kleiner en goedkoper, maar het nog steeds baie uitsette en 'n seriële UART -koppelvlak) 2) Vex Robotics PlatformI Ek het 'n paar jaar gelede 'n Vex-kit gekry om 'n radiobeheerde robot te bou om goed vir 'n hoërskoolkompetisie op te tel. Ek het die basiese "square bot" -basis gebou met 4 wiele wat deur twee motors aangedryf word. U kan ander robotbasisse vervang as u 'n ander platform het waarop u wil ry. Die belangrikste ding om daarop te let is dat Vex-motors in wese servo's is vir deurlopende rotasie, hulle gebruik modulasie van die pulswydte om aan te dui hoe vinnig en in watter rigting hulle moet draai. Die Vex -motors is aangenaam omdat hulle 'n groot reeks werkspannings het, tussen 5 en 15 volt. Ek gebruik 12V omdat ek 'n 12V battery gehad het. Vir die meeste standaard stokperdjieservo's benodig u 'n laer spanning (dikwels 6 volt).3) Battery 'n Robot is nutteloos sonder 'n kragtoevoer. Vir die toets gebruik ek 'n standaard 9V muurworteladapter van RadioShack, maar vir koordlose gebruik vind ek 'n 12V NiMH-batterypak in 'n ou skootrekenaar. Alhoewel dit nie genoeg is om die skootrekenaar te bestuur nie, bestuur dit my Vex -robot goed. Dit kan die Arduino ook met die Vin -invoerpen op die kragaansluiting voed, die Arduino sal die 12V tot 5 reguleer en selfs die 5V -uitvoerpen op die kragaansluiting uitstuur. 4) Basiese broodbord Ek gebruik tans 'n broodbord om draai alles op. Uiteindelik kry ek 'n mooier prototipe bord en soldeer op 'n paar meer permanente verbindings, maar vir eers maak die broodbord dit maklik om dinge te verander. My broodbord is die "basiese broodbord" van SparkFun, net 'n broodbord op 'n metaalplaat met 3 terminale. in USB) kan u 'n RS232-TTL-omskakelaar gebruik. Ek gebruik 'n MAX232 omdat ek 'n paar daarvan gehad het en ek het dit op 'n stukkie prototipe bord met die nodige kapasitors gesoldeer. Ek het RS-232 nodig, want my ou skootrekenaar het net een USB-poort en ek gebruik dit vir 'n spelbeheerder om die robot te bestuur. Ek het een gekry met my Arduino -bestelling, want dit klink cool). Die lig flits in volgorde rooi, groen, blou as die Arduino opstart om te wys dat die robot herlaai en dan groen brand wanneer 'n motorpakket ontvang is, Blou as 'n waaierpakket ontvang is, en rooi as 'n slegte of onbekende pakkie ontvang is. Om die waaier aan te dryf, gebruik ek 'n standaard NPN -transistor (dieselfde wat ek in my laaste instruksies getoon het) en 'n weerstand tussen die transistor en die Arduino (die transistor trek te veel stroom en verhit die Arduino, so ek het 'n beperking gestel weerstand in om dit te stop).

Stap 3: Arduino- en rekenaarprogrammering

Arduino en rekenaarprogrammering
Arduino en rekenaarprogrammering

Om die Arduino te programmeer, benodig u natuurlik die Arduino -sagteware en 'n USB -kabel. U kan die Arduino ook met behulp van 'n seriële poort en 'n TTL -vlakomskakelaar programmeer as u rekenaar 'n seriële poort het. Let daarop dat die USB -seriële koppelvlak nie met die ATMega -verwerker van die Arduino sal kommunikeer as daar 'n vlakomskakelaar aan die seriële penne van Arduino (penne 0 en 1) is nie, dus ontkoppel dit voordat u USB gebruik. Op die Arduino benodig ons 'n seriële koppelvlak wat die PC om die motors te beheer. Ons benodig ook 'n PWM -servostuurstelsel om die korrekte seine na die Vex -motors te stuur en seker te maak dat hulle in die regte rigting gaan as hulle die regte waardes kry. Ek het ook 'n paar eenvoudige LED -flitse bygevoeg, hoofsaaklik vir statusaanwysing, maar ook omdat dit koel lyk. Op die rekenaar moet ons die seriële poort oopmaak en rame data stuur wat die Arduino -program sal verstaan. Die rekenaar moet ook met motorwaardes vorendag kom. 'N Maklike manier om dit te doen, is om 'n USB -spelblok of joystick te gebruik; ek gebruik 'n Xbox 360 -beheerder. 'N Ander opsie is om 'n netwerkrekenaar (óf 'n netbook óf 'n klein mini -ITX -bord) op die robot self te gebruik om draadloos te bestuur. Met 'n netbook kan u selfs die ingeboude webkamera gebruik om 'n videostroom terug te stroom en u robot op afstand te bestuur. Ek het die Linux -sockets -stelsel gebruik om netwerkprogrammering vir my opstelling te doen. Een program (die "joystick -bediener") word op 'n aparte rekenaar uitgevoer met 'n kontroleerder, en 'n ander program (die 'kliënt') word uitgevoer op die netbook wat aan die Arduino gekoppel is. Dit koppel die twee rekenaars en stuur joystick -inligting na die netbook, wat dan reekspakkies stuur na die Arduino wat die robot dryf. Om met die Arduino te verbind met 'n Linux -rekenaar (in C ++), moet u eers die seriële poort op die korrekte manier oopmaak baud rate en stuur dan die waardes met behulp van 'n protokol wat u ook op die Arduino -kode gebruik het. My reeksformaat is eenvoudig en effektief. Ek gebruik 4 grepe per "raam" om die twee motorsnelhede te stuur (elkeen is 'n enkele greep). Die eerste en laaste grepe is hardgekodeerde waardes wat gebruik word om te verhoed dat die Arduino die verkeerde byte na die PWM-kode stuur en veroorsaak dat die motors mal raak. Dit is die primêre doel van die RGB LED, dit flikker rooi as die reeksraam onvolledig was. Die 4 grepe is soos volg: 255 (hardgekodeerde "begin" -byte),,, 200 (hardgekodeerde "einde" -byte) Om 'n betroubare ontvangs van die data te verseker, moet u genoeg vertraging tussen programlusse plaas. As u u rekenaarkode te vinnig hardloop, sal dit die poort oorstroom en die Arduino kan grepe laat val of selfs verkeerd lees. Selfs as dit nie inligting laat val nie, kan dit ook die Arduino se seriële poortbuffer oorloop. Vir die Vex -motors het ek die Arduino Servo -biblioteek gebruik. Aangesien Vex -motors slegs deurlopende rotasie -motors is, gebruik hulle presies dieselfde sein as wat servo's gebruik. In plaas daarvan dat 90 grade die middelpunt is, is dit egter die stoppunt waar die motor nie draai nie. Deur die "hoek" te verlaag, begin die motor in een rigting draai, terwyl die verhoging die hoek in die ander rigting laat draai. Hoe verder jy van die middelpunt af is, hoe vinniger sal die motor draai. Alhoewel dit niks gaan breek as u waardes groter as 180 grade na die motors stuur nie, sou ek u aanbeveel om die waardes van 0 tot 180 grade te beperk (wat in hierdie geval spoedstygings is). Omdat ek meer beheer en minder bestuur van robotbestuur wou hê, het ek 'n sagteware "spoedgrens" by my program gevoeg wat nie toelaat dat die spoed meer as 30 "grade" in enige rigting styg nie (reeks is 90 +/- 30). Ek is van plan om 'n seriële poortopdrag by te voeg wat die spoedgrens verander, sodat die rekenaar die limiet onmiddellik kan verwyder as u vinnig wil gaan (ek het in klein kamers getoets, sodat ek nie wil hê dat dit moet bespoedig nie) en teen die muur vasval, veral met 'n netbook daarop). Laai die aangehegte kode aan die einde van hierdie instruksie af vir meer inligting.

Stap 4: Voeg 'n netbook by om onbekende wêrelde van ver af te verken

Voeg 'n netbook by om onbekende wêrelde van ver af te verken
Voeg 'n netbook by om onbekende wêrelde van ver af te verken
Voeg 'n netbook by om onbekende wêrelde van ver af te verken
Voeg 'n netbook by om onbekende wêrelde van ver af te verken

Met 'n volledige rekenaar aan boord van u Arduino -robot, kan u u robot dryf van so ver as u WiFi kan bereik sonder om toue te kry om die robot tot een gebied te beperk. 'N Goeie kandidaat vir hierdie taak is 'n netbook, want netbooks is klein, liggewig, het 'n ingeboude battery, WiFi, en die meeste het selfs ingeboude webcams wat gebruik kan word om die robot se uitsig na 'n veilige plek te stroom kan dit beheer. As u netbook toegerus is met mobiele breëbanddiens, is u reeks prakties onbeperk. Met genoeg batterye kan u u robot na die plaaslike pizza -plek ry en 'n bestelling via die webkamera plaas (dit word nie aanbeveel nie, robotte word gewoonlik nie op pizza -plekke toegelaat nie, selfs al is dit mense wat die robot sal probeer steel en miskien selfs die pizza). Dit kan ook 'n goeie manier wees om die donker dieptes van u kelder vanuit die gemak van u kantoorstoel te ondersoek, alhoewel die byvoeging van 'n paar kopligte in hierdie geval baie nuttig kan wees.

Daar is baie maniere om dit te laat werk, baie is waarskynlik baie makliker as myne, alhoewel ek nie vertroud is met verwerking of op skrifgebaseerde tale nie, so ek het gekies om Linux en C ++ te gebruik om 'n draadlose beheerverbinding tussen my basisstasie te skep (ook bekend as ou ThinkPad) en my nuwe Lenovo IdeaPad -netbook wat gekoppel is aan die Arduino -dryfbasis. Beide rekenaars gebruik Ubuntu. My ThinkPad is ingeskakel by my skool se LAN en my IdeaPad is gekoppel aan my WiFi -toegangspunt wat ook met die skool se LAN gekoppel is (ek kon nie 'n betroubare videostroom van die WiFi van die skool af kry nie, aangesien almal dit gebruik, so ek het ingestel my eie router op om 'n goeie verbinding te bied). 'N Goeie verbinding is veral belangrik in my geval, aangesien ek geen foutkontrole of tydsberekening geïmplementeer het nie. As die netwerkverbinding skielik onderbreek, hou die robot aan totdat dit in iets vasval of ek hardloop en stop. Dit is die belangrikste faktor agter my besluit om die dryfkrag te vertraag, beide deur die motors af te skakel en 'n snelheidsbeperking vir sagteware te implementeer.

Stap 5: Kry 'n videostroom

Nadat u robotverkenner draadloos kan ry, wil u waarskynlik 'n videostroom uit die netbook hê, sodat u kan weet waar u robot is. As u Ubuntu gebruik (of selfs as u dit nie doen nie!), Beveel ek aan dat u VLC Media Player gebruik om te stroom. As u dit nie geïnstalleer het nie, mis u dit regtig, dus installeer dit met die opdrag "sudo apt-get install vlc", soek na VLC in die Ubuntu Software Center (slegs 9.10), of laai die installeerder af op videolan. org as u Windows gebruik. U benodig VLC op beide rekenaars. VLC kan sowel as strome op 'n netwerk stroom. Maak eers op die netbook (robot-rekenaar) seker dat u webkamera (ingeboude of USB-gekoppelde) werk deur op Open Capture Device te klik en Video vir Linux 2 te probeer (sommige ouer toestelle het dalk Video vir Linux nodig eerder as die nuwe 2-weergawe). U moet die kamera se aansig op die netbook -skerm sien. Om dit te stroom, kies Streaming in die menu File en kies dan die oortjie Capture Device bo -aan die venster wat verskyn. Onthou dat Ubuntu (en baie ander Linux -distros) u Alt ingedruk het om te klik en vensters te groot te sleep vir u skerm (veral handig op ouer netbooks, alhoewel selfs my IdeaPad sonder duidelike rede 'n vreemde 1024x576 -resolusie het). Om die vertraging te verminder, klik op "Wys meer opsies" en verlaag die kaswaarde. Die hoeveelheid wat u dit kan verlaag, hang soms af van die toestel, dit word onstabiel as u dit te veel verlaag. Op 300ms kan u 'n effense vertraging kry, maar dit is nie te erg nie.

Klik vervolgens op Stroom om na die volgende spyskaart te gaan. Klik op Volgende, kies en voeg HTTP by as 'n nuwe bestemming. Stel nou Transkodering op om die stroom kleiner te maak. Ek het 'n persoonlike profiel gemaak wat M-JPEG gebruik by 60kb/s en 8fps. Dit is omdat die gebruik van 'n gevorderde codec soos MPEG of Theora groot CPU -tyd op die Atom -verwerker van 'n netbook opeet, en dit kan daartoe lei dat u videostroom sonder duidelike rede stop. MJPEG is 'n eenvoudige codec wat maklik is om te gebruik teen lae bitrates. Nadat u u stroom begin het, maak u VLC oop op u ander rekenaar, maak u 'n netwerkstroom oop, kies HTTP en tik dan die IP -adres van u netbook (lokaal of internet, afhangende van hoe u verbind) gevolg deur ": 8080". U moet die poort om een of ander rede spesifiseer, anders gee dit u foute. As u 'n behoorlike verbinding het, moet u die stroom van u webcam op u ander rekenaar sien, maar dit sal 'n effense (ongeveer 'n sekonde) vertraging hê. Ek weet nie presies waarom hierdie vertraging plaasvind nie, maar ek kan nie uitvind hoe om daarvan ontslae te raak nie. Maak nou die beheerprogram oop en begin met u netbook -robot. Gee 'n idee van hoe die vertraging werk terwyl u ry, sodat u nie met iets vasval nie. As dit werk, is u netbook -robot klaar.

Aanbeveel: