Comanda Unui Quadrocopter Utilizand Placa de Dezvoltare Arduino Uno
PROIECT DE DIPLOMĂ
Comanda unui quadrocopter utilizând Placa de dezvoltare Arduino uno
Cuprins
Cuprins
Introducere
Capitolul 1. Structura unui quadrocopter
1.1 Principii de funcționare
1.2 Componente
1.3 Transmițătorul
Capitolul 2. Placa pentru dezvoltare de aplicații cu microcontroler Arduino Uno
2.1 Partea hardware
2.2 Partea Software
2.3 Magistrale de comunicare
2.3.1 Magistrala I²C
2.3.2 UART
Capitolul 3. Sistemul de acționare al unui quadrocopter
3.1 Motoarele BLDC
3.2 Invertoare trifazate
3.3 Variatorul de viteză
Capitolul 4. Programe aplicații pentru comanda unui quadrocopter
4.1 Comanda motoarelor
4.2 Transmiterea comenzilor
4.3 Comunicarea cu senzorii
4.4 Stabilizarea
4.5 Filtrarea
4.6 Bucla PID
4.7 Procesarea datelor
4.7 Ciclul Program
4.8 Cablajul
4.9 Programul transmițătorului
Concluzii
Bibliografie
Introducere
Scopul acestei lucrări este de a realiza un robot care prezintă libertate pe toate cele trei dimensiuni. Astfe încât acesta să poată accesa cu ușurință spații sau locuri inaccesibile pentru oameni, să poată supraveghea cu ușurință spații întinse de la o oarecare altitudune și nu în ultimul rând pentru a putea fi utilizat în medii care prezintă un grad ridicat de primejdie pentru integritatea fizică cât si pentru sănătatea umană.
Având în vedere posibilele utilizări prezentate în paragraful anterior, s-a ales structura cea mai simplificată care va îndeplini cerințele respective, aceasta fiind în formă de X având unitățile de propulsie situate la extremitățile cadrului. Această structură este denumită în mod uzual QUADROCOPTER sau mai pe scurt QUADCOPTER fapt datorat de prezența a patru elice corelate cu fiecare dintre unitățile de propulsie.
Un quadcopter este una dintre versiunile relative simple din categoria multicopterelor, acestea fiind vehicule aeriene a căror mișcare este controlată prin accelerarea sau frânarea mai multor unități de propulsive. Fiecare unitate de propulsive este format dintr-un motor și o elice. Forma unui multirotor, respective și quadcopter este complet instabilă din punct de vedere aerodinamic. Pentru ca acesta să poată zbura în regim de stabilitate optimă el necesită un computer sau în cazul de față un microcontroler Arduino. Deci un operator uman nu poate controla în mod direct viteza de rotație a fiecărui motor, el fiind nevoit să interacționeze cu quadcopterul printr-o interfață denumită Fly by wire, care produce sute sau chiar mii de modificari pe minut ale vitezelor unităților de propulsie astfel încât întreg ansamblul să fie stabil în timpul zborului și să respecte comenzile operatorului în același timp.
Capitolul 1.
Structura unui quadrocopter
Construcția dronei este realizată pe o bază foarte simplă și anume cadrul în formă de X sau +, în funcție de configurația dorită, pe care sunt așezate strategic toate componentele necesare.
Spre deosebire de un elicopter care conține o elice mare pentru a-l ridica în aer și încă o elice mai mica încorporată în secțiunea cozii pentru stabilizare, drona prezentată în continuare conține patru unități de propulsie care pe lângă faptul că sunt însărcinate cu rolul de a ridica și menține drona în aer, ele sunt responsabile și de stabilizarea și controlul dronei. Două dintre unități, care sunt plasate pe aceeași diagonală, conțin elice care se învârt în direcția acelor de ceasornic, iar celelalte unități conțin elice care se învârt în sens opus. Dacă toate motoarele s-ar învarti în aceiași direcție, întreaga dronă s-ar învârti precum un elicopter fără cea de-a doua elice pentru stabilizare. Astfel se realizează stabilizarea pe cea de-a treia axă YAW prin balansarea cuplului produs de cele patru motoare. În cazul în care se dorește rotația pe această axă, două dintre motoare vor fi turate mai mult decât celelalte.
Pentru a menține echilibrul dronei sistemul de control va trebui să evalueze poziția acestuia cu o frecvență foarte mare, adunând date de la toți senzorii pentru a putea ajusta vitezele motoarelor și astfel susținând drona într-o poziție stabilă. Prezenta lucrare este axată pe acest sistem de control care realizează comanda motoarelor pentru a menține stabilitatea dronei.
1.1 Principii de funcționare
Un quadcopter, reprezentat schematic înfigura 1.1, se poate controla pe cele trei grade de libertate: Pitch, Roll, și Yaw, dar și altitudinea poate fi controlată. Fiecare grad de libertate poate fi controlat în parte prin ajustarea turației fiecărui motor:
Figura 1.
Yaw sau întoarcerea spre dreapta sau spre stânga, se realizează prin modificarea vitezei de rotație a motoarelor de pe o diagonală și de pe cealaltă, reprezentare în figura 1.2. Prin mărirea vitezelor motoarelor de pe o diagonală și scăderea vitezelor motoarelor de pe cealaltă diagonală, nu se va modifica altitudinea dronei, ci aceasta doar se va roti în jurul axei sale.
Figura 1.
Roll sau înclinarea spre dreapta sau spre stânga este controlată prin marirea vitezelor motoarelor de pe o parte și scăderea vitezelor motoarelor de pe cealaltă parte, cum se prezintă și în figura 1.3.
Figura 1.
Pitch sau înclinare în față sau în spate este controlată la fel ca și mișcarea anterioară doar că în acest caz sunt folosite motoarele poziționate în partea frontală și cele din partea posterioară, cum se observă în figura 1.4.
Figura 1.4
Pentru realizarea tuturor acestor mișcări dar în principal pentru a putea menține drona într-o pozitie stabilă sunt utilizate o serie de componente, fiecare dintre ele îndeplinind un anume rol, fără de care cele prezentate anterior nu se pot realiza. Există o serie de senzori care sunt conectați la un microcontroler, acești senzori aprovizioanează date esențiale microcontrolerului, date care contribuie la deciziile pe care acesta le realizează în legătură cu modul în care trebuie controlat fiecare motor în parte. În funcție de complexitatea dorită, respectiv gradul de autonomie dorit se folosește o combinație de mai mulți sau mai puțini senzori.
1.2 Componente
În cele ce urmează vor fi prezentate componentele esențiale pentru un quadcopter:
Cadrul, reprezentat în figura 1.5, este structura care ține toate componentele laolaltă, el trebuie să fie atât rezistent cât și ușor, dar pe lângă acestea, el trebuie sa și elimine vibrațiile provenite de la motoare.
Un cadru pentru un quadcopter este format din trei componente principale: placa centrală care susține toate componentele electronice și bateria, patru brațe montate radial pe această placă centrală și în cele din urmă suporturile de motoare, care sunt prezente în extremitățile fiecărui braț. Sunt disponibile foarte multe tipuri de materiale din care se poate realiza un asemenea cadru printre care se regăsesc: fibra de carbon, aluminiul, lamnul dar și plasticul, dar se găsesc și cadre gata făcute, ele sunt pregătite pentru a monta pe ele restul de componente alcătuitoare ale dronei.
Figura 1.5
Motoarele Brushless DC, prezetate în figura 1.6, pot să aprovizioneze puterea necesară pentru a înălța drona, fiecare dintre ele trebuie controlat de către un variator de viteză. Spre deosebire ce motoarele DC, motoarele BLDC nu conțin perii care să controleze alimentarea înfășurărilor, în schimb aceste motoare conțtin pe stator un set de înfățurări care sunt alimentate intr-o anume secvență pentru a roti partea exterioară, adică rotorul, care are o serie de mangeți aranjați intr-o secvență alternativă și ei.
Figura 1.6
Speed controlerele, sau variatoarele de viteză ale motoarelor, reprezentate în figura 1.7, sunt unitățile care controlează viteza de rotație a motoarelor, puterea dezvoltată de acestea trebuie corelată cu puterile motoarelor. Ele sunt alimentate de la o sursă de energie destul de puternică, deobicei o baterie Litiu-Polimer, și sunt controlate de către microcontroler prin intermediul unui semnal PWM. În funcție de proprietățile semnalului prezentat la intrare, variatoarele de viteză vor determina ca motoarele să se învârtă cu o viteză mai mică sau mai mare.
Figura 1.7
Elicele, reprezentate în figura 1.8, sunt acele componente care transformă forța de rotație a motoarelor în propulsie. Pentru un quadcopter este nevoie de doua tipuri de elice, un set care să se învârtă în sensul acelor de ceasornic ți un alt set care să se învartă în sens opus. Caracteristicile cele mai importante pentru selecția elicelor sunt: diametrul care trebuie ales în funcție de dimensiunea quadcopterului și înclinarea care este determinată în mare parte de caracteristicile motoarelor.
Figura 1.8
Sursa de alimentare sau bateria trebuie sa aprovizioneze puterea electrică necesară pentru a ridica drona în aer. Cele mai utilizate surse de alimentare pentru quadcoptere sunt acumulatorii Litiu-Polimer datorită faptului că aceștia oferă curenți foarte mari de descărcare și prin urmare oferă putere necesară pentru motoare. Pentru a obține aceste performanțe acumulatorii sunt construiți dispunând mai multe celule în paralel.
Uitatea de masurare a inerției, reprezentată înfigura 1.9, este componenta care conține senzorii responsabili cu furnizarea informațiilor care ajută la stabilizarea dronei. Cele mai comune unități IMU conțin doar accelerometru și giroscop, dar unele mai avansate dețin pe lângă acestea megnetometru, barometru, acestea permițând elaborarea unu sistem de control mai complex.
Figura 1.9
Microcontrolerul, reprezentat în figura 1.10, este de fapt creierul întregii operațiuni, el face calculele necesare pentru stabilizarea și controlul dronei, el analizează datele de la senzori ți datele provenite de la transmițător iar în urma acestor analize determină viteza de rotație necesară pentru fiecare dintre motoare.
Figura 1.10
Transmițătorul, care în cazul nostru este un smartphone cu Android, realizează transmiterea datelor de control către dronă prin intermediul tehnologiei bluetooth. Tehnologia Bluetooth a fost creată de către Ericsson în 1994, fiind proiectată să fie o alternativă la magistralele RS-232. Această tehnologie realizează schimburi de date între terminale aflate la distanțe scurte utilizând transmisii la radio, operând în banda de frecvență aflată între 2,4 și 2,485 GHz care nu necesită licență în majoritatea țărilor deoarece este rezervată pentru domeniile industrial, stiințific și medical (ISM). Conexiunea dintre terminale este full duplex iar pentru securitate frecvența pe care se realizează transmisia de date este schimbată cu o rată de aproximativ 1,6 KHz. În figura 1.11 este prezentat un modul bluetooth utilizat în cadrul proiectului.
Figura 1.11
1.3 Transmițătorul
Comanda dronei în acest caz se realizează prin intermediul unui smartphone cu Android OS care aprovizionează datele de comandă, s-a ales acest tip de transmitător deoarece conține toți senzorii și interfețele de comunicare necesare pentru a îndeplini această sarcină, iar pe lângă acestea conține un microcontroler cu arhitectură ARM ceea ce oferă o putere mare de procesare. Pentru a îndeplini această sarcină sunt utilizați senzorii de orientare ai telefonului cu ajutorul cărora se determină poziția acestuia relativă cu pământul, utilizând datele prelevate de la acești senzori și încă o serie de date aprovizionate prin comenzile on screen, smartphone-ul va compune o serie de comenzi pe care le va transmite prin interfața bluetooth către dronă.
Mișcările realizate cu telefonul vor determina mișcări similare ale dronei cu un oarecare nivel de proporționalitate. Înclinarea în față a telefonului va face ca și drona să se încline în aceiași direcție, dar desigur nu la același grad de înclinare, similar mișcările în celelalte direcții vor fi imitate de către dronă.
Controlul altitudinii am optat să se realizeze prin intermediul interfeței, reprezentate în figura 1.12, cu utilizatorul, în urma acestui fapt pe panoul de comandă se regăsește un cursor care va determina modificarea votezelor tuturor motoarelor deodată și în aceleași proporții. Pe lângă aceasta, pe panoul de control se regăsește un alt cursor care va determinaserie de comenzi pe care le va transmite prin interfața bluetooth către dronă.
Mișcările realizate cu telefonul vor determina mișcări similare ale dronei cu un oarecare nivel de proporționalitate. Înclinarea în față a telefonului va face ca și drona să se încline în aceiași direcție, dar desigur nu la același grad de înclinare, similar mișcările în celelalte direcții vor fi imitate de către dronă.
Controlul altitudinii am optat să se realizeze prin intermediul interfeței, reprezentate în figura 1.12, cu utilizatorul, în urma acestui fapt pe panoul de comandă se regăsește un cursor care va determina modificarea votezelor tuturor motoarelor deodată și în aceleași proporții. Pe lângă aceasta, pe panoul de control se regăsește un alt cursor care va determina controlul pe axa YAW.
Figura 1.12
Pe lânga posibilitatea de a comanda in mod direct drona, panoul de comandă oferă și posibilitatea de a modifica parametri care influențează comenzile distribuite motoarelor, utilizând această opțiune se poate adapta quadcopterul pentru condiții diferite de zbor.
Capitolul 2.
Placa pentru dezvoltare de aplicații cu microcontroler Arduino Uno
Mediul de dezvoltare utilizat este cunoscut sub denumirea de Arduino, care este o platformă de procesare hardware bazată pe o placă cu intrări și ieșiri analogice și digitale dar care poate fi controlă sau programată utilizând limbajul de programare open source al platformei software Processing. Arduino poate fi folosit pentru a dezvolta proiecte independente de PC sau acestea pot fi conectate la un computer pentru a permite comunicarea dintre dispozitiv și PC. Aceste plăci pot fi asamblate manual utilizând schemele electrice disponibile pe pagina web arduino.cc dar acestea pot fi achiziționate și preasamblate.
Mediul de dezvoltare utilizat pentru a interacționa cu placa Arduino și pentru a o programa poate fi downloadat de pe site-ul Arduino fie sub formă împachetată gata de a fi despachetat și utilizat, fie sub formă de wizard care, cu doar câteva clickuri, va fi instalat și pregătit pentru a fi utilizat.
Putem preciza următoarele avantaje ale platformei Arduino, față de alte produse similare de pe piață:
Este compatibilă cu mai multe sisteme de operare, astfel poate fi utilizat unul din următoarele sisteme de operare: Windows, Linux sau Macintosh.
Este bazată pe mediul de dezvoltare Processing care este un IDE(Integrated Development Enviroment) simplu de utilizat folosit de către designeri și artiști.
Este programată prin USB, nu prin portul serial, această proprietate fiind utilă datorită faptului că multe computere actuale nu dețin porturi seriale.
Este o platformă open source iar dacă dorești, poți achiziționa toate componentele separate și poți asambla o asemenea placă bazându-te pe schemele electrice disponibile online, fără a contribui financiar către compania Arduino.
Partea hardware este destul de ieftină, o placă Arduino UNO costând in jur de 20€, iar înlocuirea microcontrolerului defect de pe placă se realizează foarte simplu și la un cost de doar 5€. Deci greșelile se repară foarte ușor și nu sunt foarte costisitoare.
Există o comunitate activă de utilizatori, deci o mulțime de persoane care te pot ajuta să depășești problemele întâmpinate.
Proiectul Arduino a fost gândit cu scop educațional, el fiind perfect pentru începătorii care vor să observe rezultate cât mai repede.
2.1 Partea hardware
Placa Arduino este o placă de dezvoltare, adică o placă cu cablaj imprimat, care conține un computer întreg într-un cip mic, denumit microcontroler. Acest cip, pe nume ATmega328, este de cel puțin o mie de ori mai puțin puternic decât un computer obișnuit, dar este mult mai ieftin și foarte util pentru a construi dispozitive interesante. Placa conține toate componentele necesare pentru ca microcontrolerul să funcționeze corespunzător și pentru a putea comunica cu computerul. Sunt disponibile mai multe versiuni ale plăcii Arduino dar cea pe care o vom folosi pentru a realiza proiecut prezent este denumită Arduino UNO Rev.3, prezentată în figura 2.1, aceasta este cea mai simplă de folosit și cea mai potrivită pentru începătorii care vor să asimileze noi cunoștințe.
Figura 2.1
În figura anterioară se pot observa toate caracteristicile plăcii, printre care se poate preciza:
14 intrări și ieșiri digitale reprezentate de pinii de la 0 la 13, funcțiine acestora vor fi determinate de către programul scris în Arduino IDE.
6 intrări analogice reprezentate de pinii A0-A5, aceste intrări sunt dedicate pentru a evalua semnale analogice pe care le vor converti în valori de la 0 la 1023.
6 ieșiri analogice adică pinii 3,5,6,9,10 și 11 sunt pini digitali care pot să producă semnale PWM prin care se poate varia tensiune a de ieșire până la un anumit nivel, și acestea se pot programa din Arduino IDE cu valori de la 0 la 255.
Placa poate fi alimentată de la portul USB al unui PC, un incărcator cu ieșire USB, sau un adaptor AC care oferă o tensiune recomandată de 9V la ieșire. Dacă nu este atașată nici o sursă de alimentare placa va fi alimentată de la conexiunea USB, dar în momentul în care se conectează alimentarea separată, placa Arduino o va folosi pe aceasta în mod automat.
2.2 Partea Software
Pentru a construi programul care va rula pe microcontrolerul Atmega328 de pe placa Arduino, se va utiliza mediul de dezvoltare Arduino, prezentat în figura 2.2, care se instalează pe computer, și oferă utilizatorilor o interfață simplă și ușor de folosit cu ajutorul careia aceștia pot realiza atât programe simple care vor realiza operații aproape nesemnificative în schimb utile pentru scopuri educaționale dar aceștia vor putea realiza și programe foarte complexe care vor profita de toate resursele microcontrolerului.
Figura 2.2
Când utilizatorul a finalizat un anume soft, încărcarea acestuia pe microcontroler este foarte simplă. După ce placa Arduino a fost conectată la PC din interfața mediului de dezvoltare se va seta tipul de placă cu care se dorește comunicarea și portul la care a fost conectată aceasta. Odată ce toți acești pași au fost urmați, rămâne doar să fie apăsat butonul ”Upload” care va determina compilarea software-ului și transformarea acestuia într-un limbaj care poate fi înțeles de către microcontroler. Acest pas are o importanță destul de mare, deoarece realizează operațiile prezentate anterior fără ca utilizatorul să fie nevoit să cunoască toate detaliile necesare în programarea microcontrolerelor.
Rezumând informațiile anterioare, se poate constata că programarea unei plăci Arduino se realizează prin parcurgerea următorilor pașiȘ
Conectarea plăcii Arduino la PC
Scrierea softului care se dorește să fie încărcat pe placă
Uploadarea acestui soft pe microcontroler, utilizând conexiunea USB, după care așteptarea resetării acestuia
În final microcontrolerul va executa programul uploadat de fiecare dată când va fi alimentat
2.3 Magistrale de comunicare
Deoarece magistralele de comunicare au un rol foarte important în buna funcționare a proiectului prezent, în continuare se vor prezenta cele două magistrale: I2C, utilizată pentru a realiza comunicarea cu senzorii și UART, care este utilizată pentru a transmite comenzi dronei.
2.3.1 Magistrala I²C
Magistrala I²C a fost proiectată de către Philips în anii 80 pentru a permite o comunicare simplă între componentele care sunt regăsite pe aceeași placă de circuit. Numele I²C provine de la ”Inter Integrated Circuit” iar uneori această magistrală este denumită și IIC.
Viteza inițială de transmitere a datelor a fost standardizată la 100 kbps(kilo biți pe secundă) și multe dintre aplicații nu necesită o viteză mai mare chiar și în ziua de azi. Pentru acele aplicații care au nevoie de rate de transfer mai mari, există o variantă mai rapidă cu o viteză de 400 kbps iar din 1998 a fost introdusă și o variantă care atinge viteze de până la 3,4 Mbps.
I²C nu este folosit exclusiv pentru componente aflate pe aceeași placă, această magistrală poate conecta componente aflate intr-o conexiune prin cablu. Simplitatea și flexibilitatea sunt caracteristici care fac această magistrală utilă pentru multe aplicații.
Cele mai importante caracteristici sunt:
Sunt necesare doar două cabluri
Ratele de transfer nu sunt stricte, masterul generează semnalul de tact.
Între fiecare componentă există o relație master/slave
Fiecare dispozitiv se poate adresa printr-o simplă adresă
Este o magistrală multi-master, oferind posibilitatea de arbitrare între dispozitive
Interfața fizică este realizată prin doar doi conectori, numiți SCL și SDA. SCL este linia destinată pentru semnalul de clock, este utilizată pentru a sincroniza transferurile de date de pa magistrala I²C . Este nevoie să existe un al treilea conector care este de fapt doar masa, sau 0V. Pe lângă acestea se paote să existe un conector de 5V care să alimenteze respectivele dispozitive cu care se realizează comunicarea. Atât calea SCL cât și calea SDA sunt aflate în mod normal în starea HIGH sau 1 logic, circuitele aflate pe această magistrală au doar posibilitatea de a le aduce pe acestea într-o stare de LOW sau 0 logic. Pentru ca liniile de comunicare să poată reveni în starea 1 acestea trebuiesc echipate cu rezistori de tip pull-up către linia de alimentare. Ar trebui să existe un rezistor între SCL și linia de 5V și încă un rezistor între SDA și linia de 5V. Este nevoie doar de un set de pull-up rezistori pentru întreaga magistrală, nu este nevoie de câte un set pentru fiecare dispozitiv, fapt prezentat în figura următoare. În figura 2.3 este reprezentată o magistrală I²C la care sunt conectate mai multe dispozitive
Figura 2.3
Valorile rezistorilor nu sunt critice, de cele mai multe ori acestea sunt de 1,8KΩ, 47KΩ sau 10KΩ dar aproximativ orice valoare apropiată de acestea va funcționa. Dar valoarea de 1,8KΩ va oferi performanțtle cele mai bune. În cazul în care acești rezistori lipsesc, liniile de comunicare vor fi pe 0 logic tot timpul iar magistrala nu va funcționa.
Dispozitivele de pa magistrala I²C sunt fie de tip master sau de tip slave. Dispozitivul master este cel care deține controlul liniei SCL, iar dispozitivele slave sunt cele care sunt supuse masterului. Un dispozitiv slave nu poate iniția un transfer pe magistrală, doar un master poate face așa ceva. Pot fi, și de obicei sunt mai multe dispozitive slave pe o magistrală, dar în cele mai multe cazuri există doar un master. Atât un master cât și un slave poate transfera date pe magitrală, dar acel transfer este întotdeauna controlat de către master.
Când un master dorește să comunice cu un slave el începe această comunicare prin inițierea unei secvențe de start pe magistrală. O secvență de start este una din cele două secvențe speciale definite pentru această magistrală, cealaltă fiind secvența de stop. Aceste secvențe sunt speciale deoarece sunt singurele două secvențe în care nivelul liniei de date SDA se modifică în timpul în care semnalul de tact SCL este pe 1 logic. Secvențele de start și de stop, din figura 2.4, reprezintă punctele de început și de final ale tranzacțiilor dintre dispozitive.
Figura 2.4
Datele sunt transferate în secvențe de 8 biți, precum în figura 2.5, acești biți sunt plasați pe linia SDA începând cu MSB, Most Significant Bit. Între timp linia SCL este alternată între 1 și 0. Este de menționat faptul că circuitul nu poate să aplice tensiune pe linie, el doar o lasă liberă și rezistorul pull-up o va aduce la 5V. Pentru fiecare 8 biți transferați, dispozitivul care recepționează datele va transmite înapoi un bit de finalizare, ACK, deci pentru fiecare 8 biți de date sunt necesare 9 impulsuri de tact. Dacă receptorul transmite înapoi un bit ACK cu valoare 0 atunci transmițătorul va ști că acesta este a recepționat datele și este pregătit pentru următorul byte, în cazul în care transmite înapoi un bit cu valoare 1, transmițătorul va ști că receptorul nu mai poate prelua date și trebuie intreruptă comunicarea.
Figura 2.5
Toate adresele interfețelor I²C sunt fie de 7 fie de 10 biți, dar utilizarea adreselor de 10 biți este foarte rară. Aproape doate dispozitivele prezente pe piață dispun de o adresă pe 7 biți, însemnând că pe o magistrală se pot regăsi la un moment dat până la 128 de dispozitive funcționale. Când se trimit cei 7 biți ai adresei, de fapt sunt trimiși tot 8 biți, ultimul bit adăugat are rolul de a informa dispozitivul slave dacă masterul citește sau scrie date în acesta. Dacă bitul este 0 dispozitivul master trimite date către slave, iar în cazul în care bitul este 1 dispozitivul master va citi date de la slave. În figura 2.6 se observă că cei 7 biți ai adresei sunt poziționați ca fiind cei mai importanți ai bytului iar bitul de scriere/citire este pe poziția LSB, Least Significant Bit.
Figura 2.6
2.3.2 UART
Controlerul UART, Universal Asynchronous Receiver Transmitter, este componenta esențială pentru comunicarea serială a unui dispozitiv electronic. Acest controler preia byți de date și transmite biți individuali în mod secvențial. La destinație, un al doi-lea UART reasamblează biții în byți compleți.
Transmiterea serială a datelor este utilizată în cea mai mare parte pentru modemuri și comunicații lipsite de rețea dintre computer și terminale sau alte dispozitive.
Există două forme de bază pentru comunicarea serială: sincronă și asincronă. În funcție de tipul de comunicare suportată de către echipament, în descrierea acestuia se va regăsi un A în cazul în care acesta suportă comunicații asincrone, și un S în cazul în care acesta suportă comunicații sincrone. Ambele forme sunt descrise în cele ce urmează.
Prescurtările utilizate sunt:
UART (Universal Asynchronous Receiver/Transmitter)
USART (Universal Synchronous-Asynchronous Receiver/Transmitter)
2.3.2.1 Conexiunea serială sincronă
Această formă de comunicare serială impune utilizarea de către transmițător și receptor a unui semnal comun de tact, sau ca transmițătorul să aprovizioneze receptorul cu un semnal asemănător pentru ca acesta din urmă să poată realiza citirea datelor la momentul de timp potrivit. În majoritatea formelor de comunicare serială, în cazul în care nu există date de transmis, trebuiesc transmise caractere nesemnificative astfel încât să existe un transfer continuu de date. Comunicarea serială sincronă este deobicei mai eficientă deoarece nu sunt transmiși decât biți de date între transmițător și receptor, dar poate fi și costisitoare dacă între transmițător și receptor este necesară prezența unui circuit care să transmită semnalul de clock.
O formă de transmitere sincronă a datelor este folosită cu un HDD(Hard Disc Drive), în acest caz datele sunt transmise prin intermediul unui set de conectori iar semnalul de tact prin intermediul altui conector. Dar aceste dispozitive, nu realizează în realitate o conexiune serială, având câte un conector pentru fiecare bit din cuvântul care se dorește a fi transmis, ele sunt denumite dispozitive cu interfață paralelă, iar interfața din PC, Personal Computer, nu realizează conexiuni seriale sincrone, cele prezentate anterior au caracter de exemplu.
2.3.2.2 Conexiunea serială asincronă
Acest tip de conexiune permite transmițătorului să transfere date fără a fi nevoie de un semnal de tact. În schimb transmițătorul și receptorul trebuie să fie setați pe pe aceiași parametrii temporali și pe lângă acest fapt fiecare cuvânt va conține biți care ajută la sincronizarea unităților de transmisie și recepție.
Când unității UART îi este prezentat un cuvânt, acestui cuvânt îi este adăugat un bit de start. Bitul de start este necesar pentru a alerta receptorul că urmează a fi transmis un cuvânt, și pentru a sincroniza semnalul de tact al transmițatorului cu cel al receptorului. Aceste doua semnale trebuie să fie atât de precise încât sa nu existe o diferență mai mare de 10% între ele în timpul transmiterii restului de biți din cuvânt. Aceastâ condiție a fost stabilită încă de pe timpurile telegrafelor iar dispozitivele actuale o satisfac cu brio.
După ce a fost transmis bitul de start, urmează a fi transmiși biții individuali care compun cuvântul începând cu LSB, Least Significant Bit. Fiecare bit din transmisia curentă este transmis pentru exact aceiași perioadă de timp ca restul biților, iar transmițătorul verifică starea liniei de date la fiecare jumătate de interval pentru a determina dacăa aceasta de afla in starea 1 sau în starea 0. Ca exeplu dacă ar dura 2 secunde pentru transmiterea fiecărui bit, receptorul va examina starea liniei de date pentru a determina daca aceasta prezintă un 0 sau un 1 după exact o secundă, după care va astepta două secunde pentru a citi următorul bit, și tot așa până la finalul cuvântului.
Transmițătorul nu știe când receptorul citește valoarea bitului, el știe doar când semnalul de tact îi indică faptul că trebuie transmis următorul bit al cuvântului.
Când întregul cuvânt a fost transmis, acestuia i se poate adaăuga un bit de paritate pe care îl generează transmițătorul. Bitul de paritate poate fi utilizat de către receptor pentru a determina dacă s-au efectuat anumite erori în timpul transmiterii detelor. La sfârșit este transmis cel puțin un bit de stop de către transmițător.
Când receptorul a a recuperat toți biții cuvântului, el poate să verifice bitul de paritate, atât receptorul cât și transmițătorul trebuie să fie setați corespunzător pentru ca acest fapt să se realizeze. În final receptorul verifică prezența unui bit de stop. Dacă bitul de stop nu apare atunci când ar trebui controlerul UART va considera întregul cuvânt ca fiind eronat, iar la citirea acestuia va oferi o eroare procesorului. Deobicei aceste erori sunt determinate de frecvențele diferite ale transmițătorului și a receptorului sau de întreruperea conexiunii.
Chiar dacă datele nu au fost recepționate corect, unitatea UART separă automat datele utile de biții de start, paritate și stop. Dacă unitatea de transmisie și cea de recepție au fost configurate corect, acești biți nu vor fi transmiși mai departe către procesor.
Dacă un alt cuvânt este pregătit pentru a fi transmis, bitul de start al cuvântului nou, poate fi transmis imediat ce bitul de stop al cuvântului anterior a fot transmis.
Pentru că datele transmise în mod asincron se auto-sincronizează, dacă nu există date de transmis, calea de transmitere poate fi lăsată liberă.
Capitolul 3.
Sistemul de acționare al unui quadrocopter
În construcția quadcopterului componentele active, în acest caz fiind reprezentate de motoare, îndeplinesc roluri foarte importante, datorită faptului că drona nu se poate menține în aer fără modificarea perpetuă a vitezelor acestora, iar lipsa totală a acestora . Lucrul prezentat înainte trebuie realizat pentru a corecta erorile de poziționare cauzate de neuniformități ale mediului atmosferic în urma diferențelor de temperatură și presiune, dar aceste erori pot fi determinate și de către construcția defectuoasă a dronei, oricare dintre procesele relatate acționează asupra dronei, aceasta trebuie să detecteze prezența lor și să reacționeze într-un mod corespunzător pentru a se restabili înapoi în poziția dorită.
3.1 Motoarele BLDC
Motoarele utilizate pentru scopurile curente sunt denumite BLDC Outrunner, detalii despre funcționarea acestor tipuri de motoare vor fi menționate în paragrafele ce urmează, dar mai întâi va fi prezentată semnificația denumirii Outrunner.
Termenul outrunner se referă la un tip de motor brushless utilizat în mare parte în cadrul construcției aeromodelelor. Acest tip de motor își rotește partea exterioară prezentată în figura 1, reprezentată de către rotor, în jurul părții centrale prezentată în figura 2, reprezentată de către stator, unde se regăsesc înfășurările care de fapt determină rotația motorului.
Motoarele outrunner, reprezentate în figura 3.1 și figura 3.2, se rotesc la viteze mult mai mici decât cele inrunner, care sunt structurate în mod tradițional cu rotorul în centru iar statorul pe exterior, dar cuplul produs de ele este considerabil mai mare fapt care reduce nevoia utilizării unei cutii de viteze ineficiente pentru a roti o elice, motoarele outrunner având în mod normal elicele montate direct pe rotorul acestora. Acest simplu fapt reduce greutatea aeromodelului, complexitatea acestuia și zgomotul produs în timpul funcționării.
Figura 3.1; 1 – rotorul unui motor outrunner
Figura 3.2; 1 – înfășurările statorului
În cele ce urmează vor fi prenzetate caracteristicile moatoarelor brushless, dar și funcționarea acestora.
Unitățile care transformă energia electrică în forța de rotație necesară propulsiei sistemului patru motoare BLDC, Brushless Direct Current, cărora le este atașată câte o elice, care la viteze foarte mari de rotație produc curenți de aer relativ intenși pe direcția verticală și cu sensul în jos.
Motoarele BLDC sunt folosite în foarte multe domenii, acestea edvenind din ce în ce mai populare. Aplicațiiale acestora se pot regasi în industria automobilistică, aerospațială, medicală, automatică și multe altele.
Răaspândirea folosiriiacestor tipuri de motoare se datorează unor avantaje pe care acestea leaduc față de motoarele clasice cu perii sau chiar și cele de inducție, acestea fiind:
variație relativ stabilă a cuplului în funcție de viteză
eficiență foarte ridicată
durată de viață mult mai lungă
zgolot redus în regim de funcționare
gama vitezelor de rotație mult mai mare
În plus față de cele menționate anterior, raportul cuplului față de dimensiunile motorului este mare, astfel fiind foarte practice în cazuri în care volumul și masa sistemului sunt factori critici.
Motoarele BLDC sunt un tip de motoare sincrone deoarece câmpul magnetic din stator și cel din rotor au aceiași frecvență în timpul rotației, deci nu se produce acel defazaj regăsitla motoarele de inducție.
Principalele configurații ale acestor motoare sunt:
într-o singură fază
în doua faze
în trei faze
Dintre care ultima configurație este cea mai răspândită și este cea utilizată în cadrul ansamblului nostru, structura căreia este prezentată în figura 3.3.
Figura 3.3
Statorul, prezentat în figura 3.4, unui motor BLDC este format din laminări ale unor plăci de oțel din care sunt decupate unele porțiuni corespunzătoare zonelor în care vor fi pziționate înfășurările. Această parte a motorului aduce o oarecare asemănare față de statorul motorului de inducție, diferența dintre cele două fiind reprezentată de către distribuirea înfășurărilor. În cele mai multe cazuri motoarele BLDC conțin trei înfășurări statorice conectate în stea.
Figura 3.4; 1-tole, 2- înfășurări, 3- rulment
În funcție de acea dispoziție a înfășurărilor de pe stator, se pot determina formele de undă ale forței electromotoare inverse, forță cu ajutorul căreia se poate măsura viteza și in urma unor calcule poziția motorului, fapt care se dovedește a fi foarte util în cazurile în care motoarele utilizate nu sunt prefabricate cu senzori Hall.
Rotorul, prezentat în figura 3.5, este fabricat utilizând de la doi până la 8 perechi de magneți permanenți dispuși însecvențe alternative N-S-N-S. Criterul principal care determină materialul magnetic utilizat pentru construcția rorotului este densitatea necesară a câmpului magnetic. În mod obișnuit magneții de Ferită sunt utilizați în construcția motoarelor, dar odată cu numeroasele avansuri tehnologice, sunt folosiți din ce în ce mai preponderent magneți din aliaje rare. Magneții din Ferită sunt pe de-o parte mult mai ieftini, dar în schimb oferă câmpuri magnetice cu o densitate si intensitate redusă față de aliajele magnetice care oferă o densitate mare a câmpului magnetic în raport cu volumul nor, fapt care rezultă într-un cuplu ridicat pentru rotoare de dimensiuni mai mici, astfel îmbunătățind raprtul de putere în funcție de greutate al motorului.
Figura 3.5; 1- magneți, 2- structură metalică, 3- înveliș exterior
Spre deosebire de un motor de curent continuu cu perii, un motor BLDC este controlat electronic. Pentru ca motorul BLDC să se rotească, înfășurările statorice trebuiesc alimentate într-o anumită ordine. Este foarte important să se cunoască poziția rotorului pentru a știi exact care înfășurare statorică trebuie alimentată, la un anumit moment dat având în vedere secvența de comutare. În mod obișnuit poziția rotorului este determinată folosind senzori Hall integrați în statorul motorului. Astfel de motoare care sunt dotate cu senzori Hall, conțin câte trei senzori în stator, iar atunci când polii magnetici trec prin vecinătatea senzorilor Hall, aceștia oferă la ieșirile lor semnale de amplitudine variabilă, indicând polul N sau S al magnetului din apropiere. Bazându-ne pe valorile specifice ale fiecăruia din cei trei senzori în parte, poate fi determinată secvența de comutații care va urma să fie utilizată.
Este posibil să se determine momentul în care să se realizeze comutarea între diferitele înfășurări ale motorului și fără a se utiliza senzori Hall, prin masurarea forței electromotoare inverse BEMF, Back Electromotive Force, pe înfășurarea care nu este alimentată în timpul funcționării motorului. Utilizând această metodă se realizează o reducere a costului de construcție pentru motoare nefiind nevoie să se mai inglobeze și senzorii Hall în statorul acestora. Aceste forme de undă se pot observa în figura 3.6 care prezintă masurători realizate cu osciloscopul în timpul funcționarii unui motor.
Figura 3.6; Tensiuni BEMF
Există și o serie de dezavantaje în folosirea unor astfel de motoare:
Motorul trebuie să aibă o viteză sufficient de mare pentru ca tensiunea corespunzătoare acestei forțe să fie observată de către circuitele de măsură.
Modificări bruște ale sarcinii aplicate motorului vor cauza ca sistemul de măsură să nu mai funcționeze corespunzător.
Tensiunea respectivă poate fi măsurată doar când motorul se află într-o plajă de turații anume pentru tenstiunea aplicată la acel moment dat.
Comutarea la frecvențe mai mari decât cele ideale, va determina un răspuns întârziat al motorului la comenzi.
Dar având în vedere că elicele utilizate nu au un grad de înclinare variabil iar sarcina motorului nu va fluctua, pe lângă acestea luând în calcul și costul redus al acestui tip de aplicație, în cadrul acestui proiect se vor utiliza astfel de motoare fără senzori.
În fiecare din secvențele de comutare una dintre înfășurări va fi conectată la potențial ridicat deci curentul va intra în motor prin aceasta, o a doua bornă va fi conectată la potențial negativ, deci acesta va fi punctul de ieșire al curentului din motor iar cea de a treia bornă va fi izolată, astfel nu va permite trecerea curentului prin ea.
Astfel rezultă cuplu din interacțiunea dintre câmpul magnetic generat de înfășurările statorului și câmpul magnetic al magneților permanenți din rotor. În mod ideal cuplul maxim s-ar produce atunci când defazajul dintre aceste două câmpuri magnetice este de 90° și se deplasează astfel în sincronism.
Pentru ca motorul să își mențină starea de rotație, câmpul magnetic produs de cătrestator trebuie să se deplaseze pentru a compensa mișcarea defazajului cauzat de rotirea motorului.
3.2 Invertoare trifazate
Pentru a putea înțelege pe deplin funcționarea unui astfel de variator de viteză trebuie să luăm în considerare funcționarea invertoarelor trifazate în punte care stau la baza acestor tipuri de variatoare.
În figura 3.8 este prezentată configurația tipică a unui invertor trifazat în punte, care este aceiași indiferent de durata de conducție raportată la o semiperioadă a tensiunii de ieșire. În această schemă nu sunt luate în considerare circuitele necesare comutării forțate a tranzistoarelor.
Figura 3.8
Formele de variație ale tensiunilor de ieșire, care caracterizează un invertor cu funcționare pe 1200 sunt prezentate în figura 3.9. Se consideră că la un moment dat nu se vor comanda simultan două tranzistoare care se află pe aceiași latură a punții. Se observă că, într-un interval de timp care corespunde cu durata de 1/6 din perioada tensiunii de ieșire a unei faze vor conduce două tranzistoare care se află pe două laturi diferite ale punții, respectiv unul din partea superioară și unul din partea inferioară a acesteia. Astfel, de exemplu, în intervalul conduc simultan tranzistoarele și , alimentând sarcina și . Dacă tensiunea de intrare atunci, în raport cu potențialul de referință N, tensiunile care se vor regăsi pe cele două sarcini vor avea valorile E.
Figura 3.9
3.3 Variatorul de viteză
Controlerul care realizează comanda motoarelor este recunoscut sub denumirea de ESC, Electronic Speed Controler, sau în limba română variator de viteză, conține circuite care acționează înfășurările motoarelor, în continuare va fi prezentată funcționarea acestora.
Un ESC pentru motoare cu perii, practic variază tensiunea de alimentare astfel încât să aprovizioneze motorul cu o tensiune controlată care îi va modifica viteza.
Spre deosebire de cel prezentat anterior, un ESC pentru motoare BLDC, prezentat în figura 3.7, are în principiu două lucruri de realizat. În primul rând trebuie să convertească tensiunea continuă de la baterie în tensiune alternativă care va roti motorul și trebuie să potrivească frecvența tensiunii de la ieșire cu viteza de rotație a motorului astfel încât sistemul să fie cât mai eficient, dar cel mai important, pentru ca să nu deterioreze motorul. În al doilea rând ESC-ul trebuie să modifice tensiunea care este distribuită motorului, și aceasta este variata În funcție de viteza de rotație dorită. Deci un ESC va produce tensiuni alternative pe fiecare dintre cele trei ieșiri, acestea vor fi defazate între ele cu 120 de grade, iar frecvența și amplitudinea acestora vor fi modificate in continuu pentru a varia viteza de rotație, pentru a reduce pierderile de energie și pentru a prelungi durata de bună funcționare a motorului.
Figura 3.7
ESC-urile sunt clasificate în mod normal în funcție de curentul maxim pe care pot sa îl ofere la ieșire, de exemplu 25A sau 30A. Cu cât acest factor al clasificării crește, cu atât ESC-urile tind să devină mai voluminoase și cu o masă din ce în ce mai mare. Variatoarele de viteză din ziua de azi suportă o varietate de tipuri de acumulatori pentru alimentare începând de la acumulatori NiMH, Nickel Metal Hidride, până la acumulatorii Li-Po, Litiu Polimer, care oferă puteri considerabile.
La baza unui variator de viteză, de altfel ca și în cazul majorității gadgeturilor din ziua de azi, stă un microcontroler care controlează întreg sistemul și datorită lui se poate realiza programarea diferiților parametrii ai variatorului de viteză.
Pentru a accesa meniul de programare al ESC-ului se utilizează aceiași interfață de comandă utilizată și în cazul funcționării normale a acestuia adică intrarea care acceptă semnale PWM. În momentul în care se dorește realizarea unei modificări a parametrilor, lățimea impulsului PWM trebuie să fie maximă iar ESC-ul nu trebuie să fie alimentat, imediat ce se alimentează ESC-ul intrarea în meniul de programare va fi indicată de o secvență de semnale sonore emise de către motorul conectat la ESC.
Odată ajunși în meniul de programare, se vor putea modifica parametrii precum frânarea, tensiunea minimă la care să se decupleze alimentarea, tipul acumulatorului, modul în care să se decupleze alimentarea, modul de pornire, sincronizarea dintre motor și ESC.
Fiecare dintre aceste opțiuni este reprezentată de către o anumită secvență de impulsuri audio. Selectarea unei opțiuni și modificarea caracteristicilor acessteia se realizează prin varierea semnalului PWM.
În momentul în care modificările efectuate sunt în conformitate cu ceea ce doream să realizăm, se poate selecta opțiunea Exit, care va salva cele efectuate și va readuce ESC-ul în modul normal de funcționare.
Funcționarea ESC-ului în modul utilizat pentru controlul motoarelor este realizată în linii mari după modul prezentat mai sus, dar există anumite particularități ale acestui mod de funcționare care trebuiesc menționate.
Ca măsură de siguranță ESC-ul nu va determina rotirea motorului imediat ce acesta este alimentat și la intrare este prezent un semnal PWM. Pentru a activa ESC-ul și a putea controla viteza motorului, la intrare trebuie prezentat un semnal PWM cu o anumită lățime, în cazul acesta, este nevoie de un grad de umplere de 11% sau 12%. Prezența acestui semnal va determina activarea ESC-ului, dar nu și rotația motorului, ca o măsură suplimentară de siguranță motoarele nu vor începe să se rotească, până când semnalul de intrare va avea un grad de umplere de 14% sau 15%, ceeace înseamnă că doar 85% din lățimea impulsului PWM este utilizată pentru a controla variația vitezei motorului.
Schema circuitului electronic al ESC-ului este prezentată în figura 3.10. După cum se poate observa pentru fiecare dintre cele 3 ieșiri ale ESC-ului sunt alocate 4 tranzistoare de putere care vor aduce ieșirea respectivă fie la un potențial ridicat, fie la masă.
Figura 3.10
Toate aceste comutări reprezentate de comenzile oferite în poarta tranzistorilor sunt efectuate de către microcontroler. Acesta va evalua semnalul PWM de la intrare dar și tensiunea electromotoare inversă pentru a determina atât viteza de rotație dorită de către utilizator dar și poziția motorului în momentul respectiv. Analizănd aceste date va rezulta momentul exact în care va trebui realizată trecerea la următoarea secvențaă de comutație.
Tot din schemă putem observa și structura circuitului BEC, Battery Elimination Circuit, care oferă o tensiune de alimentare stabilizată la 5V pentru unele circuite adiționale necesare dronei, cum ar fi placa Arduino în cazul de față. Acest circuit este realizat printr-o serie de stabilizatoare de tensiune în 3 puncte care oferă o siguranță sporită a tensiunii stabilizate oferite pentru a alimenta circuitele, el oferind un curent de până la 2A pentru tensiunea de 5V.
Capitolul 4.
Programe aplicații pentru comanda unui quadrocopter
Acest capitol va prezenta totalitatea componentelor software care alcătuiesc întregul program realizat cu scopulde a menaja evenimentele care intervin pe parcursul zborului. Pe lângă acestea vor fi prezentate și interacțiunile dintre componentele respective și funcționalitatea întregului sistem în momentul în care toate acestea sunt puse laolaltă.
După cum s-a menționat în capitolul 1, un quadrocopter nu are o structură sau formă aerodinamică, el fiind dependent de instrumentele software care vor încerca să compenseze această neregularitate.
Pe lângă partea de stabilizare software-ul mai are rânduri printre care se pot număra: controlul motoarelor, interacțiunea cu senzorii, comunicarea cu transmițătorul și prin urmare cu utilizatorul. Fiecare dintre componentele software sunt importante în felul lor, iar lipsa sau funcționarea eronată a uneia dintre ele va conduce la erori foarte mari la nivelul întregului sistem, iar aceste erori pot cauza urmări neplăcute care pot duce până la prăbușirea quadrocopterului.
Pentru a evita aceste eventuale neplăceri s-a acordat o atenție deosebită fiecăreia dintre componente, aceste detalii legate de construcția fiecărei componente vor fi relatate în continuare.
Trebuie să ținem cont de structura hardware a dronei pentru a înțelege pe deplin modul în care softul realizează stabilizarea și controlul quadcopterului. După cum a fost menționat și în primul capitol, cadrul dronei este în formă de + sau X, această orientare depinzând de modul de comandă dorit. Motoarele sunt poziționate în extremitățile brațelor cadrului iar distanța dintre axele motoarelor de pe aceiași diagonală este de 450mm, în comparație cu aceasta, distanța de la un capăt al unui braț până la capătul brațului opus sau altfel spus diagonala quadcopterului este de 500mm. Ținând cont de aceste date, diametrul elicei montate pe unul dintre motoare este de 250mm, iar o diagonală va conține două elice care se vor roti în sensul acelor de ceasornic, spre deosebire de cealaltă diagonală care va avea elice proiectate pentru a se învârti în sensul invers celui al acelor de ceasornic. Tooate aceste detalii pot fi observate în figura 4.1.
Figura 4.1
Senzorii împreună cu unitatea de procesare Arduino,sunt localizate în centrul construcției pentru a observa cu ușurință cât mai mare variații destul de reduse ale poziționării quadcopterului, această poziționarecentrală mai are rolul de a aduce un echilibru asupra sarcini aplicate fiecăruia dintre motoare.
Pentru a putea dezvolta și testa partea software împreună cu toate componentele care alcătuiesc quadcopterul, mai întâi am construit un prototip pe care l-am realizat din două bucăți de lemn de brad cu dimensiunile de 500x50x10mm, ele sunt poziținate la 90 de grae una față de cealaltă și fixate între ele cu 4 șuruburi astfel încât să nu existe vibrații. Motoarele sunt poziționate la extremitățile acestora iar partea electronică este poziționată central. Tot cu scopul dezvoltării și testării software-ului, în momentul de față pentru alimentareutilizez o sursă în comutație de 200W deoarece aceasta îmi permite alimentarea direct de la rețeaua de energie electrică fără a necesita încărcarea acumulatorilor pentru fiecare dintre teste,pe lângă acest fapt sursa de alimentare în comutație oferă o putere desul de semnificativă pentru motoarele care de altfel sunt puternice și ele.
Acum că au fost menționate caracteristicile hardware ale unui quadrocopter, vom parcurge fiecare dintre componentele programului care rulează pe microcontrolerul poziționat în centrul structurii hardware.
4.1 Comanda motoarelor
În primul rând pentru ca quadcopterul să se poată ridica de la sol, software-ul trebuie să conțină o secvență de cod care are capabilitatea de a comunica variatoarelor de viteză ale motoarelor viteza de rotație dorită. Acest prim pas este realizat prin intermediul generatoarelor PWM ale microcontrolerului, care utilizează timerele interne ale microcontrolerului pentru a determina durata perioadei în care să poziționeze ieșirea în starea de 1 logic și durata în care aceiași ieșire să aibă valoarea 0 logic. Setarea acestei lățimi a impulsului PWM se realizează relativ simplu din cardul mediului de dezvoltare al platformei Arduino. Menționând ieșirea dorită, acesteia i-se poate atribui o valoare codată pe 8 biți adică de la 0 la 255 care va reprezenta procentajul dintr-o perioadă, în care ieșirea va fi pe 1 logic.
mot1.write(com1);
mot2.write(com2);
mot3.write(com3);
mot4.write(com4);
În exemplul de mai sus variabilele com de la 1 până la 4 conțin valorile turațiilor dorite pentru motoare, iar mot de la 1 până la 4 sunt ieșirile alocate pentru variatoarele de viteză corespunzătoare fiecărui motor.
4.2 Transmiterea comenzilor
Următoarea componentă imortantă a software-ului este cea care se ocupă cu comunicarea serială. Rolul acesteia este unul vital deoarece modulul bluetooth prin intermediul căruia se realizează transferul de date dintre transmițător și receptor este conectat la portul serial al microcontrolerului.
Pentru a realiza comunicarea pe magistrala serială trebuiesc îndeplinite anumite condiții în prealabil. În momentul în care se dorește realizarea unei astfel de conexiuni, acest fapt trebuie prezentat în partea de inițializare a softului prin atribuirea unui nume conexiunii respective și a unei viteze de trnsfer a datelor care în cazul nostru este de 9600 de biți pe secundă. Secvența de inițializare a conexiunii seriale este prezentată în cele ce urmează.
Serial.begin(9600);
delay(1000);
Pauza alocată la sfârșitul secvenței de inișializare are rolul de a permite setărilor realizate până la momentul prezent de a se efectua în bună ordine înainte de rularea programului principal.
Dacă de exemplu se dorește recepționarea unei serii de date, mai întâi se va verifica prezneța acestora pe magistrală, după care acestea vor fi pregătite să fie atribuite unei variabile de tipul respectiv, această verificare se realizează utilizând structura fotware ce urmează. În schimb, când se dorește transmiterea datelor, acestea vor fi transmise pe magistrală utilizând o simplă funcție prezentată în cele ce urmează.
if(Serial.available()>0) {
char ch=Serial.read();
Codul prezentat mai sus stochează datele aflate pe magistrală în variabila ch de tip caracter.
În cazul nostru am decis ca pe lângă datele de comandă ale quadcopterului, prin intermediul aceleiași magitrale să fie transmise și date care vor determina modificări ale parametrilor de stabilizare cuprinși în buclele PID care vor fi descrise mai târziu. Pentru a diferenția aceste două tipuri de date s-a folosit un caracter ASCII poziționat la începutul transmisiei, diferit pentru fiecare dintre cele doua tipuri de date. Astfel în momentul în care va fi observatt unul dintre caractere care corespunnde datelor de comandă, respectivele date care urmează a fi transmise vor fi redirecționate către un buffer care este dedicat doar pentru acest tip de date, iar în cazul contrar datele vor fi redirecționate către alt buffer care conține datele ce vor caracteriza buclele PID.
int i=0;
if(ch=='$'){
command[0]="";
k=0;}
if(ch=='%'){
command[1]="";
k=1;}
if(ch!='#'){
command[k] += ch;
}
Se poate observa că cele două tipuri de date sunt stocate în două locații diferite ale unui vector de stringuri.
În momentul în care datele sunt regăsite în cele două buffere, ele sunt structurate sub formă de string, iar pentru a putea controla drona, din acele stringuri trebuiesc extrase valorile care vor realiza comanda acesteia. Având în vedere că în stringurile respective variabilele individuale sunt separate cu virgule, o altă secvență de cod va determina pozițiile virgulelor pentru a extrage datele utile, după care acestea sunt transferate în variabile numerice care vor fi utilizate în continuare.
int fst=command[0].indexOf(',');
int scn=command[0].indexOf(',',fst+1);
int trd=command[0].indexOf(',',scn+1);
int frt=command[0].indexOf('*');
fststr=command[0].substring(1,fst);
scnstr=command[0].substring(fst+1,scn);
trdstr=command[0].substring(scn+1,trd);
frtstr=command[0].substring(trd+1,frt);
int no1=command[1].indexOf(',');
int no2=command[1].indexOf(',',no1+1);
int no3=command[1].indexOf('*');
Pstring=command[1].substring(1,no1);
Istring=command[1].substring(no1+1,no2);
Dstring=command[1].substring(no2+1,no3);
spd[0] = fststr.toInt();
cont[0] = scnstr.toInt();
cont[1] = trdstr.toInt();
cont[2] = frtstr.toInt();
kp=Pstring.toInt();
ki=Istring.toInt();
kd=Dstring.toInt();
kP[0]=kP[1]=kP[2]=kp*0.0001;
kI[0]=kI[1]=kI[2]=ki*0.0001;
kD[0]=kD[1]=kD[2]=kd*0.0001;
Secvența de cod anterioară prezintă transformările pe care le suferă datele de la forma lor de string până la starea de variabile de tip întreg.
Pentru a transmite date prin intermediul magistralei seriale se utilizează următoarea secvență în care sunt transmise către utilizator informații care prezintă starea quadcopterului la momentul respectiv.
Serial.print("mot1: ");
Serial.print(com1);Serial.print('\t');
Serial.print("\t mot2 = ");
Serial.print(com2);Serial.print('\t');
Serial.print("\t mot3 = ");
Serial.print(com3);Serial.print('\t');
Serial.print("\t mot4 = ");
Serial.print(com4);Serial.print('\t');
Secvența anterioară va transmite înapoi către utilizator valorile care controlează motoarele la momentul respectiv.
4.3 Comunicarea cu senzorii
Comunicarea cu zenzorii aflați pe unitatea de măsură a inerției este formată utilizând magistrala I2C a microcontrolerului. Pentru a realiza o astfel de conexiune trebuie apelată librăria WIRE.H a mediului de dezvoltare care va executa pașii necesari în comunicarea cu fiecare dispozitiv de pe această magistrală. Interacțiunea cu dispozitivele realizându-se în principiu doar prin scrierea sau citirea de informații la sau de la anumite adrese care sunt reprezentate de către regiștrii pe care dorim să îi accesăm.
i2cWrite(0x6B, 0x01, true);
i2cRead(0x75, i2cData, 1);
Secvența anterioară prezintă o structură de scriere transmitere a datelor prin intermediul magistralei și o secvență de citire a datelor de de la o adresă aflată pe magistrala respectivă.
Astfel pentru a achiziționa datele de la accelerometrul aflat pe magistrala I2C, se va utiliza instrucțiunea care va cere citirea datelor de la adresa depe magistrală reprezentată de registrul în care senzorul stochează datele pentru citire.
Dacă se dorește transmiterea datelor cu scopul de a inițializa anumite funcții sau dea stabili anumiți parametrii ai senzorului atunci se va utiliza funcția care va cere permisiunea de a scrie date la o adresă de pe magistrala I2C.
4.4 Stabilizarea
Stabilizarea dronei va fi realizată utilizâd datele provenite de la senzorii de orientare reprezentați de către accelerometru și giroscop. Informațiile provenite de la senzori în mod normal vor trebui filtrate mai întâi dar la momentul curent vom avea în vedere doar funcționalitatea structurii de stabilizare. Deci informațiile provenite de la senzori vor fi comparate cu informații prestabilite care reprezintă nivelul de stabilizare dorit sau gradul de înclinare dorit pe fiecare axă. Comparând aceste valori se vor obține erorile care sunt diferențele dintre pozițiile dorite ți pozițiile actuale, iar utilizând aceste ate de eroare va fi procesată comanda care trebuie acordată pentru fiecare motor în scopul de a fi corectată eroarea.
Ca un exemplu reprezentativ să considerăm că drona va fi înclinată în spate la un anumit moment dat în timp, fapt cauzat de către un factor extern cum ar fi vântul. Faptul respectiv va fi detectat de către senzorii de pe dronă, iar dacă în același timp datele prestabillite în sistem de către utilizator nu coincid cu ceea ce se întâmplă la momentul respectiv, atunci drona va compensa această eroare determinând rotirea cu viteză mai mare a motoarelor din spate până în momentul în care se ajunge la poziția de echilibru.
Stabilizarea pe axa Z a dronei se realizează prin controlarea simultană a vitezelor motoarelor de pe o diagonală. În cazul în care se observă o rotire spre dreapta de exemplu a dronei în jurul axei Z, faptul respectiv va fi observat de către giroscopul care masoară variațiile de pe axa respectivă, iar secvența de stabilizare va determina accelerarea motoarelor care se află pe diagonala cu elicele care au sensul de rotație același cu cel al acelor de ceasornic. Cuplul acelor motoare va contracara rotația spre dreapta iar drona se va stabilizape axa Z.
calx=kalAngleX+cont[1];
caly=kalAngleY+cont[2];
calyaw=kalAngleZ+cont[0];
flx=flx+(kx*calx);
fly=fly+(ky*caly);
flyaw=flyaw+(kyaw*calyaw);
În structura de cod antrioară este prezentată o secvență de stabilizare relativ simplă care realizează integrarea valorii de eroare.
4.5 Filtrarea
Filtrarea datelor de la senzori are scopul de a oferi celorlalte structuri software date stabile și care să reflecte cu o exactitate câtmai mare evenimentele de interespentru aplicația noastră. În acest caz se filtrează datele de la accelerometru fiindcă acesta are p constantă temporală relativ mare iar utilizându-l doar pe acesta nu vor fi detectate mișcările bruște efectuate de către quadrocopter. Pentru a percepe variațiile bruște ale dronei este utilizat giroscopul, dar în schimb acesta produce devieri foarte mari de la valorile reale în cazurile în care sunt realizate mișcări lente de către dronă.
Pentru a beneficia de avantajele oferite de fiecare dintre senzori se utilizează un filtru Kalman. Filtrul Kalman analizează atât datele de la accelerometru cât și cele de la giroscop și în funcție de variațiile acestor date el va oferi un oarecare coeficient de încredere accelerometrului și altul giroscopului. De exemplu pentru cazurile în care drona expune mișcări oscilatorii lente, datele de la accelerometru vor fi utilizate într-o pondere mai mare pentru a calcula parametrii de stabilizare iar în cazurile ăn care sunt realizate mișcări bruște cu amplitudini mari, giroscopu va deține o pondere relativ mare din datele utilizate pentru stabilizare. Schema bloc de principiu a unui astfel de filtru este prezentată în figura 4.2.
Figura 4.2
4.6 Bucla PID
Bucla PID este componenta software care ajută la determinarea valorilor cu care se comandă motoarele, această buclă este o componentă destul de importantă a programului de stabilizare. Bucla PID utilizează valoarea erorii dintre poziția reală și poziția dorită pentru a calcula o valoare proporțională, de unde vine P, o valoare integrală, de unde vine I și o valoare derivată de unde vine D. Singurul dezavantaj al acestei bucle este că trebuie determinați factorii cu care se înmulțesc fiecare dintre cei 3 termeni P, I și D iar un anume set de valori este util doar pentru un tip de condiții atmosferice și configurație hardware. În cazul în care condițiile în care se realizează zborul variază foarte mult sau configurația hardware a fost modificată, acești parametrii care determină proporțiile utilizate din fiecare din cele trei componente, vor trebui modificați pentru ca drona să se comporte corespunzător pentru noile condiții.
Deci o buclă PID va utiliza semnalul de eroare din care va calcula cele trei componente: proporțională, integrală și derivată, după care va aduna cele trei valori înmulțide cu coeficientul corespunzător fiecăreia. Această din urmă valoare obținută va fi comanda utilizată mai departe pentru a varia vitezele motoarelor în scopul producerii stabilizării quadrocopterului. Schema bloc de principiu a unei bucle PID este prezentată în figura 4.3.
Figura 4.3
Până în momentul de față am utilizat doar componentele proporțională și integrală pentru a stabiliza drona, cea de-a treia componentă fiind redusă la valoarea 0 pentru a nu infuența rezultateleobținute. Utilizând doar primele două componente s-a observat că cele mai bune rezultate s-au obținut pentru un coeficient de 0,07% în cazul valorii proporționale și 0,0007% în cazul valorii integrale. Toate valorile de eroare sunt calculate în funcție de unghiul de înclinare dorit și unghiul de înclinare la care se află drona.
O buclă PID corespunzătoare uneia dincele trei axe de stabilizare este reprezentată de către secvența software următoare:
error[0]= kalAngleX+cont[1] -180;
Actual[0]=kalAngleX-180;
Integral[0]=Integral[0]+error[0];
if(Integral[0]>2000){Integral[0]=2000;}
if(Integral[0]<-2000){Integral[0]=-2000;}
P= error[0]*kP[0];
I= Integral[0]*kI[0];
D=(Actual[0]-Last[0])*kD[0];
Drive[0]= P+I+D;
flx= Drive[0]*ScaleFactor[0];
Last[0]=Actual[0];
4.7 Procesarea datelor
Având în vedere elementele software prezentate anterior traseul pe care datele îl parcurg în cadrul programului este următorul:
În primul rând sunt recuperate datele aflate pe magistrala serială din care se extrag valorile utilizate pentru turația relativă a tuturor motoarelor, aceste valori vor fi utilizate la sfârșit împreun cu datele de stabilizare pentru a comanda motoarele. Pe lângă aceste valori mai sunt extrase și datele utilizate în procesul de stabilizare, aceste valori obținute prin intermediul magistralei seriale vor fi celede referință față de care se vor compara datele de stabilizare preprocesate.
În al doilea rând vor fi achiziționate datele de la cele două tipuri de senzori pentru fiecare din cele trei axe de libertate. Aceste valori vor fi analizate în continuare de către filtrul Kalman iar acesta va determina care dintre ele vor fi cele mai utile la fiecare moment de timp, astfel în urma filtrului vor fi obținute date destul de exacte și reprezentative pentru ceea ce se întâmplă în realitate, eliminând zgomotele realizate de către elementele parazite ale mediului înconjurător.
Pe urmă datele filtrate vor fi direcționate către buclele PID, acestea utilizându-se de funcționalitatea lor pentru a obține valori care să îndeplinească o stabilizare optimă a dronei în condițiile atmosferice considerate în momentul respectiv.
În cele din urmă valorile produse de către buclele PID sunt aăturate valorii care reflectă turațiile relative ale motoarelor pentru a obține informațiile necesare pentru a controla motoarele, iar aceste vaori vor fi oferite variatoarelor de viteză sub formă de semnale PWM pentru ca acesteasă aducă motoarele la viteza dorită. În figura 4.4. este reprezentat traseul pe care îl parcurg datele în cadrul acestui program rulat de către microcontroler.
Figura 4.4
4.7 Ciclul Program
Un ciclu program urmărește în mare parte evenimentele enumerate anterior doar că trebuiesc menționate încă două componente importante ale acestuia. De fiecare dată când se va alimenta microcontrolerul, înainte de a porni secvența de stabilizare, se realizează o inițializare a tuturor datelor și parametrilor necesari pentru ca programul să rulaze fără evenimente nedorite.
În schimb la fiecare sfîrșit de ciclu program este prezentă o componentă software care transmite utilizatorului informații referitoare la starea quadrocopterului și la procesele realizate asupra datelor aflate în curs de procesare. Această ultimă componentă este foarte utilă pentru utilizator în momente în care se dorește imbunătățirea performanțelor prin modificarea parametrilor din buclele PID.
În figura 4.5. este reprezentat un ciclu program al software-ului care rulează pe microcontroler.
Figura 4.5
4.8 Cablajul
Tot în sprijinul părții software și pentru a simplifica munca operatorului în cazul apariției unei eventuale probleme, s-a realizat un circuit pe o placă de probă. Acest circuit permite înterconectarea componentelor dronei într-o manieră foarte simplă , reducând structura dronei la un nivel modular.
Principalul avantaj al acestei realizări este faptul că utilizând datele provenite de la quadcopter se poate identifica componenta defectă și se poate înlocui la fel de simplu și într-un interval de timp foarte scurt.
Observând figura 4.6. se poate regăsi poziționarea fiecărei componente pe această placă, desigur cu instrumentele de măsură poziționate în centru entru a oferi date cu o afinitate cât mai ridicată. Pe lângă modulul bluetooth și placa Arduino se mai pot regăsi și conectorii pentru variatoarele de viteză ale motoarelor și un comutator care întrerupe alimentarea pentru întreaga placă, cel din urmă fiindo măsură suplimentară de siguranță. Spațiul liber este gândit cu scopul dea fi populat în viitorul apropiat cu senzori care să facilitez dezvoltarea și îmbunătățirea dronei.
Figura 4.6
4.9 Programul transmițătorului
Programul însărcinat cu transmiterea datelor către dronă are o structurărelativ simplă față de softul aflat pe microcontroler, dar fără nici un dubiiu și acesta are un rol la fel de important în completarea funcționalității dronei.
Respectivul program a fost realizat în mediul de programare Basic4Android datorită faptului că este proiectat pentru a rula pe dispozitive cu sistem de operare Android, în felul acesta oricine deține un astefl de dispozitiv, în urma instalării aplicației poate controla în câteva momente drona.
Ciclul progra al acestui soft are următoarea structură:
În primul rând se vor inițializa toate componentele necesare precum conexiunea serială către bluetooth și senzorii de orientare utilizați pentru a controla drona.
Următorul pas după inițializare este de a recupera dtele aflate pe magistrala serială, aceste date fiind informații transmise de către quadcopter, dupa ce aceste date sunt preluate, ele sunt afișate pe ecran pentru aputea fi disponibile utilizatorului.
În continuare sfotul va prelua datele de la senzorii de orientare reprezentate de gradul de înclinare al dispozitivului Android iar împreună cu datele preluate prin intermediul interfeței de comandă, acestea vor fi compuse sub formă de string și transmise către quadcopter.
Prin intermediul interfeței se pot transmite și parametrii pentru modificarea comportamentului buclelor PID, iar dacă aceștia sunt introduși, prin intermediul butonului SEND din interfață se pot transmite datele respective.
Ultimele două structuri de cod din ciclul program realizează chiar partea de pregătire a informațiilor prin gruparea lor într-un singur bloc, iar în final acesta va fi transmis în mod secvențial prin intermediul conexiunii seriale.
În figura 4.7. este reprezentat un ciclu program al softului care transmite informații de comandă pentru dronă.
Figura 4.7
Concluzii
Un quadcopter este una dintre versiunile relativ simple din categoria multicopterelor, acestea fiind vehicule aeriene a căror mișcare este controlată prin accelerarea sau frânarea mai multor unități de propulsie. Fiecare unitate de propulsie este formată dintr-un motor și o elice. Forma unui multirotor, respectiv și quadcopter este complet instabilă din punct de vedere aerodinamic pentru ca acesta să poată zbura în regim de stabilitate optimă el necesită un computer sau în cazul de față un microcontroler Arduino.
Arduino uno este o placă de dezvoltare bazată pe o platformă open source, având ca și componentă principală microcontrolerul ATmega 328. Această placă de dezvoltare are paisprezece Intrari/Ieșiri digitale dintre care șase sunt capabile să producă PWM, șase intrări analogice, un oscilator de 16 Mhz, conexiune USB, mufă de alimentare, un conector ICSP și buton de reset.
Motoarele BLDC(brushless direct current) sunt total diferite de cele alimentate la curent continuu, ele fiind motoare de curent alternativ.Statorul unui motor BLDC este format din laminări ale unor plăci de oțel din care sunt decupate unele porțiuni corespunzătoare zonelor în care vor fi poziționate înfășurările, în cele mai multe cazuri motoarele BLDC conțin trei înfășurări statorice conectate în stea. Rotorul este fabricat utilizând de la două până la opt perechi de magneți permanenți dispuși în secvențe alternative N-S-N-S.
Un ESC pentru motoare BLDC are în principiu două lucruri de realizat. În primul rând trebuie să convertească tensiunea continuă de la baterie în tensiune alternativă care va roti motorul și trebuie să potrivească frecvența tensiunii de la ieșire cu viteza de rotație a motorului astfel încât sistemul să fie cât mai eficient, dar cel mai important, pentru ca să nu deterioreze motorul. În al doilea rând ESC-ul trebuie să modifice tensiunea care este distribuită motorului, și aceasta este variata în funcție de viteza de rotație dorită.
O unitate IMU(inertial measurement unit) este un dispozitiv electronic care măsoară și oferă informații despre poziția, orientarea si forțele gravitaționale care sunt exercitate asupra unei structuri, el realizeaza aceste lucruri utilizând o conbinație de senzori reprezentați de accelerometre, giroscoape si magnetometre. Aceste unități sunt folosite în general pentru a asista vehiculele aeriene, avioane, elicoptere sau chiar și sateliți împreună cu alte vehicule spațiale.
Bluetooth este un standard global al tehnolgiei wireless care facilitează interconectarea diferitelor dispozitive cu ușurință și un grad ridicat de securitate. Această tehnologie a devenit nelipsită în viețile noastre deoarece este integrată în aproape toate dispozitivele electronice de pe piață. Tehnologia bluetooth realizează schimburi de date între terminale aflate la distanțe scurte utilizând transmisii la radio, operând în banda de frecvență aflată între 2,4 și 2,485 GHz care nu necesită licență în majoritatea țărilor deoarece este rezervată pentru domeniile industrial, stiințific și medical (ISM).
Având în vedere componentele prezentate anterior, structura electrică a sistemului le prezintă pe acestea în relațiile lor de interconexiune. Astfel întreg sistemul va fi alimentat de la o sursă de 12V prin intermediul speed controlerelor, care contin un circuit denumit BEC(battery eliminator circuit) acesta prezintă la ieșire o tensiune de 5V eliminând nevoia unei surse separate de alimentare pentru restul de componente electronice. Prin urmare microcontrolerul Arduino va fi alimentat prin BEC iar datorită faptului ca placa Arduino detine și ea un stabilizator de tensiune pentru 3,3V, modulul BT(bluetooth) si unitatea IMU vor fi alimentate ambele prin intermediul plăcii Arduino.
Datele transmise de catre utilizator pentru comanda quadcopterului vor fi receptionate prin interfața seriala a microcontrolerului la care este conectat modulul BT, iar datele necesare pentru realizarea stabilizării sunt preluate prin intermediul magistralei I2C ale microcontrolerului la care este conectată unitatea IMU. Variațiile vitezelor de rotație ale motoarelor vor fi realizate prin intermediul ieșirilor PWM(pulse width modulation) ale Arduino, fiecare din cele patru ieșiri PWM sunt interfașate direct cu ESC-ul corespunzător.
Filtrul Kalman va observa modificarea valorilor prezentate de către fiecare din senzori, accelerometru și giroscop, alocândui fiecăruia dintre aceștia un oarecare nivel de încredere, fapt care va determina utilizarea valorilor date de către accelerometru în situații în care starea sistemului variază lent, iar in caz contrar, când variațiile sistemului vor fi rapide datele de la giroscop vor avea prioritate.
Bucla PID este componenta software care ajută la determinarea valorilor cu care se comandă motoarele, această buclă este o componentă destul de importantă a programului de stabilizare. Bucla PID utilizează valoarea erorii dintre poziția reală și poziția dorită pentru a calcula o valoare proporțională, de unde vine P, o valoare integrală, de unde vine I și o valoare derivată de unde vine D, care vor fi folosite pe urmă pentru a modifica vitezele de rotație ale motoarelor.
Bibliografie
Massimo Banzi, Getting started with Arduino, O`Reilly Media 2008
Alan G. Smith, Introduction to Arduino: A piece of cake!, 2011
A. Gacsádi, Bazele Roboticii, Universitatea din Oradea, 2008
A. Gacsádi, Electronică de Putere, Universitatea din Oradea, 2009
A. Gacsádi V. Tiponuț, Sisteme de Achiziții de Date, Editura Universității din Oradea, 2005
Ph.D. Jack Purdum, Beginning C for Arduino, Springer Science Business Media 2013
Maik Schmidt, Arduino A Quick-Start guide, Pragmatic Programmers 2011
I. Felea, Mașini și Acționări Electrice, Editura Universității din Oradea, 2006
Introducere în Arduino,
http://arduino.cc/en/Guide/Introduction
Prezentare Arduino Uno,
http://arduino.cc/en/Main/arduinoBoardUno
Magistrala I2C,
Utilizarea magistralei I2C,
http://www.robot-electronics.co.uk/acatalog/I2C_Tutorial.html
Magistrala UART,
https://www.freebsd.org/doc/en/articles/serial-uart/
Filtre Kalman,
http://www.swarthmore.edu/NatSci/echeeve1/Ref/Kalman/MatrixKalman.html
Bucle PID,
http://www.csimn.com/CSI_pages/PIDforDummies.html
Introducere în quadrocoptere,
http://quadcopterhq.com/what-is-a-quadcopter/
Ce este un quadrocopter,
http://droneflyers.com/2012/02/drone-101-what-is-a-quadcopter/
Construcția unui quardocopter,
http://blog.oscarliang.net/build-a-quadcopter-beginners-tutorial-1/
Bibliografie
Massimo Banzi, Getting started with Arduino, O`Reilly Media 2008
Alan G. Smith, Introduction to Arduino: A piece of cake!, 2011
A. Gacsádi, Bazele Roboticii, Universitatea din Oradea, 2008
A. Gacsádi, Electronică de Putere, Universitatea din Oradea, 2009
A. Gacsádi V. Tiponuț, Sisteme de Achiziții de Date, Editura Universității din Oradea, 2005
Ph.D. Jack Purdum, Beginning C for Arduino, Springer Science Business Media 2013
Maik Schmidt, Arduino A Quick-Start guide, Pragmatic Programmers 2011
I. Felea, Mașini și Acționări Electrice, Editura Universității din Oradea, 2006
Introducere în Arduino,
http://arduino.cc/en/Guide/Introduction
Prezentare Arduino Uno,
http://arduino.cc/en/Main/arduinoBoardUno
Magistrala I2C,
Utilizarea magistralei I2C,
http://www.robot-electronics.co.uk/acatalog/I2C_Tutorial.html
Magistrala UART,
https://www.freebsd.org/doc/en/articles/serial-uart/
Filtre Kalman,
http://www.swarthmore.edu/NatSci/echeeve1/Ref/Kalman/MatrixKalman.html
Bucle PID,
http://www.csimn.com/CSI_pages/PIDforDummies.html
Introducere în quadrocoptere,
http://quadcopterhq.com/what-is-a-quadcopter/
Ce este un quadrocopter,
http://droneflyers.com/2012/02/drone-101-what-is-a-quadcopter/
Construcția unui quardocopter,
http://blog.oscarliang.net/build-a-quadcopter-beginners-tutorial-1/
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Comanda Unui Quadrocopter Utilizand Placa de Dezvoltare Arduino Uno (ID: 162142)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
