Skip to content

Commit c333ef5

Browse files
dboinegri-huerootgenan2003
authored
Project/stefania.boinegri (#1414)
* added diagram and fixed path * Update website/versioned_docs/version-fils_en/project/2026/stefania.boinegri/index.md Co-authored-by: Omer Genan <81963672+genan2003@users.noreply.github.com> * modified the svg * final fix * fix * fixed diagram * fix * fixed * diagram fix * fixed main and fetch_head * diagram fixing * fixing * diagram * fixed * using cleaned blockdiagram * diagram fixing * diagraam * replaced diagram * diagram * changed to webp file * added the kicad scheme * edited the kicad scheme * added kicad * deleted fetch a main * added hardware photos and edited the software * adjusted the resolution * fixed resolution * image fix * fixed image --------- Co-authored-by: root <root@denisia.localdomain> Co-authored-by: Omer Genan <81963672+genan2003@users.noreply.github.com>
1 parent 2023da9 commit c333ef5

3 files changed

Lines changed: 32 additions & 18 deletions

File tree

32.4 KB
Loading

website/versioned_docs/version-fils_en/project/2026/stefania.boinegri/index.md

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ A wearable, motion-controlled gaming interface.
1010

1111
## Description
1212

13-
AeroGlove is a wearable, motion-controlled gaming interface that bridges the gap between physical movement and digital gameplay. Built around the STM32 Nucleo-U545RE-Q microcontroller, this project transforms natural hand gestures into native PC inputs, effectively acting as both a plug-and-play USB gamepad and an air mouse.
13+
AeroGlove is a glove that lets you control games by moving your hand. Tilt your palm and the joystick moves on screen. Press a button with your thumb and it sends an action. Hold the button longer than half a second and it switches between gamepad and air-mouse mode, with a short vibration to confirm.
14+
15+
The firmware runs on an STM32 Nucleo-U545RE-Q in Rust using the embassy async framework. It reads an MPU6050 motion sensor over I2C, applies a complementary filter to get stable angles, and sends the data over UART to a Python host script on the PC. The script creates a virtual Xbox 360 controller using the ViGEmBus driver, so any game that supports a controller recognizes it automatically.
1416

1517
## Motivation
1618

@@ -30,15 +32,23 @@ Hardware wiring and basic project setup. Configured the Rust Embassy environment
3032

3133
### Week 12 - 18 May
3234

33-
Focused on USB communication. Set up the USB HID device using the usbd-human-interface-device crate so the PC recognizes the board as a mouse/gamepad. Mapped the sensor data to screen cursor movements.
35+
Tried to get USB HID working directly on the STM32 so the glove would show up as a native gamepad. Got the USB stack compiling and Windows detected the device, but it kept failing. After debugging with trace logs I found that the USB interrupt wasn't firing properly for the U545 chip in embassy-stm32. Decided to change the communication approach instead of fighting a driver bug.
3436

3537
### Week 19 - 25 May
3638

37-
Added haptic and visual feedback. Configured the PWM for the vibration motor and set up the RGB LED to indicate device status. Final code cleanup, debugging, and testing for the final presentation.
39+
Switched to sending data over UART through the ST-Link's built-in serial port. Wrote a Python host script that reads the serial stream and creates a virtual Xbox 360 controller using vgamepad and ViGEmBus. Also added the RGB LED module and implemented tilt-limit haptic feedback that vibrates when you tilt past 50 degrees.
40+
41+
Mounted everything on the glove with velcro. The breadboard sits on the back of the hand, the button is extended with soldered wires to the index finger, and the motor is on the palm side. Tested with Hill Climb Racing and the hardwaretester.com gamepad tester. Commented all the code and wrote the documentation.
42+
43+
![Glove Photo](./glove_photo.webp)
44+
45+
![Second Photo](./second_photo.webp)
3846

3947
## Hardware
4048

41-
The project uses the STM32 Nucleo-U545RE-Q as the microcontroller to process inputs and handle USB communication. It uses an MPU6050 for motion tracking, a tactile push-button for digital input, an RGB LED for visual feedback, and a vibration motor for haptic feedback.
49+
The STM32 Nucleo-U545RE-Q is the main microcontroller. The MPU6050 connects over I2C for motion tracking. A tactile button on the index finger provides input, connected back to the breadboard with two soldered jumper wires. The RGB LED shows the current mode and the vibration motor gives haptic feedback. Everything sits on a breadboard on the back of the hand, with the Nucleo board either on the forearm or on the desk.
50+
51+
Only one USB cable is needed since the ST-Link handles both programming and serial communication.
4252

4353
### Schematics
4454

@@ -49,24 +59,28 @@ The project uses the STM32 Nucleo-U545RE-Q as the microcontroller to process inp
4959
| Device | Usage | Price |
5060
|--------|--------|-------|
5161
| STM32 Nucleo-U545RE-Q | Microcontroller | 107 RON |
52-
| MPU6050 Module | Motion Sensor | 12 RON|
53-
| Tactile Push-Button | Digital Input | 0.36 RON |
54-
| RGB LED Module | Visual Feedback | 2 RON |
55-
| Vibration Motor Module | Haptic Feedback | 5 RON |
56-
| USB Data Cable | Power & Communication | 29 RON |
57-
| Jumper Wires | Physical Connectivity | 7 RON |
58-
62+
| MPU6050 Module | Motion sensing (accelerometer + gyroscope) | 12 RON |
63+
| Tactile Push-Button 6x6x5mm | Digital input on finger | 0.36 RON |
64+
| CJMCU RGB LED Module | Mode indicator (red/blue) | 2 RON |
65+
| Vibration Motor Module | Haptic feedback | 5 RON |
66+
| USB-C Cable | Power and ST-Link communication | 29 RON |
67+
| Jumper Wires (M-M and M-F) | Connecting everything | 7 RON |
68+
| Breadboard | Component mounting | 5 RON |
69+
| Velcro strips | Attaching components to the glove | 15 RON |
5970
## Software
6071

6172
| Library | Description | Usage |
6273
|---------|-------------|-------|
63-
| embassy-rs | The core asynchronous runtime | Allows the microcontroller to handle multiple tasks simultaneously without blocking |
64-
| embassy-stm32 | Hardware Abstraction Layer for STM32 | Provides digital drivers to control physical pins, I2C, PWM, and USB peripherals |
65-
| embassy-time | Manages non-blocking timers and delays | Crucial for stabilizing the input signal of the tactile button |
66-
| embassy-usb | Handles the low-level USB device stack | Establishes and maintains physical data connection between STM32 and host computer |
67-
| usbd-human-interface-device | USB HID formatter | Formats raw data into standard USB HID reports so the PC recognizes it instantly |
68-
| mpu6050 | Dedicated community driver | Processes raw I2C signals into usable spatial angles for steering |
69-
| defmt | Debugging framework | Prints real-time debugging messages to PC screen without slowing down the main loop |
74+
| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async HAL for STM32 | Provides drivers for I2C, UART, PWM and GPIO |
75+
| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task runtime | Runs 7 concurrent tasks on one core without an RTOS |
76+
| [embassy-sync](https://github.com/embassy-rs/embassy) | Synchronization primitives | Watch and Channel for safe data sharing between tasks |
77+
| [embassy-time](https://github.com/embassy-rs/embassy) | Timers and delays | Used for button debouncing, motor timing and sensor pacing |
78+
| [defmt](https://github.com/knurling-rs/defmt) | Lightweight logging | Debug output over RTT without slowing down the firmware |
79+
| [libm](https://github.com/rust-lang/libm) | Math functions for no_std | atan2 and sqrt needed for the angle calculations in the filter |
80+
| [heapless](https://github.com/rust-embedded/heapless) | Fixed-size collections | Stack-allocated strings for formatting serial packets |
81+
| [pyserial](https://github.com/pyserial/pyserial) | Python serial port library | Reads UART data from the ST-Link virtual COM port on the PC side |
82+
| [vgamepad](https://github.com/yannbouteiller/vgamepad) | Virtual gamepad for Windows | Creates a virtual Xbox 360 controller through the ViGEmBus driver |
83+
| [mouse](https://github.com/boppreh/mouse) | Python mouse control | Moves the system cursor in air-mouse mode |
7084

7185
## Links
7286

313 KB
Loading

0 commit comments

Comments
 (0)