One of our clients needed a gesture control wristband that would let skiers and snowboarders control music without removing their gloves or taking their phone out of a pocket.
Oxeltech developed the electronics, embedded firmware, and Bluetooth Low Energy protocol for the device. The work began with collecting labelled motion data for model training and progressed to a system where the wristband and phone app work together to turn gestures into music commands.
Table of Content
ToggleProject Overview
The product is a battery-powered wristband designed for music control on the slopes. It combines a motion sensor, Bluetooth connectivity, and local storage in a hard shell with an elastic strap.
When the user performs a gesture, the motion sensor measures the wrist’s movement and rotation. The wristband sends these measurements over Bluetooth Low Energy to a companion phone app, where a model recognizes the gesture. The app then tells the wristband which command to send, allowing it to control play/pause, track changes, and volume through the phone’s standard Bluetooth media controls.
The Challenges
The first challenge was collecting the data needed for gesture recognition. At the start, there was no training dataset. The wristband had to record movements from different users and store the correct gesture label with each sample. These recordings would support a model intended to distinguish deliberate gestures from normal skiing movement.
The wristband had to capture evenly spaced motion samples without gaps while handling other tasks. During data collection, it wrote approximately 25 MB of sensor data per hour to the SD card. The app also needed to download files over Bluetooth while recording continued.
The next challenge was turning recognized gestures into music commands. The wristband needed a custom Bluetooth interface to exchange motion data and commands with the app, alongside standard Bluetooth media controls.
All of this had to operate in a small battery-powered device intended for cold outdoor use. Charging temperature limits, low-battery conditions, deep-discharge protection, and peripheral power consumption needed careful handling. The device also needed firmware updates over Bluetooth after reaching users.
Hardware Design

Figure: Top view of the gesture-control wristband PCB
Processing and Motion Sensing
The hardware needed to support both the initial recording work and the later Bluetooth streaming system. We built the custom board around a u-blox NORA-B106 module based on Nordic’s nRF5340.
The processor has two Arm Cortex-M33 cores. The application core runs the device firmware, while the network core runs the Bluetooth LE controller.
To capture wrist movement, the board uses an ST LSM6DSO six-axis IMU. It measures acceleration along three axes and rotation around three axes, with measurement ranges of ±16 g and ±2000 degrees per second.
The sensor also includes an onboard FIFO, a temporary buffer that holds readings until the processor retrieves them. This provides a way to keep collecting motion samples while the firmware handles tasks such as storage and communication.
Power Management and Supporting Hardware
Alongside processing and sensing, the board needed storage for the recordings and control over how each peripheral used power. It includes microSD storage and QSPI flash, each on its own switched power rail behind level translators. The SD card stored the labelled motion recordings during data collection.
A Nordic nPM1300 power management IC handles battery charging, 1.8 V and 3.3 V regulators, load switches, power-fail warnings, ship mode, and status LEDs. Separately switched power domains allow the firmware to turn off peripherals when they are not needed. The IMU, for example, is powered only while motion data is required.
Switching off a component also requires controlling its signal connections. Bidirectional level translators with output-enable control isolate the voltage domains, preventing leakage and stopping unpowered components from receiving power through their I/O pins. Unused MCU pins are configured as disconnected at startup to reduce leakage current.
The board’s USB-C connection provides charging and a USB serial log console, with CC handling and ESD protection. A TI BQ29737 protection circuit with back-to-back MOSFETs provides over-current, short-circuit, over-voltage, and under-voltage protection. Battery protection and PMIC power sequencing operate independently of the main firmware.
Firmware and Software Design
The firmware uses Zephyr RTOS on Nordic’s nRF Connect SDK.
Collecting Gesture Data
Before the phone app could recognize gestures, the wristband served as a data logger. Test users wore the device while the app guided them through recording sessions.
During each session, the app told the wristband which gesture was being performed. The firmware stored that label with every sample, removing the need to label the recordings manually afterwards.
To preserve continuous sampling, the firmware used the IMU’s hardware FIFO together with a buffer queue. This separated motion capture from SD card writes, preventing a slow storage operation from interrupting the sensor readings.
Each session was saved as a compact binary file named using the user, the hand used, and the session start time. The app could download these files over BLE while recording continued.
During the recording sessions, test users performed two quick wrist flicks in the same direction for the next and previous tracks. For volume control, they recorded two movements: a 90-degree wrist rotation followed by a double flick up or down, and two quick 90-degree wrist rotations. For play/pause, they performed a chest tap.

Figure: Wrist movement during a track-control gesture
Recognizing Gestures and Controlling Music
After establishing the recording system, the project moved to recognition in the companion phone app. The phone offered more processing power, and the model could be improved through app updates instead of requiring a firmware update for every recognition change.
This changed the wristband’s main task from storing training recordings to streaming motion measurements. The app interpreted those measurements, while the band converted the app’s decisions into standard music commands.

Figure: System architecture for data collection and gesture recognition
The media keys cover play/pause, next track, previous track, and volume up and volume down. Because they are standard HID consumer control keys, they work on iOS and Android without a custom driver.
Before sending a media key, the firmware checks the command received from the app. Unknown values are rejected with a Bluetooth error so the app can identify an invalid command.
Bluetooth Communication and Pairing
This command path depends on a continuous stream of motion measurements between the wristband and app. Each sample contains a timestamp, three acceleration values in g and three rotation rates in degrees per second. Several samples are packed into each BLE notification to reduce radio overhead.
Streaming follows the app’s subscription state. It starts when the app subscribes and stops when the app unsubscribes or disconnects, allowing the firmware to power down the IMU when it is no longer needed.
When a phone connects, the wristband requests the BLE 2M PHY, the largest data length, and a larger MTU. These settings allow more data to move per radio event and keep radio-on time short. A 10–20 ms connection interval supports low-latency communication.
The custom motion service and standard HID service run alongside battery and device information services. Each band advertises a unique name based on its chip ID, and the device information service reports its hardware and firmware versions.
To retain the connection setup between uses, pairing keys are stored in a flash partition outside the firmware image slots. Pairing therefore survives resets, a depleted battery, and firmware updates.
The wristband can store pairing information for several phones. When all slots are full, the least recently used phone is replaced. The app can also request a clean disconnect and temporarily hide the band to prevent immediate reconnection or ask it to forget all paired phones.
Battery Monitoring and Firmware Updates
Alongside recording and communication, the firmware manages battery events and device faults. It detects charger errors and restarts the charger, while battery voltage and an estimated charge level are available to the app over BLE.
When system voltage falls below a configured threshold, the PMIC warns the MCU. The firmware then enters ship mode to prevent further drain of a nearly empty battery. Users can also enter ship mode with a button press longer than three seconds, except while USB power is connected.
If the firmware stops responding, a hardware watchdog restarts the device. LED blink codes indicate startup failures.
The device also supports firmware changes after deployment. Updates are transferred over BLE using the standard MCUmgr protocol, and MCUboot checks an ECDSA P-256 signature before allowing a firmware image to run.
Results
The same wristband hardware supported both labelled gesture recording and music control. Skiers and snowboarders could play or pause music, change tracks, and adjust the volume on iOS and Android while keeping their gloves on and their phone in a pocket. Gesture-based call controls were identified as a future improvement.
If you are developing a wearable product and need support with motion sensing, Bluetooth connectivity, or embedded firmware, we are happy to help. Feel free to Contact Us for wearable hardware design and firmware development support.