Hub / Hardware / LaserWand

hardware in progress

LaserWand

Current BMI270 / TTP223 wand, UWB tag and stored LED/laser hardware profiles.

LaserWand concept
Concept illustration — not a wiring reference

Wand hardware — current prototypes and review designs

Checked 2026-11-14. DE54 and DF18 are working physical prototypes with Prokyber ESP32-C6-Bug + DWM3001C + BMI270 + TTP223. Firmware source, an installed image and a proposed PCB are separate evidence.

Current physical wiring
FunctionDE54 · ws2811DF18 · ky016
DWM UART / resetESP TX23 → pad32, RX22 ← pad34; reset21Same, 115200 8N1
BMI270SDA6 / SCL7, 100 kHz; 0x68/0x69Same; fitted and functioning
TTP223 OUTGPIO20, momentary active HIGH at 3V3Same
LEDWS2811 DIN5, GRB / 800 kbit/sKY-016 R18 / G17 / B16, PWM
LaserAbsent; GPIO19 inputKY-008 SIGNAL19, separate supply
Haptic outputUnassignedUnassigned; GPIO6 is IMU SDA

Select the fitted profile explicitly in the portal, then restart; it is stored separately from Wi-Fi. No module auto-detection. Native USB Serial/JTAG uses GPIO12/13; RGB GPIO16/17 can still see ROM boot pulses. GPIO3 belongs to the Bug battery divider, not current touch wiring.

Hardware reference · Current physical profiles

Current firmware

Source and latest verified installed ESP 2.3.23-imu, DWM v1.7.1, model bmi270-200hz-2026-10-29-v1 (10 classes). One IMU sampler runs orientation/gestures at 200 Hz, tracking samples at 100 Hz, UDP transport at 30 frames/s. These are not UWB cycle rates. The 13 November rollout confirms readback and preserved settings. Optional IMU scale/temperature profiles exist, but both tested profiles are identity.

Relative aim and RF limits

BMI270 is six-axis; no absolute yaw reference. Current frame is +Y up / +Z toward the tip. Keep both ESP Wi-Fi and DWM antennas clear. DF18's cutout is under DWM, not ESP; battery/charger interference has not been proven. Evidence and open questions.

October review designs — separate hardware targets. Module-prototype and compact-review use UART TX22/RX23, BMI270 SDA18/SCL19, touch15, LED2, laser20 and motor6. Their 5V high-side laser and ERM driver are not the as-built DE54/DF18. The BMI270 driver already exists; this different GPIO map still needs its own profile and physical bring-up. Review pinout · Review BOM and KiCad handoffs.

Haptic candidate · DRV2605L / PIM452 not integrated

Small LRA module for distinct grip clicks, casts and hit feedback. I²C 0x5A can share SDA6/SCL7 with BMI270 using synchronized access. Start prototype evaluation on regulated 3V3 and measure current peaks, mounting and vibration effects on IMU/gesture recognition. It requires a new ESP-IDF driver; the LRA does not connect to the old ERM MOSFET output. Assessment and minimum test.

Future optical markers

Passive retroreflective bands + camera-side 850 nm illumination are a future yaw-correction path. Today's prototype is camera-free. Historical placement and circuit figures below are not wiring instructions for current prototypes.

Future passive retroreflective band concept

DWM3001C — pinout, J-Link, UART

Same Qorvo module on the wand and every anchor. The ESP32-C6 talks to it over UART (115200 8N1, CRLF). The on-module nRF52833 is programmed over SWD from a SEGGER J-Link 10-pin socket. Canonical write-up: HARDWARE.md.

DWM3001C module pin diagram: 48 castellations, antenna at the top, pins 1–48 counter-clockwise
Figure 1 — DWM3001C pin diagram (Qorvo datasheet). Antenna at the top; pins 1–48 counter-clockwise from top-left. J-Link: SWD_CLK pin 2, SWD_DIO pin 3, VDD pin 12, RESET pin 47 (GND = 1 / 11 / 21 / 38 / 48). UART is not labeled TX/RX on the drawing — our firmware uses the right-side pads 32 (P0.15, UWB RX) and 34 (P0.19, UWB TX).

J-Link 10-pin socket · pin face

The programmer cable is a 10-pin header in two rows of five. Only five wires are used; unused holes stay open. The figure documents the project harness, not every connector called “10-pin”; confirm the actual cable and orientation before connecting.

Existing devices: use the signed UART DFU procedure; verify the target, installed bootloader and image layout before SWD recovery. RUNBOOK A2.

Wand UART — Prokyber ESP32-C6-Bug ↔ DWM

Cross-wired. Firmware: custom_board.h RX_PIN_NUMBER=15, TX_PIN_NUMBER=19.

ESP32-C6DWM3001CnRF
TX GPIO 23pin 32 UWB RXP0.15
RX GPIO 22pin 34 UWB TXP0.19
GNDGND—

ESP TX23 / RX22 — Prokyber H2.12 / H2.11, not DWM pad numbers. The October review schematic has the opposite ESP TX22/RX23 assignment; it needs a matching profile.

Why those pads

Pins 32 and 34 sit on the right edge of the figure, just above the bottom corner — generic P0.15 / P0.19 labels, not “TX/RX”. The DW3000 radio is driven inside the module firmware; the ESP never speaks SPI to it.

Current physical wand UART is TX23/RX22. Anchors have a separate configurable pin map; never infer their wiring from the wand. DWM UART pads remain 32/34.

Circuit schematic hw pending

Hierarchical KiCad design under hw_schematics/laserwand/v1/. Four sheets: root hierarchy, POWER, SENSORS, DRIVERS. The exports below are historical, have obsolete pin assignments, and have not yet been updated to the target above.

Historical schematic exports — not current wiring instructions
LaserWand root schematic: POWER, SENSORS, DRIVERS hierarchical sheets
Root — hierarchical blocks POWER → SENSORS → DRIVERS.
POWER sheet: battery and Esp32-C6-Bug
POWER — 18650 + Esp32-C6-Bug, 3V3 / VBAT / GPIO fan-out.
SENSORS sheet: BMI270 module and DWM3001CTR13
SENSORS — BMI270 module (I²C) + DWM3001CTR13 (UART) + SWD/ESD.
DRIVERS sheet: button, laser, haptic, WS2811, tip harness
DRIVERS — SW1, laser, haptic, WS2811, tip harness.

Wand assembly and service

Checked 2026-11-14. Start with the physical target and its pin map. Detailed assembly guidance: Wand best practices.

DE54 / DF18 today: BMI270 SDA6/SCL7, touch20, UART TX23/RX22/reset21. DE54 has WS2811 DIN5; DF18 has KY-016 R18/G17/B16 and laser SIGNAL19. No haptic output. Current profiles.

Mounting and repeatable motion

Keep the battery/control mass near the grip and the IMU rigidly mounted. Preserve the registered frame: +Y up, +Z toward the tip. Changing mounting changes both aim and gesture data; retrain with representative users/units when necessary.

Two antenna regions

Respect the actual DWM module/adapter clearance above, below and beside the antenna; the cited carrier review records at least 10 mm laterally, not a generic 5 mm allowance. Check the ESP Wi-Fi antenna separately. DF18's carrier cutout is under DWM, not ESP. Battery/copper/charging-board effects remain unproven.

Power depends on the actual board

The Prokyber integrates charging/protection/3V3 regulation. DF18 also has an owner-reported external power/charging board whose exact circuit is unconfirmed. Identify it before applying a power recipe. The review carrier's raw GBAT and protected GND must remain distinct; do not substitute historical TP4056 instructions for the assembled circuit.

Harnesses and joints

Use flexible stranded wire, insulation, service loops and strain relief at each module. Keep UART short and cross-wired; keep I²C local. Avoid routing power or signals through either antenna volume. Choose keyed, labelled connectors for service.

Outputs differ by profile

WS2811 is a 5V module with an appropriate data-level buffer. KY-008 SIGNAL19 is separate from its supply. GPIO16/17 also serve UART0 defaults; native USB avoids application-log contention, but ROM boot pulses remain possible. GPIO6 is BMI270 SDA.

Future optical and haptic additions

Retro bands/camera QA apply to the future optical revision. DRV2605L/PIM452 requires new I²C control and tests for current peaks, grip feel and false IMU/gesture events. Neither is a fitted production capability. Haptic assessment.

October review carrier only: UART22/23, I²C18/19, touch15, LED2, motor6, laser20; DIO6605B boost, high-side laser and ERM MOSFET/flyback. Follow its own BOM and ERC/DRC/manufacturing handoff. The BMI270 driver exists, but this GPIO map is not implemented by selecting the current WS2811/KY-016 profile. Review BOM.

Bring-up and verification

  1. Identify the revision and trace the real supply/return paths; inspect polarity and insulation before power.
  2. Use a current-limited source for a new board/harness; verify rails and transients before the cell. Use a holder or factory-welded cell leads.
  3. Test outside the enclosure: BMI270 identity/configuration, stable mounted samples, DWM UART/ranges, touch polarity and the fitted LED/laser profile.
  4. Check both antenna regions, mechanical attachment, strain relief and access to USB/SWD before closing.
  5. Repeat IMU, ranging, touch/effects, charging and thermal checks after closing. Record wand ID, profile, firmware/model version and results.

For an existing configured wand, identify/back up the device and update its verified app slot while preserving NVS, Wi-Fi, profile, DWM settings and OTA/partition metadata. After reset, restore physical heading alignment before testing aim; saved calibration and RAM heading are separate. Opening USB Serial/JTAG can reset these test units, so keep USB state fixed during passive recording.