This shows you the differences between two versions of the page.
|
pm:prj2026:vlad.radulescu2901:george_victor.ioan [2026/05/15 19:26] george_victor.ioan |
pm:prj2026:vlad.radulescu2901:george_victor.ioan [2026/05/23 19:05] (current) george_victor.ioan |
||
|---|---|---|---|
| Line 2: | Line 2: | ||
| ===== Introducere ===== | ===== Introducere ===== | ||
| - | <note tip> | + | Proiectul va fi o barcă controlată de la distanță. Barca va fi controlată de un microcontroler împreună cu două motoare și va primi comenzi de la un alt microcontroler echipat cu un giroscop. În funcție de înclinarea giroscopului, acest al doilea microcontroler va trimite comenzi bărcii pentru a se deplasa înainte, înapoi, la stânga sau la dreapta. Telecomanda va fi prinsă pe mâna utilizatorului. |
| - | Prezentarea pe scurt a proiectului vostru: | + | |
| - | * ce face | + | |
| - | * care este scopul lui | + | |
| - | * care a fost ideea de la care aţi pornit | + | |
| - | * de ce credeţi că este util pentru alţii şi pentru voi | + | |
| - | </note> | + | |
| - | The project will be a remote-controlled boat. The boat will be controlled by a microcontroller along with two motors, and it will receive commands from another microcontroller equipped with a gyroscope. Depending on the tilt of the gyroscope, this second microcontroller will send commands to the boat to move forward, backward, left, or right. The remote control will be strapped to the user's hand. | + | |
| - | The goal of the project is to build a remote-controlled boat—a toy you can spend your free time with, which can help you relax and improve your hand-eye coordination. | + | Scopul proiectului este construirea unei bărci controlate de la distanță — o jucărie cu care îți poți petrece timpul liber, care te poate ajuta să te relaxezi și să îți îmbunătățești coordonarea mână-ochi. |
| ===== Descriere generală ===== | ===== Descriere generală ===== | ||
| - | <note tip> | ||
| - | O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care | ||
| - | Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html | ||
| - | </note> | ||
| {{:pm:prj2026:vlad.radulescu2901:block_sch_ioan_george_victor.drawio.png?|}} | {{:pm:prj2026:vlad.radulescu2901:block_sch_ioan_george_victor.drawio.png?|}} | ||
| Line 26: | Line 15: | ||
| * Driverul de motoare - este folosit pentru a putea transmite samnalele provenite de la esp-ul barca la o tensiune de maxim 3.3V la o tensiune de maxim 9V necesara pentru a misca motoarele. | * Driverul de motoare - este folosit pentru a putea transmite samnalele provenite de la esp-ul barca la o tensiune de maxim 3.3V la o tensiune de maxim 9V necesara pentru a misca motoarele. | ||
| * Motoarele sunt folosite pentru deplasarea barcii inainte si inapoi si pentru a putea lua viraje stanga-dreapt. | * Motoarele sunt folosite pentru deplasarea barcii inainte si inapoi si pentru a putea lua viraje stanga-dreapt. | ||
| + | * Modulul de Wifi integrat pe esp-uri pentru comunicarea intre cele doua folosind protocolul ESP NOW. | ||
| </note> | </note> | ||
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| - | |||
| - | <note tip> | ||
| - | Aici puneţi tot ce ţine de hardware design: | ||
| - | * listă de piese | ||
| - | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | ||
| - | * diagrame de semnal | ||
| - | * rezultatele simulării | ||
| - | </note> | ||
| <note tip> | <note tip> | ||
| - | Component list: | + | Lista componentelor: |
| * 2 X Micro Metal Gearmotor HPCB | * 2 X Micro Metal Gearmotor HPCB | ||
| - | * 2 X Plusivo ESP32 and BLE Compatible Wireless Development Board | + | * 2 X Placă de dezvoltare wireless compatibilă cu Plusivo ESP32 și BLE |
| - | * Gyroscope OKY3234 | + | * Giroscop OKY3234 |
| - | * Motor driver drv8838 | + | * Driver de motor DRV8838 |
| </note> | </note> | ||
| - | {{:pm:prj2026:vlad.radulescu2901:schematic_barca_victor_2026-05-13.png?800|}} | + | {{:pm:prj2026:vlad.radulescu2901:schematic_barca_victor_2026-05-13.png?700|}} |
| In partea de sus a imagini se poate observa esp-ul si giroscopul care impreuna formeaza telecomanda barcii. | In partea de sus a imagini se poate observa esp-ul si giroscopul care impreuna formeaza telecomanda barcii. | ||
| Line 76: | Line 58: | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| + | Pentru implementare am folosit extensia platformIO din VSC. | ||
| - | <note tip> | + | Librarii: |
| - | Descrierea codului aplicaţiei (firmware): | + | * esp_now.h biblioteca aceasta este pentruca telecomanda si barca comunica prin intermediul protocolului ESP NOW. |
| - | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * WiFi.h pentru a putea telecomanda sa se conecteze la barca fara a fi nevoie sa hardcodez mac-ul controlarului barcii pe controlarul de pe telecomanda. |
| - | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | * Adafruit_MPU6050.h si Adafruit_Sensor.h aceasta biblioteca este folosita pentru conectarea giroscopului la telecomanda si pentru o mai usoara parsare a datelor. |
| - | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | * Arduino.h biblioteca este folosita pentru functia standard de arduino analogWrite. |
| - | * (etapa 3) surse şi funcţii implementate | + | |
| + | Formula folosit pentru inclinatia telecomenzii este urmatorul: $$ \text{Unghi}_{\text{final}} = \alpha \times (\text{Unghi}_{\text{anterior}} + \text{Gyro} \times dt) + (1 - \alpha) \times \text{Pitch}_{acc} $$ | ||
| + | |||
| + | <note> | ||
| + | Componentele formulei: | ||
| + | * $\text{Unghi}_{\text{final}}$ = unghiul la care este inclinata telecomanda. | ||
| + | * $\alpha$ = cat la mult valoarea data de giroscop este folosita pentru calcularea unghiului (98%). | ||
| + | * $\text{Unghi}_{\text{anterior}}$ = unghiul vechi. | ||
| + | * $\text{Gyro}$ = viteza de rotatie masurata de giroscop. | ||
| + | * $dt$ = timpul scurs de la ultima citire a senzorului. | ||
| + | * $\text{Gyro} \times dt$ = distanta unghiulara, imi spune cat sa rotit telecomanda de la ultima citire. | ||
| + | * $(1 - \alpha)$ = cat la suta din acceleratie folosim pentru corectarea drift-ului. | ||
| + | * $\text{Pitch}_{acc}$ = unghiul brut calculat folosind accelerometrul. | ||
| </note> | </note> | ||
| - | I used VSC with platformIO extension. | + | Codul a fost implementat in doua fisiere main unul pentru barca si unul pentru telecomanda. |
| + | |||
| + | Main barca, contine urmatoarele functii: | ||
| + | * void controlMotoare(); - seteaza prin PWM viteza mototarelor. | ||
| + | * void my_esp_now_init(); - initializarea protocolului ESP NOW. | ||
| + | * void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len); - functia care este apelata cand vin date de la telecomanda. | ||
| + | * void motorDirection(); - seteaza viteza tinta individuala a fiecarui motor in functie de directia aleasa. | ||
| + | * void tranzitieMotoare(); - incrementeaza viteza curenta pana la viteza tinta. | ||
| + | * void setup(); - este functia unde sunt apelate initializarile pentru esp si pinii GPIO. | ||
| + | * void loop(); - este ciclul de functionare al barcii. | ||
| + | |||
| + | Main telecomanda, contine urmatoarele functii: | ||
| + | * void init_esp_now_mod(); - initializarea protocolului ESP NOW. | ||
| + | * void ScanForSlave(); - scaneaza prin wifi daca barca este pornita. | ||
| + | * void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status); - functia prin care ESP NOW trimite date. | ||
| + | * void init_gyro(); - initializarea giroscopului. | ||
| + | * void getGyroAngles(); - returneaza unghiul curent al telecomenzii. | ||
| + | * uint8_t commandFromController(); - trimite prin ESP NOW o directie barcii conform unghiului telecomenzii. | ||
| + | * uint8_t command(); - functie pentru debug citeste prin USART comenzi pentru directie si le trimite barcii. | ||
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
| Line 97: | Line 110: | ||
| ===== Download ===== | ===== Download ===== | ||
| - | <note warning> | + | Github: [[https://github.com/VictorI76/Proiect_barca|link]] |
| - | 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**. | + | Video: [[https://www.youtube.com/shorts/UN26ZbDlU7M|video]] |
| - | </note> | + | |
| ===== Jurnal ===== | ===== Jurnal ===== | ||
| Line 109: | Line 120: | ||
| </note> | </note> | ||
| + | ==== Imagini prototip ==== | ||
| + | |||
| + | Telecomanda si barca sunt momentan o o singura unitate: | ||
| + | |||
| + | {{:pm:prj2026:vlad.radulescu2901:ioan_george_victor_merge_inainte.png|}} | ||
| + | |||
| + | {{:pm:prj2026:vlad.radulescu2901:ioan_george_victor_merge_stanga.png|}} | ||
| + | |||
| + | <note> | ||
| + | Dupa cum se poate vedea in cele doua imagini un esp trimite in functie de giroscop o comanda pentru directia barcii, iar al doilea esp receptioneaza acea comanda si trimite putere spre motoare in functie de directie. | ||
| + | |||
| + | In prima imagine "telecomanda" este inclinata spre fata deci ambele motoare vor primi putere pentru a merge inainte, iar in cea de a doua imagine "telecomanda" este inclinata spre stanga deci doar motorul din dreapta va primi putere pentru a vira la stanga. | ||
| + | </note> | ||
| ===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||