I acquired a broken 5XX series iRobot Roomba courtesy of FUBAR Labs and decided to tear it apart to see what useful parts I could harvest. I ended up with many IR emitters/receivers, power FETs with heatsinks, but the biggest surprise was the motors. I expected to get some relativly low cost motors with an equally cheap encoder. Instead, I got two nice geared motors with digital encoders!
Some tests with the motors showed that they were geared 1:64 and ~90rpm at 12V. The motor has a radial magnet hall effect encoder with 8-bit resolution (265 ticks). In the video, I am using an arduino to count encoder ticks with a rising interrupt and PID control to make to motor turn one revolution. The scope is showing the encoder signal in red and the PWM signal to the H-bridge in yellow.
Given the price of a busted roomba and all its useful parts, I think these are a great find for a robotists on a budget.
Enough talk though, I promised robots
The first robot is a remake of my balancing robot. The code to run this robot was basically the same as the previous one. I made a few small changes for it to work with DC motors though. The yellow frame for the robot is laser cut acrylic that I made on the FUBAR Labs laser cutter. The changes for the code are on my GitHub page.
I harvested many IR sensors from the roomba. The front bumper is one long string of emitters and receivers. One of the more interesting receivers is the 360 degree IR receiver located on top the Roomba. It's a pretty simple sensor with just a regular IR receiver pointed upward at a convex mirrior. This setup looks perfect for a remote control robot. The code was pretty simple- just the basic DC motor control from the balancing robot- and I added in an IR remote library that I found online to decode the signal.
I made some small changes to the placement of the motors and added a third caster wheel to make a differential drive robot. The arduino board controlling the motors also decodes the IR signal from the remote to tell the robot what to do.