Differences

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

Link to this comparison view

pm:prj2026:cezar.zlatea:rares_stefan.balcan [2026/05/09 18:58] (current)
rares_stefan.balcan created
Line 1: Line 1:
 +====== AutoDrift - Masina RC cu Drift si Telemetrie IMU in Timp Real ======
  
 +===== Introducere =====
 +
 +AutoDrift este o masinuta RC construita pe un sasiu RWD cu roti spate din
 +plastic dur, care permite generarea de drifturi naturale prin supravirare
 +controlata. Masinuta este controlata wireless de pe telefon (iOS si Android)
 +prin Bluetooth BLE, iar un senzor IMU MPU-6050 masoara in timp real unghiul
 +de yaw si durata driftului, afisate live pe un display OLED SSD1306.
 +
 +Ideea proiectului porneste de la dorinta de a crea un produs interactiv si
 +spectaculos care sa demonstreze practic controlul PWM al motoarelor,
 +comunicarea I2C si UART, si procesarea datelor de la un senzor inertial
 +pe microcontrollerul ATmega324P.
 +
 +Proiectul este util deoarece:
 +
 +  * permite controlul wireless intuitiv al unei masini RC de pe orice telefon;
 +  * masoara si cuantifica fenomenul de drift printr-un senzor IMU in timp real;
 +  * demonstreaza integrarea a 5 notiuni din laboratoarele PM intr-un produs fizic complet;
 +  * produce un demo vizual impactant si reproductibil la PM Fair.
 +
 +**Ipoteza:​** Credem ca aplicarea unui impuls PWM asimetric (diferenta peste
 +40% intre motorul stang si cel drept) combinat cu un viraj brusc va genera
 +un unghi de drift masurabil de minim 30 de grade fata de axa de deplasare,
 +deoarece reducerea tractiunii rotilor posterioare provoaca supravirare
 +controlata detectabila de giroscopul MPU-6050.
 +
 +===== Descriere generala =====
 +
 +Sistemul este organizat in module functionale care comunica prin intermediul
 +microcontrollerului ATmega324P. Acesta primeste comenzi de directie si viteza
 +prin UART de la modulul HM-10 BLE, controleaza motoarele prin PWM via driverul
 +L298N, citeste datele IMU prin I2C de la MPU-6050 si le afiseaza pe OLED-ul
 +SSD1306 (tot I2C). LED-ul RGB ofera feedback vizual instant despre starea
 +masinii.
 +
 +Schema bloc a sistemului:
 +
 +<​code>​
 ++-------------------------------------------------------------+
 +|              AutoDrift - RC Drift Car                       |
 +|  [Telefon iOS/​Android] ​                                     |
 +|         | Bluetooth BLE                                     |
 +|     ​[HM-10 BLE] ---UART--->​ [ATmega324P] ​                   |
 +|                                   ​| ​                        |
 +|              +--------------------+------------------+ ​     |
 +|          [I2C bus]             ​[PWM] ​            ​[GPIO] ​    |
 +|    [MPU-6050] ​ [SSD1306] ​     [L298N] ​          [LED RGB]   |
 +|    Giroscop +  OLED Display ​ [Motor St] [Motor Dr]          |
 +|                          [Servo SG90] - directie fata       |
 ++-------------------------------------------------------------+
 +</​code>​
 +
 +Modulele principale ale proiectului sunt:
 +
 +  * **Unitatea de control - ATmega324P**:​ primeste comenzi UART de la HM-10, calculeaza PWM pentru motoare, citeste datele IMU prin I2C, actualizeaza display-ul OLED si controleaza LED-ul RGB.
 +  * **Modulul de control wireless - HM-10 BLE**: comunica Bluetooth BLE 4.0 cu telefonul (compatibil iOS si Android), transmite comenzi de forma F/B/L/R/S prin UART catre ATmega.
 +  * **Modulul IMU - MPU-6050**: furnizeaza date de acceleratie si viteza unghiulara pe 6 axe prin I2C; folosit pentru detectia si masurarea unghiului de yaw in timpul driftului.
 +  * **Modulul de afisare - OLED SSD1306 128x64**: afiseaza in timp real unghiul de yaw, durata sesiunii de drift si starea conexiunii Bluetooth.
 +  * **Modulul de actionare - L298N + motoare DC**: controleaza independent motorul stang si cel drept prin PWM pentru mers, viraj si generarea driftului.
 +  * **Modulul de directie - Servo SG90**: controleaza unghiul rotilor fata printr-un semnal PWM generat de Timer.
 +  * **Modulul de feedback vizual - LED RGB**: verde = mers normal, rosu = drift activ, albastru = Bluetooth conectat.
 +
 +Interactiunea dintre module:
 +
 +  * Telefonul trimite comenzi BLE catre modulul HM-10.
 +  * HM-10 transmite comenzile prin UART catre ATmega324P.
 +  * ATmega parseaza comanda si genereaza semnale PWM catre L298N.
 +  * L298N alimenteaza diferential motoarele DC pentru a produce driftul.
 +  * MPU-6050 masoara unghiul de yaw prin I2C la fiecare 20ms.
 +  * ATmega actualizeaza display-ul OLED si LED-ul RGB in functie de starea curenta.
 +
 +===== Hardware Design =====
 +
 +==== Lista de componente ====
 +
 +^ Referinta ^ Componenta ^ Cantitate ^
 +| U1 | ATmega324P (placa de dezvoltare PM) | 1 |
 +| U2 | MPU-6050 (giroscop + accelerometru,​ I2C) | 1 |
 +| U3 | HM-10 BLE Module (Bluetooth 4.0, UART) | 1 |
 +| DISP1 | OLED SSD1306 128x64 (I2C) | 1 |
 +| DRV1 | L298N Motor Driver | 1 |
 +| M1, M2 | Motoare DC 3-6V (tractiune spate) | 2 |
 +| SRV1 | Servo SG90 (directie fata) | 1 |
 +| LED1 | LED RGB catod comun | 1 |
 +| R1, R2, R3 | Rezistoare 220 ohm (limitare curent LED) | 3 |
 +| BAT1 | Baterie LiPo 7.4V 2S | 1 |
 +| REG1 | Regulator tensiune 5V (LM7805 sau LM2596) | 1 |
 +| BB1 | Breadboard | 1 |
 +| — | Sasiu RWD low-profile | 1 |
 +| — | Roti spate din plastic dur (low-friction) | 1 set |
 +| — | Fire jumper tata-tata / tata-mama | — |
 +
 +==== Conexiuni electrice ====
 +
 +^ Pin ATmega324P ^ Tip ^ Conectat la ^
 +| PD0 (RXD) | UART RX | TX - HM-10 BLE |
 +| PD1 (TXD) | UART TX | RX - HM-10 BLE |
 +| PC0 (SCL) | I2C SCL | SCL - MPU-6050 + SCL - SSD1306 |
 +| PC1 (SDA) | I2C SDA | SDA - MPU-6050 + SDA - SSD1306 |
 +| PB3 (OC0A) | PWM | ENA - L298N (motor stang) |
 +| PD4 | GPIO | IN1 - L298N |
 +| PD5 | GPIO | IN2 - L298N |
 +| PB4 (OC0B) | PWM | ENB - L298N (motor drept) |
 +| PD6 | GPIO | IN3 - L298N |
 +| PD7 | GPIO | IN4 - L298N |
 +| PB1 (OC1A) | PWM / Timer1 | Semnal servo SG90 (50Hz, 1-2ms) |
 +| PC2 | GPIO / PWM | LED RGB - R |
 +| PC3 | GPIO / PWM | LED RGB - G |
 +| PC4 | GPIO / PWM | LED RGB - B |
 +| VCC (5V) | Power | HM-10, MPU-6050, SSD1306, L298N logic |
 +| GND | GND | Masa comuna |
 +
 +==== Detalii module hardware ====
 +
 +=== Modulul de control wireless - HM-10 BLE ===
 +
 +Modulul HM-10 utilizeaza Bluetooth Low Energy 4.0, compatibil atat cu iOS
 +cat si cu Android, spre deosebire de HC-05 care functioneaza doar cu Android.
 +Comunicarea cu ATmega se face prin UART la 9600 baud. Pe telefon se poate
 +folosi orice aplicatie de tip BLE joystick (ex: ''​Bluetooth for Arduino''​ pe
 +App Store, ''​Serial Bluetooth Terminal''​ pe Play Store).
 +
 +=== Modulul IMU - MPU-6050 ===
 +
 +MPU-6050 este conectat pe magistrala I2C impreuna cu display-ul OLED,
 +ambele pe pinii PC0 (SCL) si PC1 (SDA). Adresa I2C implicita este ''​0x68''​.
 +Datele de viteza unghiulara de pe axa Z (GYRO_ZOUT) sunt citite la fiecare
 +20ms si integrate software pentru a obtine unghiul de yaw curent.
 +
 +Detectia driftului activ se face cand:
 +
 +  * viteza unghiulara pe axa Z depaseste pragul de 50 grade/​secunda;​
 +  * sau unghiul integrat depaseste 15 grade fata de directia initiala.
 +
 +=== Modulul de actionare - L298N ===
 +
 +L298N controleaza independent cei doi motori DC. Driftul se genereaza prin
 +aplicarea unui PWM asimetric: motorul din exteriorul virajului primeste duty
 +cycle mai mare decat cel din interior, provocand supravirarea rotilor spate
 +pe suprafata cu frictiune redusa.
 +
 +=== Servo SG90 - directie fata ===
 +
 +Servo-ul primeste un semnal PWM de 50Hz generat de Timer1 al ATmega.
 +Pozitia neutra corespunde unui duty cycle de 1.5ms, stanga la 1ms
 +si dreapta la 2ms. Comanda de directie din aplicatia de telefon
 +modifica proportional valoarea duty cycle-ului.
 +
 +===== Software Design =====
 +
 +TODO - va fi completat in etapa urmatoare.
 +
 +Se planifica implementarea urmatoarelor functionalitati:​
 +
 +  * receptie comenzi UART de la HM-10 si parsarea lor (F/​B/​L/​R/​S);​
 +  * control PWM independent motoare stanga/​dreapta cu Timer0;
 +  * control servo directie cu Timer1 (semnal 50Hz, duty cycle 1-2ms);
 +  * citire date IMU MPU-6050 prin I2C (registrii GYRO_ZOUT_H si GYRO_ZOUT_L);​
 +  * calcul unghi de drift prin integrare viteza unghiulara pe axa Z;
 +  * detectie drift activ (prag viteza unghiulara > 50 grade/​secunda);​
 +  * afisare OLED: unghi yaw, durata drift, status Bluetooth;
 +  * control LED RGB in functie de starea curenta.
 +
 +Structura principala a algoritmului:​
 +
 +<​code>​
 +setup:
 +  initializeaza UART (9600 baud) pentru HM-10
 +  initializeaza I2C pentru MPU-6050 si SSD1306
 +  initializeaza Timer0 pentru PWM motoare
 +  initializeaza Timer1 pentru servo (50Hz)
 +  initializeaza GPIO pentru L298N si LED RGB
 +  afiseaza ecran de start pe OLED
 +
 +loop (la fiecare 20ms):
 +  citeste comanda UART de la HM-10
 +  parseaza comanda (F/B/L/R/S + intensitate)
 +  calculeaza PWM stanga si dreapta
 +  aplica PWM la L298N
 +  actualizeaza servo directie
 +  citeste GYRO_ZOUT de la MPU-6050 prin I2C
 +  integreaza viteza unghiulara => unghi yaw
 +  detecteaza drift activ (prag unghi sau viteza)
 +  actualizeaza OLED (unghi, durata drift, status BT)
 +  actualizeaza LED RGB (verde/​rosu/​albastru)
 +</​code>​
 +
 +===== Rezultate Obtinute =====
 +
 +TODO - va fi completat dupa implementare si testare.
 +
 +Metrici tinta propuse:
 +
 +  * unghi de drift masurabil de minim 30 de grade fata de axa de deplasare;
 +  * latenta comanda Bluetooth -> reactie motor sub 100ms;
 +  * rata de citire IMU de minim 50Hz;
 +  * durata drift afisata cu precizie de +/- 100ms;
 +  * rata de succes a manevrelor de drift de minim 80% din 10 incercari consecutive.
 +
 +===== Concluzii =====
 +
 +TODO - va fi completat la finalul proiectului.
 +
 +Proiectul isi propune sa demonstreze folosirea practica a comunicatiei
 +Bluetooth BLE, a controlului PWM al motoarelor si a procesarii datelor
 +de la un senzor IMU pe microcontrollerul ATmega324P. Prin masurarea
 +unghiului de yaw in timp real, sistemul poate cuantifica si afisa
 +fenomenul de drift intr-un mod interactiv si spectaculos.
 +
 +===== Download =====
 +
 +TODO - se va adauga arhiva proiectului dupa implementare.
 +
 +Arhiva finala va contine:
 +
 +  * codul sursa AVR-GCC;
 +  * schema electrica (KiCad / Fritzing);
 +  * README cu instructiuni de compilare si upload;
 +  * ChangeLog.
 +
 +Link repository Git: TODO
 +
 +===== Jurnal =====
 +
 +^ Data ^ Activitate ^
 +| 09.05.2026 | Alegerea temei proiectului si realizarea documentatiei initiale. |
 +| 09.05.2026 | Definirea modulelor principale si a schemei bloc. |
 +| 09.05.2026 | Stabilirea listei de componente hardware. |
 +
 +===== Bibliografie/​Resurse =====
 +
 +==== Resurse Hardware ====
 +
 +  * [[https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-42743-ATmega324P_Datasheet.pdf|Datasheet ATmega324P]]
 +  * [[https://​invensense.tdk.com/​wp-content/​uploads/​2015/​02/​MPU-6000-Datasheet1.pdf|Datasheet MPU-6050]]
 +  * [[https://​cdn-shop.adafruit.com/​datasheets/​SSD1306.pdf|Datasheet SSD1306 OLED]]
 +  * [[https://​people.ece.cornell.edu/​land/​courses/​ece4760/​PIC32/​uart/​HM10/​DSD%20TECH%20HM-10%20datasheet.pdf|Datasheet HM-10 BLE Module]]
 +  * [[https://​ocw.cs.pub.ro/​courses/​_media/​pm/​hardware-cheatsheet.pdf|Hardware Cheatsheet ATmega324A - PM OCW]]
 +
 +==== Resurse Software ====
 +
 +  * [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab0-2024|Laboratorul 0: GPIO - PM OCW]]
 +  * [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab1-2023|Laboratorul 1: UART - PM OCW]]
 +  * [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab2-2023|Laboratorul 2: Intreruperi - PM OCW]]
 +  * [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab3-2023-2024|Laboratorul 3: Timere. PWM - PM OCW]]
 +  * [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab6-2023-2024|Laboratorul 6: I2C - PM OCW]]
pm/prj2026/cezar.zlatea/rares_stefan.balcan.txt · Last modified: 2026/05/09 18:58 by rares_stefan.balcan
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