- Materiale necesare:
- Conceptul robotului de evitare a obstacolelor:
- Schema și explicația circuitului:
- Programarea microcontrolerului PIC:
- Robot de evitare a obstacolelor în acțiune:
Obstacle Avoider Robot este un alt robot celebru care condimentează proiectele încorporate. Pentru cei care sunt noi robot de evitare a obstacolelor, este doar un robot cu roți normal, care ar putea naviga pe drumul său fără să lovească obstacole. Există multe modalități de a construi un robot de evitare obstacole în proiect, vom folosi un senzor cu ultrasunete (față) și doi senzori IR (stânga / dreapta), astfel încât robotul nostru să aibă ochi în toate cele trei direcții. În acest fel îl puteți face mult mai inteligent și mai rapid detectând obiecte din toate cele trei laturi și manevrând în consecință. Aici trimitem în judecată microcontrolerul PIC PIC16F877A pentru acest robot care evită obstacolele.
Funcționarea unui robot de evitare a obstacolelor poate fi observată dintr-un produs în timp real numit roboți de curățat acasă. Deși tehnologia și senzorii folosiți în acestea sunt mult mai complicate, conceptul rămâne același. Să vedem cât de mult putem realiza folosind senzorii noștri normali și microcontrolerele PIC.
Verificați și ceilalți roboți de evitare a obstacolelor:
- Robot de evitare a obstacolelor bazate pe Raspberry Pi
- Robot de curățare inteligent DIY cu Arduino
Materiale necesare:
- PIC16F877A
- Senzor IR (2Nos)
- Senzor cu ultrasunete (1Nos)
- Motor cu transmisie DC (2Nos)
- Driver motor L293D
- Scaune (Puteți, de asemenea, să vă construiți propriile dvs. folosind cartoane)
- Power bank (Orice sursă de energie disponibilă)
Conceptul robotului de evitare a obstacolelor:
Conceptul robotului de evitare a obstacolelor este foarte simplu. Folosim senzori pentru a detecta prezența obiectelor în jurul robotului și folosim aceste date pentru a nu ciocni robotul peste acele obiecte. Pentru a detecta un obiect putem folosi orice senzori de utilizare precum senzorul IR și senzorul cu ultrasunete.
În robotul nostru am folosit senzorul SUA ca senzor frontal și doi senzori IR pentru stânga și respectiv dreapta. Robotul se va deplasa înainte când nu există niciun obiect prezent înaintea acestuia. Deci robotul se va deplasa înainte până când senzorul cu ultrasunete (SUA) detectează orice obiect.
Când un obiect este detectat de senzorul SUA, este timpul să schimbați direcția robotului. Putem să virăm la stânga sau la dreapta, pentru a decide direcția de virare, folosim ajutorul senzorului IR pentru a verifica dacă există vreun obiect prezent în partea stângă sau dreaptă a robotului.
Dacă există o obiecție detectată în partea din față și din dreapta robotului, atunci robotul se va întoarce și se va întoarce la stânga. Facem ca robotul să ruleze înapoi pe o anumită distanță, astfel încât să nu se ciocnească pe obiect în timp ce faceți virajul.
Dacă există o obiecție detectată în partea din față și stânga a robotului, atunci robotul se va întoarce și se va întoarce la dreapta.
Dacă robotul ajunge într-un colț al camerei, acesta va simți obiectul prezent în toate cele patru. În acest caz, trebuie să conducem robotul înapoi până când oricare dintre părți devine liberă.
Un alt caz posibil este că va exista un obiect în față, dar s-ar putea să nu existe niciun obiect nici în partea stângă, nici în partea dreaptă, în acest caz trebuie să ne întoarcem aleatoriu în oricare dintre direcții.
Sper că acest lucru ar fi dat o idee aproximativă despre modul în care funcționează un avoider de obstacole, acum să continuăm cu Diagrama circuitului pentru a construi acest bot și a ne bucura de el în acțiune.
Schema și explicația circuitului:
Diagrama completă a circuitului acestui robot PIC care evită obstacolele este prezentată în imaginea de mai sus. După cum puteți vedea, am folosit doi senzori IR pentru a detecta obiecte la stânga și, respectiv, la dreapta robotului și un senzor cu ultrasunete pentru a măsura distanța obiectului care este prezent în fața robotului. De asemenea, am folosit un modul L293D Motor Driver pentru a conduce cele două motoare prezente în acest proiect. Acestea sunt doar motoare obișnuite cu roți dințate DC și, prin urmare, pot fi derivate foarte ușor. Următorul tabel vă va ajuta în conexiuni.
S. Nu |
Conectat de la |
Conectat la |
1 |
Senzor IR Pin lăsat afară |
RD2 (pinul 21) |
2 |
Senzor IR Pin dreapta |
RD3 (pinul 22) |
4 |
Motor 1 canal A pin |
RC4 (pinul 23) |
5 |
Motor 1 canal B. pin |
RC5 (pinul 25) |
6 |
Motor 2 Canal A pin |
RC6 (pinul 26) |
7 |
Motor 2 canale B. Pin |
RC7 (pinul 27) |
8 |
Pinul de declanșare din SUA |
RB1 (pin 34) |
9 |
US Echo Pin |
RB2 (pinul 35) |
Un modul de comandă a motorului, cum ar fi L293D, este obligatoriu, deoarece cantitatea de curent necesară pentru pornirea motorului de transmisie DC nu poate fi obținută de pinul I / O al microcontrolerului PIC. Senzorii și modulul sunt alimentați de sursa + 5V care este reglementată de 7805. Modulul driverului motorului poate fi alimentat chiar și cu + 12V, dar pentru acest proiect tocmai m-am lipit de + 5V disponibil.
Robotul complet este alimentat de o bancă de putere în cazul meu. Puteți utiliza, de asemenea, orice bancă de putere obișnuită și să treceți secțiunea regulatorului sau să utilizați circuitul de mai sus și să folosiți orice baterie de 9V sau 12V pentru robot așa cum se arată în schema de circuit de mai sus. Odată ce conexiunile dvs. sunt terminate, ar arăta cam așa mai jos
Programarea microcontrolerului PIC:
Programarea dvs. PIC pentru a lucra pentru un avoider Obstacle este foarte ușoară. Trebuie doar să citim valoarea acestor trei senzori și să conducem motoarele în consecință. În acest proiect folosim un senzor cu ultrasunete. Am învățat deja cum să interacționăm cu ultrasunete cu microcontrolerul PIC, dacă sunteți nou aici, reveniți cu drag la acel tutorial pentru a înțelege cum funcționează un senzor SUA cu un PIC, deoarece voi omite detaliile despre acesta pentru a evita repetarea.
Programul complet sau acest robot este dat la sfârșitul acestei pagini, am explicat mai jos bucățile importante ale programului de mai jos.
După cum știm, toate programele încep cu declarațiile pinului de intrare și ieșire. Aici cei patru pini ai modulului Motor Driver și pinii de declanșare sunt pinii de ieșire, în timp ce pinul Echo și doi pini de ieșire IR vor fi introduși. Ar trebui să inițializăm modulul Timer 1 pentru al utiliza cu senzorul cu ultrasunete.
TRISD = 0x00; // PORTD declarat ca ieșire pentru interfața LCD TRISB1 = 0; // Pinul de declanșare al senzorului SUA este trimis ca pin de ieșire TRISB2 = 1; // Pinul de ecou al senzorului SUA este setat ca pin de intrare TRISB3 = 0; // RB3 este pinul de ieșire pentru LED TRISD2 = 1; TRISD3 = 1; // Ambii pini ai senzorului IR sunt declarați ca intrare TRISC4 = 0; TRISC5 = 0; // Motorul 1 pini declarat ca ieșire TRISC6 = 0; TRISC7 = 0; // Motor 2 pini declarați ca ieșire T1CON = 0x20;
În acest program ar trebui să verificăm destul de des distanța dintre senzor și obiect, așa că am creat o funcție numită calculate_distance () în interiorul căreia vom măsura distanța prin metoda discutată în tutorialul de interfață a senzorilor din SUA. Codul este prezentat mai jos
void calculate_distance () // funcție pentru a calcula distanța US {TMR1H = 0; TMR1L = 0; // ștergeți biții timerului Trigger = 1; __delay_us (10); Declanșator = 0; while (Ecou == 0); TMR1ON = 1; while (Ecou == 1); TMR1ON = 0; time_taken = (TMR1L - (TMR1H << 8)); distanță = (0,0272 * timp_dupus) / 2; }
Următorul pas ar fi compararea valorilor senzorului ultrasonic și a senzorului IR și mutarea robotului în consecință. Aici În acest program am folosit o valoare de cm ca distanță critică sub care robotul ar trebui să înceapă să facă schimbări de direcție. Puteți utiliza valorile preferate. Dacă nu există obiect, robotul se mișcă înainte
if (distanță> 5) {RC4 = 0; RC5 = 1; // Motorul 1 înainte RC6 = 1; RC7 = 0; // Motor 2 înainte}
Dacă este detectat un obiect, atunci distanța va merge sub cm. În acest caz, luăm în considerare valorile senzorului ultrasonic stânga și dreapta. Pe baza acestei valori, decidem fie să virăm la stânga, fie la dreapta. Se utilizează o întârziere de ms, astfel încât schimbarea direcției să fie vizibilă.
if (RD2 == 0 && RD3 == 1 && distance <= 5) // Senzorul din stânga este blocat {back_off (); RC4 = 1; RC5 = 1; // Motor 1 oprire RC6 = 1; RC7 = 0; // Motorul 2 înainte __delay_ms (500); } calculate_distance (); if (RD2 == 1 && RD3 == 0 && distance <= 5) // Senzorul din dreapta este blocat {back_off (); RC4 = 0; RC5 = 1; // Motorul 1 înainte RC6 = 1; RC7 = 1; // Opriți motorul 2 __delay_ms (500); }
Uneori, senzorul cu ultrasunete ar detecta un obiect, dar nu ar exista niciun obiect detectat de senzorii IR. În acest caz, robotul se întoarce în mod implicit la stânga. De asemenea, îl puteți face să vireze la dreapta sau într-o direcție aleatorie, în funcție de preferințe. Dacă există obiecte pe ambele părți, atunci îl facem să meargă înapoi. Codul pentru a face același lucru este prezentat mai jos.
calculate_distance (); if (RD2 == 0 && RD3 == 0 && distance <= 5) // Ambele senzori sunt deschise {back_off (); RC4 = 0; RC5 = 1; // Motorul 1 înainte RC6 = 1; RC7 = 1; // Motorul 2 oprește __delay_ms (500); } calculate_distance (); if (RD2 == 1 && RD3 == 1 && distance <= 5) // Ambele senzori sunt blocate {back_off (); RC4 = 1; RC5 = 0; // Motor 1 invers RC6 = 1; RC7 = 1; // Opriți motorul 2 __delay_ms (1000); }
Robot de evitare a obstacolelor în acțiune:
Funcționarea proiectului este foarte interesantă și distractivă de urmărit. Odată ce ați terminat cu circuitul și codul, doar porniți botul și lăsați-l la sol. Ar trebui să poată identifica obstacolele și să le evite inteligent. Dar, aici vine partea distractivă. Puteți modifica codul și îl puteți face să facă mai multe lucruri, cum ar fi să-l evitați pe o scară, să-l faceți mai inteligent stocând ture prețioase și ce nu?
Acest robot vă va ajuta să înțelegeți elementele de bază ale programării și să aflați cum va răspunde un hardware real la codul dvs. Este întotdeauna distractiv să programați acest robot și să urmăriți cum se comportă pentru cod în lumea reală.
Aici am folosit aceeași placă de perfecționare PIC pe care am realizat-o pentru LED-ul intermitent folosind microcontrolerul PIC și am folosit această placă în alte proiecte din seria de tutoriale PIC.
Robotul dvs. ar trebui să arate ceva similar cu cel prezentat în imaginea de mai sus. Funcționarea completă a acestui proiect este prezentată în videoclipul de mai jos.
Sper că ați înțeles proiectul și v-a plăcut să construiți unul. Dacă aveți îndoieli sau v-ați blocat, puteți folosi secțiunea de comentarii pentru a posta întrebările dvs. și voi încerca tot posibilul să răspund la ele.