Roomba has been in our home for some time now. You could even say it a part of the family; it is the liveliest piece of the furniture. We use it for cleaning our apartment and we are pretty happy with it. This cleaning device is a product of iRobot company and the model we have is Roomba 520.
Going around the Internet sites I stumbled upon a nice article about some hardware and software development that includes Roomba – RoombaDecTools. Next thing I dig out was a really nice document that describes technicalities about interfacing Roomba – Roomba Serial Command Interface (SCI) Specification. Everything was clear, a new home project was about to be born 🙂
I went through a lot of interesting stuff on this subject (HOW TO – Make a Roomba Serial Interface, Controlling A Roomba with an Arduino, DIY Roomba USB interface cable, New Roomba Prototyping Cable for Arduino, Arduino Robotics Project, …), learned a lot, and figured out how should I proceed with my project.
The idea was to use Arduino Pro Mini as a controller that will communicate to Roomba using SCI protocol. Since Roomba SCI port works on 5V, I went for 5V variant of Arduino in order to avoid necessary driver between these two. Then, in order to be able to control the unit from our small home automation system it was necessary to attach a 868 MHz radio module to Arduino. The central system uses JeeNode as a radio communication hub, so the choice was RFM12B Board from JeeLabs. This board is based on HopeRF‘s RFM12B radio module and can be used in 5V setups.
After couple of weeks, all of the necessary components had arrived. I don’t need to mention that in the next couple of days I was spending all of my free time on this interesting project.
First thing to be done was to connect Arduino and Roomba. After some soldering and programming, and resoldering and reprogramming, I was able to get Roomba answering to simple commands. Yeah! Then, the radio module was attached and first successful wireless communication is done between central Homy node (JeeNode) and Roomba module. The simplified schema of the module is given on picture below:
Roomba module had to be connected to Roomba and independent on external power source, so I put a simple voltage regulator block that will convert 15V coming from Roomba PWR pin to 5V that was needed for Arduino.
I had everything soldered again on a developer board, drilled a hole in Roomba cover (so the module could be attached) and bended antenna so it doesn’t hit furniture. The result is shown on these pictures:
The idea was to use JeeNode connected on the central PC as a “proxy” for sending commands to Roomba. After hours of programming, testing, debugging and recharging Roomba (:)) outcome was Roomba.pde that runs on Roomba module, RoombaProxy.pde that runs on JeeNode and Roomby that runs on the central PC. Both sources and binaries for Roomby are available for those who are interested.
As an extension of the PC control software, a web-service endpoint was opened in order to enable iPhone control of whole system.
Take a look at this video where the whole concept of this project is presented:
Now, the next video is an overview of the full functionality in the action. I am issuing commands using iPhone interface (see network indicator on iPhone), commands go to the central PC, then PC communicates with JeeNode, JeeNode sends radio packets to the Arduino, and Ardiono finally sends command to Roomba (see red LED blinks on Arduino):
Manual control is fun, but after some time (2 days :)) both my wife and me found it no more interesting. Since Roomba has piezo speaker attached on it, the wife’s wish was to have Roomba singing her for the next birthday:
My idea was less original:
Now, Roomba is enjoying its new house duties, and my wife and me are trying to come to the new use-case for it. Alarm clock? Hmm…
© 2011, Quo Vadis ?. All rights reserved.
6,088 total views, 1 views today