Switch to full style
Inside the Roomba and Scooba and more, Cool mods, Repair and Upgrades - including the all new iRobot Create Kit. Let's void that warranty baby!
Post a reply

Roomba 650 SCI

October 18th, 2016, 7:04 am

Hi, i'll try here also after unsatisfactory response from irobot customer help.

I have a roomba 650 and using the mini-din port to communicate with it using an arduino.
All works fine when roomba is out of the dock.
I can wake up the roomba with BRC pin, send commands and read sensordata, no problem at all.

But when the roomba is returned to the dock it stays awake for a short time (~30 sec?) then goes into some kind of sleep-mode.
Now i can't talk to it, no data is coming through when i ask for sensor-data and such and no commands are accepted.
I can't wake it up with BRC-pin either.
When i pull BRC to low i get whats sounds like the wakeup sound but interrupted / crackling sound.
And trying to prevent it from sleep by pulsing BRC-pin every 10 or so seconds does not work.
Trying to prevent it from sleep with BRC pulled down all the time does not work either.

As i said, all works greate when the roomba is not in the dock.
It also works fine the short time before roomba goes to sleep in the dock.

I only use PASSIVE-mode if that is of importance.

To clarify:
How do i wake up the roomba when it has gone to power-down mode in the dock?
Sending START (128) does nothing, sending CLEAN (135) does nothing, pulsing/holding BRC does nothing.

Any ideas ?
Last edited by Quazzie on October 18th, 2016, 10:49 am, edited 1 time in total.

Re: Roomba 650 SCI

October 18th, 2016, 8:21 am

When on charging, Roomba changes its state, (Not sure if it's safe or passive mode, as both can be used to get Roomba to charge). If you set the Roomba to full mode you will not be able to charge. The charging state cannot be controlled through the SCI, but you can control the modes the Roomba is in. It's the only way to control when the Roomba can charge. E.G. if the Roomba is in full mode, even placed on the dock won't initiate a charge.

Safe mode will give you sensor data, like the light bumper ect..

Certain packets sent to and from the Roomba will max the Arduino's serial cache (As I found out) so if you start to suffer missing data, you may want to start there.

A project I was doing a few months ago led me to working with the SCI, getting my Roomba to do smarter things..

Re: Roomba 650 SCI

October 18th, 2016, 8:57 am

Thanks, but as i said i only use passive mode (never change it) and when the roomba hits the dock and starts charging i loose connection after ~30 sec (when the lights turns off).
From there i can't get the roomba to wake up at all or listen to commands, not even change mode.

Is this the correct function ?
Should i not be able to send commands or read sensors on the roomba when in charger ?

I want to have the roomba behave like roomba all the time (passive) but i want to be able to send the clean command from the arduino.

Re: Roomba 650 SCI

October 18th, 2016, 9:03 am

You may have to reconnect to the roomba, or set the Roomba to safe mode and have the Arduino monitor the chargers available packet. Min delay I'd recommend is 25 milliseconds. Any faster and the data may become corrupt, and even crash the Roomba's CPU (Done that before).

Bear in mind, if the Arduino is going to run off the Roomba's battery, Roomba will not compensate for the extra power draw. I've not tested plugging in an Arduino directly onto the Roomba's buck converter, but only a direct connection through a 3rd party buck straight to the battery.

Re: Roomba 650 SCI

October 18th, 2016, 9:32 am

I have connected power to the arduino via a 15v regulator (tried a buck converter also) from pin 7 and 2.
On startup arduino sends command START (128)
Then it's reading sensor group 3 (142,3) every 10 seconds (10bytes)
If it does not get an answer in 2 seconds its sends command START (128) again.

This works fine when not in dock, if roomba is on the floor and enters power-down, it wakes up when it gets the START command again and so on.

When it connects to the dock its all fine until power-down (~30sec) then it does not answer the sensor request command or the start command. Not a single byte is transmitted from the roomba.
Its like its dead.

So i am trying to connect to it again (with START 128) but nothing.

Re: Roomba 650 SCI

October 18th, 2016, 10:36 am

Seems like Roomba goes to passive.

http://irobot.lv/uploaded_files/File/iR ... e_Spec.pdf

Optcode 133:
Power Opcode: 133 Data Bytes: 0
This command powers down Roomba. The OI can be in Passive, Safe, or Full mode to accept this
• Serial sequence: [133]
• Available in modes: Passive, Safe, or Full
• Changes mode to: Passive

The only way to stop Roomba from powering down is to change its mode to safe mode (131). Once connected, you can send optcode 135 to start roomba on a clean cycle.

The code I used:
#include "connect.h"
#include "init.h"
#include <Arduino.h>

byte start[1] = {128};
byte baud[2] = {129, 11};

void connect(){


  //Connect to Roomba's serial
  Serial3.write(start, sizeof(start));


  Serial3.write(baud, sizeof(baud));


  Serial3.write(fullMode, sizeof(fullMode));



This only runs once on the Arduino setup.

Let me know if changing to safe mode works, I can't remember exactly (Been a few months). I know Roomba will not charge in full mode.
Last edited by LazyRoomba on October 18th, 2016, 10:46 am, edited 1 time in total.

Re: Roomba 650 SCI

October 18th, 2016, 10:44 am

Yep but that would mean that it does not charge :\
"Note that charging terminates when you enter Safe Mode, and Roomba will not power save."
So to charge i would have to have it in passive, like i have right now but then it will power down and it seems there is no way to wake it up again using the SCI interface....

Re: Roomba 650 SCI

October 18th, 2016, 10:47 am

If the Arduino receives a trigger (Button press, serial command via USB, wifi or bluetooth ect..) Get the Arduino to reconnect to the Roomba and initiate the clean command.


Handlers I wrote

Sleep handler
#include "sleep_handler.h"
#include "init.h"
#include "button_handler.h"
#include <Arduino.h>

unsigned long last_active_time = 0;

//Serial commands
byte power_down[1] = {133};

//Run to keep roomba active and prevent from sleeping
void roomba_active(){

  last_active_time = millis() + 300000;

//Check activity time, and power off roomba if inactive for more than 5 minutes
void check_activity_time(){


  if(last_active_time <= millis()){

//Power off roomba
void sleep(){

  if(roomba_mode != 0){
    Serial3.write(power_down, sizeof(power_down));

    roomba_mode = 0;

    power_down_roomba = true;
    clean_button_pressed_time = 0;


Wake handler
#include "wake_handler.h"
#include "init.h"
#include "led_handler.h"
#include "sound_handler.h"

void wake(){

  roomba_mode = 1;

  //Set the mode to safe mode
  Serial3.write(fullMode, sizeof(fullMode));

  //Turn on the power LED
  ledData[1] = 0;
  Serial3.write(ledData, sizeof(ledData));

  //Play beep

Thing is tho, even when Roomba is powered down, it should still receive commands via Serial. You may have to wake it to start a cleaning cycle, as the SCI does have some bugs. E.G. packet 19 and 20 doesn't work.
Last edited by LazyRoomba on October 18th, 2016, 10:55 am, edited 1 time in total.

Re: Roomba 650 SCI

October 18th, 2016, 10:54 am

I've clarified my question at the top :)
Got it all figured out except how to wake up the roomba when in power-down state inside the dock.

By reconnecting you mean ?
I've tried reconnecting by:
sending START then CLEAN - nothing
bringing BRC low, waiting, sending START, CLEAN - nothing
pulsating BRC, waiting, sending START, CLEAN - nothing

Yeah i can trigger this reconnect with a button on the arduino.

Btw thanks for all the input.

Re: Roomba 650 SCI

October 18th, 2016, 10:59 am

Then it's reading sensor group 3 (142,3) every 10 seconds

Make sure this doesn't interfere with the commands been sent. Delay affects the whole script.

To wake the Roomba I sent optcode 131, which set Roomba into safe mode.

For the aesthetics, I set the clean LED to on and played a sound.

Re: Roomba 650 SCI

October 18th, 2016, 11:01 am

Ok, i'll try 131 when i get home. Thank again!
Yeah, sensor reading is not done while issuing commands.

Re: Roomba 650 SCI

October 18th, 2016, 12:24 pm

The project I was doing around 3-4 months ago was to use an Arduino to control Roomba and create a smarter thinking robot. What stopped me in my tracks was my lack of maths, getting the robot to follow it's surroundings using arcs.. I don't understand trigonometry, even to this day.

Re: Roomba 650 SCI

October 19th, 2016, 2:53 am

Ok. Well 131 did not work.
Somethings up with my Roomba/SCI port, it stops listening when roomba is powered down (in the dock).
Gahhh! Gonna have to try IR then...

Re: Roomba 650 SCI

October 19th, 2016, 7:29 am

I am not sure what Irobot changed. My security bot was originally built using a create and then I used a Dirt Dog as the platform. With a program called Roomba status I never had issues waking it up either robot while they were on the dock.

Re: Roomba 650 SCI

October 19th, 2016, 8:53 am

My 530 never lost connection via the SCI, even whilst on charging. When I was working with the SCI, I left my Roomba plugged in using the rear jack. Not sure what the issue is, but Roomba should respond to commands.

An idea is to monitor the battery data (Voltage, e.g.), it should always be sent through the SCI even when Roomba is charging.

I was using an Arduino Mega 2560 (Serial3), then an Arduino Nano (Software serial). Note that Serial is also used for USB.
Post a reply