- Cum se construiește robotul care evită obstacolele folosind senzorul cu ultrasunete
- Componente necesare
- Diagrama circuitului
- Obstacol care evită robotul folosind Arduino - Code
Robotul de evitare a obstacolelor este un dispozitiv inteligent care poate simți automat obstacolul din fața acestuia și le poate evita rotindu-se în altă direcție. Acest design permite robotului să navigheze într-un mediu necunoscut evitând coliziunile, care este o cerință primară pentru orice robot mobil autonom. Aplicarea robotului de evitare a obstacolelor nu este limitată și este utilizată acum în majoritatea organizațiilor militare, ceea ce ajută la îndeplinirea multor sarcini riscante care nu pot fi efectuate de niciun soldat.
Am construit anterior robotul de evitare a obstacolelor folosind Raspberry Pi și folosind microcontrolerul PIC. De data aceasta vom construi un robot care să evite obstacolele folosind un senzor cu ultrasunete și Arduino. Aici se folosește un senzor cu ultrasunete pentru a detecta obstacolele din cale, calculând distanța dintre robot și obstacol. Dacă robotul găsește orice obstacol, acesta schimbă direcția și continuă să se miște.
Cum se construiește robotul care evită obstacolele folosind senzorul cu ultrasunete
Înainte de a construi robotul, este important să înțelegeți cum funcționează senzorul cu ultrasunete, deoarece acest senzor va avea un rol important în detectarea obstacolelor. Principiul de bază din spatele funcționării senzorului cu ultrasunete este de a nota timpul necesar senzorului pentru a transmite fasciculele cu ultrasunete și pentru a primi fasciculele cu ultrasunete după ce a lovit suprafața. Apoi, distanța este calculată folosind formula. În acest proiect, este utilizat senzorul cu ultrasunete HC-SR04 disponibil pe scară largă. Pentru a utiliza acest senzor, va fi urmată o abordare similară explicată mai sus.
Deci, pinul Trig al HC-SR04 este ridicat pentru cel puțin 10 noi. Un fascicul sonic este transmis cu 8 impulsuri de 40KHz fiecare.
Semnalul lovește apoi suprafața și revine înapoi și este capturat de receptorul Echo pin al HC-SR04. Știftul Echo se ridicase deja la momentul trimiterii.
Timpul luat de fascicul pentru a reveni înapoi este salvat în variabilă și convertit la distanță folosind calcule adecvate, cum ar fi mai jos
Distanță = (Timp x Viteza sunetului în aer (343 m / s)) / 2
Am folosit senzori cu ultrasunete în multe proiecte, pentru a afla mai multe despre senzorul cu ultrasunete, pentru a verifica alte proiecte legate de senzorul cu ultrasunete.
Componentele acestui robot care evită obstacolele pot fi găsite cu ușurință. Pentru a realiza șasiu, orice șasiu de jucărie poate fi folosit sau poate fi personalizat.
Componente necesare
- Arduino NANO sau Uno (orice versiune)
- Senzor cu ultrasunete HC-SR04
- Modulul driverului motorului LM298N
- Motoare 5V DC
- Baterie
- Roți
- Şasiu
- Sârme jumper
Diagrama circuitului
Schema completă a circuitului pentru acest proiect este prezentată mai jos, deoarece puteți vedea că folosește un nano Arduino. Dar putem, de asemenea, să construim un robot care evită obstacolele care utilizează Arduino UNO cu același circuit (urmați același pinout) și cod.
Odată ce circuitul este gata, trebuie să ne construim obstacolele pentru a evita mașina, asamblând circuitul deasupra unui șasiu robotizat, așa cum se arată mai jos.
Obstacol care evită robotul folosind Arduino - Code
Programul complet cu un videoclip demonstrativ este dat la sfârșitul acestui proiect. Programul va include configurarea modulului HC-SR04 și transmiterea semnalelor către pinii motorului pentru a deplasa direcția motorului în consecință. Nu vor fi utilizate biblioteci în acest proiect.
Mai întâi definiți trig și ecoul pinului HC-SR04 în program. În acest proiect, pinul trig este conectat la GPIO9, iar pinul echo este conectat la GPIO10 al Arduino NANO.
int trigPin = 9; // trig pin de HC-SR04 int echoPin = 10; // Pinul de ecou al HC-SR04
Definiți pinii pentru intrarea modulului driverului motorului LM298N. LM298N are 4 pini de intrare de date folosiți pentru a controla direcția motorului conectat la acesta.
int revleft4 = 4; // Mișcarea inversă a motorului stâng int fwdleft5 = 5; // Mișcarea ForWarD a motorului stâng int revright6 = 6; // Mișcarea inversă a motorului drept int fwdright7 = 7; // Mișcarea ForWarD a motorului drept
În funcția setup () , definiți direcția datelor pinilor GPIO utilizați. Cei patru pini ai motorului și pinul de declanșare sunt setați ca OUTPUT și Echo Pin sunt setați ca intrare.
pinMode (revleft4, OUTPUT); // setați pinii motorului ca pin pin de ieșire (fwdleft5, OUTPUT); pinMode (revright6, OUTPUT); pinMode (fwdright7, OUTPUT); pinMode (trigPin, OUTPUT); // setați pinul trig ca pin pin de ieșire (echoPin, INPUT); // setați pinul de ecou ca intrare pentru a captura undele reflectate
În funcția loop () , obțineți distanța de la HC-SR04 și, pe baza distanței, mutați direcția motorului. Distanța va arăta distanța obiectului care vine în fața robotului. Distanța este luată prin explozia unui fascicul de ultrasunete de până la 10 noi și primirea după 10us. Pentru a afla mai multe despre măsurarea distanței utilizând senzorul cu ultrasunete și Arduino, urmați linkul.
digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); // trimite unde pentru 10 us delayMicroseconds (10); durata = pulseIn (echoPin, HIGH); // primește distanța undelor reflectate = durata / 58,2; // convertiți la întârziere la distanță (10);
Dacă distanța este mai mare decât distanța definită înseamnă că nu există obstacol în calea sa și se va deplasa în direcția înainte.
if (distanță> 19) { digitalWrite (fwdright7, HIGH); // merge înainte digitalWrite (revright6, LOW); digitalWrite (fwdleft5, HIGH); digitalWrite (revleft4, LOW); }
Dacă distanța este mai mică decât distanța definită pentru a evita obstacolul înseamnă că există un obstacol în față. Deci, în această situație, robotul se va opri pentru o vreme și se va deplasa înapoi după aceea, se va opri din nou pentru o vreme și apoi se va întoarce în altă direcție.
if (distanță <18) { digitalWrite (fwdright7, LOW); // Opriți digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); întârziere (500); digitalWrite (fwdright7, LOW); // movebackword digitalWrite (revright6, HIGH); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, HIGH); întârziere (500); digitalWrite (fwdright7, LOW); // Opriți digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); întârziere (100); digitalWrite (fwdright7, HIGH); digitalWrite (revright6, LOW); digitalWrite (revleft4, LOW); digitalWrite (fwdleft5, LOW); întârziere (500); }
Deci, astfel robotul poate evita obstacolele din calea sa, fără a se bloca nicăieri. Găsiți codul complet și videoclipul de mai jos.