Control Haxel haptic units directly from your Chrome browser using Bluetooth Low Energy (BLE).
This page controls Haxel hardware directly through Chrome's Web Bluetooth API. No local network or Wi-Fi configuration is required โ as long as the unit is flashed in Bluetooth mode, you can pair and stream real-time haptic commands from this browser.
Power on your Haxel board, then click CONNECT BLE (hero bar or portal
header), pick the device named like Haxel-XXXX, and the portal unlocks for live
control.
| Feature | Legacy Haptic Control | Haxel (HAL) |
|---|---|---|
| Driver Integration | Hardware-specific register hacking per driver IC | Unified Hardware Abstraction Layer |
| Pattern Generation | Hardcoded non-blocking loops | Declarative pattern library runtime |
| Control Interface | Serial monitor & manual uploads | Mobile-first captive portal web UI |
| Audio Reactivity | Custom DSP / external hardware filters | Built-in 32-band FFT & envelope follower |
| Actuator Support | Single actuator style per compile | Dynamic LRA, ERM, Solenoid mapping |
The idea of converting sound into touch is not new. It belongs to a research tradition called sensory substitution, the systematic replacement of one sensory channel with another. Paul Bach-y-Rita demonstrated tactile-visual substitution in 1969, and the field has since produced devices like the BrainPort (tongue-based electrotactile vision) and David Eagleman's VEST (a vibrotactile vest for hearing). The underlying neuroscience of cross-modal plasticity shows that the brain can repurpose cortical areas when an input modality is missing. This prior work suggests that structured tactile signals could, over time, become interpretable by the wearer (a hypothesis Haxel intends to evaluate in the Section 11 user study).
But building an accessible, programmable haptic device runs into two distinct challenges.
Human hearing spans roughly 20 Hz to 20,000 Hz, a 1000:1 range. Haptic actuators respond to maybe 50 to 250 Hz, a 5:1 range. Compressing a thousandfold dynamic range into a fivefold one produces what is effectively brown noise: the actuator vibrates in a constant, muddy hum with no distinguishable structure, and the mechanical stress will eventually destroy it. Direct linear mapping is not viable.
Every actuator type is fundamentally different. An LRA needs AC resonance tracking. An ERM just wants a DC voltage threshold. A solenoid is a different beast entirely. Normally that means a separate codebase for each one, locking projects into a single hardware configuration and making experimentation expensive.
Haxel's audio-reactive pipeline ingests raw sound through either an analog aux port or an I2S digital microphone and runs a 256-point FFT to decompose the full 0โ20 kHz spectrum into 32 log-spaced bands in real time. The goal is sensory substitution: translating the structure of sound into tactile patterns that a user can feel, learn, and eventually interpret, serving as a direct accessibility bridge for the Deaf and Hard-of-Hearing.
Instead of mapping the full spectrum linearly (which, as described in Section 02, produces brown noise), the FFT output is divided into configurable frequency brackets. By default, these are low (bass), mid (vocal), and high (treble), and each bracket drives an independent haptic pattern generator. Bass energy might trigger sharp staccato solenoid impacts. Mid-range vocal presence could modulate a sustained ERM rumble. High-frequency transients produce rapid micro-pulses. The design aims to establish **structured tactile semantics**: the user doesn't feel "sound"; they feel distinct, learnable textures that correspond to acoustic categories.
Haxel's Hardware Abstraction Layer solves the fragmentation problem. A single firmware image supports LRAs, ERMs, and solenoids through a unified driver pipeline running inside a FreeRTOS task. You swap hardware, not codebases.
LRAs only feel right at their physical resonant frequency, usually somewhere between 170 and 235 Hz. Haxel reads back-EMF signals from the active driver continuously and nudges the output frequency to stay locked to resonance, so you don't have to measure it yourself or recompile when you swap actuators.
Patterns run through a flat-bytecode interpreter that outputs normalized intensity values between 0.0 and 1.0. The active HAL driver then translates those into whatever the hardware actually needs: voltage ramps for an LRA, PWM duty cycles for an ERM, or timed pulses for a solenoid.
Generates normalized bytecode values (0.0 to 1.0)
Haxel's Pattern Studio provides a Pixelblaze-inspired scripting environment for authoring haptic
waveforms. Users write mathematical expressions using built-in functions like wave(),
triangle(), square(), and noise(), which are compiled in
real-time and executed against the virtual motor at 60 ticks per second. Variables like
t (elapsed time), freq (frequency shift), and speed (playback
rate) are injected automatically.
Write math formulas directly in the studio console. Key code patterns include:
Sharp Pulse (Click)
wave(t * 10) * (wave(t * 10) > 0.85)
Sawtooth Ramp Sweep
(t * speed) % 1.0
Rhythmic Staccato
square(t * 4) * noise(t) * 0.7
Resonant Sine Breathing
wave(t * (freq * 0.05)) * 0.5 + 0.5
Custom patterns can be saved to the library and immediately assigned to any frequency bin in the audio-reactive pipeline. This closes the loop between authoring and deployment: you write a pattern, feel it on your phone or actuator, and assign it to respond to bass hits, vocal presence, or cymbal transients, all without recompiling firmware.
Haptic feedback for music and accessibility is an active research area with several notable systems:
A wristband for Deaf users that maps audio to vibrotactile patterns across multiple actuators. While functionally related, Haxel distinguishes itself by focusing on a fully open-source platform, utilizing standard off-the-shelf components, and exposing a client-side user-scriptable pattern sandbox.
A wearable bass transducer (backpack/seat form factor) designed for music producers. Focuses on single-channel low-pass tactile sub-bass reproduction, whereas Haxel targets multi-band frequency-band partitioning and scriptable pattern modulation.
David Eagleman's Versatile Extra-Sensory Transducer: a vibrotactile vest for hearing. Demonstrates cross-modal plasticity in longitudinal academic studies. Haxel aims to adapt these sensory-substitution principles into a low-cost, highly accessible DIY framework.
Ryerson University's multi-channel vibrotactile chair for music appreciation. Maps audio bands to physical zones across the chair. Haxel scales down these multi-channel sound-localization advantages into a portable, field-configurable, and wearable package.
Haxel's differentiation is the intersection of four properties: open-source design, user-scriptable patterns, configurable frequency-band partitioning, and near-zero hardware cost (an ESP32-C3 board plus a motor driver typically costs under $8 in components).
The core technical contribution of Haxel is its approach to the audio-to-haptic mapping problem. Rather than applying a single transfer function to the entire audio spectrum or distributing linear frequency bands across a fixed actuator array, Haxel decomposes the FFT output into N user-configurable frequency brackets, each driving an independent haptic pattern generator.
256-point FFT at 44.1 kHz sample rate produces 128 raw frequency bins. Haxel downsamples and aggregates these into 32 log-spaced bands (0 to 20,000 Hz) to capture full musical details.
Dividers split the 32 log-spaced bands into N contiguous brackets (up to 5 bands).
Each band's average magnitude is computed and scaled by gain.
Volume envelope modulates its assigned haptic pattern function.
Output takes the maximum of all band outputs to drive the motor.
The optimal number of frequency bands is not universal. For music with simple spectral structure (solo voice, acoustic guitar), two or three bands may suffice. For complex electronic music with distinct sub-bass, mid-bass, vocal, presence, and air bands, five partitions provide meaningfully different tactile textures. The ability to add or subtract bins at runtime, and to assign NONE to any bin, gives users control over the information density of their haptic experience.
The design decisions in Haxel are grounded in the psychophysics of vibrotactile perception. Understanding the biological hardware that receives haptic signals constrains what is possible and guides what is useful.
Pacinian corpuscles, located deep in the skin and joints, are the primary vibration detectors. They are most sensitive between 200 and 300 Hz. While standard LRAs operate slightly lower at 170 to 235 Hz, this range overlaps significantly with the Pacinian response band, allowing effective coupling. Meissner's corpuscles, closer to the skin surface, respond to lower frequencies (10 to 50 Hz) and detect flutter and texture. Haxel's frequency shift control allows tuning output to target either receptor population.
The Just Noticeable Difference (JND) for vibrotactile amplitude is approximately 15 to 20% change in intensity. This means pattern functions that modulate below this threshold will feel like a constant hum. Haxel's pattern library is designed with JND-exceeding contrast: pulse patterns alternate between 0% and 100%, and even subtle patterns like "ambient" maintain at least 25% peak-to-trough variation.
Humans can distinguish separate haptic events spaced as close as 5 to 10 milliseconds apart. Haxel's animation loop runs at approximately 60 ticks per second (16.7 ms per tick), which falls within the temporal resolution window for distinct event discrimination. For patterns requiring faster modulation (staccato, micro-pulse), the underlying PWM frequency operates in the kilohertz range.
Perceived intensity follows a logarithmic relationship, not a linear one. A doubling of voltage does not produce a doubling of perceived vibration strength. Haxel's master intensity slider operates on a linear 0-255 scale, but the Motor Startup Floor calibration and HAL driver curves compensate for the nonlinear perceptual response of the actuator-skin system relative to Weber's Law.
Research on audio-haptic synchronization perception shows that users detect desynchronization above approximately 50 milliseconds. Haxel's end-to-end latency budget from audio input to actuator response must stay below this threshold to feel "live."
To prevent perceptible audio-haptic lag, the entire pipeline must execute well under the 50 ms human synchronization threshold. Haxel schedules tasks directly in FreeRTOS to prioritize motor output.
Estimated end-to-end latency is 10 to 15 ms, calculated as empirical design constraints based on the ESP32-C3 firmware execution model (DMA buffer intervals and FreeRTOS task timings). FreeRTOS task scheduling runs the haptic loop at elevated priority with core jitter below 1.4 ms, ensuring that haptic feedback feels instantaneous relative to the audio events.
The Motor Startup Floor control addresses a real electromechanical engineering problem: static friction (stiction). All rotating and oscillating actuators have a minimum input energy required to overcome bearing friction and begin moving. Below this threshold, the motor receives power but produces no perceptible vibration; the energy is entirely consumed by friction.
Eccentric Rotating Mass motors have the highest stiction threshold due to bearing friction and the inertia of the offset weight. Typical minimum duty cycle to initiate rotation is 15 to 25% of maximum input. Below this, the motor stalls: it heats up without spinning.
Linear Resonant Actuators don't have bearings, but they do have a ring-up period: the number of oscillation cycles needed to reach steady-state amplitude at their resonant frequency. If the pattern switches direction before ring-up completes, the actuator produces weak, inconsistent output. The startup floor ensures the minimum drive level exceeds the ring-up threshold.
Haxel's startup floor remaps the entire pattern output range. At 0% floor, the output spans 0.0 to 1.0 as authored. At 15% floor, the output spans 0.15 to 1.0, guaranteeing that any nonzero pattern value produces perceptible motion. The simulator's stall detection warns when the floor is set too low for the selected actuator type.
Hardware & Electromechanical Protection: Because Haxel is a general-purpose engine driving inductive motor loads, several firmware and circuit safety boundaries are supported:
EngineState::FAULT safety state. When a fault is raised (via raiseFault()), the engine halts the real-time execution loop (Engine::tick() returns early) and shuts off all motor drive. Haptics remain completely stopped until the user explicitly clears the fault state via the web API (sending a {"clear": true} state patch).raiseFault() on their specific ESP32 pin configurations.Several research and engineering directions remain open for future development:
A controlled evaluation with Deaf and Hard-of-Hearing participants is the next critical milestone. The proposed study design: N=5 to 10 participants, each exposed to bass-heavy, vocal-heavy, and treble-heavy music tracks through haptic-only feedback. Primary metric: can participants correctly identify which frequency category dominates? Secondary metrics: subjective preference ratings, pattern discriminability scores, and learning curves over repeated sessions.
The current architecture drives a single actuator. Extending the HAL to support spatial arrays (multiple actuators mapped to different body locations) would enable richer tactile experiences, similar to the Emoti-Chair's spatial approach but with Haxel's scriptability and portability.
A community pattern repository where users can upload, share, and download haptic patterns. This would accelerate the discovery of effective audio-to-haptic mappings through collective experimentation rather than individual trial and error.
Machine learning models that automatically adjust bin boundaries based on the spectral content of incoming audio. For example, detecting that a song is bass-heavy and automatically narrowing the bass bin to increase resolution in that range, while widening treble bins where less information is present.
This work is suitable for submission to venues such as ACM CHI (Human-Computer Interaction), ACM ASSETS (Accessible Computing), or IEEE World Haptics Conference, particularly once user evaluation data is collected.