Dispozitivul are rolul de a menține nemișcată camera (sau orice obiect care încape pe platformă), intr-o poziție prestabilită de catre utilizator, indiferent de miscarea utilizatorului. Dispozitivul este destinat oamenilor care filmează videoclip-uri in miscare, întrucat mânerul este structurat astfel încat să fie ținut în mână, dar manerul poate fi adaptat pentru a fi montat pe un autovehicul, pe o drona, etc.
Funcționalitatea dispozitivului este oferită de 3 servo-motoare cu un unghi de rotație de 180° (Grade), un joystick si un modul MPU-6050 care inglobează un accelerometru pe 3 axe și un giroscop pe 3 axe. Acestea sunt conectate la o placă de dezvoltare Arduino Nano, cu microcontroller ATmega328p. Placa primeste un semnal de la modulul MPU-6050 si ajusteaza servo-motoarele astfel încât platforma/camera să rămână intr-o pozitie presetată. Fiecare dintre cele 3 servo-motoare asigura stabilizarea platformei prin rotirea in jurul celor trei axe, X (Pitch), Y(Roll), Z(Yaw). Pentru a schimba orientarea camerei/platformei, se poate folosi joystick-ul, prin rotatia in jurul axelor Z, respectiv axelor X si Y. Pentru a asigura alimentarea (wireless) a dispozitivului, folosesc 2 acumulatori Li-Ion de 3.7V fiecare, legați în serie. Ansamblul ofera ~7.4V, care intra într-un convertor step-down din care ies 5V. Din convertorul step-down, se alimenteaza direct servomotoarele, Placa Arduino si modulul MPU-6050.
- Pentru realizarea software-ului necesar funcționării proiectului, am utilizat Arduino IDE. - Printre bibliotecile standard, Arduino, folosite se numără `Wire.h` si `Servo.h`. Pentru a realiza citirea și prelucrarea datelor de la accelerometrul/giroscopul MPU-6050, am folosit bibliotecile open-source `MPU6050_6Axis_MotionApps20.h` si `I2Cdev.h'. - Valorile pentru Yaw, Pitch și Roll sunt primite de la functia `dmpGetYawPitchRoll`, din biblioteca menționată anterior, sub forma unui vector, sub forma de radiani. Ulterior, valorile sunt convertite in Grade si sunt mapate în intervalul corespunzător fiecarui servomotor. - Folosind pinii analogici, programul citeste valorile primite de la Joystick. Un pin este pentru axa x, iar celalalt pentru axa y. Daca valoarea inregistrată pe unul dintre pini se modifică, variabila specifica fiecarei axe se incrementează cu 0.5 sau se decrementează cu 0.5. Această variabilă se aduna cu variabila primită de la giroscop, iar rezultatul se da ca si argument funcției write(), care, în cazul de față, setează poziția servomotorului la un anumit număr de grade, față de poziția inițială.
Cele 3 servomotoare, giroscopul și joystick-ul lucrează, intr-un final, impreună, pentru a menține platforma dreaptă. Cu toate acestea, nu am putut scăpa de fenomenul de “YAW Drift”, care consta in schimbarea unghiului de rotatie in jurul axei OZ, puțin câte puțin, atunci când suportul stă nemișcat.
A fost un proiect interesant care m-a ajutat sa aprofundez noțiunile învățate la laborator. În final, proiectul nu a funcționat cum am planificat inițial, a fost mult mai costisitor (din punct de vedere financiar) decât am planificat inițial datorită unor componente necorespunzătoare pentru acest proiect, dar m-a ajutat să învăț din greșeli și să fiu mai atent la detaliile unei componente precum datasheet-uri, specificații, precum și la anumite funcții in cod.