A coin-sized device that captures conversations, extracts commitments, and helps you remember everything. Designed for neurodivergent minds. Built from research into the best open-source projects.
An ADHD sidekick that captures what matters and reminds you when it counts
Continuously records conversations with voice activity detection. Only processes when people are actually talking - no wasted battery on silence.
AI identifies when someone tells you to do something vs. when you say you'll do something. Tracks the difference between "TO_USER" and "BY_USER" commitments.
Knows who's talking. Links commitments to the right person. "Mom said to call her" vs "Bob wants that report" - context that matters.
Captures jokes, ideas, memories, and bucket list items. That brilliant thought you had at 2am? Saved. That funny thing your kid said? Preserved.
All data stored locally with SQLCipher encryption. No corporate cloud required. Run your own backend or use the app offline.
nRF52840 draws 1.5μA in deep sleep. All-day battery life on a tiny coin cell. Charges via USB-C.
Commercial devices like Limitless ($300), Humane AI Pin ($699), and Rabbit R1 ($199) all follow the same pattern: the device is basically a fancy microphone. All the real AI processing happens in the cloud. By understanding this, we can build something better for a fraction of the cost.
Best-of-breed components from research into Limitless, Omi, ADeus, and more
┌─────────────────────────────────────────────────────────────────────────────────────┐ │ BRAINGOBLIN WEARABLE DEVICE │ │ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ ┌─────────────┐ │ │ │ Dual ICS-43434 │───▶│ Beamforming │───▶│ Silero VAD │───▶│ Opus/LC3 │ │ │ │ MEMS Mics │ │ GSC Algorithm │ │ On-device │ │ Compress │ │ │ └────────────────┘ └────────────────┘ └────────────────┘ └──────┬──────┘ │ │ │ │ │ ┌────────────────┐ ┌────────────────┐ ┌───────────▼──────┐ │ │ │ LIR2450 Coin │ │ nRF52840 │ │ BLE Stream │ │ │ │ Cell (120mAh) │───▶│ + Zephyr RTOS │ │ to Phone │ │ │ └────────────────┘ └────────────────┘ └────────┬─────────┘ │ └────────────────────────────────────────────────────────────────────────┼──────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────────────────┐ │ PHONE APP / HOME SERVER │ │ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ ┌─────────────┐ │ │ │ Deepgram │───▶│ Gemma 3 4B-IT │───▶│ Commitment │───▶│ SQLCipher │ │ │ │ Transcription │ │ AI Extraction │ │ + Life Log │ │ Encrypted │ │ │ │ (sub-300ms) │ │ (14.4k/day) │ │ + People │ │ Storage │ │ │ └────────────────┘ └────────────────┘ └────────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────────────────────────────┘
Why each component was chosen and how they work together
The brain of the operation. Nordic's nRF52840 is the industry standard for BLE wearables - it powers everything from AirPods to fitness trackers. The Seeed XIAO version gives us a tiny, pre-built module with USB-C and battery charging built in.
ESP32-S3 draws ~80-160mA when WiFi is active. The nRF52840 draws ~5mA during BLE transmission and just 1.5μA in deep sleep. For all-day wearables, this difference is everything.
| MCU | Deep Sleep | BLE Active | Verdict |
|---|---|---|---|
| nRF52840 | 1.5μA | ~5mA | Best |
| ESP32-S3 | 14μA | ~100mA | Too High |
| ESP32-C3 | 5μA | ~80mA | Okay |
| RPi Zero W | N/A | ~150mA | No Sleep |
# I2S Connections for ICS-43434 BCLK (Bit Clock) → D1 (P0.05) LRCK (Word Select)→ D2 (P0.04) DOUT (Data) → D3 (P0.29) VDD → 3.3V GND → GND L/R (Left mic) → GND L/R (Right mic) → 3.3V
The latest generation I2S MEMS microphone from TDK InvenSense. Unlike the older (now discontinued) INMP441, the ICS-43434 has native I2S output with standard timing - no hacks needed.
The ICS-43434 is a bottom-port microphone. The sound hole faces DOWN toward the PCB. Your enclosure needs an acoustic port aligned with this hole!
| Mic | Interface | SNR | Status |
|---|---|---|---|
| ICS-43434 | Native I2S | 65dB | Current |
| INMP441 | PDM→I2S | 61dB | EOL |
| SPH0645 | Weird I2S | 65dB | Problematic |
| Built-in PDM | PDM | ~60dB | Backup |
# Both mics share same I2S bus # L/R pin determines which clock edge Mic 1 (Left): L/R → GND Mic 2 (Right): L/R → 3.3V # Same BCLK, LRCK, DOUT lines # MCU receives stereo interleaved data
The secret sauce: intelligent audio processing on the device itself. We don't just stream raw audio - we process it to save bandwidth, battery, and cloud costs.
Silero VAD is a neural network that determines if someone is speaking. At just 1.8MB, it runs on the nRF52840 using ONNX runtime. Why bother?
LC3 (Low Complexity Communication Codec) is the official Bluetooth LE Audio codec. It's specifically designed for exactly what we're doing.
| VAD | Accuracy | Speed | Size |
|---|---|---|---|
| Silero VAD | 87.7% TPR | ~1ms | 1.8MB |
| WebRTC VAD | 50% TPR | <1ms | Tiny |
We use a Generalized Sidelobe Canceller (GSC) - the same algorithm used in hearing aids.
# GSC Components: 1. Fixed Beamformer (FBF) - Points at expected voice direction - Sum-and-delay across mics 2. Blocking Matrix (BM) - Creates noise-only reference - Subtracts aligned signals 3. Adaptive Noise Canceller (ANC) - Learns noise characteristics - Subtracts from output # Result: 6-10dB SNR improvement
| Codec | Latency | Bitrate | For BLE? |
|---|---|---|---|
| LC3 | 5-20ms | 16-345 kbps | Native |
| Opus | 2.5-60ms | 6-510 kbps | Works |
| Raw PCM | 0ms | 256 kbps | Too Big |
The make-or-break of any wearable. We need all-day battery life from something that fits in a pendant. Here's how we get there.
# Average current draw estimate
Idle (VAD listening): ~2mA
BLE streaming: ~5mA
Deep sleep: ~1.5μA
# Duty cycle assumption:
80% idle, 15% streaming, 5% sleep
Average = 0.80×2 + 0.15×5 + 0.05×0.0015
= 1.6 + 0.75 + ~0
= 2.35mA average
# Battery life:
120mAh / 2.35mA = ~51 hours
Standard TP4056 modules charge at 1A - way too fast for a 120mAh coin cell! Replace R4 with a 5.1kΩ resistor to limit charging to ~240mA (1C rate).
For longer runtime, use a small pouch cell instead:
| Battery | Capacity | Est. Runtime | Size |
|---|---|---|---|
| LIR2450 | 120mAh | ~50 hours | 24.5×5mm |
| 301020 LiPo | 60mAh | ~25 hours | 20×10×3mm |
| 401230 LiPo | 130mAh | ~55 hours | 30×12×4mm |
| 502030 LiPo | 250mAh | ~100 hours | 30×20×5mm |
The XIAO nRF52840 has a built-in BQ25101 charger. For coin cells, you may need to:
The device needs to be wearable, look decent, and have proper acoustic ports for the microphones. Here are your options.
Hangs from chain or cord. Best for general wear. Like Limitless Pendant.
Spring clip for collar, pocket, or lanyard. Best for work.
Decorative front, magnetic back. Best for social settings.
Watch-style form factor. Always visible but less discreet.
ICS-43434 is bottom-ported. The case needs a 1.5-2mm hole directly under each microphone's sound port. Too small = muffled audio. Too large = dust entry.
# Minimum internal space needed: XIAO nRF52840: 21 × 17.5 × 3.5mm LIR2450 cell: 24.5 × 5mm (diameter × height) 2x ICS-43434: 7 × 5.3 × 2mm (with breakout) # Suggested enclosure: ~30mm diameter × ~12mm thick (coin-style) ~35 × 25 × 12mm (rectangular style) # Add 1-2mm wall thickness all around
Use 3×3mm neodymium magnets. Two on each half, alternating polarity. This prevents the device from attaching the wrong way.
Everything you need to build your own BrainGoblin device
The essential components that make up the brain of the device
Battery and charging components
Physical components and connections
What you'll need to build it (you may already have these)
Step-by-step instructions to build your BrainGoblin device
This guide assumes basic soldering skills. If you've never soldered before, practice on some spare components first. Also make sure to work in a well-ventilated area and wear safety glasses.
Gather all components and tools. Use an anti-static mat if available.
Before wiring anything, make sure the MCU works out of the box.
// Quick test sketch
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
}
Connect the ICS-43434 breakouts to the XIAO. This is the most delicate step.
ICS-43434 #1 (Left) XIAO nRF52840 ───────────────────────────────────── VDD ──────────────────▶ 3.3V GND ──────────────────▶ GND BCLK ──────────────────▶ D1 (P0.05) LRCK ──────────────────▶ D2 (P0.04) DOUT ──────────────────▶ D3 (P0.29) L/R ──────────────────▶ GND (Left channel) ICS-43434 #2 (Right) ───────────────────────────────────── VDD ──────────────────▶ 3.3V (shared) GND ──────────────────▶ GND (shared) BCLK ──────────────────▶ D1 (shared) LRCK ──────────────────▶ D2 (shared) DOUT ──────────────────▶ D3 (shared) L/R ──────────────────▶ 3.3V (Right channel)
Wire a slide switch between the battery and VIN to control power.
Instead of a physical switch, you can use deep sleep mode. A button press or BLE connection wakes the device. More elegant but requires firmware support.
Wire the LIR2450 coin cell holder to the XIAO's battery pads.
Double-check polarity before inserting the battery! Reverse polarity can instantly destroy the MCU. Use a multimeter to verify.
Before enclosing, verify everything works.
3D print or order the case, then prepare for assembly.
Put it all together.
Install the BrainGoblin firmware for full functionality.
You've built your own AI wearable! The device will now capture conversations and stream them to the BrainGoblin app for transcription and AI processing. Check the firmware section for software setup instructions.
The code that brings your hardware to life
Two main paths depending on your comfort level:
The BrainGoblin Android app handles everything after audio leaves the device:
The BrainGoblin app source code is available for modification. It currently uses the phone's microphone - modifications are needed to receive BLE audio from the wearable instead.
Configure I2S peripheral to receive 16kHz 16-bit stereo audio from the dual ICS-43434 microphones. Use DMA for efficient buffer handling.
Run Silero VAD (ONNX) or simpler energy-based detection. Only process and transmit when speech is detected.
Encode audio with LC3 or Opus codec. Target 32kbps mono for voice. Balance quality vs. BLE bandwidth.
Custom GATT service for audio streaming. Use notifications for real-time data transfer to connected phone.
Enter System ON sleep between audio processing. Disable unused peripherals. Manage BLE advertising intervals.
Show recording status, BLE connection state, and battery level through LED patterns. Privacy indicator for consent.
| Project | Platform | What to Learn | Link |
|---|---|---|---|
| Omi Firmware | Zephyr/nRF | Complete wearable audio implementation | GitHub |
| BLE Audio Stream | Arduino | Basic BLE audio on nRF52840 | GitHub |
| nrf52 Opus Audio | Nordic SDK | Opus encoding on nRF52840 | GitHub |
| Zephyr I2S Sample | Zephyr | I2S driver usage | Docs |
| ADeus | Various | Self-hosted backend architecture | GitHub |
BrainGoblin vs. commercial AI wearables
BrainGoblin isn't just another AI wearable - it's designed specifically for neurodivergent minds. The commitment tracking feature (knowing the difference between "Mom said call her" and "I said I'd call") is something no commercial product offers. Combined with life logging, speaker identification, and fully open-source everything, you get a device that actually understands how ADHD brains work.