7. Robot mobil controlat de la distanță
7. Robot mobil controlat de la distanță
Vom construi un robot folosind un kit deja realizat, vom adăuga niște plăci Arduino și un modul wireless și, în sfârșit, vom controla totul din LabVIEW.
Cerințe hardware și software
Să aruncăm o privire la componente necesare pentru acest robot. Primul lucru de care avem nevoie este șasiul robotului. Aveți mai multe opțiuni pentru această parte, dar vă recomandăm șasiul cu 2 roți DFRobot MiniQ. Este un robot mititel cu două motoare și două roți și este compatibil cu cele mai multe plăci Arduino. Am ales acest robot pentru prețul său scăzut și pentru că este foarte ușor de utilizat cu Arduino. Dar, puteți alege orice șasiu robot care are două roți și care este compatibil cu plăcile Arduino.
Apoi, veți avea nevoie de mai multe plăci Arduino pentru a interfața cu robotul. Prima placă este Arduino Uno, care va servi drept creierul robotului. Veți avea nevoie, de asemenea, de un DFRobot motor shield pentru a controla cele două roți ale robotului din Arduino. În sfârșit, veți avea nevoie de un Arduino XBee shield pentru a monta un modul XBee Series 1. Acesta va fi utilizat pentru a controla robotul de la distanță.
După aceasta, veți avea nevoie de un senzor ultrasonic URM37 pentru a măsura distanța în fața robotului. Pentru a obține mai multe informații despre acest senzor, puteți accesa următorul link la manual http://www.dfrobot.com/wiki/index.php?title=URM37_V3.2_Ultrasonic_Sensor_(SKU:SEN0001)
De asemenea, veți avea nevoie de o baterie LiPo pentru a alimenta robotul. În acest scop, vom folosi o baterie de 7.2 V LiPo.
De asemenea, vom folosi un USB XBee controller cu un alt modul XBee Series 1 pentru a controla robotul din computer.
Următoarea listă prezintă toate componentele necesare pentru acest proiect:
Arduino Uno (https://www.adafruit.com/products/50)
Șasiul robotului DFRobot MiniQ (http://www.dfrobot.com/index.php?route=product/product&search=miniq&description=true&product_id=367)
DFRobot motor shield (http://www.dfrobot.com/index.php?route=product/product&product_id=59&search=motor+shield&description=true)
URM37 ultrasonic sensor (http://www.dfrobot.com/index.php?route=product/product&product_id=53&search=ultrasonic&description=true)
7.4V LiPo battery (http://www.dfrobot.com/index.php?route=product/product&product_id=489&search=battery&description=true)
Arduino XBee shield (https://www.sparkfun.com/products/12847)
XBee module x2 (https://www.sparkfun.com/products/11215)
XBee explorer module (https://www.sparkfun.com/products/11812)
Jumper wires (https://www.adafruit.com/products/1957)
Pe partea de software, va trebui să aveți instalat LabVIEW și pachetul LINX. Dacă nu ați făcut încă acest lucru, consultați Capitolul 2, Noțiuni de bază cu interfața LabVIEW pentru Arduino, pentru a urma pașii necesari.
Configurația hardware
Acum vom asambla diferitele componente ale proiectului prin realizarea următorilor pași:
Asamblați șasiul robotului utilizând instrucțiunile date de producătorul șasiului. Apoi, asamblați distanțierele metalice pentru a monta placa Arduino Uno și alte plăci mai târziu. În cele din urmă, montați senzorul ultrasonic în fața robotului, după cum se arată în imagine:
Următorul pas este să asamblați placa Arduino Uno pe robot. Montați placa Arduino Uno pe partea superioară a distanțierelor. Apoi, înșurubați-o spre distanțiere cu cel puțin două șuruburi pentru o susținere mai bună, astfel încât să fie fixată ferm pe poziție.
Putem acum să montăm motor shield. Puneți-l pe partea superioară a plăcii Arduino Uno pe care am asamblat-o mai devreme. Apoi, conectați-l la motoare prin bornele cu șurub. Asigurați-vă că utilizați aceeași polaritate pentru fiecare motor. De exemplu, dacă ați conectat firul roșu de la motorul 2 la capătul M2+, conectați firul roșu de la motor 1 la capătul M1+.
Vom monta acum ArduinoXBee shield pe robot și modulul XBee deasupra shield-ului:
Haideți acum să interfațăm senzorul ultrasonic cu robotul. Există trei pini pe care trebuie să îi conectăm pentru acest senzor: VCC, GND și ieșirea de impuls de la senzor. Dacă ne uităm la senzor din partea pinilor și pornind de la partea stângă, primul pin este pinul VCC, cel de-al doilea pin este pinul GND, iar al patrulea pin corespunde ieșirii de impuls. Conectați VCC la pinul Arduino 5V, GND la Arduino GND și, în final, ieșirea de impuls al senzorului la pinul 3 Arduino.
Înainte de a folosi robotul împreună cu LabVIEW, conectați bateria la intrarea jack DC a plăcii Arduino Uno.
În cele din urmă, conectați modulul Explorer XBee USB cu un modul XBee Series 1 pe acesta la computer.
Mișcarea robotului în jur
Acum vom construi o simplă schiță LabVIEW pentru a controla roțile robotului. Veți putea seta viteza robotului și veți schimba direcția fiecărei roți.
Se începe ca de obicei cu o buclă While goală unde vom adăuga toate blocurile noastre pentru a controla robotul. De asemenea, putem plasa blocurile obișnuite Init și stop și o singură casetă de eroare (error box) la sfârșit:
Vom plasa patru funcții în interiorul buclei principale While Loop, câte două pe roata robotului. Într-adevăr, pentru fiecare roată avem nevoie de două funcții pe roată/motor: o funcție Digital Write pentru a seta direcția motorului și o funcție Set Duty Cycle pentru a seta viteza motorului. Plasați aceste blocuri în interiorul buclei și conectați firele uzuale de resurse LINX și link-urile de eroare, astfel încât să arate ca următoarea captură de ecran:
În imaginea precedentă, am creat deja câteva blocuri de control pentru prima funcție de scriere digitală și am conectat starea finală a buclei de timp la firele de eroare. De asemenea, am creat deja un control Serial Port pentru intrarea corespunzătoare a blocului Init.
Acum puteți crea mai mult control pentru fiecare intrare a funcțiilor pe care tocmai le-am adăugat în Loop, în timp ce dați clic dreapta pe fiecare intrare. Rețineți că pentru fiecare funcție trebuie să creați două comenzi: una pentru valoarea intrării în sine și una pentru pin. De asemenea, asigurați-vă că dați nume relevante fiecărui control pe care îl plasați la acest pas, deoarece acesta va fi util atunci când plasați diferite elemente pe panoul frontal.
Acum ne putem întoarce la panoul frontal. Ca de obicei, am adăugat toate comenzile pinilor pe partea stângă și controlul valorii funcțiilor pe partea dreaptă.
Acum este timpul să încercați interfața robot pentru prima dată. Mai întâi, alegeți portul serial corect din listă și asigurați-vă că întrerupătorul mic este setat la DLINE pe ArduinoXBee shield.
Apoi, trebuie să setați pinii corecți pentru motor shield; puteți afla despre acești pini în documentația DFRobot motor shield la acest link http://www.dfrobot.com/wiki/index.php?title=Arduino_Motor_Shield_(L293)_(SKU:_DRI0001)
Acum putem testa robotul. Asigurați-vă că bateria este conectată la placa Arduino Uno și faceți click pe săgeata mică din bara de instrumente pentru a porni programul. De asemenea, asigurați-vă că robotul are roțile în aer, deoarece este încă atașat prin intermediul cablului USB la computer.
Apoi, puteți încerca să introduceți valori în comenzile de viteză (între 0 și 255) și trebuie să vedeți că roata începe imediat să se rotească. De asemenea, puteți modifica direcția unei roți date făcând click pe unul dintre butoanele verzi afișate aici:
Vom îmbunătățiți puțin această interfață. Într-adevăr, nu este convenabil să schimbi viteza robotului prin scrierea vitezei. În schimb, vom folosi cursoare pentru a controla robotul doar cu mouse-ul nostru.
Încă pe panoul frontal, eliminați cele două intrări text pentru viteză și adăugați două cursoare cu indicatoare în loc. Denumiți aceste comenzi noi și deschideți panourile lor Properties pentru a schimba valoarea maximă a cursoarelor la 255.
Desigur că trebuie să reveniți la Diagrama bloc pentru a conecta noile comenzi la casetele Set Duty Cycle.
Acum puteți să vă întoarceți la panoul frontal și să testați comenzile noi; acum veți putea să controlați viteza robotului trăgând doar cursorul slider-elor.
Măsurarea distanței frontale
Vom actualiza acum programul pe care tocmai l-am scris pentru a include senzorul frontal cu ultrasunete. Vom afișa pur și simplu valoarea măsurată de senzor în Panoul frontal al programului nostru.
Primul pas este de a efectua modificările corespunzătoare la Diagrama bloc. Pentru a măsura distanța în fața senzorului, vom folosi un bloc pulseIn pe care îl puteți găsi în caseta de instrumente LINX. Principial, senzorul va genera un impuls a cărui lungime este proporțională cu distanța din fața senzorului.
Plasați funcția pulseIn() în spațiul rămas în interiorul buclei While Loop și apoi reconectați firul de resurse LINX și firul de eroare, astfel încât acestea să se integreze cu această nouă funcție. De asemenea, creați comenzi pentru pinul funcției pulseIn() și setați pinul din stânga sus al funcției la Active Low, creând un nou control.
Pentru ieșire, trebuie mai întâi să împărțim ieșirea casetei cu 50 pentru a obține o citire în centimetri. Utilizați o funcție de divizare simplă pentru aceasta. După această funcție Divide, creați o ieșire text simplă pentru a afișa valoarea măsurată în centimetri. Următoarea imagine de ecran rezumă toate modificările făcute în acest moment:
Pentru a vă ajuta, această captură de ecran este o vizualizare zoom-in a noilor funcții pe care le-am adăugat pentru integrarea senzorului de distanță cu ultrasunete:
Acum ne putem întoarce la Panoul frontal. Primul pas aici este de a aranja din nou diferitele comenzi și de a adăuga textul ieșire din senzor în partea dreaptă a Panoului. De asemenea, setați pinul funcției pulseIn() la valoarea corectă (3).
Acum putem testa programul din nou. Pur și simplu rulați-l și urmăriți distanța măsurată de senzor; acesta va fi actualizat în timp real, în timp ce vă mutați mâna în fața acestuia.
Controlul robotului wireless
Acum avem un robot funcțional, deoarece am interfațat toate motoarele și senzorii cu LabVIEW. Dar, suntem încă blocați cu cablul USB pentru a trimite date robotului, astfel încât este imposibil să mișcați robotul în jur. În această ultimă parte, vom vedea rapid modul de utilizare a modulului XBee pe care l-am instalat pe robot pentru a-l controla de la distanță.
Puteți deja să deconectați cablul USB de la robot și asigurați-vă că bateria este încă conectată. De asemenea, asigurați-vă că placa XBee USB explorer este conectată la computer.
Apoi, intrați în caseta Init a programului și deschideți Diagrama ei bloc. Asigurați-vă că viteza serială este setată la 9600 baud, așa cum se arată în următoarea captură de ecran:
Acum, du-te înapoi la Panoul frontal al programului nostru principal și schimbați portul serial astfel încât să se potrivească cu portul serial al plăcii XBee explorer. În cele din urmă, asigurați-vă că comutatorul de pe ArduinoXBee shield este setat la UART.
Acum puteți rula programul din nou. Veți vedea că LED-urile de pe scutul ArduinoXBee și placa explorer clipesc continuu; aceasta înseamnă că a fost stabilită comunicarea între ambele. Acum puteți controla robotul mobil fără fire!