Motion-Reactive LED Rave Gloves

by Yannick99 in Circuits > LEDs

251 Views, 0 Favorites, 0 Comments

Motion-Reactive LED Rave Gloves

IMG_3093.jpeg
IMG_3092.jpeg
IMG_3076.jpeg
IMG_3088.jpeg
intro_bench.jpg
21 octobre 2026

These gloves turn your hands into light. Each glove packs 20 individually addressable WS2812-2020 LEDs — four per finger — driven by the motion sensors of a Seeed XIAO nRF52840 Sense. The effects react to how you move, a built-in microphone catches the beat of the music, and you change modes with a gesture: hold your palm to the sky for one second. No button to hunt for, no app required, no stopping the dance.

And because one glowing hand is only half the show, the two gloves talk to each other over Bluetooth: change a mode on one hand and the other follows instantly, all night, on its own dedicated radio link.

  1. Real measured battery life, not guesses. 22 mA per glove at dancing brightness 50% (measured) — about 22 hours on a 500 mAh LiPo. It survives a full rave weekend on one charge.
  2. Beat detection with one honest knob. A ~150 Hz filter and a threshold that rides the song's average level catch the kick drum. The sensitivity floor is trimmed with a single command (f = less sensitive, v = more) — set it for the venue; a very loud show may need a few presses of f.
  3. A gesture that dance moves can't fake. Mode switching keys on the direction of gravity, not on acceleration taps. Dancing as hard as you want never changes your mode by accident; a deliberate palm-up hold does.
  4. Custom carrier PCBs. Each 2×2 mm LED chip is soldered onto a tiny custom board with wire pads, glued to the fabric, then sealed under UV resin. It survives sweat, flexing, and being grabbed.

Skill level: confident soldering (SMD, fine wires), basic Arduino. Total budget: roughly $90 CAD for the pair, most of it reusable (glue, resin, wire spools).

Supplies

Electronics

  1. 2x Seeed XIAO nRF52840 Sense — the Sense version only: it carries the IMU and the PDM microphone that half this project runs on. (Digi-Key 1597-101991465CT-ND, ~$15 USD)
  2. 40× WS2812-2020 addressable RGB LEDs for the pair (20 per glove) — the 2×2 mm package is what makes per-finger mounting possible. A 300-piece pack (Walmart.ca, CAD $12.62) builds both gloves with plenty of spares.
  3. 2xLiPo 1S 500 mAh with protection, JST connector (HXJNLDC 503030, ~$20 on Amazon.ca) — 31×30×5 mm, 8.5 g.
  4. 30 AWG silicone wire — one red/black spool (BNTECHGO 2×25 ft, ~$12) does the whole pair. Silicone insulation survives knuckle flexing where PVC cracks.
  5. 2x 100 µF capacitor across the LED power rail, near the board (ceramic 1206 X5R or electrolytic, ≥ 6 V).
  6. 10x 100 Ω resistor (optional) — you probably won't need it; it goes in series with a data line only if that finger's first LED ever flickers. Never had this problem. (Digi-Key RNF18FTD100RCT-ND)

Consumables — whole project

  1. 40 custom carrier PCBs — a 9×7 mm board I designed in EAGLE; Gerbers in Step 1. Any PCB house; the 40 boards cost less than lunch.
  2. B-7000 glue (110 mL, ~$13) — bonds the PCBs to stretch fabric and stays flexible.
  3. UV resin kit with UV flashlight (~$17) — the final waterproofing/strain-relief layer over every board.
  4. A pair of snug stretch gloves — I used Unigear lightweight running gloves, black, ~$15. Thin stretch fabric = short wires and a low profile.

Tools: soldering iron with a fine tip, solder, flux, flush cutters, helping hands or a small vise, USB-C data cable (not charge-only!), Arduino IDE, multimeter (needed exactly once, to calibrate the battery reading), scissors, marker. At the end, a solder heater plate was the best.

Order the LED Carrier PCBs

pcb_pile.jpg

A WS2812-2020 is 2 mm on a side — you cannot solder wires to it directly without an angry mess. So each LED gets a tiny carrier PCB that brings its pads out to three 0.7 mm wire holes on each end, turning the LED into a bead that chains input-to-output: XIAO data pin → PCB IN → PCB OUT → PCB IN → ... → PCB OUT at the fingertip.

Five chains of four boards per glove. Each finger is fully independent: if a wire ever breaks, you lose one finger, not the whole hand.

The board is deliberately dumb — one WS2812B-2020 footprint, six wire pads, and silkscreen marks (I/O direction and a polarity corner) so the chains never get assembled backwards.

Gerbers (free, CC-BY-SA): github.com/YannickTurcotte/led2020-carrier — grab the zip from the repo and send it to your favourite fab (JLCPCB, PCBWay, OSH Park...), order 40 plus a few spares, 2-layer, any colour. Mine came on 0.6 mm green; I designed it in EAGLE (free for hobby use): one LED footprint + 6 through-hole pads — a 20-minute redraw if you want different pad spacing.

Solder the LEDs Onto the Carrier Boards

pcb_zoom.jpg
IMG_3066.jpeg
IMG_3067.jpeg

You'll do this 40 times (plus spares), so set up a comfortable station: fine-tip iron, flux, tweezers, good light.

  1. Put a small dot of flux on the four LED pads of a carrier board.
  2. Tack one pad with a tiny amount of solder.
  3. Pick up the LED with tweezers — mind the orientation, the corner pin marks polarity on both the LED and the silkscreen — and reflow the tack pad to seat it.
  4. Solder the three remaining pads. Each joint needs very little solder.

The 2020 package looks intimidating but has only four pads and no thermal mass; it solders in under a minute per board once your hands find the gesture. Do them in batches — about 40 minutes of zen for both gloves.

Power-check each finished board with a multimeter: no continuity between + and GND.

You can also do a template with an extra PBC to test each LED individually as shown.

Lay Out and Glue the Boards on the Glove

glue_blank.jpg
glue_flat.jpg
glue_worn.jpg

Put the glove on and mark the LED positions directly on the fabric: four spots per finger, from the base to just below the fingertip, spaced so the lit dots read as a line when the finger is open. Keep them on the back of the fingers (visible with an open hand) — but check with a closed fist that no board sits in a crease, or it will fight the fabric every time you close your hand.

One convention to keep on BOTH gloves: I for input must be in direction on the base of the fingers. O for output is solder to the next led I.

Gluing with B-7000: ventilate (the stuff smells until it cures); small dab on the fabric — not too much, it wicks through stretch knit — press a board on, hold 30 seconds. Continue over all 20 positions, then let it cure: surface-dry in ~10 minutes, give it a few hours before wiring and 24 h before trusting it fully.

The boards sit flat and low; with black boards on black fabric the gloves look almost unmodified with the LEDs off.

Do your best, but don't worry if the glue makes a bit of a mess — it won't be visible in the dark.

Wire the Fingers

wire_close.jpg
wire_route.jpg
wire_fist.jpg

Each finger is a 4-board chain: the XIAO's data pin feeds board 1's IN pads; board 1's OUT pads feed board 2's IN pads; and so on to the fingertip. The Bat+ and GND rails ride along the whole chain on the same three wires.

Per finger you need: three wires from the wrist to board 1 (that finger's data + shared Bat+ /GND), then three short jumper wires between each pair of boards — roughly 25–30 cm of wire per finger including slack.

Cut every wire with a service loop — a little extra S-bend of slack at each knuckle. Taut wires snap at the first knuckle that flexes thousands of times per night; a gentle wave of slack lasts forever.

Soldering tip that saved me: clamp the glove+board in a small vise so the board is held for you; tin the wire, press it into the pad hole, one second of iron, done. Keep the order identical at every joint — Bat+, data, GND, same physical positions — and if you use all-black wire like I did, put a Sharpie dot on the data wire at the wrist end so the XIAO hookup stays unambiguous.

Work finger by finger and power-check the chain after each: no continuity between Bat+ and GND, then move on.

Clean all PCBs with a toothbrush and IPA (isopropyl alcohol). This step matters: flux residue and fingerprints will stop the UV resin from adhering properly.

Prepare the XIAO

xiao_header2.jpg
xiao_batt.jpg
xiao_batt2.jpg
xiao_header.jpg
wiring_diag.jpg
seedbottom.png

Three things get soldered to the XIAO before it goes in the glove:

  1. Battery pigtail to the BAT pads. Solder the battery's red/black leads — through the JST connector — to the BAT+ and GND pads on the back of the board. The JST in-line is your power switch: unplug to turn off, plug to turn on. The XIAO's onboard charger recharges the battery over USB-C, no charging module needed. +LED are all connected to Bat+, - to GND and data line d2, d3, d6, d9, d10 as shown.
  2. A 7-pin female header row on the board edge. The five finger data wires, Bat+ and GND land here. A header means the XIAO unplugs from the glove for flashing or repairs without desoldering anything.
  3. The 100 µF capacitor across Bat+ and GND, as close to the board as practical.

Pin choice warning — this bit us. On the nRF52840 Sense, pin D8 belongs to the microphone and D4/D5 to the IMU's I2C bus. The finger data pins are: Thumb → D2, Index → D3, Middle → D6 (not D8!), Ring → D9, Pinky → D10. Follow the wiring diagram and the firmware talks to all five fingers and all the sensors on the first try.

Bring It Together at the Wrist

wrist_pins.jpg
IMG_3069.jpeg
IMG_3068.jpeg

The ten finger wires (plus power) converge at the back of the wrist:

  1. Sew or glue a small patch of velcro (loop side) at the back of the wrist.
  2. Stand a row of male header pins on it (a dab of B-7000 under the plastic keeps them put) and solder the finger harness to the pins: five data wires, GND, Bat+ and Dx.
  3. Plug the XIAO (with its female header from the previous step) onto those pins, and strap it down with the mate of the velcro patch. It should sit flat, USB-C port facing out the cuff so you can charge without undressing the glove.
  4. The battery tucks at the wrist under the strap, wiring side in. 8.5 g on the back of the hand disappears when you move.

Plug the battery in: all fingers should light up the boot confirmation flash, then settle into the default animation. If a finger is dark or garbled, fix it NOW — it's a wiring-order or direction-of-chain issue, and everything after this step assumes the harness is right.

Flash the Firmware

seedtop.png

Arduino IDE setup, one time:

  1. Boards Manager → install "Seeed nRF52 Boards" (the non-mbed package). Select Seeed XIAO nRF52840 Sense under Tools → Board.
  2. Library Manager → install "Adafruit NeoPixel" and "Seeed Arduino LSM6DS3". ⚠ Not "Arduino_LSM6DS3" — same sensor, different API, won't compile. The PDM and Bluefruit libraries ship with the board package.

Then open the attached gants_rave_ble_final.ino and change exactly one line per glove:

#define MAIN_GAUCHE 0 = RIGHT glove (master) — #define MAIN_GAUCHE 1 = LEFT glove (follower).

Upload (1200000 baud bootloader, selected automatically). Quirks we hit so you don't have to: close the serial monitor before uploading — the sketch and bootloader are two different USB devices and Windows re-enumerates them mid-upload. If no COM port appears: different USB port, different cable (charge-only cables are the #1 trap), or double-tap reset — the board then shows up as a drive named XIAO-SENSE.

On first boot the LEDs flash white three times, then start in the default state (black & red theme, comets, 50% brightness).

One-time battery calibration. With a multimeter on the battery and the serial monitor open: COEF_VBAT = 0.00268 × (real voltage ÷ displayed voltage). Put your value in the CONFIG section — ours read 0.00268 against a lab supply. Below 3.45 V, LED 0 of the pinky blinks red every 30 s: that's your "charge me" warning. (With USB plugged but no battery, the reading is meaningless; the firmware knows and mutes the warning.)


Gants_rave_ble_final.ino on Github

Seal Everything Under UV Resin

Capture d’écran 2026-10-20 192049.png

This is the LAST build step — only after every finger lights, both gloves link, and you've worn them around the block. The resin is forever.

  1. Lay a thin bead of UV resin over each PCB — enough to cover the LED's solder joints and wick around the wire exits, not a blob.
  2. Cure with the UV flashlight from the kit, 5–10 seconds per board.
  3. Do the same over the wrist wire landings and the header pin bases — the highest-stress joints of the whole build.

The cured resin locks the strain relief in place, waterproofs against sweat and spilled beer, and makes each board one solid pebble instead of a PCB with four dangling wires. Optically it acts as a tiny dome diffuser; keep the layer over the LED face paper-thin if you want maximum raw brightness.

Total: 40 boards, about 30 relaxed minutes. The gloves then survived a full rave night — dancing, fist bumps, a drink or two held — with zero failures.

Using the Gloves

21 octobre 2026
Capture d’écran, le 2026-10-21 à 20.00.29.png

Power: plug the battery = on; unplug = off.

Three themes, four modes each (the fourth mode is always the beat-reactive one): Multicolour — comets in a warm/cool palette, strobe, gravity, bass with a new colour each beat. Black & red — subtler red comets, red strobe, red-accented gravity, red bass; the stealth look, near-invisible until the beat hits. Pure red — everything in deep red: maximum drama, minimum battery.

The gestures — they key on gravity's direction, so dancing can't trigger them by accident:

  1. Palm to the sky, ~1 second → next mode. Keep holding and it keeps cycling.
  2. While palm-up, tap the glove (a finger flick is enough) → next theme.
  3. Clap → instant flash: white added to strobe, red flash in gravity.
  4. Just move — every effect reads the gyroscope and speeds up and brightens when you dance harder.

The four modes: Comets run trails up and down the fingers in alternating directions; Strobe turns your movement into flash energy; Gravity pools light at the lowest point like liquid in a glass — tilt your hand to pour it; Bass is the microphone mode: a ~150 Hz low-pass catches the kick drum and each beat pulses the lights. The beat threshold rides the song's average level, but the sensitivity floor is yours to trim with the f / v commands (each press is ×1.3 / ÷1.3) — set it for the room before the show; a very loud venue usually needs a few presses of f. The floor defaults to 5000 (tuned for rave-level volume but it could be more) and returns there on power-up. Each glove listens to the music locally, so they stay beat-locked even far apart.

Phone control (optional): the free Adafruit Bluefruit LE Connect app connects to "Gant Rave D" (the right glove). All of them propagate to both gloves: MODE / MODE 2 (next or specific mode), THEME / THEME 0..2 (cycle or pick), LUM 0..100 (brightness as % of the ceiling), PLAFOND 1..255 (the absolute ceiling), g (cycle mic gain), f / v (bass floor ×1.3 / ÷1.3 — loud venue vs quiet room), RESET (factory defaults on both), OFF / ON (logical standby, ~2 days), ? (full state incl. battery), PING (link test), AZ (IMU orientation readout).

Videos: both gloves synced on the bench

The Glove-to-glove Link

Rave Gloves - glove-to-glove BLE sync (red comets)

The pair forms its own tiny BLE network. The right glove is the master: it advertises, scans, and connects to the left glove automatically a few seconds after both power on. From then on the right glove dictates — any gesture, clap, or app command on it is mirrored by the left within milliseconds, and a heartbeat re-sends the full state every 5 seconds, so even a lost radio packet self-heals within one heartbeat.

The link uses a dedicated service UUID, so the gloves only ever connect to each other — not to a phone, not to a stranger's device. The phone connects to the master in parallel; the app and the glove-to-glove state stay consistent.

  1. The left glove is a pure follower: gestures on it do nothing (by design — one brain per pair).
  2. Auto-reconnect after a shutdown, a battery swap, or walking out of range and back. Nothing to pair, nothing to remember.
  3. Radio cost when linked: zero extra — the master's scanner sleeps once connected. A solo master hunting for its partner costs +5 mA (~18 h instead of ~22 h).

Second glove: same sketch, MAIN_GAUCHE 1, done.

Videos: glove-to-glove sync test

Battery Life, Measured

Everything below is measured on the finished gloves with a USB power meter, fresh 4.2 V battery, final firmware:

  1. Comets, gloves linked, 50% brightness: 22 mA per glove → ~22 hours
  2. Comets, one glove solo (master hunting): 27–28 mA → ~18 hours
  3. Anything at 100% brightness (worst case): 46 mA → ~11 hours
  4. Gravity mode at 50%: 20 mA → ~25 hours
  5. Standby (OFF): 7–14 mA → ~2 days

The 500 mAh cell comfortably survives a full rave weekend. Two habits keep it that way: charge the night before (5–10 h over USB-C — the onboard charger is deliberately gentle), and don't store the gloves plugged-in-off for days.

Why so low? Twenty 2020-package LEDs at dancing brightness with a perceptual brightness curve average a fraction of the theoretical maximum, and the firmware caps everything at the ceiling you set. Loud brightness is a LUM 100 away when you want it — you'll just trade hours for it.

Troubleshooting

  1. A "red" LED lights up green-ish. Your 2020 chips are RGB order, not the classic WS2812B GRB. The attached firmware already uses NEO_RGB; if you swap in different LEDs and colours look wrong, this constant is why.
  2. LSM6DS3.h: No such file or directory. You installed "Arduino_LSM6DS3". Remove it, install "Seeed Arduino LSM6DS3".
  3. Middle finger dark + mic won't start. You used D8 for the middle finger. On the Sense, D8 is the PDM microphone's data line. Middle finger is D6 — see the wiring diagram in Step 5.
  4. Bass never beats (or beats constantly). Check the PDM start order first — it must begin after the BLE stack (the firmware does this; don't "clean up" the init order). Then trim the sensitivity floor with the f / v commands: f raises it (×1.3 per press, for loud venues), v lowers it (quiet rooms). The defaults are tuned for rave-level volume, and in a very loud club you may need several presses of f — do it before the show; the floor resets to that default (5000) on power-up.
  5. Compile error about PIN_VBAT_ENABLE. Board-package naming difference; the firmware ships with a compatibility shim — make sure you copied the whole file.
  6. COM port disappears during upload, error at the end. Normal. The sketch and bootloader re-enumerate as different devices; close the serial monitor and let it finish. No port at all: another cable (charge-only cables!), another USB port, or double-tap reset and flash via the XIAO-SENSE drive.
  7. Battery voltage reads nonsense. Two cases: reading while USB-powered without a battery (phantom values, expected — warnings auto-muted), or the per-board coefficient needs the one-time calibration in Step 7.
  8. First LED of one finger flickers at full white. Data-line signal margin. Solder the 100 Ω resistor in series with that finger's data wire, at the XIAO end of the harness.
  9. Left glove "stuck" in an old mode. It's waiting for the master's heartbeat. Bring the master in range or power-cycle it; state re-syncs within 5 s. RESET forces factory defaults across both.
  10. Mode changes while dancing. It shouldn't — that's the whole point of the gravity-based gesture. If your wrist mounting mirrors the board, check the AZ command readout palm-up vs palm-down and flip the GESTE_AZ_MAX threshold sign.