Inspired by the Revo aesthetic - that classic retro radio look - but with functionality that doesn’t suck in 2026. This is a split-flap radio alarm clock with AirPlay, Spotify Connect, and iPhone wake-time sync. Below is a running log of the decisions, the mistakes, and maybe decisions I’ll rethink in six months.
CAD renders
Enclosure
Prototype: 3D printed PLA on an A1 Bambu Lab. Heat-set brass M3 inserts at every mounting point.
Final: Solid wood or veneered MDF carcass with CNC-routed apertures. The internal frame in printed PLA/ASA with M3 inserts for speakers and PCB standoffs.
Acoustic baffle: Printed panel that splits the electronics bay into two chambers. I’m still debating whether to add a slide-in baffle above the electronics to make the acoustic bay completely sealed. Might be overkill for a small beside table radio.
Display
- 4x split-flap modules based on Morgan Manly’s open source design
- 28BYJ-48 stepper motors, one per digit
- HH:MM format, printed front plate for prototype
- Warm white SK6812 RGBW LED strip for night illumination, PWM-dimmable via Pi GPIO
I might regret the flipping sound in the middle of the night, but it is a cool concept.
Audio
- DAC: Raspberry Pi DAC+ HAT (Texas Instruments PCM5122), hardwired internally via solder pads — no RCA connectors used
- Amplifier: MAX9744 stereo Class D, 20W per channel, 4.5–14V speaker rail
- Drivers: 2x Dayton Audio DMA58-8 2" full-range, upward-firing
- Volume control: Alps RS6011YA9A07 linear slider, wired directly to MAX9744 potentiometer input
- Streaming: shairport-sync (AirPlay 2), librespot (Spotify Connect)
- Acoustic volume: ~.5L sealed, divided per channel
Compute
- Raspberry Pi 3A+
- OS: Raspberry Pi OS Lite
- Network setup: Captive portal on first boot via RaspAP for WiFi configuration
Electronics
- Stepper control: 4x PCF8575 I2C GPIO expanders → ULN2003 driver arrays → stepper motors
- LED control: SK6812 RGBW via rpi_ws281x, 3.3V→5V level shifted
- Buttons: Snooze and illumination toggle wired directly to Pi GPIO with internal pull-up resistors, active-low
- I2C bus: PCF8575s (address-configured via A0/A1/A2) + MAX9744 sharing single bus
- Power: 12V barrel jack input; 5V buck converter (Pololu D24V25F5) for Pi and logic rails; 12V direct to MAX9744 speaker rail
Power Rails
| Rail | Consumers |
|---|---|
| 12V | MAX9744 speaker output |
| 5V | Raspberry Pi, PCF8575s, ULN2003s, SK6812 strip |
| 3.3V | I2C logic (supplied by Pi onboard regulator) |
Controls
- Volume: Alps RS6011YA9A07 linear slider (top panel)
- Snooze: Large custom cap over Omron B3F or C&K PTS526, two-point stabiliser, walnut or brass face cap
- Illumination toggle: Panel mount momentary button
- Power: Latching panel mount switch (Apem/E-Switch 16–19mm)
iPhone Integration
- Wake-time sync: iOS Shortcuts personal automation triggers on alarm, POSTs wake time to Pi HTTP endpoint
- Home hub: Required for reliable automation execution without on-device confirmation
- AirPlay: shairport-sync, appears as AirPlay 2 speaker in Control Centre
- Spotify: librespot Spotify Connect client
Software Stack
- shairport-sync — AirPlay 2 receiver
- librespot — Spotify Connect
- rpi_ws281x — SK6812 LED control
- RPi.GPIO — button handling with software debounce
- Flask or similar — lightweight HTTP server for alarm time endpoint and local settings UI
- RaspAP — captive portal WiFi setup
Current status: Case & inner frame printed in PLA, tolerances checked. Reduced inner dimensions of case by .1 mm for a snug but still workable fit. Will update further when electronics arrive.