[SOLVED] So I took my Roomba apart, not getting the results I expected...

As the subject line says, I completely disassembled my Roomba. I carefully documented all of the connections, and feel pretty comfortable I know what's what, and how it all plugs back into the motherboard.

Now, I'll go back to the start...which was a working Roomba and an Arduino Uno telling it what to do via the SCI port. Cool, I thought. I have a Roomba that is controlled by my Arduino. Next step was to start adding some of my own sensors to the mix, but I decided that before I go there, I would take apart the Roomba and re-build it (minimally) on a new chassis...so it didn't look like a round Roomba anymore.

After I put it all together, I hooked up the two wheels, the three wheel "picked up" switches (and taped them closed), reconnected the battery bay (and battery), the speaker, and the power button/light assembly.

I was thinking this would be enough to get the Roomba to function (basic) as it did in the round chassis. But, when I reconnect the Arduino and power it...I just get a single Beep from my Roomba parts...with no action from the wheel motors. I have a simple sketch that simply calls goForward() after the wake-up procedure.

Because everything worked fine before, my assumption is there must be certain things plugged into the motherboard and in a certain state before it will work again. For instance, I found in earlier testing that if you pick up the Roomba when running, it will stop (even with the Arduino in control). That tells me that there are some built-in sensor dependencies with the Roomba motherboard. I taped the three wheel sensor switches closed, but that didn't help.

Has anyone been through this? Am I going to have to reattach every single sensor and set it to a condition that matches "normal"? Is there a way around (other than not using the motherboard)?

I figured I could cheat a little, but so far it's giving me a run for my time.

Thanks in advance for the help!

poldervaart: Am I going to have to reattach every single sensor and set it to a condition that matches "normal"?

I would have thought so. I have no idea how the Roomba works, but if I was designing one I'd design it to fail safe, where 'safe' in this case means stationary.

Update:

Fresh start this morning.

I plugged everything (EVERYTHING) back together and have it all layed out on the table, and it works fine.

I assume there is some sort of systems check that the Roomba does on startup. It may error out if it finds something to be non-operational. It’s either that, or it requires cliff sensor connections, or something similar.

I’m going to start systematically removing parts (starting with things like motors and such) until I find the stuff that MUST be connected or in a certain state to operate completely.

I’d like to continue to use the Roomba PCB for this project and just issue it commands via SCI. This will save me a lot of up front coding and parts money.

or it requires cliff sensor connections,

This seems likely. I would think they are also used to stop the wheels when the Roomba is picked up.

Did you see this site? http://hackingroomba.com/

florinc: Did you see this site? http://hackingroomba.com/

Yes...and I even have access to the book, but it doesn't seem to get into this sort of thing...unless I am just totally missing it (which is possible.

I did find, through testing, that the following sensors must be in place for the Roomba to work:

  1. Wheel drop switches. They must be in the closed position. They default to open, and engaging the lever closes them. This is an easy work around, as a simple jumper or short across these wires will close the circuit. There are three of them. I have been using one of them as a switch to stop the Roomba (since at this point the power button doesn't do it when the Arduino is in control.)

  2. Cliff Sensors. All three of them must be closed (ie close enough to a surface to have the IR sensor pick up the light from the IR LED. I am sure there is a way to simply bypass this by closing the loop on the sensor side, but I haven't gotten that far yet.

  3. Top IR Sensor. Apparently this must be connected to work. Not sure why...and I am not sure how easy a workaround is for this part. There is a small PCB involved here, so it may be more than just using the sensor to detect something.

Anyway...soon the Roomba will be free of it's skin so I can put it into something that is more ugly and less efficient! Seriously, I think the Roomba folks put together a great design...I may regret not just working from the standard Roomba build as most tend to do. ;)

dxw00d:

or it requires cliff sensor connections,

This seems likely. I would think they are also used to stop the wheels when the Roomba is picked up.

Yep. That seems to be the case!

PeterH:

poldervaart: Am I going to have to reattach every single sensor and set it to a condition that matches "normal"?

I would have thought so. I have no idea how the Roomba works, but if I was designing one I'd design it to fail safe, where 'safe' in this case means stationary.

Yeah... I don't know why I even expected anything less! :)

Update:

I'm where I want to be now. All sensors removed, and I have complete control of the Roomba from the Arduino. I plan on adding sensors back in over time as I build, but I want to control what and under what circumstances they are interpreted.

Anyway...rather than hardware solutions (shorting connections, taping IR receiver/LEDs together, etc) I had an epiphany to do it with software. I am not sure why this didn't occur to me first, but either way, I am there now. Adding one tiny little line of code to my Arduino sketch in the setup section after the Roomba wake-up process solved all of this:

 roomba.write(132);  // DISABLE Safe Mode - Enter Full Mode

Duh!

From the Roomba SCI Specification:

Full, Command opcode: 132, Number of data bytes: 0

Enables unrestricted control of Roomba through the SCI and turns off the safety features. The SCI must be in safe mode to accept this command. This command puts the SCI in full mode

After going into Full Mode, I could remove all the sensors and the Roomba would continue to operate.

Yay!