Heat Seeking Beverage Bot

by kostert in Circuits > Raspberry Pi

10 Views, 1 Favorites, 0 Comments

Heat Seeking Beverage Bot

IMG_5184.jpeg

What if your robot vacuum could do more than just clean your floor?

What if it could bring you a cold one — and find you using thermal vision?


In this project, you’ll transform an ordinary Roomba into a fully functional beverage delivery robot powered by a Raspberry Pi Pico W, equipped with a thermal camera, distance sensor, and Wi-Fi remote control using Adafruit IO.


Whether you’re into hardware hacking, looking for a creative final project, or just want to surprise your roommates with a beverage butler — this guide will walk you through everything you need to build it, step by step.


This project uses publicly available controls that IRobot has published in order to control the robot via UART. This enables one to program the Roomba to move, chime, vacuum, and much more. Which UART controls do what is available here (This spec sheet says it is for the create 2, but it works for any Roomba that was produced after 2015 that has an sci port)

Supplies

Roomba 600/800 Series

  1. Roomba vacuum with accessible serial port (Create 2 preferred)
  2. [Find on eBay/Facebook Marketplace, buying a new one is a waste of money]

Raspberry Pi Pico W

  1. Microcontroller with Wi-Fi
  2. Adafruit Pico W

Adafruit AMG8833 Thermal Camera

  1. 8×8 IR grid to detect humans
  2. Adafruit AMG8833

Adafruit VL53L1X Time-of-Flight Sensor

  1. Distance sensor to avoid obstacles
  2. Adafruit VL53L1X

STEMMA QT Cables

  1. Easy plug-and-play wires, you are going to need two of these, and one should have male headers if you are using a breadboard
  2. STEMMA QT Cable

5V USB Powered Battery

  1. To safely power the Pico
  2. USB 5V Battery Pack (Amazon)

Laser-Cut Box

  1. To build a protective box for electronics
  2. (or your local makerspace!)

Install CircuitPython to Your Pico W


  1. Download CircuitPython UF2 for Pico W here.
  2. Hold BOOTSEL and plug Pico into USB.
  3. Drag and drop the .uf2 onto "RPI-RP2" drive.


Pico W will reboot into CIRCUITPY mode.

Install Necessary Libraries


  1. Download the CircuitPython Library Bundle here.
  2. Copy these folders into /lib:
  3. adafruit_amg88xx
  4. adafruit_vl53l1x
  5. adafruit_minimqtt
  6. adafruit_io
  7. adafruit_connection_manager
  8. adafruit_requests
  9. wifi


Sensors and Wi-Fi will now be able to work.

Create an Adafruit IO Account

  1. Go to https://io.adafruit.com/
  2. Click Sign Up and create a free account.
  3. Once logged in:
  4. Click on your Profile (top-right).
  5. Go to My Key.
  6. Copy down your:
  7. Username
  8. AIO Key

Save these somewhere safe — you’ll need them soon.

Set Up Your Settings.toml File on the Pico

On the CIRCUITPY drive, create a settings.toml file (plain text) with:

CIRCUITPY_WIFI_SSID = "YourWiFiNetwork"
CIRCUITPY_WIFI_PASSWORD = "YourWiFiPassword"
ADAFRUIT_AIO_USERNAME = "your_aio_username"
ADAFRUIT_AIO_KEY = "your_aio_key"

✅ Replace the placeholders with your real info.

Upload the Code to Your Rasberry Pi Pico

Use any text editor (like Mu or VS Code) and open the file called code.py that contains the final version of the project code (located here).


Save it directly to the Pico as code.py.

Set Up Adafruit IO Feeds

Screenshot 2025-04-25 at 5.45.40 PM.png
This is a prototype where the Roomba controls throttles and so the roomba was stuck spinning

You must create feeds for the Roomba to listen to:

  1. Go to https://io.adafruit.com/
  2. Click FeedsNew Feed.
  3. Create one feed called exactly: "roomba-steering"

Now create a control dashboard to send commands easily!

  1. In Adafruit IO:
  2. Go to DashboardsNew Dashboard.
  3. Name it something like: Roomba Controller.
  4. Inside the Dashboard:
  5. Click +Button widget.
  6. Add the Following Buttons:


Button Label: Forward

Feed: roomba-steering

Button Text Value: forward


Button Label: Backward

Feed: roomba-steering

Button Text Value: backward


Button Label: Left

Feed: roomba-steering

Button Text Value: left


Button Label: Right

Feed: roomba-steering

Button Text Value: right


Button Label: Stop

Feed: roomba-steering

Button Text Value: stop


Button Label: Search Left

Feed: roomba-steering

Button Text Value: search_left


Button Label: Search Right

Feed: roomba-steering

Button Text Value: search_right


Button Label: Seek Forward

Feed: roomba-steering

Button Text Value: seek_forward


I formatted my dashboard to look like the image above for easy control. But yours can look however you like. Additionally, make sure to not have a release value as this increases the risk adafruit io throttling.


Important Note:

If you use a free Adafruit IO account you will be limited in the number of commands you can send every minute. This can lead to "throttling", which is where the robot will stop receiving data and only carry out the last command. I had this happen to me during my initial testing, which is what is occurring in the embedded video above.

Wiring the Setup

Screenshot 2025-04-25 at 1.14.17 PM.png
IMG_5183.jpeg
IMG_5181.jpeg
IMG_5182.jpeg

Background:

Your Roomba has an Open Interface (OI) port — a small 7-pin mini-DIN connector (round, like an old keyboard/mouse plug). It allows serial communication at 115200 baud.

You’ll use 3 wires:

  1. TX from Pico ➜ goes to RX on Roomba
  2. RX from Pico ➜ goes to TX on Roomba
  3. GND to GND
  4. Power for the Pico will come separately (from your 5V USB buck converter — not the serial port).


Overview of Connections

We’ll be wiring:

  1. UART (serial): Roomba ⇄ Pico W
  2. I2C: Sensors ⇄ Pico W
  3. Power: 5V Power Bank ➝ Pico W USB


What You’ll Need:

  1. Raspberry Pi Pico W
  2. Roomba 600/800 series or Create 2
  3. Roomba SCI serial cable (or DIY Mini-DIN 7 cable)
  4. STEMMA QT cables (for sensors)
  5. 5V USB power bank + USB cable (to power Pico)
  6. Jumper wires or header pins


Roomba to Pico W Wiring

Use the Roomba’s 7-pin serial port (on the top of the vacuum).

Roomba Pin 2 (RXD) ➝ Pico GP0 (TX)
Roomba Pin 3 (TXD) ➝ Pico GP1 (RX)
Roomba Pin 5 (GND) ➝ Pico GND

*I have attached a wiring diagram labelling the roomba's SCI port below


You can find premade cables online, or DIY one using a Mini-DIN 7 connector.


Power the Pico using a standard USB power bank:

  1. Plug the power bank into the Pico’s USB port (same port you use to program it)
  2. Mount or tape the power bank inside or under your box

The Roomba does not power the Pico. Keep the power bank fully charged before testing.


Sensor Wiring (I2C - Shared Bus)

You’ll connect both sensors to the Pico W using STEMMA QT cables or jumper wires.

Thermal Sensor (AMG8833) and Distance Sensor (VL53L1X):

Sensor SDA (Blue) ➝ Pico GP4
Sensor SCL (Yellow) ➝ Pico GP5
Sensor VIN (Red) ➝ Pico 3.3V
Sensor GND (Black) ➝ Pico GND

These sensors use the same I2C bus, so they can be daisy-chained together.

Face the sensors forward (toward the human target).


When you plug everything in and start the Roomba, the Pico will:

  1. Send the startup serial commands
  2. Play a chime
  3. Begin listening for dashboard controls


You’re now wired up and ready to test!

Laser Cutting the Box

Now it’s time to build and mount the enclosure that holds all your electronics.


1. Laser Cut the Box

Use the provided SVG files to laser cut the enclosure panels out of 1/4” (3mm) wood. (The files are available here it is all the files that end in .ai)

  1. These files are pre-sized to fit securely on top of the Roomba
  2. The design includes:
  3. Cutouts for the sensors
  4. Clearance for the Roomba’s CLEAN button
  5. Space for the Pico W and USB power bank
  6. An interior box to protect the Pico W from the Beverages


2. Assemble the Box

  1. Use hot glue or another strong adhesive to attach all the panels together
  2. Let the glue fully cure before mounting the box to the robot


3. Mount the Box to the Roomba

  1. Attach the finished box to the top of the Roomba using heavy-duty Velcro
  2. Make sure the box sits flat and does not block any critical Roomba sensors or buttons


4. Mount the Sensors

  1. The thermal sensor (AMG8833) and distance sensor (VL53L1X) should be placed in the front-facing cutoutson the box
  2. Secure the sensors behind the cutouts using hot glue or small screws
  3. Make sure the sensors are aligned and not obstructed by the enclosure


After this step, everything should be wired, mounted, and ready to go. You’re ready to test your dashboard and start delivering beverages!

Additional Info and Comments

Adafruit I/O Roomba Project Testing

Here is some of my testing footage. This test shows a much more stripped down and affordable version of the beverage bot. With a couple wires and a pico w you can pretty easily remote control the roomba. This avoids the expense of the thermal sensor, it just increases the risk of the roomba throttling.


Another upgrade that I would have done if I was more had more time, money, and was more knowledgeable when it comes to batteries is that I would have used a 5v Buck converter to power the pico w directly off the roomba.


Also special thanks to the YouTuber Sam Meech-Ward who talked about using a pico w to control his roomba through the SCI port in his video here (Beginning at 20:45). Without this I would have had to either create my own robot from scratch for this project or I was planning on completely remaking the roomba as he had done earlier in the video. This saved me a ton of time, money, and energy.