Sadržaj:

Jednostavna Arduino robotska platforma!: 5 koraka
Jednostavna Arduino robotska platforma!: 5 koraka

Video: Jednostavna Arduino robotska platforma!: 5 koraka

Video: Jednostavna Arduino robotska platforma!: 5 koraka
Video: ПЕРВАЯ СХЕМА НА АРДУИНО [Уроки Arduino #4] 2024, Novembar
Anonim
Jednostavna Arduino robotska platforma!
Jednostavna Arduino robotska platforma!
Jednostavna Arduino robotska platforma!
Jednostavna Arduino robotska platforma!

Upravo sam dobio Arduino nakon što sam se igrao s nekim AVR mikrokontrolerima tokom sastanaka tima Robotics. Svidjela mi se ideja o zaista jeftinom programabilnom čipu koji može pokrenuti gotovo sve iz jednostavnog računarskog sučelja pa sam dobio Arduino jer već ima lijepu ploču i USB sučelje. Za svoj prvi Arduino projekt iskopao sam komplet Vex Robotics koji sam položio na nekim natjecanjima u srednjoj školi. Oduvijek sam želio napraviti robotsku platformu za robotiku, ali za mikrokontroler Vex je potreban programski kabel koji nisam imao. Odlučio sam koristiti svoj novi Arduino (i možda kasnije goli AVR čip ako uspijem) za pogon platforme. Na kraju želim nabaviti netbook, a zatim mogu voziti robota koristeći WiFi i daljinski pregledavati njegovu web kameru.

Uspio sam dobiti pristojan serijski protokol i jednostavan primjer koji pokreće robota pomoću Xbox 360 kontrolera spojenog na Linux PC.

Korak 1: Šta može učiniti …

Šta može učiniti…
Šta može učiniti…
Šta može učiniti…
Šta može učiniti…

Arduino je vrlo svestrana platforma. Moj osnovni cilj je bio samo natjerati Arduino da poveže dva Vex motora s računalom, ali imao sam puno preostalih ulazno/izlaznih pinova i odlučio sam dodati neke dodatne stvari. Trenutno imam RGB LED za status serijskog porta (zeleno ako su paketi dobri, crveno ako su loši) i ventilator za PC koji pokreće tranzistor. Mogu dodati i prekidače i senzore, ali još nisam stavio ništa od toga. Najbolje u vezi s tim je što možete dodati sve što želite u Arduino robota. Potrebno je samo malo koda interfejsa za kontrolu dodatnih stvari i unos podataka u računar.

Korak 2: Dijelovi

Delovi
Delovi
Delovi
Delovi
Delovi
Delovi

Za svog robota koristio sam nekoliko različitih dijelova. Većina dijelova je bila od starih stvari koje sam položio po svom podrumu.1) Arduino Duemilanove s ATMega328Ovo je najnoviji Arduino, a budući da sam ga dobio tek prije nekoliko dana, imam najnoviji. Međutim, kod je dovoljno mali da bi se lako mogao uklopiti u bilo koji Arduino. Vjerojatno bi mogao stati čak i na ATTiny (ako izgradim robotski kontroler osim Arduina, ATTiny 2313 izgleda kao dobar izbor, manji je i jeftiniji, ali i dalje ima dosta izlaza i serijsko UART sučelje) 2) Vex Robotics PlatformI dobio je prije nekoliko godina komplet Vex za izradu radio-kontroliranog robota koji će pokupiti stvari za srednjoškolsko takmičenje. Konstruisao sam osnovnu bazu "kvadratnog bota" koja ima 4 točka koja pokreću dva motora. Mogli biste zamijeniti druge baze robota ako imate neku drugu platformu koju želite voziti. Važno je napomenuti da su Vex motori u osnovi servo motori s kontinuiranom rotacijom, koji koriste modulaciju širine impulsa da signaliziraju koliko brzo i u kojem smjeru se okreću. Vex motori su lijepi jer imaju veliki raspon radnih napona, negdje između 5 i 15 volti. Koristim 12V jer sam imao 12V bateriju. Za većinu standardnih servo upravljača iz hobija trebat će vam niži napon (često 6 volti).3) Baterija Robot je beskoristan bez napajanja. Za testiranje koristim standardni 9V adapter za zidne bradavice iz RadioShacka, ali za bežični rad pronašao sam 12V NiMH bateriju u starom laptopu. Iako ne drži dovoljno napunjenosti za pokretanje prijenosnog računara, moj Vex robot radi sasvim u redu. Također može napajati Arduino koristeći Vin ulazni pin na konektoru za napajanje, Arduino će regulirati 12V na 5 pa čak i izlaziti iz 5V izlaznog pina na konektoru za napajanje. ožiči sve. Na kraju ću dobiti ljepšu ploču za izradu prototipa i lemiti na nekim trajnijim vezama, ali zasad matična ploča olakšava mijenjanje stvari. Moja matična ploča je SparkFunova "osnovna ploča", samo ploča na metalnoj ploči sa 3 terminala. 5) RS232-TTL pretvarač zasnovan na MAX232 Ako želite upravljati svojim robotom koristeći RS-232 serijski priključak (za razliku od Arduinovog ugrađenog) u USB-u) možete koristiti RS232-TTL pretvarač. Koristim MAX232 jer ih je nekoliko ležalo i lemio sam ga na mali komad ploče za izradu prototipa sa potrebnim kondenzatorima. Trebam RS-232 jer moj stari laptop ima samo jedan USB priključak i to koristim za kontroler igre za pogon robota.6) Dodatni dijelovi po željiZa lakše otklanjanje grešaka u serijskom protokolu na njega sam stavio RGB LED (dobio sam jedan s mojom narudžbom Arduino jer su zvučali super). Lampica treperi crveno, zeleno, plavo u nizu kada se Arduino podigne kako bi pokazao da se robot ponovo pokrenuo, a zatim svijetli zeleno kada je primljen paket motora, plavo kada je paket ventilatora primljen, a crveno kada je loš ili nepoznat paket je primljen. Za pogon ventilatora koristio sam standardni NPN tranzistor (isti koji sam pokazao u prošlom Instructable) i otpornik između tranzistora i Arduina (tranzistor je vukao previše struje i zagrijavao Arduino, pa sam stavio ograničenje otpornik da ga zaustavi).

Korak 3: Arduino i PC programiranje

Arduino i PC programiranje
Arduino i PC programiranje

Za programiranje Arduina očito će vam trebati softver Arduino i USB kabel. Arduino možete programirati i pomoću serijskog porta i pretvarača nivoa TTL ako vaše računalo ima serijski port. Imajte na umu da USB serijsko sučelje neće komunicirati s Arduinovim ATMega procesorom ako je pretvarač nivoa povezan s Arduinovim serijskim pinovima (pinovi 0 i 1) pa ga odspojite prije korištenja USB -a. Na Arduinu će nam trebati serijsko sučelje koje omogućava PC za upravljanje motorima. Trebat će nam i PWM servo pogonski sistem za slanje ispravnih signala Vex motorima i osiguravanje da idu u ispravnim smjerovima kada im se daju prave vrijednosti. Dodao sam i neko jednostavno LED treptanje, uglavnom za indikaciju statusa, ali i zato što izgleda super. Na računaru ćemo morati otvoriti serijski port i poslati okvire podataka koje će program Arduino razumjeti. Računar takođe mora da pronađe vrednosti motora. Jednostavan način za to je korištenje USB podloge za igru ili joystick -a, koristim Xbox 360 kontroler. Druga mogućnost je korištenje umreženog računara (bilo netbooka ili male mini ITX ploče) na samom robotu za bežičnu vožnju. S netbookom čak možete koristiti ugrađenu web kameru za prijenos video sadržaja i daljinsko upravljanje robotom. Koristio sam Linux socket sistem za programiranje mreže za moje postavljanje. Jedan program ("server za joystick") radi na zasebnom računaru na kojemu je priključen kontroler, a drugi program ("klijent") radi na netbooku spojenom na Arduino. Ovo povezuje dva računara i šalje informacije o džojstiku na netbook, koji zatim šalje serijske pakete na Arduino koji pokreće robota. Da biste se povezali na Arduino koristeći Linux računar (u C ++), morate prvo otvoriti serijski port na ispravnom mjestu. baud rate, a zatim pošaljite vrijednosti koristeći protokol koji ste također koristili na Arduino kodu. Moj serijski format je jednostavan i efikasan. Koristim 4 bajta po "okviru" za slanje dviju brzina motora (svaka je jedan bajt). Prvi i zadnji bajt su teško kodirane vrijednosti koje se koriste da spriječe Arduino da pošalje pogrešan bajt u PWM kod i uzrokuje da motori polude. Ovo je primarna namjena RGB LED diode, treperi crveno kada serijski okvir nije potpun. Četiri bajta su sljedeća: 255 (teško kodirani "početni" bajt),,, 200 (tvrdo kodirani "krajnji" bajt) Da biste osigurali pouzdan prijem podataka, unesite dovoljno kašnjenja između programskih petlji. Ako prebrzo pokrenete svoj PC kod, preplavit će port i Arduino može početi ispuštati ili čak pogrešno čitati bajtove. Čak i ako ne ispušta informacije, također može preplaviti bafer serijskog porta Arduina. Za Vex motore, koristio sam Arduino Servo biblioteku. Budući da su Vex motori samo motori s kontinuiranom rotacijom, koriste potpuno istu signalizaciju koju koriste servo motori. Međutim, umjesto da je 90 stupnjeva središnja točka, to je zaustavna točka u kojoj se motor ne okreće. Smanjivanjem "kuta" motor se počinje okretati u jednom smjeru, dok se povećanjem kuta okreće u drugom smjeru. Što ste dalje od središnje tačke, motor će se brže okretati. Iako neće ništa slomiti ako motorima šaljete vrijednosti veće od 180 stupnjeva, savjetujem vam da ograničite vrijednosti s 0 na 180 stupnjeva (što su u ovom slučaju prirasti brzine). Budući da sam želio veću kontrolu i manje kontrole nad vožnjom robota, svom programu sam dodao softversko "ograničenje brzine" koje ne dopušta povećanje brzine iznad 30 "stupnjeva" u bilo kojem smjeru (raspon je 90 +/- 30). Planiram dodati naredbu serijskog porta koja mijenja ograničenje brzine, tako da računar može ukloniti ograničenje u hodu ako želite ići brzo (testirao sam u malim prostorijama pa ne želim da se ubrza i udariti u zid, posebno sa netbookom na sebi.) Za više informacija preuzmite priloženi kôd na kraju ovog uputstva.

Korak 4: Dodajte Netbook za istraživanje nepoznatih svjetova s daljine

Dodajte Netbook za istraživanje nepoznatih svjetova s daljine
Dodajte Netbook za istraživanje nepoznatih svjetova s daljine
Dodajte Netbook za istraživanje nepoznatih svjetova s daljine
Dodajte Netbook za istraživanje nepoznatih svjetova s daljine

Sa punim računarom na svom Arduino robotu, možete voziti svog robota koliko god vaš WiFi može dosegnuti bez ikakvih kabela za ograničavanje robota na jedno područje. Dobar kandidat za ovaj posao je netbook, jer su netbook računari sićušni, lagani, imaju ugrađenu bateriju, imaju WiFi, a većina čak ima i ugrađene web kamere koje se mogu koristiti za usmjeravanje pogleda robota na sigurno mjesto na kojem se nalazite mogu to kontrolisati. Također, ako je vaš netbook opremljen mobilnom širokopojasnom uslugom, vaš domet je praktički neograničen. S dovoljno baterija možete odvesti svog robota do lokalnog pizzerija i naručiti putem web kamere (ne preporučuje se, roboti obično nisu dozvoljeni na mjestima za pizzu, čak i ako su ljudi vjerojatno će pokušati ukrasti robota, a možda čak i pizza). To bi također mogao biti dobar način za istraživanje mračnih dubina vašeg podruma iz udobnosti vaše uredske stolice, iako bi dodavanje nekih farova u ovom slučaju moglo biti od velike pomoći.

Postoji mnogo načina da ovo funkcionira, mnogi su vjerojatno puno lakši od moga, iako nisam upoznat s procesima ili jezicima zasnovanim na skriptama pa sam odlučio koristiti Linux i C ++ za stvaranje bežične kontrolne veze između moje bazne stanice (tzv. stari ThinkPad) i moj novi Lenovo IdeaPad netbook koji je povezan sa Arduino bazom pogona. Oba računara koriste Ubuntu. Moj ThinkPad je priključen na LAN moje škole, a IdeaPad je povezan sa mojom WiFi pristupnom tačkom koja je takođe povezana sa školskim LAN -om (nisam mogao dobiti pouzdan video stream sa školskog WiFi -a jer ga svi drugi koriste, pa sam postavio podići vlastiti usmjerivač kako bih osigurao dobru vezu). Dobra veza je posebno važna u mom slučaju jer nisam proveo nikakvu provjeru grešaka ili istek vremena. Ako mrežna veza iznenada prekine, robot nastavlja raditi sve dok ne naleti na nešto ili dok ne pokrenem i zaustavim to. Ovo je glavni faktor koji stoji iza moje odluke da usporim pogonski sklop, tako što ću usporiti motore i primijeniti softversko ograničenje brzine.

Korak 5: Nabavite video feed

Nakon što vaš robotski istraživač može bežično voziti, vjerojatno ćete htjeti imati video feed s netbooka kako biste mogli reći gdje se vaš robot nalazi. Ako koristite Ubuntu (ili čak i ako niste!), Preporučujem korištenje VLC Media Playera za prijenos. Ako ga niste instalirali, zaista vam nedostaje, pa ga instalirajte pomoću naredbe "sudo apt-get install vlc", potražite VLC u Ubuntu softverskom centru (samo 9.10) ili preuzmite instalacijski program na videolan. org ako koristite Windows. Trebat će vam VLC pokrenut na oba računala. VLC je sposoban za streaming i reprodukciju tokova na mreži. Na netbooku (robotskom računaru) prvo provjerite radi li vaša web kamera (bilo ugrađena ili spojena USB-om) klikom na Otvori uređaj za hvatanje i isprobavanjem Video za Linux 2 (nekim starijim uređajima možda će trebati Video za Linux, a ne nova verzija 2). Trebali biste vidjeti prikaz kamere na ekranu netbooka. Za prijenos, odaberite Streaming sa izbornika File, a zatim odaberite karticu Capture Device na vrhu prozora koji se pojavi. Upamtite da vam Ubuntu (i mnogi drugi Linux distributeri) drže pritisnutu tipku Alt za klikanje i povlačenje prozora koji su preveliki za vaš ekran (posebno korisno na starijim netbookovima, iako čak i moj IdeaPad ima čudnu rezoluciju 1024x576 bez očiglednog razloga). Da biste smanjili kašnjenje, kliknite na "Prikaži više opcija" i smanjite vrijednost predmemorije. Količina koju možete smanjiti ponekad ovisi o uređaju, postaje nestabilna ako je previše spustite. Na 300 ms možete dobiti malo kašnjenje, ali nije tako loše.

Zatim kliknite Stream za prelazak na sljedeći meni. Pritisnite Dalje, zatim odaberite i dodajte HTTP kao novo odredište. Sada postavite Transcoding kako biste smanjili tok. Napravio sam prilagođeni profil koji koristi M-JPEG pri 60kb/s i 8fps. To je zato što će upotreba naprednog kodeka, poput MPEG -a ili Theore, pojesti ogromno vrijeme procesora na Atom procesoru netbooka, a to može dovesti do zaustavljanja vašeg video feeda bez očiglednog razloga. MJPEG je jednostavan kodek koji se lako koristi pri niskim bitrejtovima. Nakon pokretanja streama, otvorite VLC na svom drugom računaru, otvorite mrežni tok, odaberite HTTP, a zatim upišite IP adresu svog netbooka (bilo lokalnog ili Interneta ovisno o načinu povezivanja), a zatim ": 8080". Morate navesti port iz nekog čudnog razloga, inače vam daje greške. Ako imate pristojnu vezu, trebali biste vidjeti sažetak web kamere na drugom računaru, ali će imati malo (oko sekunde) kašnjenja. Ne znam tačno zašto dolazi do ovog kašnjenja, ali ne mogu shvatiti kako ga se riješiti. Sada otvorite aplikaciju za upravljanje i počnite voziti svog netbook robota. Osjetite kako funkcionira kašnjenje tokom vožnje kako ne biste naletjeli na bilo što. Ako radi, vaš netbook robot je završio.

Preporučuje se: