hacking a roomba: part one [funsies]
Updated: Jan 6, 2020
So at the beginning of the semester, I stumbled across a pile of broken Roombas on campus at an undisclosed, secure location. So I decided to take 6 of them.
Most of them are stripped, but they have some good hardware quality so I thought I'd take apart one of the nicer Braava jets I picked up and see if I couldn't make it do something.
Here we go...
Start by flipping the little guy over and unscrewing the screws that were in the deepest looking holes. These look like they hold the white body onto the base.
So that didn't work... take out all the screws on the bottom. Just keep track of where the small and the large screws were. It's not bad to remember/memorize. Or take a picture/create a labeling system if you're more organized.
Remove the panels for the lower touch sensors. We may or may not need them, who knows, this is an exploration!
Hooray the top comes off! Unplug this multi-color wire. No idea what it does it wasn't connected to anything. Leave the buttons connected and you can either remove or leave the wires going to the broken hinge at the back of the robot.
Okay so list of things we SHOULD NOT TOUCH if we want to get this working again but with our own controls.
(1) the PUMP and any wires going to it for now and any of these water-proof units. Let's not mess with the water proofing and the spraying system.
(2) internal mechanics of the gearboxes, motors, suspension systems and etc.
We're going to FIRST look at the buttons because that seems like the easiest thing to figure out. Then we are going to figure out the motor, and then the pump. If time permits we can do the bumper sensors and other devices but these three things are the MINIMUM we need to get the Roomba working again with our own controls.
So let's jump right in, cut the button wire at the end. Go on, give them a good solid SNIP. And now we're going to unscrew the button panel to see what we can do with these buttons, if we can use them. Careful not to lose the springs inside the buttons.
Okayyyyy... looking at the back of the button panel, we can't see inside the wires are all sealed in plastic and this is going to be harder than I thought. Reassembling it for now so we don't lose any pieces and moving to the next thing: the motors.
Take a screw driver a pry out the bundle of wires going to the motor my guess is the red and black wires are motor power, and the other three are for the hall-encoder or something. Strip the red and black wires and hook them to the power supply. We will turn on the DC power supply and increase the voltage until the motor starts spinning. I'm GUESSING it will be around 12V-14V because the battery the Roomba takes is 14V. I suggest propping it up on something so it doesn't move around.
Those two wires clearly do not power the motor. Power supply at 14V and full amperage allowance did not spin it. There's a different set of wires that must power it.
Okay... guess we are taking the motor off. Disconnect the power supply and remove the screws holding the motor on. Motor is removed. We'll have to open the gearbox to figure out what is going on. So the gearbox is OPEN the motor has been pulled out, use a screwdriver to pry off the disc magnet on the PCB covering the motor, and finally we can see that it's actually the WHITE and GREY wire that are used to generate the motor +/- signal. See how the traces that connect to the white and the grey wire travel to the motor's contacts? That's what we need to connect to the power supply. Before closing, let's test that. Strip the wires and plug it into the power supply. Do the same thing as before, red and black don't matter. And sure enough, the motor spins. Piece the gearbox back together and re-mount it. Just for kicks, re-tested the motor when it was fully assembled.
Now cut the motor wires for the other side of the robot. Strip the white and grey, and test the motor with the power supply. Don't go above 10-14V because I have a feeling the motor will be unhappy.
We will hook these up to separate motor controllers later. For NOW let's go to the pump. This one's easy. Cut the red and black wire, strip it, and test it with the power supply. Let's use 5V for now. Take a spoon, put some water in the little white water inlet, and power the pump with 5V, and enjoy as the water sprays out of the front :)!
Now it's time for the fun part. Making the Roomba ours, mwahahahahahaaaaa. Okay sorry.
First I'm going to fix the water system because I don't think with the electrics we are adding, we will get the top back on very easy. I'm going to try, but for now. Take a slice out of the plastic guard plate and remove the pump intake. Remove the spring release for the water tank, just push up on the spring very hard. Leave the cap inside, it isn't harming anyone.
Now fill up the water tank, lean it against the back, try not to spill anything, and we're going to test the pump again before we secure the water tank and start playing with the motor controllers. Notice 5V to the pump gives us a nice SQUIRT of the water. Put a piece of duct tape on the back to secure the water tank in its new orientation - vertical.
Empty the water out, let's get to hacking...
Pulled out two L298N motor controllers from the back room, these are pretty good motor controllers for the Arduino. One of them will control the right motor and pump motor, the other will control the left motor. Not going through it here, but I've linked a tutorial if you want it.
This should totally work with any motor controller built to control 12V motors. You can use the L298N's like I tried, mine aren't working (probably fried, they're old I dug them out of a box), so I think I'll use more traditional motor controllers these could be controller with the standard SERVO library (125 is stop, 255 is full forward, 0 is full reverse). I'm using an L298N for the pump, and regular brushed-ESC motor controllers for the main motors.
In the future I will power this with a 3s LiPo battery because those are nominally 12V, you can use any 12V-14V battery, for now I'm sticking with the power supply. I wired all the power wires (except for the Arduino ones) in parallel and made one 12V and one GND wire to power the system. Simple task, using wire nuts. Just tie them all together, all the reds together, all the blacks together (this is for the motor controllers).
For now... this is all I had time for. Will continue updating this project in the future (soon)!