Differences

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

Link to this comparison view

pm:prj2025:apredescu:cristian.deda [2025/05/17 01:33]
cristian.deda
pm:prj2025:apredescu:cristian.deda [2025/05/31 22:42] (current)
cristian.deda [Rezultate Obţinute]
Line 45: Line 45:
 ===== Software Design ===== ===== Software Design =====
  
 +===== Descrierea generala a aplicatiei (Firmware) =====
  
-<note tip> +Aceasta aplicatie controleaza un robot mobil autonom ​(„Willy”), dotat cu
-Descrierea codului aplicaţiei ​(firmware): +  * Senzori ultrasonici pentru detectia obstacolelor. 
-  * mediu de dezvoltare ​(if any) (e.gAVR Studio, CodeVisionAVR+  * Senzori infrarosu ​(IRpentru urmarirea unui obiect ​(de exemplu, o mana). 
-  * librării şi surse 3rd-party (e.gProcyon AVRlib+  * Motoare DC pentru miscare si manevrare. 
-  * algoritmi şi structuri ​pe care plănuiţi să le implementaţi +  * Buzzer pentru semnalizare sonora. 
-  * (etapa 3) surse şi funcţii ​implementate +  * Ecran LCD I2C 16x2 pentru afisarea starii robotului. 
-</​note>​+ 
 +Robotul functioneaza in mod **follow-me**:​ detecteaza si urmareste un obiect apropiat. Se opreste sau se retrage cand identifica un obstacol. 
 + 
 +===== Mediu de dezvoltare ===== 
 + 
 +  * **Platforma hardware**: Arduino UNO (ATmega328P
 +  * **Mediu de dezvoltare**:​ Arduino IDE 2.x 
 +  * **Limbaj de programare**:​ C++ (Arduino Sketch) 
 +  * **Placa suport**: Arduino UNO R3 
 + 
 +===== Librarii si surse 3rd-party ​utilizate ===== 
 + 
 +^ Biblioteca ^ Descriere ^ Link ^ 
 +| `NewPing` | Permite masurarea precisa a distantei cu senzorul ultrasonic HC-SR04. | [[https://​bitbucket.org/​teckel12/​arduino-new-ping/​wiki/​Home|NewPing Library]] | 
 +| `Wire` | Protocol I2C pentru comunicatia cu ecranul LCD. | Inclusa in Arduino IDE | 
 +| `LiquidCrystal_I2C` | Suport pentru afisaj LCD 16x2 cu interfata I2C. | [[https://​github.com/​johnrickman/​LiquidCrystal_I2C|LiquidCrystal_I2C]] | 
 + 
 +===== Algoritmi si structuri implementate ===== 
 + 
 +==== Algoritmi principali ==== 
 +  * **Controlul miscarii robotului:​** 
 +    * Functia `rotateMotor()` permite controlul diferential al motoarelor, in functie de detectiile senzorilor IR sau ultrasonic. 
 +    * Viteza ajustabila: `MAX_SPEED` + `ADJUST_SPEED` (forward) sau diferentiere la viraje (`+/-`). 
 + 
 +  * **Detectia obstacolului cu senzor ultrasonic:​** 
 +    * Cu biblioteca `NewPing`, masuram distanta in centimetri. 
 +    * Daca distanta < 2 cm, se activeaza un semnal sonor (`buzzer`si robotul se opreste, se retrage (da putin cu spatele), apoi se opreste complet. 
 + 
 +  * **Urmarirea obiectului cu senzori IR:** 
 +    * Daca ambii senzori IR detecteaza obiect (LOW), robotul merge inainte (`Chasing`). 
 +    * Daca doar un senzor detecteaza (LOW), robotul vireaza in directia respectiva (`Turning Left` / `Turning Right`). 
 +    * Daca nu detecteaza, se opreste (`Waiting...`). 
 + 
 +  * **Afisarea starii ​pe LCD:** 
 +    * Starea robotului (`Chasing`, `Turning`, `Obstacle`, `Waiting`) este afisata impreuna cu caractere customizate (emoji, sageti). 
 +    * Bara de progres (`distance bar`) arata distanta fata de obstacol (linie pe randul 2 al LCD). 
 + 
 +==== Structuri de date ==== 
 +  * Variabile globale pentru: 
 +    * Viteze motoare ​(`currentRightSpeed`,​ `currentLeftSpeed`). 
 +    * Stare obstacol (`check_close`). 
 +    * Ultimul caracter afisat pe ecran (`lastStatus` - optional pentru optimizare). 
 +  * Caractere custom (`byte SmileyFaceChar[]`,​ `byte StopChar[]`,​ `byte leftArrowChar[]`,​ `byte rightArrowChar[]`). 
 + 
 +===== Etapa 3: Surse si functii implementate ===== 
 + 
 +==== Fisiere sursa ==== 
 +  * `main.ino` – Codul principal (Arduino Sketch)
 + 
 +==== Functii ​implementate ​==== 
 + 
 +^ Functie ^ Rol ^ 
 +| `setup()` | Initializeaza pinii, LCD-ul, motoarele, senzorii. | 
 +| `loop()` | Logica principala a programului:​ detectie obstacole, urmarire IR, update LCD, buzzer. | 
 +| `rotateMotor()` | Controleaza directia si viteza motoarelor in functie de parametrii. | 
 +| `displaySpeed()` (nefolosit) | Afiseaza viteza pe LCD (optional, comentat). | 
 +| `lcd.createChar()` | Definirea caracterelor custom pentru LCD (smiley, stop, sageti). |
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +  * In urma realizarii ​proiectului, am obtinut un sistem functional care controleaza o **masina autonoma** capabila sa efectueze urmatoarele actiuni: 
-Care au fost rezultatele obţinute în urma realizării ​proiectului ​vostru+    * **Urmarire**:​ Masina detecteaza un obiect (mana) in fata senzorilor IR si incepe sa-l urmareasca, ajustandu-si directia in functie de pozitia obiectului
-</​note>​+    * **Afisare pe LCD**: Mesajele afisate pe ecranul LCD reflecta starea curenta a masinii, precum: 
 +      * ''​Chasing''​ (urmarire) 
 +      * ''​Turning Left''​ (viraj la stanga) 
 +      * ''​Turning Right''​ (viraj la dreapta) 
 +      * ''​Waiting...''​ (asteptare) 
 +      * ''​OBSTACLE AHEAD!''​ (obstacol detectat) 
 +    * **Evitarea obstacolelor**:​ 
 +      * Daca senzorul ultrasonic detecteaza un obstacol prea aproape (sub 2 cm), masina: 
 +        * Opreste motoarele. 
 +        * Afiseaza mesajul de avertizare pe LCD. 
 +        * Emite un **bip** de avertizare prin buzzer. 
 +        * Executa o miscare de **recul** (da putin cu spatele) pentru a se indeparta de obstacol.
  
 +  * Sistemul integreaza mai multe concepte hardware si software:
 +    * Controlul motoarelor cu semnale **PWM**.
 +    * Senzori IR pentru detectarea obiectelor.
 +    * Senzor ultrasonic pentru masurarea distantei.
 +    * Buzzer pentru semnalizare sonora.
 +    * Ecran LCD pentru afisare in timp real a starii.
 ===== Concluzii ===== ===== Concluzii =====
  
pm/prj2025/apredescu/cristian.deda.1747434798.txt.gz · Last modified: 2025/05/17 01:33 by cristian.deda
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