ACV Hackathon 2026

Boxtron Online

Camera, motors, and edge AI in one small chassis — Boxtron doesn’t just watch and move, it talks back with what it sees and what it thinks you should do, from anywhere in the world.

Team – ACV Data Systems

  • Arpit Rana
  • Azeem Syed
  • Joel Shajan

Why we built this

The spark: “Did I leave the stove on…?”

A familiar worry turned into a project idea — if a robot can see and move on its own, why not have it check on the house for you, wherever you are?

Animated story: a person outside the house worries they left the gas stove on, calls Boxtron on the phone, Boxtron rolls through the house room by room, checks the stove and confirms it's off, and the person is relieved

Objective โฑ as of 5 min ago

A pair of eyes and a pair of hands for home, wherever you are

One small robot, one job: be there when you can’t — watching, checking, and helping around the house.

Simple enough to build in a couple of days, useful enough to keep running after.

How it’s built

Regular parts from around the house, not a robotics kit

No machining, no 3D printing, nothing custom-ordered — just parts you’d find in a junk drawer or an Amazon cart.

Chassis

An Amazon delivery box, doubled up for strength — free, sturdy, already in the recycling bin

Brain

A Raspberry Pi 5 — a full computer the size of a deck of cards

Eyes

A regular USB webcam — plug and play, no special drivers

Motor control

One small motor driver board — a few dollars, wires straight to the Pi

Legs

A handful of hobby motors and tires — the kind sold for school science projects

Power

A battery pack, off the shelf — nothing custom to charge or regulate it

Put together over a couple of days — simple parts, snapped together, doing something clever.

Looping clip of Boxtron's cardboard chassis slowly turning, showing the wheels, motor driver, and wiring from every side Built over a couple of days, one side at a time

Behind the scenes

Assembling Boxtron

Watch: assembly, start to first roll

Architecture

Laptop to Pi to motors

Boxtron architecture A laptop talks over WebSocket to a FastAPI server on the Raspberry Pi 5. The Pi's Car class drives the L298N motor driver directly from four GPIO pins, and the L298N drives the four motors from a separate 4 x AA pack; the Pi's ground pin is tied to the driver ground. The Pi also reads a USB webcam for person detection and runs on a USB power bank. Raspberry Pi 5 Laptop drive UI, live video Car class M3 ยท direction pins FastAPI + watchdog M4 ยท WebSocket server YOLO11n detector M1, M5 ยท person boxes L298N driver H-bridge, full speed USB webcam Logitech USB power bank 5V for the Pi 4 BO motors skid steering, 2 per side 4 x AA pack 6V, on/off switch WebSocket over Wi-Fi USB video GPIO17 ยท 27 ยท 22 ยท 23 to IN1 โ€“ IN4, and pin 14 GND to GND OUT1 โ€“ OUT4 12V + GND, grounds tied USB-C, 5V GPIO direction signals power motor output data and video
Top-down view inside Boxtron's cardboard chassis: motors, motor driver board, battery pack, and the Raspberry Pi 5 wired underneath Inside the box — motors, driver board, and the Pi 5

What it can do today

See, move, and talk back

Seeon-board camera spots people and objects
Movedrives itself toward what it noticed
Talk backhears, thinks, and speaks its suggestion out loud

Every model runs locally: no cloud, no API key, nothing leaves the machine.

Playful cel-shaded illustration of Boxtron with sunglasses, fire, and a "Beep boop, I see you" speech bubble

Vision

Person detection, already working

A YOLO11n detector runs on webcam frames with tracking and a live FPS counter. It is the base for the sentry view in M5.

uv run --extra vision detect-people

Vision

Now any object, and how far it is

The Pi's camera feeds stream-car as MJPEG; the Mac's detect-objects runs YOLO11n and estimates distance from box width, drawing color-coded labeled boxes.

A monocular estimate, not a depth sensor: red boxes for very close, green for far. Runs on the Mac against the Pi's existing stream, so the Pi needs no new dependencies (ADR-0007).

uv run detect-objects --source "http://sentrycar:<password>@sentrycar.local:8080/stream"

M6 · Voice

The car hears, thinks, sees and speaks

Earsmicrophone, then Whisper0.4 s
BrainGemma 4 8B, running locally0.6 s
VoicePiper, plus TARS-style effects0.9 s
Speakerplays the reply~5 s of speech
Eyes, on request“what do you see?” grabs a webcam frame for MiniCPM-V 1B1.4 s Mac · 3.9 s Pi
Sound cueslistening blip, thinking warble, oops, happy: all synthesised in code
Settings by voice“humour setting to fifty percent” is handled in code, no model call

Push-to-talk. Every model runs locally: no cloud, no API key, nothing leaves the machine.

uv run talk-car

M6 extension · Remote access

Drive and talk to it from anywhere

Phone reaches console-car on the Mac over Tailscale HTTPS; the Mac reaches stream-car on the Pi over the home LAN via mDNS.
PhoneTailscale on, opens the /m page
Macconsole-car, exposed by tailscale serve
Pistream-car --drive, still reached over the home LAN

A Tailscale mesh gives the Mac a stable HTTPS name; tailscale serve can mount just /m and what it depends on, leaving the desktop console page off the tailnet (ADR-0006). The Mac still reaches the Pi the same way it always has — over the home Wi-Fi, not through Tailscale.

Gotcha: another full-tunnel VPN (NordVPN) running on the Mac at the same time silently breaks Tailscale's coordination-server sync and MagicDNS — quitting it reconnects Tailscale in seconds.

Measured on the Mac (M3 Max)

About 3 seconds from you stopping to Vision speaking

Waits for a pause
1.0 s
Whisper transcribes
0.4 s
Gemma thinks
0.6 s
Piper speaks (synthesis)
0.9 s

Cold start matters: the first Whisper call took 16.6 s, every call after took 0.4 s. So the loop warms the models up before the first “press Enter”.

A faster voice cut the spoken reply from 8.7 s to 5.1 s.

Local models

What fits on the Pi 5, and what didn’t

ModelJobPi 5 (7.9 GB, CPU only)Mac (M3 Max)
MiniCPM-V 1Beyes3.9 s, correct1.4 s, correct
Gemma 4 8Bbraintoo big: 9.6 GB model0.6 s
Qwen 3.5 0.8Bbrain11 tok/s, chatty toynot needed
Moondreameyeswrong: invented flowerswrong, same answer
Whisper small.enearstiny/base installed, not timed yet0.4 s

So the Mac is the brain for now, and the Pi is the body: camera, mic, speaker and motors.

What we learned

Things that bit us

What happenedWhat we did
The official Ollama installer 404’d on the PiUnpacked the release by hand and added a systemd service
Piper produced no audioIt broke when installed under a very long path; a short path fixed it
A webcam capture command hung for 5 minutesffmpeg waited for 15 output frames; -update 1 fixes it
The mic took 1.5 s to open, so first words were lostThe listening blip now plays once audio is really flowing
Vision made up a battery level of 92%The persona now says it has no sensors and refuses to invent numbers

Demo

See Boxtron in action

Video: live demo, coming soon

Limitations, today

โ˜• hackathon-tired

What’s not there yet

Next

From prototype to home companion

Now

Wi-Fi driven, watches and reports — no arm yet, still cable-powered

Next

Battery power for untethered runs, plus a robot arm to lend a hand

Later

An LLM agent in charge — noticing, deciding, and acting on its own

Before we go

What came pre-built, and what happened in 24 hours

๐Ÿ›’ Sourced ahead of time

Prep work the plan allowed before the clock started — just parts, nothing built.

Raspberry Pi 5 L298N motor driver 4x hobby DC motors + wheels USB webcam AA battery holders Cardboard box (chassis) Breadboard + jumper wires LEDs + resistors microSD card ESP32-S3 (on hand, unused)

โšก Built in the 24 hours

Everything else — wiring, code, voice, remote access, and this deck.

GPIO → L298N wiring Skid-steer drive class Person/object detection Laptop ↔ Pi control link Local voice loop Browser console + phone view Remote access over Tailscale Docs, ADRs & this presentation

๐Ÿงฐ What powered it

Everything runs locally — no cloud, no API keys.

Core & hardware
Python 3.12 uv gpiozero Raspberry Pi OS (Trixie)
See, hear, think, speak
YOLO11n + OpenCV whisper.cpp Ollama (Gemma, Moondream) Piper TTS + ffmpeg
Serving & access
Python http.server Server-Sent Events Tailscale
Build, test & ship
pytest ruff Docker Compose GitHub Actions CI Cloudflare Pages

Boxtron

Thank you! ๐Ÿ‘‹

Questions?

Boxtron driving in, dancing around, and zooming off
← → / space / click