Boat + Controller

Introducere

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ă

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

Lista componentelor:

  • 2 X Micro Metal Gearmotor HPCB
  • 2 X Placă de dezvoltare wireless compatibilă cu Plusivo ESP32 și BLE
  • Giroscop OKY3234
  • Driver de motor 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

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

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.txt · Last modified: 2026/05/23 19:05 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