Making a Roomba go "Oof!"

"I'm positive it knew I was trying to shut it off—it somehow jammed its power switch," Graney said, describing his many attempts to capture and immobilize the Roomba. "Then I noticed that its charger had gone missing."Roomba Violates All Three Laws of Roombotics, The Onion, April 14, 2007

Roombas are funny, especially if you're silly, like me. My first thought on seeing my Roomba bumble around was, "That thing needs a pair of fuzzy antennas." Nature has Roombas, too. Ten-eyed Roombas.

I thought it would be funny to add a device which would make the Roomba emit random silly sounds when it hit a wall, like "Oof!" or "Oh!", or make it grumble something when its dirt sensor goes off. "Dirty, dirty, dirty floor!" Given that iRobot publishes the specs on Roomba's serial interface, I can easily read the sensor values and trigger something when the bumper is hit.

The plan is straightforward: take an Arduino microcontroller board, add a Wave Shield for playing .wav files, write some software, and instant sillier Roomba. I ordered the Arduino and Wave Shield, and wrote a quick program that plays an "Oof!" sound over and over. So that's the easy part. The next parts will be:

  • Wire up a Roomba interface cable
  • Load the NewSoftSerial software on the Arduino, a software serial port allowing the use of any of the Arduino pins as a serial port — apparently the native serial pins are not reliable given the voltage drop on the Roomba interface due to the Arduino's onboard serial chip when connected to the "real" serial pins. Thanks to this post for elucidating the problem.
  • Put in a voltage regulator so as not to blow the Arduino due to the Roomba's high voltage supply.
  • Write the final software that will listen for bumper hits and output one of N random sounds.
  • Look into hooking up the Wave Shield's audio output to the Roomba's much louder speaker.