This shows you the differences between two versions of the page.
pm:prj2023:gpatru:calin.coman [2023/05/30 05:18] calin.coman [Rezultate Obţinute] |
pm:prj2023:gpatru:calin.coman [2023/05/30 06:18] (current) calin.coman [Concluzii] |
||
---|---|---|---|
Line 56: | Line 56: | ||
Proiectul a fost realizat folosind Arduino IDE. | Proiectul a fost realizat folosind Arduino IDE. | ||
+ | Bibliotecile folosite sunt: | ||
+ | * Servo.h (https://github.com/arduino-libraries/Servo) - pentru a putea comanda servomotorul SG-90 | ||
+ | * SharpIR.h (https://github.com/guillaume-rico/SharpIR) - pentru a prelua datele de la senzorul infrarosu GP2Y0A21YK0F | ||
+ | * WiFi.h (https://github.com/espressif/arduino-esp32/blob/master/libraries/WiFi/src/WiFi.h) - pentru a interactiona cu modulul de WiFi de pe ESP32 CAM | ||
+ | Limitarile si setback-urile principale la implementarea software au fost date de senzorul infrarosu. | ||
+ | In primul rand, distanta maxima de recunoastere a unui obstacol de catre acest senzor este de 80 de cm, deci obstacolul trebuie sa se afle relativ aproape pentru ca masina sa-l poata detecta si deci sa il evite. | ||
+ | In al doilea rand, desi in teorie este mai exact decat un senzor ultrasonic, am descoperit ca acest senzor IR are destul de multe spike-uri si intoarce des distante care nu sunt reale. Pentru acest lucru am scris functia getDistance(), care in loc sa citeasca o singura data output-ul analogic, citeste 25 de valori succesive si foloseste media lor aritmetica. | ||
+ | |||
+ | De asemenea, o parte destul de dificila a fost potrivirea valorilor PWM trimise motoarelor (adica viteza) cu timpii de intoarcere pentru a face miscarea masinii naturala. | ||
+ | |||
+ | Descrierea codului pe Arduino: | ||
+ | *In functia de setup() se seteaza toti pinii de output si input (senzorul IR, driver-ul de motoare, etc) si se ataseaza unui buton o intrerupere care va declansa pornirea masinii. Odata ce masina este alimentata, aceasta asteapta apasarea butonului, iar intreuperea generata declanseaza startul. | ||
+ | |||
+ | *In functia de loop() este urmatorul flow: Senzorul IR se uita intai in fata. Daca niciun obstacol nu este detectat, masina merge in linie dreapta. Daca avem un obstacol in fata, senzorul se uita si in stanga si in dreapta si masina alege sa mearga pe calea unde obstacolul este cel mai departat. Daca si in stanga si in dreapta obstacolele sunt aproape, masina se intoarce 180 de grade pentru a iesi din impas. Atunci cand se opreste, LED-ul RGB devine rosu, cand merge, este verde, si cand schimba directia este albastru. | ||
+ | |||
+ | Pentru a incarca cod pe placuta ESP32 CAM, am folosit Arduino-ul ca intermediar, deoarece aceasta nu are un port dedicat. Din cod se configureaza ca modulul WiFi sa fie folosit pentru a crea un AP (Access Point), astfel orice device se poate conecta la reteaua generata de placuta pentru a vedea imaginea live. | ||
+ | |||
+ | Laboratoarele utilizate sunt: Intreruperi, ADC, PWM. | ||
+ | |||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
Line 65: | Line 84: | ||
\\ | \\ | ||
- | [[https://youtu.be/y-nZaCMrqL0|External Link]] | + | https://youtu.be/y-nZaCMrqL0 |
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | A fost interesant proiectul, mi-a placut ca a implicat si partea hardware, lucru care pentru mine cel putin clar nu a fost o treaba usoara. Eu sunt multumit de rezultat, dat fiind si ca am fost foarte presat cu timpul semestrul asta. Din toate probleme pe care le-am avut am invatat ca este esential sa gandesti bine un plan, inainte de a te apuca sa il pui si in aplicare. | ||
===== Download ===== | ===== Download ===== | ||
- | <note warning> | ||
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | ||
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | {{:pm:prj2023:gpatru:331ca_comancalinalexandru_codproiectpm.zip|}} |
- | </note> | + | |
- | ===== Jurnal ===== | ||
- | |||
- | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | ||
- | </note> | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | https://lastminuteengineers.com/l293d-dc-motor-arduino-tutorial/ |
- | </note> | + | |
+ | https://www.instructables.com/How-to-Use-the-Sharp-IR-Sensor-GP2Y0A41SK0F-Arduin/ | ||
+ | |||
+ | https://docs.arduino.cc/learn/electronics/servo-motors | ||
+ | |||
+ | https://randomnerdtutorials.com/program-upload-code-esp32-cam/ | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> |