This shows you the differences between two versions of the page.
| — |
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]] | ||