This shows you the differences between two versions of the page.
|
pm:prj2026:vlad.radulescu2901:george_victor.ioan [2026/05/15 19:42] 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> | ||
| Line 74: | Line 56: | ||
| </note> | </note> | ||
| - | ==== Imagini prototip ==== | + | ===== Software Design ===== |
| - | Telecomanda si barca sunt momentan o o singura unitate | + | Pentru implementare am folosit extensia platformIO din VSC. |
| + | Librarii: | ||
| + | * esp_now.h biblioteca aceasta este pentruca telecomanda si barca comunica prin intermediul protocolului ESP NOW. | ||
| + | * 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. | ||
| + | * Adafruit_MPU6050.h si Adafruit_Sensor.h aceasta biblioteca este folosita pentru conectarea giroscopului la telecomanda si pentru o mai usoara parsare a datelor. | ||
| + | * Arduino.h biblioteca este folosita pentru functia standard de arduino analogWrite. | ||
| + | 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} $$ | ||
| - | ===== Software Design ===== | + | <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> | ||
| + | Codul a fost implementat in doua fisiere main unul pentru barca si unul pentru telecomanda. | ||
| - | <note tip> | + | Main barca, contine urmatoarele functii: |
| - | Descrierea codului aplicaţiei (firmware): | + | * void controlMotoare(); - seteaza prin PWM viteza mototarelor. |
| - | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * void my_esp_now_init(); - initializarea protocolului ESP NOW. |
| - | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | * void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len); - functia care este apelata cand vin date de la telecomanda. |
| - | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | * void motorDirection(); - seteaza viteza tinta individuala a fiecarui motor in functie de directia aleasa. |
| - | * (etapa 3) surse şi funcţii implementate | + | * void tranzitieMotoare(); - incrementeaza viteza curenta pana la viteza tinta. |
| - | </note> | + | * void setup(); - este functia unde sunt apelate initializarile pentru esp si pinii GPIO. |
| + | * void loop(); - este ciclul de functionare al barcii. | ||
| - | I used VSC with platformIO extension. | + | 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 103: | 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 115: | 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 ===== | ||