This is an old revision of the document!


Boat + Controller

Introducere

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

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.

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ă

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

Module folosite:

  • Giroscopul - folosit pentru a determina inclinatia mainii si astfel a obtine directia de deplasare a barcii.
  • 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.
  • Modulul de Wifi integrat pe esp-uri pentru comunicarea intre cele doua folosind protocolul ESP NOW.

Hardware Design

Aici puneţi tot ce ţine de hardware design:

Component list:

  • 2 X Micro Metal Gearmotor HPCB
  • 2 X Plusivo ESP32 and BLE Compatible Wireless Development Board
  • Gyroscope OKY3234
  • Motor driver drv8838

In partea de sus a imagini se poate observa esp-ul si giroscopul care impreuna formeaza telecomanda barcii.

In partea de jos a schematicului se pot observa esp-ul responsabil de controlul barcii impreuna cu motoarele si driverul pentru ele.

Conectarea pinilor:

  • Esp-controler
    • IO21 si IO22 sunt pinii responsabili de comunicarea pe I2C, SDA respectiv SCL.
    • 3V3 si GND responsabili de furnizarea energiei pentru modulul Gyroscope OKY3234.
  • Gyroscope OKY3234
    • SDA si SCL pinii responsabili de comunicarea I2C.
    • VCC si GND pinii de alimentare.
  • Esp-barca
    • IO13 pinul responsabil de starea de stand by a driverului de motoare.
    • GND pinul responsabil de masa comuna.
    • IO32 si IO33 pinii prin care se controleaza motorul A.
    • IO26 si IO27 pinii prin care se controleaza motorul B.
  • Driverul drv8838
    • STBY pinul responsabil de starea de stand by.
    • GND masa comuna cu controlarul.
    • AIN1 si AIN 2 pinii care primesc semnalul de control de la controler pentru motorul A.
    • BIN1 si BIN 2 pinii care primesc semnalul de control de la controler pentru motorul B.
    • AO1 si AO2 pinii ce transmit semnalul de controlo amplificat de la driver la motorul A.
    • BO1 si BO2 pinii ce transmit semnalul de controlo amplificat de la driver la motorul B.

Software Design

Descrierea codului aplicaţiei (firmware):

  • mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR)
  • librării şi surse 3rd-party (e.g. Procyon AVRlib)
  • algoritmi şi structuri pe care plănuiţi să le implementaţi
  • (etapa 3) surse şi funcţii implementate

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} $$

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.

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

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

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.

Github: link Video: video

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Imagini prototip

Telecomanda si barca sunt momentan o o singura unitate:

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.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2026/vlad.radulescu2901/george_victor.ioan.1779550801.txt.gz · Last modified: 2026/05/23 18:40 by george_victor.ioan
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