- Componente necesare:
- Modul senzor cu ultrasunete:
- Explicația circuitului:
- Cum functioneaza:
- Explicație de programare:
Roboții sunt mașini care reduc eforturile umane în lucrări grele prin automatizarea sarcinilor din industrii, fabrici, spitale etc. executarea unor comenzi folosind controler sau procesor. Dar astăzi suntem aici cu un robot automat care se deplasează în mod autonom, fără evenimente externe, evitând orice obstacol în calea ei, da vorbim despre Obstacol Evitarea Robot. În acest proiect, am folosit driverul Raspberry Pi și Motor pentru a conduce robotul și senzorul cu ultrasunete pentru detectarea obiectelor din calea robotului.
Anterior am acoperit numeroși roboți utili, îi puteți găsi în secțiunea noastră de proiecte de robotică.
Componente necesare:
- Raspberry Pi
- Modul senzor cu ultrasunete HC-SR04
- Șasiu ROBOT complet cu șurub
- DC Motors
- L293D IC
- Roți
- Pâine
- Rezistor (1k)
- Condensator (100nF)
- Conectarea firelor
- Sursa de alimentare sau Power bank
Modul senzor cu ultrasunete:
Un robot care evită obstacole este un robot automat și nu trebuie să fie controlat folosind nicio telecomandă. Aceste tipuri de roboți automatizați au niște senzori de „al șaselea sens”, cum ar fi detectoare de obstacole, detector de sunet, detector de căldură sau detectoare de metale. Aici am făcut detectarea obstacolelor folosind semnale cu ultrasunete. În acest scop, am folosit modulul senzor cu ultrasunete.
Senzorii cu ultrasunete sunt utilizați în mod obișnuit pentru a detecta obiecte și pentru a determina distanța obstacolului față de senzor. Acesta este un instrument excelent pentru a măsura distanța fără niciun contact fizic, cum ar fi Măsurarea nivelului apei în rezervor, măsurarea distanței, robotul de evitare a obstacolelor etc.
Senzorul cu ultrasunete HC-SR04 este utilizat pentru a măsura distanța cuprinsă între 2cm-400cm cu o precizie de 3mm. Modulul senzor este format dintr-un emițător cu ultrasunete, un receptor și un circuit de control. Senzorul cu ultrasunete este format din doi ochi circulari, dintre care unul este utilizat pentru a transmite unda cu ultrasunete și celălalt pentru a-l primi.
Putem calcula distanța obiectului pe baza timpului luat de unda ultrasonică pentru a reveni la senzor. Deoarece timpul și viteza sunetului sunt cunoscute, putem calcula distanța prin următoarele formule.
- Distanță = (Timp x Viteza sunetului în aer (343 m / s)) / 2.
Valoarea este împărțită la două, deoarece valul se deplasează înainte și înapoi, acoperind aceeași distanță. Astfel, timpul pentru a ajunge la obstacol este doar jumătate din timpul total luat.
Deci, am calculat distanța (în centimetri) de obstacol ca mai jos:
pulse_start = time.time () while GPIO.input (ECHO) == 1: # Verificați dacă ECHO este HIGH GPIO.output (led, False) pulse_end = time.time () pulse_duration = pulse_end - pulse_start distance = pulse_duration * 17150 distance = round (distance, 2) avgDistance = avgDistance + distance
În cazul în care impuls_duration este timpul dintre trimiterea și primirea semnalului ultrasonic.
Explicația circuitului:
Circuitul este foarte simplu pentru acest robot de evitare a obstacolelor folosind Raspberry Pi. Un modul senzor cu ultrasunete, utilizat pentru detectarea obiectelor, este conectat la pinii GPIO 17 și 27 din Raspberry Pi. Un driver de motor IC L293D este conectat la Raspberry Pi 3 pentru acționarea motoarelor robotului. Pinii de intrare 2, 7, 10 și 15 ai driverului motorului sunt conectați la pinul Raspberry Pi GPIO numărul 12, 16, 20 și respectiv 21. Aici am folosit două motoare de curent continuu pentru a acționa robotul în care un motor este conectat la pinul de ieșire 3 și 6 al driverului IC motor și un alt motor este conectat la pinul 11 și 14 al driverului IC IC.
Cum functioneaza:
Lucrul acestui robot autonom este foarte ușor. Când robotul este pornit și începe să ruleze, Raspberry Pi măsoară distanțele obiectelor, în fața acestuia, utilizând modulul senzor cu ultrasunete și stochează într-o variabilă. Apoi RPi compară această valoare cu valorile predefinite și ia decizii în consecință pentru a muta robotul la stânga, la dreapta, înainte sau înapoi.
Aici, în acest proiect, am selectat o distanță de 15 cm pentru luarea oricărei decizii de către Raspberry Pi. Acum, ori de câte ori Raspberry Pi ajunge la mai puțin de 15 cm distanță de orice obiect, Raspberry Pi oprește robotul și îl mută înapoi și apoi îl rotește la stânga sau la dreapta. Acum, înainte de a-l deplasa din nou înainte, Raspberry Pi verifică din nou dacă există un obstacol în intervalul de 15 cm distanță, dacă da, apoi repetă din nou procesul anterior, altfel deplasați robotul înainte până când va detecta din nou orice obstacol sau obiect.
Explicație de programare:
Aici folosim limbajul Python pentru program. Înainte de codificare, utilizatorul trebuie să configureze Raspberry Pi. Puteți consulta tutorialele noastre anterioare pentru Noțiuni introductive despre Raspberry Pi și Instalarea și configurarea sistemului de operare Raspbian Jessie în Pi.
Partea de programare a acestui proiect joacă un rol foarte important pentru a efectua toate operațiunile. În primul rând, includem bibliotecile necesare, inițializăm variabilele și definim pinii pentru senzorul cu ultrasunete, motorul și componentele.
import RPi.GPIO ca timp de import GPIO #Import timp bibliotecă GPIO.setwarnings (Fals) GPIO.setmode (GPIO.BCM) TRIG = 17 ECHO = 27……………..
După aceasta, am creat câteva funcții def forward (), def back (), def left (), def right () pentru a muta robotul în direcția înainte, înapoi, respectiv la stânga sau la dreapta și def stop () pentru a opri robotul, verificați funcțiile din Codul de mai jos.
Apoi, în programul principal, am inițiat senzorul cu ultrasunete și am citit timpul dintre transmisia și recepția semnalului și am calculat distanța. Aici am repetat acest proces de 5 ori pentru o precizie mai bună. Am explicat deja procesul de calcul al distanței folosind senzorul cu ultrasunete.
i = 0 avgDistance = 0 for i in range (5): GPIO.output (TRIG, False) time.sleep (0.1) GPIO.output (TRIG, True) time.sleep (0.00001) GPIO.output (TRIG, False) while GPIO.input (ECHO) == 0: GPIO.output (led, False) pulse_start = time.time () while GPIO.input (ECHO) == 1: # Verificați dacă ECHO este HIGH GPIO.output (led, Fals) pulse_end = time.time () pulse_duration = pulse_end - pulse_start distance = pulse_duration * 17150 distance = round (distance, 2) avgDistance = avgDistance + distance
În cele din urmă, dacă robotul găsește un obstacol în fața acestuia, după ce am obținut distanța față de obstacol, am programat robotul să urmeze o rută diferită.
if avgDistance <15: count = count + 1 stop () time.sleep (1) back () time.sleep (1.5) if (count% 3 == 1) & (flag == 0): right () flag = 1 else: left () flag = 0 time.sleep (1.5) stop () time.sleep (1) else: forward () flag = 0
Codul complet pentru acest robot de evitare a obstacolelor Raspberry Pi este prezentat mai jos cu un videoclip demonstrativ.