DIY: Virtual-Wall für iRobot Roomba

Einige unserer Türschwellen sind nicht voll Roomba-kompatibel. Der Staubsauger fährt in einer Richtung hinüber, kommt aber nicht wieder zurück weil sich dort ein etwas steilerer Absatz befindet der den Bumper auslöst. Die Schwelle wirkt sozusagen als Roomba-Ventil. Da bleibt einem nur die Türen geschlossen zu halten oder der Bau einer (virtuellen) Wand.

Eine virtuelle Wand ist ein einfaches Infrarot-Signal, dass dem Roomba mitteilt, dass es an dieser Stelle nicht weiter geht. Er verhält sich dann so als würde er an einer Hardware-Wand entlang fahren.

Benötigte Bauteile

Virtuellen Wände kann man natürlich käuflich erwerben (zum Beispiel drüben bei Amazon). Ich hatte die benötigten Teile für eine Arduino-Virtual-Wall in meiner Bastelkiste rumliegen, also habe ich mir mal so eine Wand selbst gebaut. Folgende Teile habe ich für den Prototyp verwendet:

  • 1 Arduino (hier Arduino Nano)
  • 1 Infrarot LED (hier TSAL5100)
  • 1 Widerstand (hier 39 Ohm)

Alles in allem kosten diese Bauteile so ca. 5 Euro.

Die TSAL5100 Infrarot-LED hat seine Peak-Wellenlänge bei 940 nm. Das scheint für den Roomba optimal zu passen. Der Abstrahlwinkel beträgt ± 10 Grad. Gefühlt scheint mir das etwas viel zu sein. In einem Abstand von 3 Metern hat der “Strahl” bei 20 Grad Abstrahlwinkel schon einen Durchmesser von gut einem Meter. Entsprechend abgeschwächt ist das Signal, das beim Roomba ankommt. Trotzdem erkennt er das Signal bei dieser Entfernung noch sicher.

Schaltplan

roomba2

Naja, einen Schaltplan benötigt man für meine Virtual Wall eingetlich nicht. Ich habe trotzdem mal schnell einen gezeichnet. Meine Virtual Wall soll die Arduino-IRremote Library verwenden. Diese Library verwendet standardmäßig den Pin D3 des Arduino. Von D3 führt der Weg also über den Vorwiderstand (39 Ohm) weiter zur IR-LED und zurück zu einem der GND-Pins des Arduino.

Software

Die Software muss wie auch bei “normalen” Fernbedienungen ein 38kHz Träger-Signal erzeugen. Dieses Signal wird mit 1kHz moduliert. Das heißt die 38kHz Pulse werden in jeder Millisekunde ein- bzw. ausgeschaltet. Das ist mit dem Arduino leicht zu realisieren. Noch einfacher geht es mit der Arduino-IRremote-Library:

#include <IRremote.h>

IRsend irsend; // IRemote initialisieren (Pin 3)

void setup()

{ irsend.enableIROut(38); // 38 kHz Träger
}

void loop()

{ irsend.mark(1000); // 1 ms Mark

  irsend.space(1000); // 1 ms Space
}

Und hier noch kurz ein Zeitraffer-Video der virtuellen Wand im Einsatz: Die IR-LED befindet sich links etwa in der Mitte. Ich hatte die Schaltung etwas mit dem Gel-Akku abgeschirmt, damit der Roomba sie nicht überfährt. Der Infrarot-Strahl zeigt in Richtung untere rechte Ecke des Videos. Die Entfernung zwischen LED und gegenüber liegender Wand beträgt gut 3 Meter.



Nun muss das Ganze nur noch zusammen gelötet und in einem kleinen Gehäuse verstaut werden. Der IR-Empfänger sitzt vorn oben auf dem Gehäuse des Roomba. Deshalb darf die IR-LED nicht zu tief aufgestellt werden. Ansonsten schattet der Roomba selbst das Signal ab, wenn er dicht an der Virtual Wall vorbei fährt.


Der Artikel Eine Arduino-Virtual-Wall für den IRobot Roomba erschien zuerst auf Hobby Werkstatt und wurde von Heiner geschrieben. Der Artikel steht unter der Lizenz CC by SA 2.0.