Differences

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

Link to this comparison view

pm:prj2025:fstancu:dan.vrinceanu [2025/05/28 00:51]
dan.vrinceanu [Bibliografie/Resurse]
pm:prj2025:fstancu:dan.vrinceanu [2025/05/28 09:28] (current)
dan.vrinceanu [Main application flow]
Line 77: Line 77:
   * Mașina oprește orice mișcare și revine în modul manual.   * Mașina oprește orice mișcare și revine în modul manual.
   * LCD-ul afișează din nou: Mod: Manual   * LCD-ul afișează din nou: Mod: Manual
 +
 +==== Motivația Alegerii Bibliotecilor ====
 +
 +=== Arduino Libraries ===
 +
 +  ==== Motivația Alegerii Bibliotecilor ====
 +
 +=== ESP32 Robotics Libraries ===
 +
 +  #include <​DabbleESP32.h> ​      // Control Bluetooth cu aplicația mobilă Dabble (GamePad virtual)  ​
 +  #include <​ESP32Servo.h> ​       // Compatibilitate PWM pentru control precis al servomotoarelor pe ESP32  ​
 +  #include <​NewPing.h> ​          // Măsurători rapide și stabile cu senzorul ultrasonic HC-SR04  ​
 +  #include <​Wire.h> ​             // Comunicație I²C între ESP32 și periferice  ​
 +  #include <​LiquidCrystal_I2C.h>​ // Afișare text pe LCD 16x2 cu interfață I²C  ​
 +
 +Justificare:  ​
 +Am ales aceste biblioteci pentru a realiza un sistem robotic autonom cu control manual prin Bluetooth și feedback vizual.
 +
 +- `DabbleESP32` permite interacțiunea prin aplicația mobilă fără componente fizice externe.  ​
 +- `ESP32Servo` este necesară pentru compatibilitate cu PWM-ul specific ESP32, esențial în orientarea senzorului ultrasonic.  ​
 +- `NewPing` asigură măsurători eficiente ale distanței fără blocaje, utile pentru evitarea obstacolelor.  ​
 +- `Wire` este standard pentru comunicație I²C, permițând integrarea simplă a mai multor senzori sau afișaje.  ​
 +- `LiquidCrystal_I2C` oferă un mod convenabil de a afișa mesaje de stare, diagnostic sau feedback pentru utilizator.
 +
 +==== Laboratoarele ====
 +
 +=== Laboratorul 0: GPIO ===
 +Folosit pentru controlul pinilor digitali – pornirea/​opirea motoarelor, citirea stării senzorului IR.
 +
 +=== Laboratorul 1: UART ===
 +Utilizat pentru comunicarea serială cu computerul prin Serial.begin() – afişează mesaje de stare și debug.
 +
 +=== Laboratorul 3: Timere. PWM ===
 +PWM este folosit pentru a controla poziția servomotorului (ex: rotirea senzorului ultrasonic pentru detectarea obstacolelor).
 +
 +===  Laboratorul 6: I2C ===
 +
 +Folosit pentru comunicarea cu ecranul LCD 1602 prin interfața I2C – afişează mesaje despre obstacole, prăpastii sau conexiunea cu aplicația.
 +
 +==== Element de Noutate al Proiectului ====
 +
 +Integrarea controlului manual prin Bluetooth (Dabble) cu un sistem autonom de evitare a obstacolelor și prăpastiilor.  ​
 +Robotul poate schimba direcția și viteza în timp real, oferind feedback pe LCD și folosind un servomotor pentru scanare laterală.  ​
 +Această combinație de autonomie și interactivitate mobilă face proiectul versatil și inovator.
 +
 +==== Calibrarea senzorilor ====
 +Senzor ultrasonic (HC-SR04)
 +Am setat o distanță maximă de detecție (200 cm) și un prag pentru obstacol (20 cm).
 +Am testat valorile în monitorul serial pentru a verifica funcționarea corectă.
 +Senzor IR
 +Am calibrat detectarea marginii ca semnal LOW.
 +Am verificat comportamentul apropiind senzorul de o margine (ex. masă).
 +Servomotor + senzor ultrasonic
 +Am setat unghiuri fixe (50° și 130°) pentru scanare laterală.
 +Am verificat că senzorul măsoară distanța corect în ambele direcții.
 +
  
 ===== Main application flow ===== ===== Main application flow =====
Line 217: Line 273:
 void moveForward() void moveForward()
 { {
-  ​digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); +  ​GPIO.out_w1ts = (1 << ​IN1) (1 << IN3); // Set IN1 și IN3 HIGH 
-  ​digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);+  ​GPIO.out_w1tc = (1 << IN2(1 << ​IN4); // Set IN2 și IN4 LOW
   Serial.println("​Înainte"​);​   Serial.println("​Înainte"​);​
 } }
Line 224: Line 280:
 void moveBackward() void moveBackward()
 { {
-  ​digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); +  ​GPIO.out_w1ts = (1 << IN2(1 << IN4); // Set IN2 și IN4 HIGH 
-  ​digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);+  ​GPIO.out_w1tc = (1 << IN1(1 << IN3); // Set IN1 și IN3 LOW
   Serial.println("​Înapoi"​);​   Serial.println("​Înapoi"​);​
 } }
Line 231: Line 287:
 void turnLeft() void turnLeft()
 { {
-  ​digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); +  ​GPIO.out_w1ts = (1 << IN2(1 << IN3); // IN2 și IN3 HIGH 
-  ​digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);+  ​GPIO.out_w1tc = (1 << IN1(1 << ​IN4); // IN1 și IN4 LOW
   Serial.println("​Stânga"​);​   Serial.println("​Stânga"​);​
 } }
Line 238: Line 294:
 void turnRight() void turnRight()
 { {
-  ​digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); +  ​GPIO.out_w1ts = (1 << ​IN1) (1 << IN4); // IN1 și IN4 HIGH 
-  ​digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);+  ​GPIO.out_w1tc = (1 << IN2(1 << IN3); // IN2 și IN3 LOW
   Serial.println("​Dreapta"​);​   Serial.println("​Dreapta"​);​
 } }
Line 245: Line 301:
 void stopMotors() void stopMotors()
 { {
-  ​digitalWrite(IN1, LOW); digitalWrite(IN2, LOW)+  ​GPIO.out_w1tc = (1 << ​IN1) (1 << ​IN2) (1 << ​IN3) (1 << ​IN4); // Toți LOW
-  digitalWrite(IN3, LOW); digitalWrite(IN4, LOW);+
   Serial.println("​Oprire"​);​   Serial.println("​Oprire"​);​
 } }
Line 358: Line 413:
 {{:​pm:​prj2025:​fstancu:​img_2149.jpg?​260|}} {{:​pm:​prj2025:​fstancu:​img_2149.jpg?​260|}}
 } }
 +===== VIDEO =====
 +https://​www.youtube.com/​shorts/​16-T-_LEwkY
 +
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
 {{:​pm:​prj2025:​fstancu:​img_dan1.jpg?​307|}} {{:​pm:​prj2025:​fstancu:​img_dan1.jpg?​307|}}
Line 364: Line 422:
  
 ===== Concluzii ===== ===== Concluzii =====
 +Acest proiect este un robot autonom controlabil prin Bluetooth, capabil să evite obstacole și prăpastii cu ajutorul senzorilor, oferind în același timp control manual precis prin aplicația Dabble. Este o combinație reușită între inteligență integrată, interfață prietenoasă și control adaptiv al motoarelor.
 ===== Download ===== ===== Download =====
- +{{:pm:prj2025:fstancu:bluetoothcar_v1.1_vrinceanu.zip|}}
-<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**. +
-</​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 =====
Line 383: Line 430:
 LCD Help: LCD Help:
 https://​www.youtube.com/​watch?​v=860eErq9c3E>​ https://​www.youtube.com/​watch?​v=860eErq9c3E>​
 +
 +Piese:
 +https://​sigmanortec.ro
 +https://​www.optimusdigital.ro/​ro/​
  
pm/prj2025/fstancu/dan.vrinceanu.1748382677.txt.gz · Last modified: 2025/05/28 00:51 by dan.vrinceanu
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