Cuprins:

Platforma simplă Arduino Robotics !: 5 pași
Platforma simplă Arduino Robotics !: 5 pași

Video: Platforma simplă Arduino Robotics !: 5 pași

Video: Platforma simplă Arduino Robotics !: 5 pași
Video: Amazing arduino project 2024, Iunie
Anonim
Platforma simplă Arduino Robotics!
Platforma simplă Arduino Robotics!
Platforma simplă Arduino Robotics!
Platforma simplă Arduino Robotics!

Tocmai am primit un Arduino după ce am jucat cu niște microcontrolere AVR în timpul întâlnirilor echipei Robotics. Mi-a plăcut ideea unui cip programabil foarte ieftin care ar putea rula aproape orice dintr-o interfață simplă a computerului, așa că am primit un Arduino, deoarece are deja o placă drăguță și o interfață USB. Pentru primul meu proiect Arduino, am dezgropat un kit Vex Robotics pe care îl aveam în jur de la unele competiții pe care le-am făcut în liceu. Întotdeauna mi-am dorit să fac o platformă de robotică bazată pe computer, dar microcontrolerul Vex necesită un cablu de programare pe care nu îl aveam. Am decis să folosesc noul meu Arduino (și poate mai târziu un cip AVR gol dacă îl pun în funcțiune) pentru a conduce platforma. În cele din urmă vreau să obțin un netbook și apoi pot conduce robotul folosind WiFi și îi pot vizualiza camera web de la distanță.

Am reușit să obțin un protocol serial decent și un exemplu simplu care conduce robotul folosind un controler Xbox 360 conectat la un computer Linux.

Pasul 1: Ce poate face …

Ce poate face …
Ce poate face …
Ce poate face …
Ce poate face …

Arduino este o platformă foarte versatilă. Scopul meu de bază a fost doar să fac Arduino să interfețeze două motoare Vex la computer, dar am avut o mulțime de pini de intrare / ieșire rămași și am decis să adaug câteva lucruri suplimentare. Chiar acum am un LED RGB pentru starea portului serial (verde dacă pachetele sunt bune, roșu dacă sunt rele) și un ventilator pentru PC acționat de un tranzistor. De asemenea, pot adăuga comutatoare și senzori, dar nu am pus niciunul dintre ele pe el. Cel mai bun lucru este că puteți adăuga orice doriți la un robot Arduino. Este nevoie doar de un pic de cod de interfață pentru a controla lucruri suplimentare și pentru a obține intrări în computer.

Pasul 2: Piese

Părți
Părți
Părți
Părți
Părți
Părți

Pentru robotul meu, am folosit câteva părți diferite. Cele mai multe părți provin din lucruri vechi pe care le aveam așezate în subsol. Cu toate acestea, codul este suficient de mic încât să se potrivească cu ușurință pe orice Arduino. S-ar putea potrivi chiar și pe un ATTiny (dacă construiesc un controler robot în afară de Arduino, ATTiny 2313 arată ca o alegere bună, este mai mic și mai ieftin, dar are încă o mulțime de ieșiri și o interfață UART serială) 2) Vex Robotics PlatformI Am primit un kit Vex acum câțiva ani pentru a construi un robot radio controlat pentru a ridica lucruri pentru o competiție de liceu. Am construit baza de bază „pătrat bot” care are 4 roți acționate de două motoare. Ați putea înlocui alte baze de robot dacă aveți o altă platformă pe care doriți să o conduceți. Important de reținut este că motoarele Vex sunt în esență servouri de rotație continuă, folosesc modulația lățimii impulsurilor pentru a semnaliza cât de repede și în ce direcție să se întoarcă. Motoarele Vex sunt frumoase, deoarece au o gamă mare de tensiuni de funcționare, undeva între 5 și 15 volți. Folosesc 12V pentru că aveam o baterie de 12V. Pentru majoritatea serviciilor hobby standard, veți avea nevoie de o tensiune mai mică (adesea 6 volți). 3) Baterie Un robot este inutil fără o sursă de alimentare. Pentru testare folosesc un adaptor de perete de 9V de la RadioShack, dar pentru operarea fără fir am găsit un acumulator NiMH de 12V într-un laptop vechi. Deși nu are o încărcare suficientă pentru a rula laptopul, el conduce robotul meu Vex foarte bine. De asemenea, poate alimenta Arduino utilizând pinul de intrare Vin de pe conectorul de alimentare, Arduino va regla 12V până la 5 și chiar îl va scoate pinul de ieșire de 5V de pe conectorul de alimentare. sârmă totul. În cele din urmă, voi obține o placă de prototipare și o lipire mai frumoasă pe unele conexiuni mai permanente, dar deocamdată panoul de control facilitează schimbarea lucrurilor. Panoul meu este „panoul de bază” al SparkFun, doar o panou pe o placă metalică cu 3 terminale.5) Convertor RS232-TTL bazat pe MAX232 Dacă doriți să conduceți robotul folosind o conexiune de port serial RS-232 (spre deosebire de versiunea construită de Arduino în USB) puteți utiliza un convertor RS232-TTL. Folosesc un MAX232 pentru că am avut câțiva dintre ei întinși și l-am lipit pe o bucată mică de placă de prototipare cu condensatorii necesari. Am nevoie de RS-232, deoarece vechiul meu laptop are un singur port USB și îl folosesc pentru un controler de joc pentru a conduce robotul. am primit unul cu comanda mea Arduino pentru că sună cool). Lumina clipește roșu, verde, albastru în ordine când Arduino pornește pentru a arăta că robotul a repornit și apoi se aprinde Verde când a fost primit un pachet motor, Albastru când a fost primit un pachet ventilator și Roșu atunci când este rău sau necunoscut pachetul a fost primit. Pentru a conduce ventilatorul am folosit un tranzistor NPN standard (aceleași pe care le-am demonstrat în ultimul meu instructabil) și un rezistor între tranzistor și Arduino (tranzistorul extragea prea mult curent și încălzea Arduino, așa că am pus o limitare rezistență pentru a o opri).

Pasul 3: Programare Arduino și PC

Programare Arduino și PC
Programare Arduino și PC

Pentru a programa Arduino, în mod evident veți avea nevoie de software-ul Arduino și de un cablu USB. De asemenea, puteți programa Arduino folosind un port serial și un convertor de nivel TTL dacă computerul dvs. are un port serial. Rețineți că interfața serială USB nu va comunica cu procesorul ATMega Arduino dacă există un convertor de nivel conectat la pinii seriali Arduino (pinii 0 și 1) deci deconectați-l înainte de a utiliza USB. Pe Arduino vom avea nevoie de o interfață serială care să permită PC pentru controlul motoarelor. De asemenea, vom avea nevoie de un sistem de servomotor PWM pentru a trimite semnalele corecte către motoarele Vex și pentru a ne asigura că merg în direcțiile corecte atunci când li se dau valorile corecte. Am adăugat, de asemenea, câteva LED-uri intermitente simple, în principal pentru indicarea stării, dar și pentru că arată bine. Pe computer va trebui să deschidem portul serial și să trimitem cadre de date pe care programul Arduino le va înțelege. De asemenea, PC-ul trebuie să vină cu valori ale motorului. O modalitate ușoară de a face acest lucru este să folosiți un pad USB sau un joystick, folosesc un controler Xbox 360. O altă opțiune este utilizarea unui computer conectat în rețea (fie un netbook, fie o mică placă mini ITX) pe robotul însuși pentru a conduce wireless. Cu un netbook, puteți chiar folosi camera web integrată pentru a transmite în flux un flux video și pentru a conduce robotul de la distanță. Am folosit sistemul de socluri Linux pentru a face programarea în rețea pentru configurarea mea. Un program („serverul joystick”) este rulat pe un computer separat care are conectat un controller și un alt program („clientul”) este rulat pe netbook-ul conectat la Arduino. Aceasta conectează cele două computere și trimite informații de joystick către netbook, care apoi trimite pachete seriale către Arduino care conduce robotul. Pentru a vă conecta la Arduino utilizând un computer Linux (în C ++) trebuie mai întâi să deschideți portul serial baud rate și apoi trimiteți valorile folosind un protocol pe care l-ați folosit și pe codul Arduino. Formatul meu serial este simplu și eficient. Folosesc 4 octeți pe „cadru” pentru a trimite cele două turații ale motorului (fiecare este un singur octet). Primul și ultimul octeți sunt valori codate greu, care sunt folosite pentru a împiedica Arduino să trimită octetul greșit la codul PWM și să provoace nebunia motoarelor. Acesta este scopul principal al LED-ului RGB, acesta clipește roșu atunci când cadrul serial a fost incomplet. Cei 4 octeți sunt după cum urmează: 255 (octeți „de pornire” codați cu duritate),,, 200 (octeți de „sfârșit” codați cu duritate) Pentru a asigura o recepție fiabilă a datelor, asigurați-vă că ați pus suficientă întârziere între buclele programului. Dacă rulați codul PC-ului prea repede, acesta va inunda portul și Arduino ar putea începe să scadă sau chiar să citească greșit octeți. Chiar dacă nu renunță la informații, poate, de asemenea, să depășească portul tampon serial al Arduino. Pentru motoarele Vex, am folosit biblioteca Arduino Servo. Deoarece motoarele Vex sunt doar motoare cu rotație continuă, ele folosesc exact aceeași semnalizare pe care o folosesc servomotoarele. Cu toate acestea, în loc ca 90 de grade să fie punctul central, acesta este punctul de oprire în care motorul nu se rotește. Coborârea „unghiului” face ca motorul să înceapă să se rotească într-o direcție, în timp ce ridicarea unghiului îl face să se rotească în cealaltă direcție. Cu cât ești mai departe de punctul central, cu atât motorul se va roti mai repede. Deși nu va sparge nimic dacă trimiteți valori mai mari de 180 de grade către motoare, vă sfătuiesc să limitați valorile de la 0 la 180 de grade (care în acest caz sunt creșteri de viteză). Deoarece am vrut mai mult control și mai puțin controlat de conducerea robotului, am adăugat o „limită de viteză” software la programul meu care nu permite ca viteza să crească peste 30 de „grade” în ambele direcții (intervalul este de 90 +/- 30). Am de gând să adaug o comandă de port serial care modifică limita de viteză, astfel încât computerul să poată elimina limita din mers dacă vrei să mergi rapid (am testat în camere mici, așa că nu vreau să accelereze și ciocniți-vă de perete, mai ales cu un netbook pe el). Pentru mai multe informații, descărcați codul atașat la sfârșitul acestui instructabil.

Pasul 4: Adăugați un Netbook pentru a explora lumi necunoscute de la distanță

Adăugați un Netbook pentru a explora lumi necunoscute de la distanță
Adăugați un Netbook pentru a explora lumi necunoscute de la distanță
Adăugați un Netbook pentru a explora lumi necunoscute de la distanță
Adăugați un Netbook pentru a explora lumi necunoscute de la distanță

Cu un computer complet la bordul robotului dvs. Arduino, vă puteți conduce robotul din cât vă poate conecta WiFi fără cabluri pentru a limita robotul la o zonă. Un bun candidat pentru această slujbă este un netbook, deoarece netbook-urile sunt mici, ușoare, au o baterie încorporată, au WiFi și majoritatea au chiar și camere web încorporate care pot fi folosite pentru a transmite imaginea robotului înapoi într-un loc sigur unde o poate controla. De asemenea, dacă netbook-ul dvs. este echipat cu servicii de bandă largă mobilă, gama dvs. este practic nelimitată. Cu suficiente baterii, puteți să vă conduceți robotul la pizzeria locală și să plasați o comandă prin intermediul camerei web (nerecomandat, roboții nu sunt de obicei permiși în pizzerii, chiar dacă ar fi oameni care vor încerca să fure robotul și poate chiar și pizza). Poate fi, de asemenea, o modalitate bună de a explora adâncurile întunecate ale subsolului din confortul scaunului de birou, deși adăugarea unor faruri poate fi foarte utilă în acest caz.

Există multe modalități de a face acest lucru funcțional, multe sunt probabil mult mai ușoare decât ale mele, deși nu sunt familiarizat cu limbaje de procesare sau scripturi, așa că am ales să folosesc Linux și C ++ pentru a crea o legătură de control wireless între stația mea de bază (aka vechiul ThinkPad) și noul meu netbook Lenovo IdeaPad care este conectat la baza de unitate Arduino. Ambele computere rulează Ubuntu. ThinkPad-ul meu este conectat la rețeaua LAN a școlii și IdeaPad-ul meu este conectat la punctul meu de acces WiFi, care este conectat și la rețeaua LAN a școlii (nu am putut obține un flux video fiabil de la rețeaua WiFi din moment ce toți ceilalți îl folosesc, așa că am setat creează propriul meu router pentru a oferi o conexiune bună). O conexiune bună este deosebit de importantă în cazul meu, deoarece nu am implementat nici o verificare a erorilor sau timeout. Dacă conexiunea la rețea scade brusc, robotul continuă până când se prăbușește în ceva sau o alerg și o opresc. Acesta este principalul factor din spatele deciziei mele de a încetini sistemul de transmisie, atât prin reducerea motoarelor, cât și prin implementarea unei limite de viteză software.

Pasul 5: obțineți un flux video

După ce robotul dvs. de explorare poate conduce fără fir, probabil că veți dori să aveți un flux video de pe netbook, astfel încât să puteți afla unde este robotul dvs. Dacă utilizați Ubuntu (sau chiar dacă nu sunteți!) Vă recomand să utilizați VLC Media Player pentru a transmite în flux. Dacă nu l-ați instalat, chiar pierdeți, așa că instalați-l folosind comanda „sudo apt-get install vlc”, căutați VLC în Ubuntu Software Center (doar 9.10) sau descărcați programul de instalare la videolan. org dacă sunteți pe Windows. Veți avea nevoie de VLC care rulează pe ambele PC-uri. VLC este capabil de streaming, precum și de redare a fluxurilor într-o rețea. Pe netbook (computer robot) asigurați-vă mai întâi că camera dvs. web (fie încorporată, fie conectată prin USB) funcționează făcând clic pe Deschidere dispozitiv de captură și încercând Video pentru Linux 2 (unele dispozitive mai vechi pot avea nevoie de Video pentru Linux, mai degrabă decât de noua versiune 2). Ar trebui să vedeți vizualizarea camerei pe ecranul netbook-ului. Pentru a-l transmite în flux, selectați Streaming din meniul Fișier și apoi alegeți fila Dispozitiv de captură din partea de sus a ferestrei care apare. Amintiți-vă că Ubuntu (și multe alte distribuții Linux) vă permit să țineți apăsat Alt pentru a face clic și a trage ferestre prea mari pentru ecranul dvs. (util mai ales pe netbook-urile mai vechi, deși chiar și IdeaPad-ul meu are o rezoluție ciudată de 1024x576 fără niciun motiv aparent). Pentru a reduce întârzierea, faceți clic pe „Afișați mai multe opțiuni” și reduceți valoarea cache. Cantitatea pe care o puteți reduce depinde uneori de dispozitiv, devine instabilă dacă o coborâți prea mult. La 300 de metri s-ar putea să obțineți o ușoară întârziere, dar nu este prea rău.

Apoi, faceți clic pe Stream pentru a accesa meniul următor. Faceți clic pe Următorul, apoi selectați și adăugați HTTP ca destinație nouă. Acum configurați Transcodarea pentru a micșora fluxul. Am făcut un profil personalizat care utilizează M-JPEG la 60kb / s și 8 fps. Acest lucru se datorează faptului că utilizarea unui codec avansat precum MPEG sau Theora va consuma timp masiv de procesare pe procesorul Atom al unui netbook și acest lucru poate duce la oprirea fluxului video fără niciun motiv aparent. MJPEG este un codec simplu care este ușor de utilizat la rate de biți reduse. După ce ați început fluxul, deschideți VLC pe celălalt computer, deschideți un flux de rețea, selectați HTTP și apoi tastați adresa IP a netbook-ului (fie local, fie pe internet în funcție de modul în care vă conectați), urmată de „: 8080”. Trebuie să specificați portul din anumite motive ciudate, altfel vă oferă erori. Dacă aveți o conexiune decentă, ar trebui să vedeți fluxul camerei Web pe celălalt computer, dar va avea o ușoară întârziere (aproximativ o secundă). Nu știu exact de ce apare această întârziere, dar nu-mi pot da seama cum să scap de ea. Acum deschideți aplicația de control și începeți să conduceți robotul netbook. Înțelegeți cum funcționează întârzierea atunci când conduceți, astfel încât să nu vă prăbușiți cu nimic. Dacă funcționează, robotul netbook este terminat.

Recomandat: