beasaltfish/bot-reborn

A voice-controlled toy car: a phone rides on it and drives an FT232H over WebUSB in FTDI async bitbang mode.

JavaScript

0

187 commits

updated Oct 7, 2026

See the code

See what people are saying

README

bot-reborn

Turn a $4 toy robot into an AI robot, with an old phone as its brain.

The robot keeping a child company while the real dog eats

Real dog: busy eating. Robot dog: on duty. — watch the Short, with sound

The robot on a desk answering a child's science questions during homework

Kid: has questions. Robot: has attitude. — watch the Short, with sound

The toy as sold: a Silverlit Maze Breaker in its boxA phone held on the headless robot by a cardboard saddle and rubber bands, showing the robot's face
Before: a line-following toyAfter: the head is gone, the phone is the face

What it does

  • You talk, it drives and answers. "Go forward two seconds, then turn left".
  • Bark at it and it barks back. A bark is caught before any chat model is asked, and it answers from a fixed routine: bark, then bark and turn tail, then whimper and retreat. Optional.
  • It listens while its screen is on. No wake word needed. Say the stop word or hit the stop button and the car stops, whatever it was doing.

What you need

  • A cheap toy robot or car with a drive motor and steering. Ours is a Silverlit Maze Breaker. It is the only one tested so far, but any toy driven by the same kind of motor driver should work the same way.
  • An FT232H breakout board — the bridge between the phone's USB port and the toy's motor driver.
  • An Android phone with Chrome. The phone talks to the board over WebUSB, which iPhones do not have. Plus a USB-C cable to the board.
  • API keys for speech-to-text, a chat model and text-to-speech. Any OpenAI-compatible provider works.
  • A soldering iron, some wire, cardboard and rubber bands.

How it works

The toy's own board with the FT232H wired onto its motor and steering inputs

The toy's own line-following chip is cut out of the loop. Four wires from the FT232H go straight to the inputs of the toy's motor driver and steering coil, and the phone switches those four pins over USB. Everything else — listening, understanding, deciding, talking — happens in a web page on the phone.

Build your own

  1. Wire it. Pin map, wiring and measurements are in docs/hardware.md. Read its D6/D7 soldering warning before you start.
  2. Open it on the phone in Chrome: https://bot-reborn.agentlenshq.com is a ready-hosted copy of this repo, so there is nothing to deploy. The robot shows what it is still missing, and each missing part is a step: your keys, plugging in the board, and teaching it which way is left.

Your keys stay on the phone, in plain text in the browser's storage, and are sent only to the providers you chose. There is no server in between. Using the hosted copy still means trusting whoever serves the page, so if you would rather not, serve your own: it is a folder of static files with no build step (npx wrangler pages deploy web, or any HTTPS static host — the phone only allows USB access from a secure page). See Security.

Status

It works end to end on one robot and one phone. Some hardware numbers are still unmeasured, and the barking routine's timings are first guesses that still need tuning on the car.

More

License

MIT. The sounds in web/sounds/ are CC0 — see their credits.

beasaltfish/bot-reborn

A voice-controlled toy car: a phone rides on it and drives an FT232H over WebUSB in FTDI async bitbang mode.

JavaScript

0

187 commits

updated Oct 7, 2026

See the code

See what people are saying

README

bot-reborn

Turn a $4 toy robot into an AI robot, with an old phone as its brain.

The robot keeping a child company while the real dog eats

Real dog: busy eating. Robot dog: on duty. — watch the Short, with sound

The robot on a desk answering a child's science questions during homework

Kid: has questions. Robot: has attitude. — watch the Short, with sound

The toy as sold: a Silverlit Maze Breaker in its boxA phone held on the headless robot by a cardboard saddle and rubber bands, showing the robot's face
Before: a line-following toyAfter: the head is gone, the phone is the face

What it does

  • You talk, it drives and answers. "Go forward two seconds, then turn left".
  • Bark at it and it barks back. A bark is caught before any chat model is asked, and it answers from a fixed routine: bark, then bark and turn tail, then whimper and retreat. Optional.
  • It listens while its screen is on. No wake word needed. Say the stop word or hit the stop button and the car stops, whatever it was doing.

What you need

  • A cheap toy robot or car with a drive motor and steering. Ours is a Silverlit Maze Breaker. It is the only one tested so far, but any toy driven by the same kind of motor driver should work the same way.
  • An FT232H breakout board — the bridge between the phone's USB port and the toy's motor driver.
  • An Android phone with Chrome. The phone talks to the board over WebUSB, which iPhones do not have. Plus a USB-C cable to the board.
  • API keys for speech-to-text, a chat model and text-to-speech. Any OpenAI-compatible provider works.
  • A soldering iron, some wire, cardboard and rubber bands.

How it works

The toy's own board with the FT232H wired onto its motor and steering inputs

The toy's own line-following chip is cut out of the loop. Four wires from the FT232H go straight to the inputs of the toy's motor driver and steering coil, and the phone switches those four pins over USB. Everything else — listening, understanding, deciding, talking — happens in a web page on the phone.

Build your own

  1. Wire it. Pin map, wiring and measurements are in docs/hardware.md. Read its D6/D7 soldering warning before you start.
  2. Open it on the phone in Chrome: https://bot-reborn.agentlenshq.com is a ready-hosted copy of this repo, so there is nothing to deploy. The robot shows what it is still missing, and each missing part is a step: your keys, plugging in the board, and teaching it which way is left.

Your keys stay on the phone, in plain text in the browser's storage, and are sent only to the providers you chose. There is no server in between. Using the hosted copy still means trusting whoever serves the page, so if you would rather not, serve your own: it is a folder of static files with no build step (npx wrangler pages deploy web, or any HTTPS static host — the phone only allows USB access from a secure page). See Security.

Status

It works end to end on one robot and one phone. Some hardware numbers are still unmeasured, and the barking routine's timings are first guesses that still need tuning on the car.

More

License

MIT. The sounds in web/sounds/ are CC0 — see their credits.