Manusa Controller

Introducere

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.

Descriere generală

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.

Hardware Design

Piese folosite:

  • Arduino Nano (Microcontroller ATmega328P)
  • HC-05 (Modul Bluetooth)
  • MPU6500 (Accelerometru, Giroscop)
  • QMC5883L (Magnetometru)
  • Un magnet neodim (Folosit pentru senzorul QMC)
  • Manusa (“Carcasa proiectului”)
  • O rezistenta de 1K ohmi
  • O rezistenta de 2K ohmi
  • Fire
  • Siret
  • Soseta
  • 4 Baterii 1.5V

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

Obs: In testele facute de mine, SDA si SCL functioneaza la 5V logic, dar nu garantez ca e un nivel stabil pentru modul

Rezultate:

Software Design

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:

  • Porneste microcontrolerul
  • Face Init-ul pentru toate modulele
  • MPU si QMC trasmit date catre microcontroller prin I2C
  • Date se duc mai departe pe UART
  • Odata trasmise prin UART, HC-05 trimite mai departe prin Bluetooth catre PC
  • PC-ul are deja codul python rulat; acel cod asteapta pe PORT-ul HC-ul o conexiune
  • Dupa ce s-a stabilit conexiunea, scriptul driver-ul preia datele de la HC, si le converteste in miscarii ale mouse-ului.

Rezultate Obţinute

Concluzii

Î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).

Download

Jurnal

[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

Bibliografie/Resurse

pm/prj2025/ccristi/adrian.neacsu1805.txt · Last modified: 2025/05/26 14:35 by adrian.neacsu1805
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