This shows you the differences between two versions of the page.
pm:prj2025:fstancu:dan.vrinceanu [2025/05/28 01:00] dan.vrinceanu [Concluzii] |
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. | |
- | {{:pm:prj2025:fstancu:bluetoothcar_v1.1_vrinceanu.zip|} | + | ===== 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 384: | 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/ | ||