1. Purpose

  • First experiments with controlling Roomba


2. Components


3. Results - on YouTube


4. Progress Report

4.1. Intro

Ever since we got this robot vacuum cleaner for my wife, my hands have been itching to start tinkering with it. I wanted to see what I can do with it. Turns out, guys at iRobot were kind enough to provide an easy way to do just that. Every Roomba has a 7-pin connector, through which one can gain total control over the robot. And it would not even void the manufacturer's warranty! How nice of them!

The connector is located under the handle of my 880. Naturally, my goal was to make a controlling hardware as small as possible, ideally invisible, fitting under this handle. Got to keep in mind the Wife Acceptance Factor!

 Roomba with controller its handle


4.2. Hardware

I love Arduino MINI! It is small, simple, exactly what I need, no more, no less. My Arduino Mini is a Chinese made 5V variant, but I needed a 3V type to interface with 3V Radio module. Turns out, the Atmega328P by itself can take any voltage, with restrictions of maximum clock speed. Theoretically, running at 16MHz at 3.3V is outside the specs and is not guarantied. However, I read that other people successfully did it, and it seems to show no problems here. I removed the linear regulator and disconnected LED resistor to save power. Now the Mini gets its power directly from 3.3V VCC connection.

To create the power for Arduino, I built a small efficient switch-mode power supply based on LMR14006 regulator IC from Texas Instruments. The Roomba battery voltage can be as high as 20 volts and I needed a stable 3.3V for controller, while maximizing efficiency. At no load, this regulator consumes only 30µA even at high input voltage.

The logic level shifter between 5V TTL signals of Roomba and 3.3V levels of Arduino is built based on this application note: http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/Create_2_Serial_to_33V_Logic.pdf

I opted for a modular design, where DC-DC power supply and serial port level shifted are built on a separate small board, connecting to Arduino Mini through a 6-pin header connector.

Here are schematics of both parts:

Roomba Interface Board Roomba MCU controller

The resistors R5, R6 make a voltage divider that I use to measure Roomba's main battery voltage through an analog input pin.


It took some ugly soldering work, but it seems to be successful. Here are some pics:

Controller board Controller back
MCU both units together

Remote controller


This is how it fits under the handle of Roomba:

Roomba's SCI connector Controller installed in


4.3. Software


Zipped files: Roomba_sketches.zip



the end :)



Will Cooke
# RE: Experimenting with iRobot RoombaWill Cooke 2015-11-16 16:23
Thanks documenting this. I'm playing around with these XL4432 modules and this has answered all my questions.

One quick note, the won't compile as is in later Arduino IDE versions.
In RoomaRemote.ino line 64 needs to cast to a char.
From: Serial.readBytes(str,3);
To: Serial.readBytes((char*)str,3) ;
+1 # RE: Experimenting with iRobot Roombaboredman 2015-11-16 19:05
Hi Will,

Yes, RadioHead library makes it really easy to work with XL4432!

Strange, I'm running Arsuino 1.6.6 and I do not need this cast. But as long as it works for you, it's all good.
Will Cooke
# RE: Controlling iRobot Roomba with ArduinoWill Cooke 2015-11-16 20:53
Ooops! Looks like I was running a very very old version, and not the new version at all. Ooops

Please login or register to post comments