Giving AI a Wooden Home: Building an Accessible Companion for Seniors
The idea came from Sarthak when we are brainstorming social isolation among the elderly in Hong Kong.

Description
Woody is a screen-free, voice-activated AI companion and safety monitor built into a warm wooden enclosure, powered by a Raspberry Pi to help seniors stay independent, safe, and connected without dealing with complex digital interfaces.
This journal is where we're tracking the build as it comes together. The main pieces are simple enough: a SBC Raspberry Pi 5, Waveshare USB-to-Audio Module, buttons, USB Logitech Camera.
Part | Job in the Device |
SBC Raspberry Pi 5 | Core single-board computer running the AI, voice recognition, and computer vision models |
Waveshare USB-to-Audio Module | Handles audio input (microphone) and output (speaker) for conversational AI and voice notes |
Buttons | Tactile hardware interface providing minimalist two-button controls (Press-to-Talk and Listen) |
USB Logitech Camera | Captures living-room video feed for computer vision, fall detection, and mobility analytics |
Oct 3
Audio Input & Output Setup
We began by configuring the Waveshare USB-to-Audio Module to handle the device's hardware-level microphone input and speaker output. Using standard Linux ALSA commands, we tested audio recording and playback directly from the terminal.
# Record 10 seconds of CD-quality audio
arecord -D plughw:2,0 -f cd -d 10 test.wav
# Play back the recorded audio file
aplay -D plughw:2,0 test.wav
# Chain recording and immediate playback
arecord -D plughw:2,0 -f cd -d 10 test.wav && aplay -D plughw:2,0 test.wav
We ran into an initial roadblock when the recording commands failed to capture any input. After inspecting the hardware devices connected to the Raspberry Pi, we realized we were addressing the wrong audio index. Switching the target hardware address to plughw:2,0 resolved the issue and restored full audio routing through the USB module.
# Set up and activate virtual environment
sudo apt install python3-venv -y
python3 -m venv SeniorBox
source SeniorBox/bin/activate
# Download and unpack the Vosk STT model
wget https://alphacephei.com/vosk/models/vosk-model-small-en-us-0.15.zip
unzip vosk-model-small-en-us-0.15.zip
Speech-to-Text Pipeline
With the hardware working, the next phase was converting raw spoken audio into text locally on the Pi. We opted for Vosk due to its lightweight footprint and reliable offline capability.
To keep dependencies clean, we built a dedicated Python virtual environment and pulled down the English recognition model:
# Set up and activate virtual environment
sudo apt install python3-venv -y
python3 -m venv SeniorBox
source SeniorBox/bin/activate
# Download and unpack the Vosk STT model

Script Testing
Finally, we put together a Python script leveraging sounddevice to stream raw audio directly into Vosk via a thread-safe queue.
import queue
import sounddevice as sd
import json
from vosk import Model, KaldiRecognizer
q = queue.Queue()
model = Model("vosk-model-small-en-us-0.15")
rec = KaldiRecognizer(model, 16000)
def callback(indata, frames, time, status):
if status:
print(status)
q.put(bytes(indata))
with sd.RawInputStream(samplerate=16000, blocksize=8000, dtype='int16',
channels=1, callback=callback):
print("Speak...")
while True:
data = q.get()
if rec.AcceptWaveform(data):
print(json.loads(rec.Result())["text"])




Comments