This is an old revision of the document!


Drona cu sistem de echilibrare automat

Introducere

Proiectul Drone Stabilizer reprezintă construcția unei drone (quadcopter), bazată pe motoare cu perii (brushed), capabilă să își mențină echilibrul în aer în mod autonom. Nucleul proiectului din punct de vedere software este implementarea unui algoritm de control de tip PID (Proportional-Integral-Derivative) care procesează datele de la un senzor inerțial pentru a ajusta viteza motoarelor în timp real.

Functionalități principale:

  • stabilizarea automată pe axele Pitch, Roll și Yaw folosind giroscopul și accelerometrul
  • recepția comenzilor de zbor (throttle, direcție) prin protocol wireless de 2.4GHz
  • controlul turației celor 4 motoare prin semnale PWM transmise către punțile H
  • monitorizarea orientării dronei în timp real
  • gestionarea energiei pentru a asigura stabilitatea electronicii în timpul căderilor de tensiune ale motoarelor

Laboratoare folosite: UART (Lab 1), Intreruperi (Lab 2), Timere/PWM (Lab 3), SPI (Lab 5 - NRF24), I2C (Lab 6 - MPU).

Descriere generală

Schema Bloc

Module si interactiuni:

Drona:

  • ATmega328PB: unitatea centrală de procesare. Citește datele de orientare de la MPU6050, calculează unghiurile de înclinare, rulează algoritmii PID de stabilizare și ajustează viteza motoarelor în timp real prin semnale PWM. Primește comenzi de la distanță prin modulul NRF24 și gestionează comenziile primite de la remote controller.
  • MPU6050: senzorul IMU (Inertial Measurement Unit) care combină un giroscop pe 3 axe cu un accelerometru pe 3 axe. Giroscopul măsoară viteza unghiulară (grade/secundă), iar accelerometrul măsoară forțele liniare, inclusiv gravitația. La pornire, MCU-ul efectuează o calibrare pe 1000 de eșantioane pentru a elimina offset-urile statice. În zbor, datele brute sunt combinate printr-un filtru complementar: 96% giroscop (precizie pe termen scurt) și 4% accelerometru (corecție drift pe termen lung), rezultând unghiurile de roll, pitch și yaw. Comunicare prin I2C. Timer2 genereaza intreruperi o data la o milisecunda, cand se ruleaza PID-ul pentru a se corecta directia dronei.
  • NRF24: modulul de comunicație wireless care operează pe banda de 2.4GHz. Drona funcționează în modul receptor (listening), așteptând comenzi de la un remote controller. Prima comandă obligatorie este m — aceasta declanșează calibrarea MPU și permite pornirea motoarelor. Ulterior, avem comenzi de urcare, coborare, stanga, dreapta, fata si spate, dar si o comanda pentru oprire instanta a elicelor. Comunicare cu MCU-ul prin SPI.
  • Drivere MX1616H (x2): drivere de motor cu punte H dublă, fiecare controlând câte două motoare brushed. Primesc semnalul PWM de la MCU prin registrele OCR (Output Compare Register) ale timerelor hardware (Timer0 pentru motoarele stânga, Timer1 pentru motoarele dreapta) și translatează comenzile digitale în tensiune aplicată direct pe bobinele motoarelor. Direcția de rotație (CW/CCW) este setată la inițializare prin pinii de direcție ai porturilor C și D.
  • 4 motoare brushed: dispuse în configurație quad — față-stânga (CCW), față-dreapta (CW), spate-stânga (CW), spate-dreapta (CCW). Sensurile alternante de rotație sunt esențiale pentru anularea momentului girroscopic și controlul yaw-ului. Viteza fiecărui motor este ajustată independent de algoritmul de stabilizare, câte 15 unități PWM per pas, clamped între 0 și 255.
  • LiPo 1S 3.7V: alimentează direct driverele MX1616H și motoarele. Tensiunea de 3.7V este ridicată la 5V prin buck converter pentru alimentarea MCU-ului, MPU6050 și NRF24.

Telecomanda:

  • Arduino Nano V3: joaca rolul de Remote controller, care este conectat la laptop si primeste comenziile din laptop prin protocolul UART, care de asemenea este conectata la un modul NRF24.

Hardware Design

Lista de piese

Nr. Componentă Cantitate Rol în proiect
1 ATmega328PB x1 Flight Controller — unitatea centrală de procesare
2 MPU6050 — GY-521 x1 IMU cu giroscop și accelerometru pe 3 axe
3 MX1616H x2 Driver punte H — controlul motoarelor brushed
4 Motor brushed 820 x4 Propulsie — configurație quad
5 NRF24 x2 Transreceptor wireless 2.4GHz — primire, transmitere comenzi
6 Buck converter x1 Ridicător tensiune 3.7V → 5V pentru partea logică
7 LiPo 1S 3.7V 500mAh 95C x1 Sursă principală de energie
8 Arduino Uno NANO x1 Remote controller

Schema electrica

Schema electrica a dronei

Pini folositi

Componentă Pin componentă Pin ATmega328PB Explicație
MPU6050 VCC 5V Modulul este alimentat la 5V
MPU6050 GND GND Masă comună
MPU6050 SDA PC4 / SDA Pin standard pentru date I2C
MPU6050 SCL PC5 / SCL Pin standard pentru clock I2C
NRF24 VCC 3.3V Modulul necesită alimentare la 3.3V
NRF24 GND GND Masă comună
NRF24 CE PD3 Chip Enable — activare modul RX/TX
NRF24 CSN PD7 Chip Select — selecție SPI
NRF24 SCK PB5 / SCK Clock SPI
NRF24 MOSI PB3 / MOSI Date SPI master → slave
NRF24 MISO PB4 / MISO Date SPI slave → master
Motor față-stânga (CCW) IN1 PD2 Control direcție — Driver MX1616H
Motor față-stânga (CCW) IN2 / PWM PD5 Semnal PWM — viteză motor
Motor față-dreapta (CW) IN1 PC0 Control direcție — Driver MX1616H
Motor față-dreapta (CW) IN2 / PWM PB1 Semnal PWM — viteză motor
Motor spate-stânga (CW) IN1 PD4 Control direcție — Driver MX1616H
Motor spate-stânga (CW) IN2 / PWM PD6 Semnal PWM — viteză motor
Motor spate-dreapta (CCW) IN1 PC1 Control direcție — Driver MX1616H
Motor spate-dreapta (CCW) IN2 / PWM PB2 Semnal PWM — viteză motor
Buck converter VIN VBAT (LiPo) Intrare 3.7V de la baterie
Buck converter VOUT VCC placă Ieșire 5V pentru partea logică

Pinii PC4 și PC5 au fost aleși pentru MPU6050 deoarece sunt pinii dedicați pentru I2C pe ATmega328PB. Comunicarea se face la 400kHz (fast mode) pentru a minimiza latența citirii datelor IMU.

Pentru NRF24L01+ am folosit pinii hardware SPI (PB3, PB4, PB5) deoarece SPI hardware este semnificativ mai rapid decât bit-banging. CE pe PD3 și CSN pe PD7 sunt pini digitali obișnuiți, aleși să nu intre în conflict cu timerele folosite pentru motoare.

Timer2 este configurat în mod CTC cu un prescaler de 64 și OCR2A = 249, ceea ce generează o întrerupere la fiecare 1ms. În ISR-ul acestui timer se incrementează contorul checkMpu. În bucla principală, la fiecare 50 de incrementări (adică la fiecare 50ms) se citesc datele de la MPU6050, se calculează unghiurile prin filtrul complementar și se rulează cei 3 controlleri PID. Timer2 a fost ales pentru această sarcină tocmai pentru că Timer0 și Timer1 sunt ocupați cu PWM-ul motoarelor.

Timer0 este configurat în mod Fast PWM cu prescaler 8, generând semnal PWM pe OC0A (PD6) și OC0B (PD5) — folosiți pentru motoarele din stânga. Registrele OCR0A și OCR0B controlează direct ciclul de lucru, adică viteza fiecărui motor.

Timer1 este configurat similar în mod Fast PWM pe 8 biți cu prescaler 64, generând semnal PWM pe OC1A (PB1) și OC1B (PB2) — folosiți pentru motoarele din dreapta. Registrele OCR1AL și OCR1BL sunt cele scrise de algoritmul de stabilizare la fiecare iterație PID.

Direcția de rotație a fiecărui motor este setată o singură dată la inițializare prin pinii de direcție ai driverelor MX1616H, nu prin PWM. Algoritmul PID modifică doar viteza (registrele OCR), nu și direcția — motoarele brushed pe o dronă nu își inversează sensul în zbor normal.

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

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.

Jurnal

Etapa 1 de Hardware
  • Am conectat pe breadboard primele componente ale proiectului: placa ATmega328P Xplained Mini, modulul HX711 si display-ul OLED.
  • Modulul HX711 este legat la load cell si la microcontroller prin pinii DAT si CLK, pentru citirea greutatii.
  • Display-ul OLED este conectat prin I2C, pe pinii SDA si SCL, si a fost testat cu un mesaj simplu pe ecran.
  • In aceasta etapa am verificat separat ca partea de cantarire comunica prin UART si ca display-ul porneste corect.

Bibliografie/Resurse

Resurse hardware

Resurse software / scheme

Export to PDF

pm/prj2026/atoader/stefan.oprea1711.1778966995.txt.gz · Last modified: 2026/05/17 00:29 by stefan.oprea1711
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