Differences

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

Link to this comparison view

pm:prj2026:ciprian.popescu0411:235141 [2026/05/18 14:42]
127.0.0.1 external edit
pm:prj2026:ciprian.popescu0411:235141 [2026/05/27 05:01] (current)
rares_ioan.neagu
Line 31: Line 31:
   * 1 × Modul Bluetooth HC-05   * 1 × Modul Bluetooth HC-05
   * 1 × Senzor ultrasonic HC-SR04   * 1 × Senzor ultrasonic HC-SR04
-  * × baterii AA+  * × baterii AA
   * 1 × Mini-breadboard   * 1 × Mini-breadboard
   * n × Jumpere   * n × Jumpere
Line 63: Line 63:
 ===== Software Design ===== ===== Software Design =====
  
 +=== Mediu de dezvoltare și biblioteci ===
  
-<note tip> +Codul a fost scris în C++ folosind extensia PlatformIO din Visual Studio CodeSingura bibliotecă third-party ​folosită este **Arduino.h**care oferă funcțiile de bază pentru interacțiunea cu pinii microcontrollerului ​(digitalWrite,​ analogWrite,​ pinMode, millis etc.), cât șpentru comunicarea cu modulul HC-05 prin portul UART hardware al ATmega328P.
-Descrierea codului aplicaţiei (firmware):​ +
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) +
-  * librării şi surse 3rd-party ​(e.g. Procyon AVRlib) +
-  ​algoritmi şi structuri pe care plănuiţi să le implementaţi +
-  * (etapa 3surse şfuncţii implementate +
-</​note>​+
  
-===== Rezultate Obţinute =====+=== Structura codului ​===
  
-<note tip> +Codul este organizat în jurul unui automat de stări simplu, bazat pe variabila ''​currentCommand'',​ care reține ultima comandă validă primită prin Bluetooth. În fiecare iterație a ''​loop()'',​ microcontrollerul procesează orice comandă nouă sosită, citește distanța față de obstacole și execută acțiunea corespunzătoare sau declanșează evitarea autonomă dacă e cazul. 
-Care au fost rezultatele obţinute ​în urma realizării proiectului vostru+ 
-</note>+Funcțiile principale sunt: 
 + 
 +  * ''​setForwardSpeed()'',​ ''​setBackwardSpeed()'',​ ''​turnLeft()'',​ ''​turnRight()'',​ ''​stopCar()''​ — controlează direcția și viteza motoarelor prin semnale PWM și GPIO către driverul L298N 
 +  * ''​readDistance()''​ — trimite un puls pe TRIG și măsoară durata echo-ului pe ECHO_PIN folosind ''​pulseIn()'',​ convertind rezultatul în centimetri 
 +  * ''​readDistanceStable()''​ — apelează ''​readDistance()''​ de 3 ori și returnează media citirilor valide, ignorând citirile eronate 
 +  * ''​handleAcceleration()''​ — incrementează ''​currentSpeed''​ progresiv la fiecare iterație folosind ''​millis()'',​ fără a bloca execuția cu ''​delay()''​ 
 +  * ''​autonomousEvasion()''​ — oprește mașina, merge înapoi până când distanța față de obstacol depășește ''​SAFE_DISTANCE''​ sau se atinge un timeout de siguranță,​ după care apelează ''​scanAndAlign()''​ 
 +  * ''​scanAndAlign()''​ — rotește mașina spre stânga, măsoară distanța, apoi spre dreapta, măsoară din nou, și se orientează spre direcția cu mai mult spațiu disponibil 
 +  * ''​serialEvent()''​ — funcție apelată automat de framework după fiecare iterație a ''​loop()''​ când au sosit date pe UART, validează comanda primită și o pune într-un buffer volatil  
 + 
 +=== Element de noutate === 
 + 
 +Elementul care diferențiază acest proiect de o mașină RC simplă este mecanismul de evitare autonomă a obstacolelor. Când mașina detectează un obstacol la mai puțin de 15cm în față în timp ce primește comanda de mers înainte, preia controlul autonom: se oprește, merge înapoi până ajunge la o distanță sigură, scanează stânga și dreapta și se orientează spre direcția cu mai mult spațiu. După finalizarea manevrei, returnează controlul utilizatorului. Un alt element notabil este accelerarea progresivă la pornire, care simulează comportamentul unei mașini reale. 
 + 
 +=== Funcționalități din laborator === 
 + 
 +  * **Lab 1 — UART**: comunicarea cu modulul Bluetooth HC-05 se face prin portul UART hardware al ATmega328P (PD0/PD1), la 9600 bauds 
 +  * **Lab 2 — Întreruperi**:​ recepția comenzilor Bluetooth este gestionată prin ''​serialEvent()'',​ care este apelată automat de framework pe baza întreruperii hardware USART_RX, imediat după fiecare iterație a ''​loop()'';​ comenzile sunt validate și puse într-un buffer volatil, decuplând recepția de execuția propriu-zisă 
 +  * **Lab 3 — Timere/​PWM**:​ ''​analogWrite()''​ este folosit pe pinii PD5, PD6, PB1, PB2 pentru a controla viteza motoarelor; ''​millis()''​ este folosit în ''​handleAcceleration()''​ pentru a incrementa viteza non-blocant 
 + 
 +=== Calibrarea senzorului === 
 + 
 +Pragurile de distanță ​au fost determinate experimental. Threshold-ul de oprire a fost setat la 15cm — suficient de aproape ca mașina să nu se oprească prea devreme, dar suficient de departe ca motoarele să aibă timp să se oprească înainte de impact. Distanța de siguranță pentru terminarea manevrei de evitare a fost setată la 30cm, oferind suficient spațiu după ce mașina a ieșit din zona de pericol. Citirea distanței se face ca medie a 3 măsurători consecutive pentru a elimina ecourile false ale senzorului HC-SR04. 
 + 
 +=== Optimizări === 
 + 
 +  * Citirea distanței este plasată după procesarea comenzii Bluetooth ​în ''​loop()'',​ astfel încât comenzile să fie preluate imediat, fără să aștepte finalizarea celor 3 citiri ale senzorului
 +  * Accelerarea este implementată non-blocant cu ''​millis()''​ în loc de ''​delay()'',​ astfel încât senzorul și UART-ul să fie în continuare procesate în timp ce viteza crește. 
 +  * Comenzile primite în timpul manevrei autonome sunt ignorate — buffer-ul este golit la finalul manevrei, pentru a evita executarea unor comenzi acumulate în timp ce mașina era în control autonom. 
 +  * Comenzile Bluetooth sunt validate în ''​serialEvent()''​ înainte de a fi acceptate — doar caracterele din setul ''​FBLRS''​ sunt procesate, ignorând zgomotul de pe linie. 
 + 
 +=== Demo === 
 + 
 +Un demo video al proiectului poate fi găsit [[https://​youtube.com/​shorts/​jJCe7olzHS4|aici]].
  
 ===== Concluzii ===== ===== Concluzii =====
 +
 +  * Proiectul și-a atins obiectivul principal: o mașină 4WD funcțională,​ controlabilă de la distanță prin Bluetooth, cu detecție și evitare autonomă a obstacolelor.
 +  * Mecanismul de evitare autonomă funcționează fiabil, oprind mașina și alegând automat direcția cu mai mult spațiu disponibil.
 +  * Accelerarea progresivă adaugă un comportament mai natural la pornire, apropiind mașina de comportamentul unui vehicul real.
 +  * Proiectul poate servi ca punct de plecare pentru oricine vrea să înceapă cu microcontrollere,​ combinând mai multe concepte (UART, PWM, întreruperi,​ senzoristica) într-un rezultat concret și distractiv.
 +
  
 ===== Download ===== ===== Download =====
  
-<note warning>​ +Pentru testare, codul proiectului poate fi gasit în acest [[https://github.com/​rneag/​touring-car|repo]].
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute ​în urma realizării proiectuluisurse, scheme, etcUn 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**. +===== Bibliografie/Resurse =====
-</note>+
  
-===== Jurnal =====+=== Resurse Software ​===
  
-<note tip> +  * [[https://​www.youtube.com/​watch?​v=Pqs-3GgWW3s|Tutorial YouTube — Arduino 4WD Robot Car]] — punct de plecare pentru structura proiectului 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului+  * [[https://​play.google.com/​store/​apps/​details?​id=com.broxcode.arduinobluetoothfree|Arduino Bluetooth Control]] — aplicația Android folosită pentru controlul mașinii 
-</note>+  * [[https://​platformio.org/​|PlatformIO]] — mediu de dezvoltare 
 +  * [[https://​www.arduino.cc/​reference/​en/​|Arduino Reference]] — documentație funcții Arduino
  
-===== Bibliografie/​Resurse ​=====+=== Resurse ​Hardware ​===
  
-<​note>​ +  * [[https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|ATmega328P Datasheet]] — Microchip 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +  ​[[https://​www.handsontec.com/​dataspecs/​L298N%20Motor%20Driver.pdf|L298N Motor Driver Datasheet]] 
-</note>+  ​[[https://​cdn.datasheetspdf.com/​pdf-down/​H/​C/​-/​HC-SR04-ETC.pdf|HC-SR04 Ultrasonic Sensor Datasheet]] 
 +  * [[https://​components101.com/​sites/​default/​files/​component_datasheet/​HC-05%20Datasheet.pdf|HC-05 Bluetooth Module Datasheet]]
  
 <​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>​
  
pm/prj2026/ciprian.popescu0411/235141.1779104544.txt.gz · Last modified: 2026/05/27 04:53 (external edit)
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