M-am gandit sa fac un controller in forma de manusa cu care poti sa interactionezi cu un pc prin miscarea mainii. Scopul e de a putea controla un pc de la distanta cu mana. Initial am dorit sa fac un joystick pentru jocuri, dar am sesizat ca e un proiect prea simplu, asa ca am extins ideea si am transformat joystick-ul intr-o manusa. E un device oarecum simplut care poate fi folosit in simulatoare, dar si ca o alternativa pentru mouse.
Vom folosi un microcontroller cu modul wireless care va transmite mișcarea mâinii utilizatorului. Modulul MPU9250 va avea rolul de a înregistra mișcarea mâinii, precum și de a detecta strângerea pumnului (unul dintre degete va avea un magnet lipit de vârful acestuia, iar magnetometrul îl va detecta). Pentru comunicarea dintre microcontroller si MPU9250 vom folosi I2C, iar intre HC-05 si microcontroller vom folosi interfata UART
La nivel de Software, vom folosi cod C pentru comunicarea cu modulul wireless, iar un fisier python pentru translatarea datelor date de MPU9250 in miscarii ale cursorului.
Piese folosite:
Motivul pentru care am ales aceste componente este ca le aveam deja pe majoritatea dintre ele (doar QMC5883L a trebuit să îl cumpar).
In schema electrica putem vedea cuplarea modulelor la microcontroller.
Pentru HC-05, am cuplat VCC la pinul de 5V de pe nano, GND la GND. Pentru UART trebuie sa conectam RX Nano-TX HC, TX HC-RX Nano. TX-Nano - RX HC e putin mai special, deoarece nivelul logic al rx-ului e de 3.3V iar al microcontroller-ului e de 5V. Pe site-ul de unde am luat modulul wireless au specificat ca l-au testat cu 5V si merge, dar personal eu unu nu vreau sa ma risc, asa ca am pus un divizor de tensiune intre RX HC si TX Nano.
Rezultat cablaj HC-05:
Pentru comunicarea cu MPU si QMC, am decis sa folosesc I2C/TWI (Initial as fi vrut comunicare pe SPI, dar asta a fost inainte sa aflu ca modulul meu MPU9250 era de fapt un MPU6500 deghizat, asa ca am fost nevoit s-a cumpar un magnetometru separat). Am cuplat VCC la 3.3V (MPU suporta maxim 4V), GND la GND, SDA la A4, si SCL la A5
Rezultate:
Mediul de dezvoltare e unul hibrid.
Folosesc avr-gcc pe wsl2(ubuntu) pentru crearea fisierului hex pe baza codul meu C, iar acel fisier e folosit mai departe in avrdudess pe windows pentru uploadarea fisierului in memoria flash a microcontrollerului. Ca IDE folosesc VScode.
Am scris un cod simplu UART de trasmitere-receptie in C (codul de pe microcontroller) , si un cod bluetooth in python cu care sa se creeze comunicarea cu HC-05 (Driver-ul aferent al manusii)
Pentru testare am folosit UART in combinatie cu Serial Monitorul incorporat in PUTTy + Debug prin led-uri
Codul C am folosit o combinatie de cod din laborator cu snippet-uri din datasheet, iar pentru cel din python am gasit un library care converteste logica numerica in actiuni ale mouse-ului
Logica Codului:
În final, am reușit să duc acest proiect la bun sfârșit. Mie, unul, mi-a plăcut foarte mult să lucrez la mănușă și, dacă aș fi avut mai mult timp, aș fi adăugat și funcționalități noi (cum ar fi un filtru Kalman).
[5/5/2025:21:03]
Am inceput sa lucrez la documentatie dupa ce am gandit un plan intial
[5/14/2025:14:36]
Am creat setup-ul pentru proiect
Testat placuta cu un cod simplu de blink
[5/14/2025:21:43]
Am montat si testat modului HC-05
Am scris un cod simplu de w/r UART
Am conectat modulul la propriul laptop prin bluetooth
Am scris un cod python care sa comunice cu modulul
[5/25/2025:23:43]
Am uitat s-a mai fac update-uri, deci asta va fi unul mare
Am scris codul TWI pentru cele doua module
Am scris o clasa care converteste valoarii numerice in miscarii ale mouse-ului
Am cusut partea hardware de manusa, si am creat o curea DIY pentru a tine sursa de alimentare pe mana
Am testat, si merge ok