I got a Roomba 694 off Facebook Marketplace. Then I watched it work.
It bumped into a wall, went around, came back, and bumped the same wall again. It wasn't smart at all.
The engineer in me knew a Raspberry Pi and an Arduino could make it way better. I used to love watching Pi and Arduino DIY videos. This time, with AI, I didn't have to watch five to ten videos just to figure out if I had the right model. I ordered the wire and got started.
The brain. Ubuntu, ROS 2 Jazzy, mapping and voice.
Spins 360° to map the apartment.
Looks forward from just in front of the Pi.
Two tiny USB-serial boards. One talks to the Roomba, one to the lidar.
A used main board with a serial port that works. This was the unlock.
Adafruit's 7-pin cable. It carries the Roomba's serial.
A voice. Wake word: "Stella".
Fuse → cutoff → switch → 5 A buck. Clean 5.15 V from the Roomba battery.
The main board and battery live inside the Roomba. Lidar sits on four 35 mm posts so its beam clears everything (≈ 65 mm above the plate). The two red adapters sit where the Mega used to be.
Mini-DIN colors are from my cable, traced with a meter. VPWR is raw battery (~15 V): never on the adapters or the Pi. Green (BRC) is taped off for now. No buzzer: the Roomba plays beeps itself (OI Song/Play).
The first drawing had an Arduino Mega between the Roomba and the Pi, plus an LCD and a motion sensor. The Mega died on Oct 13, so I took it out: the Roomba and the lidar now each plug into the Pi through a CP2102 adapter. The old drawing is in the blog.
| # | Part | Job | From |
|---|---|---|---|
| 01 | iRobot Roomba 694 | Body, wheels, battery | Facebook Marketplace, $40 |
| 02 | Used Roomba 600-series main board | Roomba controller with working serial | eBay, ~$22 |
| 03 | Adafruit #2438 mini-DIN 7-pin cable | Roomba ↔ adapter serial | Adafruit, $6.95 |
| 04 | CP2102 USB-serial adapters, 3-pack (red HW-598A) | Roomba link + lidar link (one spare) | Amazon |
| 05 | Vilros Raspberry Pi 4 4GB Basic Starter Kit, fan-cooled case | Brain (replacement Pi) | Amazon |
| 06 | Raspberry Pi Camera Module V2 | Vision | Eback's kit * |
| 07 | WayPonDEV RPLIDAR C1 360° lidar | Mapping | Amazon, $71.90 |
| 08 | MPU6050 (GY-521) | Spare. Heading, later | ELEGOO kit * |
| 09 | LCD1602 16x2 module | Spare. Status screen, later | ELEGOO kit * |
| 10 | XH-M609 low-voltage disconnect module | Battery protection | On hand * |
| 11 | KCD1 mini rocker switch, 2-pin SPST | Main on/off | On hand * |
| 12 | DROK adjustable 5 A buck converter | 5.15 V for the Pi | Amazon |
| 13 | ABSOPRO 3 A inline fuse holder | Short protection | Amazon |
| 14 | ADTDA 10 in clear acrylic discs, 1/8 in (2-pack) | The deck | Amazon |
| 15 | HELIFOUNER M2.5 brass standoff kit | 35 mm lidar posts, camera mounts | Amazon |
| 16 | Luxify VHB 5952 tape pads | Plate → Roomba, no drilling | Amazon |
| 17 | ASHATA mini pillow speaker | Voice out | Amazon |
| 18 | JOUNIVO JV808 USB microphone | Voice in | Amazon |
| 19 | USB-C cable, stripped | Buck → Pi | My own cable |
* Already on hand or from a kit, so there's no order of mine to link. The link is a matching Amazon listing (same model), not necessarily the exact one I have.
I didn't think it would be easy, but I didn't expect how much patience it would take. The worst part is getting a part and it's the wrong one, or it's a whole different issue, and then waiting again.
I learned a lot: hosting servers on a Pi, the Arduino, every part of the robot and how it all connects to the motherboard, in a smart but messy way. I learned the hard way why the newer 694 board won't work: on the Wi-Fi model, the firmware locks you out of the serial port (the Open Interface). An older 600-series board fixed it.
After a month or two, I believe I have all the parts. I spent a lot more money than I thought I would.
Once she could move and see, the rest was software.
Everything runs on the Pi. A small web server sits on top of ROS 2 and the dashboard talks to it over Tailscale, a private tunnel. There's no login: if my phone is on my tailnet I see her live, and everybody else gets the demo.
The Roomba, the lidar, the TVs and the thermostat all hang off that one server. The TVs and the Nest stay on my home network, so no cloud account is needed. Only the optional Claude brain leaves the house, and it only sees text.
She listens all the time but only wakes up for her name: "Stella" or "Kalani bear." Short commands like stop, go home and TV volume work with no internet at all.
Anything else goes to Claude as text. It can only pick from a short list of safe things to do, and if the internet drops she falls back to the simple commands. She can also check on herself and tell me what's wrong: heat, power, mic, Wi-Fi, the TV, the thermostat.
The hard part was the Pi's own fan. It made her hear random commands, so now she ignores anything that isn't loud and clear, except her name.
The website is her control room, built for a phone: a map of my apartment with no-go zones, the lidar view, one Clean/Stop button, a Charge button, remotes for all three TVs, the thermostat, and a call window to talk to her.
Open it anywhere and you see demo data. Open it on my tailnet and it goes live.
One Piece is one of my favorite anime. Dr. Vegapunk is one of the smartest people alive in that world, so smart he split his mind into six satellite bodies. Stella is the name of the original Vegapunk, the main body.
In the same sense, Stella has a part of me in her. We really learned and grew together.