Adding a microcontroller to a Roomba vacuum cleaner is nothing new. It's been well documented across the internet, including by iRobot itself, with guides, libraries, and how-to's that show you how to use the Serial Command Interface (SCI) to control the Roomba. 

This is more of an excuse for me to learn something new and make something with buttons and switches!

Our Roomba

Our 2006 Roomba 4000 is one of the more basic models. It doesn't have mapping or dirt detection. It doesn't connect to an app or the internet. It has only one button, 'clean', which it'll do merrily until its battery dies. 

For our kitchen/living space it's perfect… especially after I found a Home Base on ebay that allows the Roomba to dock & recharge after a clean.

To interface with the Roomba I added an Adafruit ItsyBitsy nRF52840 microncontroller with Bluetooth Low Energy into the Roomba's housing. A 7 pin mini-DIN connector provides power (stepped down to 5v with a UBEC), TX, RX, and Device Detect from the Roomba to the ItsyBitsy.

By cutting into the shell of the Roomba and utilising some empty space (that would normally house buttons for advanced Roomba models), I was able to keep things low… so the Roomba wouldn't have an excuse to get stuck under the cupboard. 

Roomba Mission Control

The Roomba Mission Control is really a big fancy Bluetooth remote that gets fixed to the wall. Using a microcontroller and a Real Time Clock we're able to set cleaning schedules, monitor the status of the Roomba, and generally have fun pressing buttons and turning knobs.

The Mission Control also uses an Adafruit ItsyBitsy nRF52840 microncontroller, which communicates with the Roomba's ItsyBitsy via Low Energy Bluetooth.

Reasons for using Bluetooth (instead of something like WIFI) include:

  • More effective range than Infrared.
  • Less range that WIFI (but our internet likes to cut out every few days and trip IOT devices... plus we're only dealing with one room).
  • Ability to receive status information from the Roomba.
  • I love the ItsyBitsy nRF52840… I just… love it.

Code

I'm using CircuitPython in both the Mission Control and the ItsyBitsy within the Roomba. The code is continuously evolving!

DIY RGB Switches

I wanted to use panel switches that could accept a label and be illuminated with addressable LEDs (so I could control the colour). I couldn't quite find what I wanted, so I decided to make my own!

My DIY RGB switches use a very standard 6 mm tactile momentary switch, a mini PCB NeoPixel, and several 3D printed parts. Using clear switch caps, I was able to add labels that become illuminated. 


Resources

I found the following resources and guides to be extremely useful. I'm also including some Roomba iRobot documents that made this process a whole lot easier.