Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2025:eradu:cristian.tudor1607 [2025/05/30 04:23]
cristian.tudor1607
pm:prj2025:eradu:cristian.tudor1607 [2025/05/30 04:56] (current)
cristian.tudor1607 [Jurnal]
Line 18: Line 18:
  
 ===== Hardware Design ===== ===== Hardware Design =====
- 
-<note tip> 
-Aici puneţi tot ce ţine de hardware design: 
-  * listă de piese 
-  * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri,​ e.g. http://​www.captain.at/​electronic-atmega16-mmc-schematic.png) 
-  * diagrame de semnal ​ 
-  * rezultatele simulării 
-</​note>​ 
  
 ==Lista de piese== ==Lista de piese==
Line 35: Line 27:
   * [[https://​www.optimusdigital.ro/​ro/​motoare-altele/​3265-motor-in-miniatura.html?​search_query=mini+motor&​results=101|Motor in miniatura 3-6V]]   * [[https://​www.optimusdigital.ro/​ro/​motoare-altele/​3265-motor-in-miniatura.html?​search_query=mini+motor&​results=101|Motor in miniatura 3-6V]]
   * [[https://​www.optimusdigital.ro/​ro/​elice/​12120-elice-pentru-jucarii.html?​search_query=elice&​results=129|Elice]]   * [[https://​www.optimusdigital.ro/​ro/​elice/​12120-elice-pentru-jucarii.html?​search_query=elice&​results=129|Elice]]
-  * [[https://​www.itgalaxy.ro/​acumulator-extern/​joyroom/​jr-pbf12-10000mah-12w-1-x-usb-c-2-x-usb-a-negru-770632/?​gad_source=1&​gad_campaignid=20294441435&​gbraid=0AAAAAD84GZYJQYyTwte-AX6IZuU7X43yJ&​gclid=CjwKCAjwi-DBBhA5EiwAXOHsGchkSPpvP4oJ3iYhMdPkSbrDAXcBf_b503_fgRHLNAQVFNOCjLnBHxoCXdMQAvD_BwE]] ​Powerbank+  * [[https://​www.itgalaxy.ro/​acumulator-extern/​joyroom/​jr-pbf12-10000mah-12w-1-x-usb-c-2-x-usb-a-negru-770632/?​gad_source=1&​gad_campaignid=20294441435&​gbraid=0AAAAAD84GZYJQYyTwte-AX6IZuU7X43yJ&​gclid=CjwKCAjwi-DBBhA5EiwAXOHsGchkSPpvP4oJ3iYhMdPkSbrDAXcBf_b503_fgRHLNAQVFNOCjLnBHxoCXdMQAvD_BwE| Powerbank]]
  
 ==Schema electrica== ==Schema electrica==
Line 94: Line 86:
 === Structura codului === === Structura codului ===
 Robotul Roomba va funcționa pe baza unui FSM, cu următoarele stări: Robotul Roomba va funcționa pe baza unui FSM, cu următoarele stări:
-   * IDLE - Stare de setup. Robotul este oprit și poziționează senzorul ultrasonic în poziția centrală. Trece apoi în starea de deplasare înainte (GO_FORWARD). +   * **IDLE** - Stare de setup. Robotul este oprit și poziționează senzorul ultrasonic în poziția centrală. Trece apoi în starea de deplasare înainte (GO_FORWARD). 
-   * GO_FORWARD - Robotul se deplasează înainte continuu. La intervale regulate (CHECK_INTERVAL),​ măsoară distanța față de obstacol. Dacă distanța este sub un prag critic (CRITICAL_DISTANCE),​ trece în starea GO_BACKWARD. Dacă distanța este sub un prag mai mare (DIST_THRESHOLD),​ trece în starea OBSTACLE_DETECTED. Pragul critic scade șansa robotului de a se bloca in colțuri sau locuri inaccesibile pentru el. +   * **GO_FORWARD** - Robotul se deplasează înainte continuu. La intervale regulate (CHECK_INTERVAL),​ măsoară distanța față de obstacol. Dacă distanța este sub un prag critic (CRITICAL_DISTANCE),​ trece în starea GO_BACKWARD. Dacă distanța este sub un prag mai mare (DIST_THRESHOLD),​ trece în starea OBSTACLE_DETECTED. Pragul critic scade șansa robotului de a se bloca in colțuri sau locuri inaccesibile pentru el. 
-   * GO_BACKWARD - Robotul se deplasează înapoi pentru o perioadă fixă (BACKWARD_TIME) pentru a se distanța de obstacol. La finalul perioadei, trece în starea OBSTACLE_DETECTED. +   * **GO_BACKWARD** - Robotul se deplasează înapoi pentru o perioadă fixă (BACKWARD_TIME) pentru a se distanța de obstacol. La finalul perioadei, trece în starea OBSTACLE_DETECTED. 
-   * OBSTACLE_DETECTED - Robotul oprește motoarele și pregătește scanarea mediului în jur pentru a decide o direcție sigură de deplasare. Trecerea se face către starea SCAN_ALL. +   * **OBSTACLE_DETECTED** - Robotul oprește motoarele și pregătește scanarea mediului în jur pentru a decide o direcție sigură de deplasare. Trecerea se face către starea SCAN_ALL. 
-   * SCAN_ALL - Robotul efectuează o scanare cu servomotorul în mai multe direcții pentru a colecta date despre distanțele în stânga, centru și dreapta. După scanare, trece în starea DECIDE_DIRECTION. +   * **SCAN_ALL** - Robotul efectuează o scanare cu servomotorul în mai multe direcții pentru a colecta date despre distanțele în stânga, centru și dreapta. După scanare, trece în starea DECIDE_DIRECTION. 
-   ​* ​DEC+   ​* ​**DECIDE_DIRECTION** - Pe baza datelor scanate, robotul determină unghiul optim pentru a vira, calculând un offset față de poziția centrală a servomotorului și durata necesară a virajului. În funcție de direcție, se trece în starea TURN_LEFT sau TURN_RIGHT. 
 +   * **TURN_LEFT** - Robotul efectuează o virare la stânga pentru durata calculată. După finalizarea virajului, oprește motoarele și revine la deplasarea înainte (GO_FORWARD). 
 +   * **TURN_RIGHT** - Robotul efectuează o virare la dreapta pentru durata calculată. După finalizarea virajului, oprește motoarele și revine la deplasarea înainte (GO_FORWARD).
  
  
Line 113: Line 107:
  
 == Măsurarea distanței == == Măsurarea distanței ==
-Funcțiile pentru măsurarea distanței sunt in headerul **Sonar.h**.\\ Am creat un API pentru a controla senzorul ultrasonic, folosind cunoștiințele dobândite in laboratoarele de **GPIO**, **Timere** și **Întreruperi**.+Funcțiile pentru măsurarea distanței sunt in headerul **Sonar.h**.\\ Am creat un API pentru a controla senzorul ultrasonic, folosind cunoștiințele dobândite in laboratoarele de **GPIO**, **Timere** și **Întreruperi**. ​Am vrut sa folosesc Timer2 pentru a măsura timpul fără **millis**, dar suprascrierea ISR-ului de Overflow intervine peste librăria ce expune API-ul pentru motoare si apăreau conflicte. Totuși, am folosit întreruperi pentru măsurarea distanței. 
 <code C> <code C>
 void initSonar(void);​ void initSonar(void);​
-void initTimer2(void);​ 
 void initEchoInterrupt(void);​ void initEchoInterrupt(void);​
- 
 void sendTriggerPulse(void);​ void sendTriggerPulse(void);​
 uint16_t measureDistance(void);​ uint16_t measureDistance(void);​
-void checkObstacle(void);​ 
 </​code>​ </​code>​
  
-**Cum funcționează ?**+<​note>​ 
 +**Cum funcționează ?** \\  
 +Se generează o întrerupere pe pinul la care este legat ECHO al senzorului ultrasonic la fiecare schimbare a semnalului.\\ Când TRIG emite unda, ECHO trece pe HIGH, iar când se întoarce unda, ECHO trece pe LOW. Se retine timestampul pentru fiecare dintre aceste evenimente si se face diferența, pentru a calcula timpul dus-întors al undei. Știind viteza sunetului, si timpul dus-întors,​ putem calcula ușor distanța parcursă. 
 +</​note>​
  
-===== Rezultate Obţinute =====+== Alegerea unei noi direcții ​== 
 +Pentru alegerea unei noi direcții, FSM-ul din main folosește mai multe API-uri, definite in **ServoControl.h**:​
  
-<​note ​tip+<code C> 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru.+void initServoControl(void);​ 
 +void lookAtRightInstant(int angle); 
 +void lookAtLeftInstant(int angle); 
 +void lookCenter(void);​ 
 +void initLookPoints(void);​ 
 +void clearLookPoints(void);​ 
 +void scanAllLookPoints(void);​ 
 +int getBestAngle(void);​ 
 +</​code>​ 
 + 
 +<​note>​ 
 +Robotul alege direcția prin rotirea servomotorului la mai multe unghiuri predefinite pentru a scana distanțele din stânga, centru și dreapta. Pe baza acestor măsurători,​ se selectează unghiul cu cea mai mare distanță liberă, iar robotul se va orienta spre acea direcție pentru a evita obstacolele.
 </​note>​ </​note>​
  
-===== Concluzii ===== 
  
 +
 +===== Rezultate Obţinute =====
 +
 +  * Robotul a fost capabil sa evite obstacole si sa aleagă bine o noua direcție de deplasare.
 +  * Sistemul de vid funcționează parțial – eficiența de aspirare este limitată (aproape inexistentă).
 +  * Controlul motoarelor și al servomotorului este stabil.
 +  * Senzorul ultrasonic detectează corect peretele și obstacolele.
 +
 +===== Concluzii =====
 +Proiectul demonstrează posibilitatea realizării unui robot de curățenie funcțional,​ cu un design modular și scalabil. Limitările țin mai ales de lipsa unui algoritm mai sofisticat pentru detecția și ocolirea obstacolelor,​ precum și de eficiența sistemului de aspirare.
 ===== Download ===== ===== Download =====
  
Line 144: Line 160:
 ===== Jurnal ===== ===== Jurnal =====
  
-<note tip> +== Video demonstrativ == 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. +https://www.youtube.com/shorts/​H-P-53NL3jc 
-</note>+ 
 +== Imagini == 
 + 
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
pm/prj2025/eradu/cristian.tudor1607.1748568209.txt.gz · Last modified: 2025/05/30 04:23 by cristian.tudor1607
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0