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:

Hardware configuration
  • 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.

Hardware configuration
  • 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+.

Hardware configuration
  • Vom monta acum ArduinoXBee shield pe robot și modulul XBee deasupra shield-ului:

Hardware configuration
  • 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:

Moving the robot around
  • 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:

Moving the robot around
  • Î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ă.

Moving the robot around

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:

Moving the robot around

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.

Moving the robot around

Desigur că trebuie să reveniți la Diagrama bloc pentru a conecta noile comenzi la casetele Set Duty Cycle.

Moving the robot around

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:

Measuring the front distance

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:

Measuring the front distance

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.

Measuring the front distance

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:

Controlling the robot wirelessly

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.

Controlling the robot wirelessly

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!