Roomba + Xbee + IPS HowTo

Hallo,
wie versprochen nun das HowTo von mir…

Was wird beschrieben?
Beschrieben wird der Bau eines Xbee Moduls was ständig von Roomba mit Strom versorgt wird und AUSSEN an den Roomba angebracht wird.

Vorteil
Garantie bleibt erhalten, da wir den offiziellen Roomba Interface Port nutzen und nix am Roomba verändern.

Nachteil
Roomba könnte nun unter umständen nichtmehr überall drunter passen. Bei mir allerdings passt er nach wie vor unter die Heizung und unters Bett, also genau wie vorher.

Bauteile

1MINI-DIN-Stecker, 7-polig (Reichelt)
1
DC/DC - Wandler R-783.3-1.0 SIP3 (Conrad)
2Xbee Modul (eService-online oder 1-wire.de)
1
Xbee zu USB Modul (eService-online oder 1-wire.de)
1Gehäuse (z.b. Reichelt SP 2044 SW)
1
Kondensator 10µF ( laut Datenblatt des DC/DC Wandler optional!)
1*Widerstand 2k

Bevor du lötest
müssen deine Xbee´s konfiguriert werden… D.h. ein Xbee wird mit dem USB Adapter die „Basis“ spielen das andere wird verbaut und ist der „Client“ für den Roomba… dazu muss jedoch jedes Xbee einmal in den USB Adapter gesteckt und konfiguriert werden. Wie du das machst und anschließend dein Xbee („Basis“) auch gleich in IPS einbindest kannst du in diesem tollen Tutorial nachlesen: hier entlang bitte (ich bin bei den Device ID´s der Anleitung geblieben! Also hat das Xbee am Roomba die ID 13… das ist für das verständnis der späteren Befehle im IPS wichtig! Wichtig ist weiterhin das die Xbees mit 19200baud senden und empfangen! NUR das funktioniert!)

Nun ans Löten
Nimm dir den untenstehenden Schaltplan und löte einfach alles zusammen. Die Pins habe ich alle mit nem Stück Schrumpfschlauch gesichert… man weiss ja nie… Mit nem heißen Schraubenzieher nen Schlitz in das Gehäuse gebrannt, alles drin verfrachten, Gehäuse zuschrauben. Kabel nach Bild an Stecker löten.
Da die Stecker ziemlich groß, also dann nach oben hin abstehend sind, habe ich die schwarze Hülle weggelassen und die beiden Metallhälften mit je zwei Punkten Sekundenkleber fixiert. Anschließend habe ich den innenraum zur Sicherheit mit Montagekleber ausgedrückt und mit einem nassen Finger geglättet.

Die Hochzeit
Als nächstes entfernst du die obere Abdeckung des Roomba… Dazu den Kehrbehälter entfernen und die oberste Roomba schicht nach oben drücken (ja die sitzt sehr fest, hatte auch Angst was abzubrechen)

Nun wird die InterfaceSchnittstelle sichtbar. Hier kannst du nun dein selbstgebautes XbeeInterface anstecken. Wenn du willst kannst du ja für die Optik ein Loch in die oberste Abdeckung bringen und schwupp die wupp siehts dann wieder besser aus ;o) weil Sie wieder passt…

Roomba konfigurieren
Im Rohzustand kann dein Roomba noch nicht mit dem Xbee reden weil beide auf 19200baud eingestellt sein müssen. Dein Xbee sollte das mittlerweile sein ;o) Bei deinem Roomba sieht das noch anders aus. Schalte den Roomba mit einem drücken auf clean einfach ein. Als nächstes halte die Cleantaste gedrückt… Roomba schaltet sich aus und nach ca 10sec. ertönt ein Signal. Wenn das Signal fertig ist mit abspielen, Taste loslassen und nochmal kurz drücken um Roomba wieder einzuschalten. Fertig…

IPS und Roomba
Wie Ihr euer XBee Modul unter IPS einrichtet sollte klar sein. Nun wollen wir aber auch das IPS mit Roomba kommuniziert.

Was Ihr alles an Variablen und Scripten anlegen müsst entnehmt Ihr dem Bild unten.

Als erstes gibt es da die RegisterVariable… diese bekommt ein Script zugeordnet… (im Bild ist das „test“) mit folgendem Inhalt


<?
SetValueString(57727 /*[Roomba\.Roomba Info\XBee.RX]*/ ,$IPS_VALUE );
?>

Script Roomba Info

hier müssen sämtliche IPS Variablen an euer System angepasst werden…

<?
//Daten als dez-String auslesen
$instr=GetValueString("XBee.RX");
$datenstr="";

for($i=0; $i<strlen($instr); $i++) {
 $datenstr.=strtoupper(ord($instr{$i}))." ";
    }
SetValueString("XBee.Daten",$datenstr); //String ausgeben

//String auflösen und prüfen der Daten
$Byte="";
$Byte = explode(" ",$datenstr);

//=========================================================================

//Anzeige Charging State
$ChargingState = $Byte[16];
switch ($ChargingState) {
case 0:
   SetValueInteger(47126 /*[Roomba\Ladestatus]*/ , 0);
   break;
case 1:
   SetValueInteger(47126 /*[Roomba\Ladestatus]*/ , 1);
   break;
case 2:
   SetValueInteger(47126 /*[Roomba\Ladestatus]*/ , 2);
   break;
case 3:
   SetValueInteger(47126 /*[Roomba\Ladestatus]*/ , 3);
   break;
case 4:
   SetValueInteger(47126 /*[Roomba\Ladestatus]*/ , 4);
   break;
case 5:
   SetValueInteger(47126 /*[Roomba\Ladestatus]*/ , 5);
   break;
}

//Anzeige Charging Source
$ChargingSource = $Byte[39];
switch ($ChargingSource) {
case 0:
   SetValueInteger(31048 /*[Roomba\Mode]*/ , 0);
   break;
case 1:
   SetValueInteger(31048 /*[Roomba\Mode]*/ , 1);
   break;
case 2:
   SetValueInteger(31048 /*[Roomba\Mode]*/ , 2);
   break;
}

//Berechnung der Batteriespannung
$BatteryVoltage = ($Byte[18])+($Byte[17]*256);
$BatteryVoltage=$BatteryVoltage / 1000;
$BatteryVoltage = round($BatteryVoltage,1);
SetValueFloat(25663 /*[Roomba\Akkuspannung]*/ , $BatteryVoltage);

//Berechnung des Stroms aus Akku
$BatteryCurrent = ($Byte[20])+($Byte[19]*256);
if ($BatteryCurrent >= 32768 /*[Objekt #32768 existiert nicht]*/) {
   $BatteryCurrent = $BatteryCurrent - 65536;
}
SetValueInteger("BatteryCurrent", $BatteryCurrent);

//Berechnung der Restbatteriekapazität
$BatteryCharge = ($Byte[23])+($Byte[22]*256);
SetValueInteger("BatteryCharge", $BatteryCharge);

//Berechnung der Batteriekapazität
$BatteryCapacity = ($Byte[25])+($Byte[24]*256);
SetValueInteger("BatteryCapacity", $BatteryCapacity);

//Berechnung der Restbatteriekapazität in %
$BatteryChargePercent = $BatteryCharge / $BatteryCapacity * 100;
$BatteryChargePercent = round($BatteryChargePercent,0);
SetValueFloat(46523 /*[Roomba\Akkustatus]*/ , $BatteryChargePercent);

//Berechnung der Batterietemperatur
$BatteryTemperature = ($Byte[21])+($Byte[21]*0);
SetValueInteger(46709 /*[Roomba\Akku Temperatur]*/ , $BatteryTemperature);
?>

getriggert wird dieses script über die Aktualisierung der Variable „Xbee.RX“

Script auslesen

hier werden die 80kb Daten vom Roomba befohlen… Roomba sendet dann und der Inhalt landet in der Registervariable und das zugeordnete Script schiebt den Inhalt dann in Xbee.RX diese Aktualieiserung startet dann Script „Roomba Info“


<?
$ID=27283 /*[XBee Gateway]*/ ;
XBee_SendBuffer($ID,13, chr(128)); //Start Command
XBee_SendBuffer($ID,13, chr(149));  //Opcode 149
XBee_SendBuffer($ID,13, chr(1)); //Number of packets
XBee_SendBuffer($ID,13, chr(100));  //Packet ID 100
?>

dieses wird jede Minute gestartet…

Script Clean

setzt Roomba einfach in den Cleanmodus


<?
$ID=27283 /*[XBee Gateway]*/ ;
XBee_SendBuffer($ID,13, chr(128)); //Start Command
XBee_SendBuffer($ID,13, chr(135));  
?>

Script Dock

setzt Roomba in den Dock Modus

<?
$ID=27283 /*[XBee Gateway]*/ ;
XBee_SendBuffer($ID,13, chr(128)); //Start Command
XBee_SendBuffer($ID,13, chr(143));  //Opcode 149
?>

Script Wartung

lässt Roomba langsam von der Basis rückwärts fahren und bleibt stehen.

<?

$ID=27283 /*[XBee Gateway]*/ ;
XBee_SendBuffer($ID,13, chr(128)); //Start Command
sleep(1);
XBee_SendBuffer($ID,13, chr(131)); //Start Command
sleep(1);
XBee_SendBuffer($ID,13, chr(145).chr(255).chr(206).chr(255).chr(206));  //Opcode 149
sleep(4);
XBee_SendBuffer($ID,13, chr(145).chr(0).chr(0).chr(0).chr(0));  //Opcode 149
XBee_SendBuffer($ID,13, chr(128)); //Start Command
sleep(1);



?>

So im großen und ganzen ist das das Handwerkszeug um dann weiter zu spielen ;o)

Sooo dann hoffe ich das ich nix vergessen ahbe und alles klappt. Rein rechtlich übernehme ich nix für nix!

Ich sag schonmal vorab Danke für die Anleitung.

Jetzt muss es nur noch zu Weihnachten einen Roomba geben.
Dann werd ich es mal mit der Anleitung probieren.

Shadowdan

Ich bin ja nun am kaufen der benötigen Teile.

Wofür brauch ich den 2k Widerstand?
Ich kann bei den üblichen Verdächtigen keinen finden.

Gehts sowas hier?

Ich habe mir übrigens einen Roomba 560 besorgt. Erstmal so testen,
obs was taugt. Dann in IPS einbinden.

Shadowdan

Ich will gerade meinen Roomba unter IPS in Betrieb nehmen. Beim Einschalten des Roomba habe ich auch Daten im Splitter, aber mit den Scripts hier geht nichts (eigentlich auch keine Fehlermeldungen). Kann es sein dass sie gar nicht mehr unter V2.4 #1984 funktionieren? Komischer weise gibt es in der Funktionsliste (strg-space) noch die Xbee_xxx Befehle. Oder bringe ich jetzt was durcheinander?

Doch. Geht wunderbar unter 2.4 #1984. Habe meinen Roomba erst kürzlich ins System geholt.

Es geht, es geht.
Man kann etwas 25 mal durchlesen und sieht keinen Fehler. Einmal nachgefragt und man sieht es selbst sofort (Mein DestinationDevice ist 2 und nicht 13, wie hier)
Allerdings habe ich wirklich nichts über XBee in der Dokumentation gefunden.

Nein, Pinki99 hatte da auf einen Post von Rainer verwiesen wo die XBee-Konfiguration beschrieben wird. Habe da auch mehrfach drüber lesen müssen. Ist aber wirklich eine nette Spielerei.

Hallo,
ich habe seit mehreren Jahren Roombas im Einsatz. Einen 555 seit 2 Jahren, nun im OG tätig, und seit einem guten Jahr noch einen 581 im EG. Fazit: Rundum zufrieden inkl. 100% WAF. Kommt sogar noch besser: Seit leihweise einmal im Monat bei Schwiegereltern unterm Bett geroombat wird, überlegen die sogar, sich selbst einen zuzulegen! Das potenziert den WAF nochmals enorm! :smiley:

…bis auf die (bei mir noch) fehlende IPS-Anbindung!!! :frowning:

Mein Problem dabei:
Da meine beiden Saug-Krümel an vielen Stellen gerade so drunter passen, tue ich mich sehr schwer damit, oben was draufzubauen! Kanten unter Schrankwände und Küchenzeilen dreckig lassen ist es mir dann doch nicht wert, schon im Büro zu wissen, dass der Kleine sich mal wieder wo mit Sohnemanns Rovio gekappelt hat und feststeckt. Obwohls schon juckt, zu viele Ideen, was man so machen könnte… :rolleyes:

ABER: Es gibt doch diese kleinen niedlichen runden Fernbedienungen, beim 581 sogar schon dabei, bei den anderen nachbestellbar!

Könnte man nicht die IPS-Anbindung über diese Fernbedienung machen? Hat das schon jemand versucht?

Oder gibt es Argumente dagegen und ich bin da auf nem Holzweg?

Gruß Gerd

Mit der Fernbedienung kannst Du das Teil doch nur losfahren und docken lassen. Das geht mit XBee schon mehr.

Hier wurde auch schon beschrieben wo man im 581 das XBee im Gehäuse verschwinden lassen kann.

Ich habe das so realisiert und mein Roomba ist daher genauso funktionstauglich wie vor dem Umbau.

Kleine niedliche Fernbedienung … Ha Ha Ha…
Aber warum willst du da rum fummeln? Da gibt es keine Schnittstelle. Mit der Batterie Versorgung ist das so eine Sache. Und Kontakte abgreifen? Daten vom Roomba bekommst du nicht. die Fernbedienung sendet nur an den Roomba.

Der Einbau des XBee in den 581 ist wirklich einfach. Wenn man den Stecker gut hinkriegt ist man noch einige mm kleiner als der höchste Punkt des Roomba (Vorderer Rundumsensor) Wenn ich meinen zusammenbaue (Spätestens am Wochende) werde ich noch ein paar Fotos machen. Das Protokoll der Schnittstelle steht zur Verfühgung, Was willst du mehr?

Mist Kronos war schneller

Ok, wenn das ohne Höhengewinn geht… gerne! Sorry, hatte das übersehen und nicht ständig alle Threads mitgelesen

Fernbedienung: Da geht schon mehr als nur losfahren und steuern. Zeit, Scheduler usw geht ja auch. Dachte auch eher daran, das „kleine niedliche Teil“ (dessen Batterien ja eh immer leer sind wenn man es mal braucht und ergo besser ein Ladekabel bekommen sollte) einfach auszunutzen als vorhandene Funkschnittstelle zum Gerät und eben gleich mehr dranzulöten. Und groß genug für Erweiterungen scheint es ja zu sein… :smiley:

Aber wenn es kein Feedback vom Gerät gibt, klar, das Argument zieht gewaltig.

Hat eigentlich schon mal jemand so einen Umbau bei ner 700er-Serie gemacht? Geht das da auch noch oder ist da zuviel redesignt worden?

Ich frag nur weil im privaten Umfeld mehrere Roomainteressenten demnächst zuschlagen wollen, und außer beim Mediamarkt scheints ja nun doch endlich die 700er zu geben, zumindest lt. offizieller deutscher iRobot-Webseite. Die neuen Saugeinsätze sind schon wirklich gut. Habe einen aus USA kommen lassen für den 581er und da seit 3 Monaten laufen. Leiser, bessere Saugleistung insbes. Teppich, mehr Kapazität, leichteres Reinigen. Dazu das bessere Akkuhandling… Also wennschon dennschon :wink:

Das mit den Fotos wäre Klasse

Ich schau mal ob ich heute abend dran denke meinen 581er abzulichten.

Den positiven Eindruck vom AerovacBin kann ich nur bestätigen. Habe den seit 2 Wochen im Einsatz und die Saugleistung ist definitiv besser.

Anbei die Bilder. Die scharze Kappe ist eine gekürzte Schrumpf-Kappe.

Und noch ein paar Bilder damit man weiß wie es aussieht.

Moin…

… will unseren neuen Mitbewohner mit Xbee upgraden und hab keine Erfahrungen mit xbee.
Ist es egal welche Xbee ( Pro oder Series 2.5 ) man nimmt solange es 2 gleiche sind!?

Grüße,
Peter

Huhu… kann vielleicht einer kurz auf seine Xbee schauen und sagen was er da sieht!? :wink: Würde gerne vor Weihnachten noch mein Xbee-Equipment ordern!

Würde gerne unseren neuen Mitbewohner bissel PIMPEN!! :smiley:

Danke und Grüße,

Peter

Wenn Du 100% sicher sein willst, dass sie mit IPS funktionieren, nimmst diese hier.

Danke Rainer… 100% ist immer gut! Werd mir die Teile gleich mal ordern! :smiley:

Da ich den Wischroboter iRobot Scooba 385 habe welcher die gleiche Serielle Schnittstelle wie der Roomba hat wollte ich fragen ob für den Scooba das Protokoll auch bekannt ist?

Wenn ja dann wäre es interessant zu wissen welche Daten beim Scooba ausgelesen werden könnten und welche Funktionen man somit fernsteuern kann.
Es ist zwar möglich den Scooba per IR-Befehle zu steuern (obwohl es offiziell dazu keine Fernbedienung gibt). Jedoch sind die Steuerungsmöglichkeiten sehr eingeschränkt. Der Scooba kann damit zwar gelenkt werden (rechts, links, geradeaus) jedoch ohne Wischfunktion.

Wäre super aus dem Scooba etwas mehr herauszuholen.

Hallo

Hat schon jemand ein Roomba 770 in ips eingebunden ?

Habe folgendes Problem das ich die Service Schnittstelle nicht umstellen kann , die xbee verbindung steht und ist getestet senden und empfangen ,aber vom Roomba kommen keine Daten und reagiert auch nicht auf Befehle .

Wenn ich die die clean Taste 10 sec drücke passiert nur ein reset ist die software doch anders als bei den 5xx modeln ?

MfG Jens