Building a Touchless Gesture Controller with the NU54-DK and MAX25405 Gesture interfaces feel like magic - you wave your hand and something happens on screen, with nothing to touch and nothing to wear. When I started experimenting with the Nucode NU54-DK Bluetooth Evaluation Kit, I wanted to pair its low-power nRF54L15 radio with a sensor that could turn simple hand motions into wireless commands. The answer was Analog Devices' MAX25405, an IR optical gesture sensor that runs the whole detection algorithm on-chip. In this project I connect the MAX25405 to the NU54-DK over SPI, stream recognized gestures over Bluetooth LE, and use those notifications to fly a 3D airplane model on a connected app - a fun, intuitive demo of touchless control.
NU54-DK and the MAX25405The NU54-DK is built around Nordic's nRF54L15 - a next-generation Bluetooth Low Energy SoC that combines a fast Cortex-M33 core with an ultra-efficient radio. That makes it an ideal host for a battery-friendly, always-listening gesture node. The board is designed by NUCODE.
The MAX25405 is the perfect companion. Instead of forcing the host MCU to crunch raw camera frames, it integrates a 6x10 IR photodiode array, an LED driver, and an on-chip gesture engine. It reports high-level events - Swipe Up/Down, Swipe Left/Right, and Rotate CW/CCW - directly over SPI. That means the NU54-DK stays lean: it simply reads gesture codes and forwards them over BLE, for the wireless link. Also the MAX25405 EVK sensor interface board goes on fitting well with NU54-DK.
Together they form a clean division of labor:
- MAX25405 -> senses the hand and classifies the gesture- NU54-DK -> transports the gesture over Bluetooth LE- Host app -> visualizes the result as 3D motion
The heart of the wiring is the SPI bus between the NU54-DK and the MAX25405 EV kit. The Nucode acts as the SPI master; the MAX25405 is the slave. In addition to the four standard SPI lines, the sensor exposes an interrupt line that signals when a new gesture is ready, so the firmware never has to poll blindly.
Signal mapping (NU54-DK <-> MAX25405 EV Kit):
- SCK (SPI Clock) -> sensor SCLK
- MOSI (Master Out) -> sensor MOSI
- MISO (Master In) -> sensor MISO
- CS (Chip Select) -> sensor CSB
- INT (GPIO input) -> sensor interrupt / data-ready
- 3V3 + GND -> sensor power and ground
The MAX25405 handles its own IR illumination via an on-board LED, so the hand is lit from the sensor side - no external light source needed. A short, well-grounded SPI harness keeps the 6 MHz bus clean. To make the demo repeatable, I designed a small 3D-printed bracket that holds the NU54-DK and the MAX25405 EV kit at a fixed distance and angle. This keeps the detection zone consistent so gestures register the same way every time, and it turns a loose pile of boards into a tidy desktop controller. The STL files are included in the repository.
Datasheet is Sensor datasheet for reference: here
How It Works - From Hand Wave to 3D MotionThe end-to-end pipeline has four stages:
Sense: A hand moves across the MAX25405's field of view. The IR array captures the motion and the on-chip engine classifies it as one of six gestures: Swipe Up, Swipe Down, Swipe Left, Swipe Right, Rotate CW, or Rotate CCW.
Read: The sensor raises its interrupt line. The NU54-DK firmware wakes, reads the gesture register over SPI, and decodes it into a compact one-byte gesture code.
Notify (BLE): The firmware exposes a custom GATT service with a "Gesture" characteristic. Each new gesture is pushed to the connected central as a BLE notification - no polling from the phone or PC.
Visualize (3D): The host application receives the notification and maps each gesture to a rotation of a 3D airplane model:
- Swipe Up / Down -> pitch the nose up / down
- Swipe Left / Right -> yaw / roll left / right
- Rotate CW / CCW -> barrel roll clockwise / counter-clockwise
The airplane responds in real time, giving instant visual feedback that the gesture was recognized. Checkout the video here
Firmware FlowOn the NU54-DK the Zephyr-based firmware is organized into clear steps: - Initialize the SPI master peripheral and the interrupt GPIO. - Configure the MAX25405 registers (gain, LED current, gesture mode). - Start the BLE stack, advertise, and register the custom Gesture service. - On each sensor interrupt, read the gesture code over SPI and send a GATT notification to the connected central. Because the MAX25405 does the heavy lifting, the firmware stays small, event-driven, and low-power - the CPU sleeps between gestures and only the radio and a quick SPI read run on demand.
ApplicationsWith this stack (NU54-DK + MAX25405), you can build:
- Touchless media controls: swipe to change tracks or volume without touching a device - great for kitchens, workshops, and clean rooms.
- Contactless kiosks & appliances: hygienic navigation for public or industrial panels.
- Automotive & cockpit UI: dashboard interaction without taking eyes off the road.
- Accessibility interfaces: control software with simple hand motions.
- AR/VR & gaming props: a wireless gesture wand for immersive control.
This project shows how far you can get by pairing the right sensor with the right radio. The MAX25405 turns messy IR frames into clean gesture events, and the NU54-DK carries them wirelessly with minimal power and minimal code. The 3D airplane demo makes the result tangible - wave your hand and watch it bank and roll in real time.
What's next? I'm planning to design new single board solution for automotive solution, control media/camera while your in driving.











Comments