Close
0%
0%

A headless Media Center for the blind with knobs

A DIY internet radio and media center for blind and visually impaired users. Pi 4 + Arduino, controlled entirely by physical rotary knobs

Similar projects worth following
0 followers




### The Problem

Smart speakers and streaming devices have a fundamental flaw: they assume you can see. Voice assistants help, but they need a cloud connection, they listen all the time, and they get frustrating when they mishear you. For blind and visually impaired users, the alternatives are either expensive specialized hardware or being locked into Amazon, Google, or Apple ecosystems.

### The Solution

Feel the Knobs is a self-contained media center that needs no screen and no internet account. Two large 11-position rotary switches — one for program selection (radio, YouTube, audiobooks), one for station or channel — give you tactile, muscle-memory-friendly control. A potentiometer handles volume. Text-to-speech confirms every selection. That's it. No app, no touchscreen, no cloud.

It lives in a laser-cut 6mm MDF enclosure and drives two 75W full-range speakers through a HiFiBerry AMP2. The whole thing runs off a single 20V power brick.

### How It Works

Two Arduino Nanos act as I2C slaves, each reading one rotary switch via analog voltage dividers. The Raspberry Pi 4 polls their positions over I2C every 200ms and launches the right player — mpd for radio, yt-dlp for YouTube, VLC for audiobooks. A GPIO pin switches audio output between the speakers and Bluetooth headphones.

A companion VPS backend (also open source) provides a web interface for managing radio stations, YouTube channels, and uploading audiobooks. The Pi syncs every 10 minutes via cron. No static IP, no port forwarding needed.

### Why This Matters

This is not an accessibility feature bolted onto a general-purpose device. It was designed from the ground up around haptic interaction and acoustic feedback. The entire interface is physical — you operate it by feel alone, without touching a screen or talking to a voice assistant.

### Hardware Architecture

┌───────────────────────────────────────────────┐
│              MDF Enclosure (3mm)              │
│                                               │
│ ┌──────────┐       ┌──────────┐ ┌─────────┐   │
│ │ Rotary   │       │ Rotary   │ │ Volume  │   │
│ │ Switch 1 │       │ Switch 2 │ │ Pot     │   │
│ │ (Program)│       │ (Station)│ │         │   │
│ └────┬─────┘       └────┬─────┘ └────┬────┘   │
│      │                  │            │        │
│ ┌────┴───────────┐  ┌───┴────────────┴─────┐  │
│ │ Arduino Nano 1 │  │   Arduino Nano 2     │  │
│ │    (0x08)      │  │      (0x09)          │  │
│ │ Reads Switch 1 │  │ Reads Switch 2 + Pot │  │
│ └────────┬───────┘  └───────────┬──────────┘  │
│          │                      │             │
│ ┌────────┴────────┐  ┌─────────┴───────────┐  │
│ │ Level Shifter 1 │  │  Level Shifter 2    │  │
│ │  (3.3V <-> 5V)  │  │   (3.3V <-> 5V)     │  │
│ └────────┬────────┘  └────────┬────────────┘  │
│          │                    │               │
│          └──────────┬─────────┘              │
│                     │ I2C bus                 │
│ ┌───────────────────┴───────────────────────┐ │
│ │         Raspberry Pi 4 (4GB)              │ │
│ │    Boots from SSD (USB-SATA adapter)      │ │
│ │    GPIO4 -> audio output switch           │ │
│ └───────────────────┬───────────────────────┘ │
│                     │ I2S                     │
│ ┌───────────────────┴───────────────────────┐ │
│ │     HiFiBerry AMP2 (2x60W Class-D)        │ │
│ └───────────────────┬───────────────────────┘ │
│                     │                         │
│        ┌────────────┴────────────┐            │
│        │  2x Lonpoo 75W Speakers │            │
│        └─────────────────────────┘            │
└───────────────────────────────────────────────┘
``` 

### Software Stack

| Layer | Technology |
|---|---|
| Audio backend | PipeWire + PulseAudio |
| Radio playback | mpd + mpc |
| YouTube playback | yt-dlp then VLC |
| Audiobook playback | VLC + TTS (position tracking) |
| Bluetooth audio | PipeWire bluez5, custom bt-agent systemd service |
| I2C communication | Python smbus, polling at 200ms |
| GPIO switching | RPi.GPIO (GPIO4 toggles AMP2/headphones) |
| Remote management | FileBrowser web UI + PHP admin panel on VPS |
| Sync | Cron every 10 min, pulls from VPS via REST API |
| Remote access | Tailscale VPN (primary) + reverse SSH tunnel (fallback) |

### Three Audio Paths

The system supports three audio outputs, switched via GPIO4:

1. **AMP2** — HiFiBerry amplifier driving the...

Read more »

media_center_Schaltplan.pdf

PDF for close view of the parts.

Adobe Portable Document Format - 1.69 MB - 08/08/2026 at 12:19

Preview

media_center_Steckplatine.pdf

PDF for close view of the parts.

Adobe Portable Document Format - 1.92 MB - 08/08/2026 at 12:17

Preview

  • 1 × Raspberry Pi 4 Model B (4 GB) — boots from SSD, not SD card
  • 1 × HiFiBerry AMP2 — Class-D HAT, 2x60W, I2S
  • 2 × Arduino Nano — I2C slaves (0x08, 0x09)
  • 2 × Logic Level Shifter — one per Arduino, 3.3V to 5V for safe I2C
  • 2 × Rotary Switch, 11-position — program + station selection

View all 11 components

  • Why I built this

    mcgutschyan hour ago 0 comments

    This started with a simple observation: the people in my life who are visually impaired struggle with modern audio devices. Not because the technology doesn't exist
        — it's everywhere. But every solution assumes you can see a screen, tap the right button, or talk to a cloud service that's listening 24/7.

        Smart speakers? They work, until they don't. Misheard commands, internet outages, privacy concerns. Specialized devices for blind users exist, but they're expensive
        and often locked to one ecosystem.

        I'm not a developer by trade. I tinker. I had a Raspberry Pi lying around, some Arduinos, a HiFiBerry amp, and a laser cutter at the local makerspace. The question
        was: can I build something that a blind person can operate entirely by feel — no screen, no app, no voice assistant?

        The answer turned out to be surprisingly simple. Two big rotary switches. One picks the program (radio, YouTube, audiobooks). The other picks the station or
        channel. A potentiometer for volume. Text-to-speech confirms every selection out loud. That's the entire interface.

        No touchscreen to navigate. No menu trees to get lost in. No "Alexa, play..." followed by the wrong song. You turn a knob, a voice tells you what you selected, and
        it plays. Muscle memory does the rest after a few days.

        Is it perfect? No. I'm sure there are better ways to do some of the things I did. But it works, it's been in daily use for months now, and it's completely open
        source.

        In the next logs I'll walk through how it's built — hardware, software, and the mistakes I made along the way. There were a few.

View project log

Enjoy this project?

Share

Discussions

Does this project spark your interest?

Become a member to follow this project and never miss any updates