Hardware-Hacking So baut man einen Tentakel-Roboter für 100 Euro

Drei Menschen, 24 Stunden, 100 Euro Budget: Die Designer Thomas Gläser, Markus Jaritz und Philipp Sackl haben für das Magazin "Weave" mit extrem knappen Budget einen Roboter gebaut und programmiert, den man durch ein Labyrinth fernsteuern kann. Hier ihre Anleitung zum Billig-Hardwarehacking.

Mein erstes ferngesteuertes Auto - ein Hi-Jacker, den man während der Fahrt höherlegen konnte - werde ich nie im Leben vergessen! Und tatsächlich hat sich an der Freude, Maschinen durch die Gegend zu manövrieren, bei mir bis heute nichts geändert. Dann fühle ich mich ein Stück weit in die Kindheit zurückversetzt, als die Kreativität noch keine Grenzen kannte. Der Alltag des Designers sieht oft anders aus: kleine Budgets, chronischer Zeitmangel und wagemutige Konzepte, die in den häufig zitierten Schubladen verschwinden - so lange, bis irgendwann ein großherziger Sponsor sich erbarmt und sie vielleicht doch noch wachküsst.

Aber so viel Zeit verstreichen zu lassen, ist nicht nötig, denn interaktive Installationen müssen nicht immer teuer und kompliziert sein. So sorgt zum einen neue Hard- und Software dafür, dass sich mit Kreativität und bewusstem Verzicht auf komplizierte "Hightech" bereits viele interessante Anwendungen realisieren lassen. Zum anderen findet sich in den eigenen vier Wänden bestimmt das eine oder andere elektronische Spielzeug aus Kindertagen zum -Ausschlachten.

Softwareseitig gibt es bereits zahlreiche gute Alternativen, die häufig aus offener Quelle stammen. In puncto Physical Computing ist das auf Designer ausgelegte Arduino-Konzept einzigartig und lässt andere Physical-Computing-Plattformen alt aussehen. Die Alternativen sind für Designer oft zu komplex, zum Teil nicht Open Source und dazu im Schnitt teurer. Darüber hinaus wird das Arduino-Sortiment konstant erweitert. Neuentwicklungen wie Fritzing oder -TinkerKit sorgen außerdem dafür, dass die Einstiegshürde weiter sinkt.

Dieses Tinkering-Tutorial zeigt, dass man mit wenigen Mitteln und ein paar Grundkenntnissen schöne Anwendungen basteln kann. Dabei nahmen wir uns vor, binnen 24 Stunden ein Low-Budget-Projekt zu realisieren, dessen Ausgang wir selbst nicht kannten. Eines aber stand fest: Ganz im Sinne des Hacking-Gedankens wollten wir ein Spielzeug auseinandernehmen, um es zu verstehen, und - verbessert - wieder zusammensetzen. Heraus kam ein kleiner Roboter, der sich per Tastatur durch ein Mixed-Reality-Labyrinth steuern lässt.

Planen, Programmieren, Basteln - die Schritt-für-Schritt-Anleitung zum Roboterbau:

Brainstorming und Projektziel

Der Roboter Hexbug Inchworm stach aus dem zunächst begutachteten Elektrospielzeug eindeutig heraus. Er lässt sich vor- und zurück, nach links und rechts fernsteuern. Ihn wollten wir nun nicht mit der Fernbedienung, sondern aus einer Software heraus steuern und durch ein virtuelles Labyrinth navigieren.

Den Plan, das ganze Spiel - inspiriert durch www.blastgetcreative.co.uk  - online bereitzustellen, gaben wir nach ersten Tests mit dem Open-Source-Flash-Server Red5 auf, da wir ohne genügend Bandbreite und eigenen Streamingserver keine gute, verzögerungsfreie Bildqualität gewährleisten konnten.

Fernbedienung untersuchen

Die Inchworm-Fernbedienung funktioniert so wie die meisten anderen aus der Unterhaltungselektronik auch: Für die Informationsübermittlung sendet sie ein Infrarot-Lichtsignal aus, das sie mit einer Frequenz von etwa 40 Kilohertz ein- und ausschaltet (für einen Funktionstest empfehlen sich Digitalkameras oder Webcams, die Infrarotlicht aufnehmen können). Im Sendergehäuse finden sich zu diesem Zweck eine Batterie, eine Steuerschaltung, das Tastenfeld sowie eine Infrarot-Leuchtdiode. Das Empfangsgerät im Roboter ist dagegen mit einer Silizium-Fotodiode, einem Verstärker und einem Demodulator ausgestattet, der das digital codierte Signal an die Steuerschaltung des Roboters liefert.

Fernbedienung öffnen

Die Fernbedienung ließ sich ohne Probleme mit einem kleinen Schraubenzieher an den Seiten aufhebeln. Nachdem wir Hülle, Taster und Schieberegler entfernt hatten, konnten wir die offene Platine begutachten: Als hätte der Hersteller uns erwartet, waren die Kontaktpunkte vorbildlich mit "forward", "backward", "leftturn (LT)" und "rightturn (RT)" gekennzeichnet. Auf den Kontakten fanden sich mit Tesa aufgeklebte Metallplättchen. In gedrücktem Zustand verbinden sie den äußeren Dreiviertelkreis, auf dem Spannung anliegt, mit dem mittleren Punkt (Erdung) - der Stromkreis ist dann geschlossen, und die in Schritt zwei beschriebene Signalfrequenz wird an den Roboter geschickt. Wir entfernten die Metallplättchen und ersetzten sie durch eine elektrische Schaltung.

Platine löten

Im nächsten Schritt löteten wir einige Kabel an. Als Stromquelle behielten wir die Knopfbatterien bei. Um Kabelsalat zu vermeiden, sollte man farbige Kabel oder, wie wir, eine Buchstabenkennzeichnung verwenden. Außerdem sollte die Platine sauber sein, damit das Lötzinn haftet. Die meisten Platinen haben vorgefertigte Bohrungen, an denen man den Draht fixieren kann. Da in unserem Fall diese Aussparungen fehlten, fügten wir sie mit einem Cutter ein.

Danach fixierten wir die Platine mittels der helfenden Hand, führten den Lötzinn und die heiße Lötspitze gleichzeitig an die Lötstelle und warteten, bis das Lötzinn die Berührungsstelle vollständig benetzt hatte, wobei wir die Position der Lötspitze unverändert ließen - anschließend zogen wir zunächst den Lötdraht und dann die Lötspitze abrupt zurück. Der noch dünnflüssige Lötzinn erreichte jetzt seine endgültige Form und erstarrte. Wenn der Lötkolben die richtige Temperatur hat, dauert das nicht länger als eine Sekunde.

Fernbedienung mit Arduino verbinden

Um den fremden Stromkreis ansteuern zu können, benötigten wir als Nächstes einen Optokoppler 4N35 . Dieser trennt den Stromein- und ausgang und sorgt -somit dafür, dass sich Schaltungen mit unterschiedlichen Spannungsniveaus koppeln lassen. Dem liegt folgendes Prinzip zugrunde: Am Eingang des Optokopplers (Arduino Digital PIN) wandelt ein Lichtsender (LED, meist Infrarot) das elektrische in ein optisches Signal um. Dieses gelangt über einen sehr kurzen Lichtleiter zum Empfänger (etwa einem Fototransistor) und schließt damit den Stromkreislauf der Fernbedienung.

Um die vier Tasten für die Steuerung unseres Roboters (links und rechts sowie links drehen und rechts drehen) unabhängig voneinander anschließen zu können, sind vier Optokoppler erforderlich.

Arduino für Processing einrichten

Zunächst einmal mussten wir entscheiden, ob wir Arduino lieber mit einer Flash- oder einer Processing-Anwendung steuern wollten. Zwei Gründe sprachen für Processing: Erstens basiert die Arduino-IDE auf Processing, sodass die Kommunikation (im Gegensatz zu Flash) ohne eine lästige Serial-Proxy-Signal-umwandlung auskommt. Zweitens ist Processing (wie Arduino) ein Open-Source-Werkzeug.

Nach der Installation von Arduino ( downzuloaden unter arduino.cc/en/Main/Software ) und Processing ( processing.org/download ) brauchten wir für Letzteres noch die Arduino-Library ( tinyurl.com/l5z4ph ). Nach dem Herunterladen muss man den entpackten -Arduino-Ordner in den Library-Ordner von Processing ziehen. Und schließlich benötigten wir für die weitere Verwendung noch Firmata - ein Protokoll, das die Kommunikation zwischen dem Microcontroller (Arduino) und der Software ermöglicht. Dazu startet man Arduino und öffnet im File-Menü unter "Sketchbook", "Examples", "Library-Firmata" die StandardFirmata.pde.

Danach muss man den aktuellen Inhalt des Atmel-Chips auf dem Arduino-Board löschen, da er immer nur Platz für ein Script bereithält. Dazu drückt man auf den Reset-Knopf des Boards und klickt danach sofort auf "Upload to I/O Board" im Arduino-Fenster , um den neuen Firmata-Code hochzuladen - wenn Sie zu lange warten, können Sie den Code nicht hochladen und müssen noch mal die Löschtaste drücken.

Ansteuerung testen

Sollten im späteren Verlauf irgendwelche Fehler auftreten, ist es gut, wenn man möglichst genau weiß, welche Störquellen man ausschließen kann. Für eine Trockenübung schlossen wir anstelle der Optokoppler zunächst LEDs an, um zu testen, ob die Stromsteuerung mit den Anweisungen "High" (Strom an) oder "Low" (Strom aus) aus Processing heraus klappt. Nachdem dies erfolgreich verlaufen war, schlossen wir die Optokoppler an .

Virtuelle Robotersteuerung konzipieren

Statt der Hardware-Fernbedienung, mit der man den Hexworm ursprünglich steuerte, überlegten wir uns nun eine alternative, virtuelle Steuerung und entschieden uns für einen virtuellen Joystick, der die anfänglichen vier Freiheitsgrade um diagonale Bewegungsmöglichkeiten ergänzt. So hat man mehr Steuerungsoptionen und kann den Roboter etwa auch abstoppen oder ein Bewegungsmuster programmieren.

Arena und Kamerahalterung bauen

Nun ging es daran, die Arena zu bauen, auf der das virtuelle Labyrinth entstehen und der echte Inchworm laufen sollte. Dafür nutzten wir weiße Wellpappe. Eine Konstruktionsskizze ergab eine weiße Grundfläche, die sich später als ideal fürs Tracking erweisen sollte, umgeben von vier Banden, die als Einschränkung für den Käfer sowie als Versteck für die Arduino-Verkabelung zu dienen hatte. Darüber fixierten wir zentral eine EyeToy-Kamera auf zwei Stelzen, so dass diese ruckelfrei den Spielverlauf verfolgen kann.

Verdrahtung überarbeiten

Um die ganze Technik ohne Probleme in einer der Banden zu verstecken , mussten wir die Verkabelung noch einmal optimieren. Für ein einfaches Prototyping verwendeten wir eine Steckplatine. Mit diesem sogenannten Breadboard lässt sich der Aufbau leicht und schnell ändern, weil man neue Verbindungen nicht löten muss, sondern stecken kann. In unserem Fall leiten die beiden äußeren Bahnen (+ und -) den Strom parallel zu der längeren Seite (siehe rote und blaue -Linien). Die inneren Bahnen (a, b, c, d, e) verhalten sich genau entgegengesetzt : Vom Arduino-Board gehen die Signale aus den jeweiligen digitalen PINs (grün und gelb) zum Breadboard und von dort über die Optokoppler an die entsprechenden Drähte der Fernbedienung (weiß). Die Rückführung des Stroms zur Erdung erfolgt über eine zentrale Leitung auf der äußersten Bahn (rot zu orange).

Roboter tracken

Um die Position des Roboters auf dem Spielfeld für den Computer sichtbar zu machen, wollten wir ursprünglich das sehr gute Trackingsystem OpenCV einsetzen. Da sich diese Lösung allerdings als nicht besonders verträglich mit unserer EyeToy-Kamera erwies, entschieden wir uns kurzerhand, unseren eigenen Farbtracker zu entwickeln.

Trackingsysteme wie diese können in ihrem Aufbau recht schlicht sein: Processing legt die Pixelfarbwerte jedes Einzelbildes nämlich automatisch in einem Array namens "pixels[]" ab. In jedem Einzelbild, das die Kamera an den Computer sendet, wird eine gewisse Zahl von Pixeln überprüft. Aus diesem Grund muss man lediglich bei jedem Bild auf die Farbe der Pixel achten und sicherstellen, dass sie in der Nähe des Objektfarbwerts liegen, den man tracken möchte.

Wir kontrollierten allerdings nur jeden 47. Pixel. Diese Vorgehensweise steigerte die Geschwindigkeit erheblich, lieferte aber immer noch gute Ergebnisse. Um die Farberkennung zu optimieren, klebten wir unserem Hexbug außerdem ein pinkfarbenes Post-it-Herz auf den Kopf.

Der Roboter im Labyrinth

Da wir den Funktionsumfang unserer kleinen Installation um ein Labyrinthrätsel erweitern wollten, musste unser Roboter Hindernisse erkennen und dann stoppen können. Wir luden zunächst das Bild eines E und eines Labyrinths von der Festplatte in unseren Processing-Sketch, wobei die Regel konkret so aussieht: Sobald ein dunkler Pixel im Labyrinthbild liegt, soll der Roboter stoppen. Diese Laufrichtung ist dann gesperrt, das heißt, der Roboter kann nicht durch Wände laufen. Für die erste grobe Hit-Erkennung reichte der Buchstabe E. In der Folge verwendeten wir ein schwarzweißes Labyrinthbild als Grundlage.

Tracking und Robotersteuerung

Am Ende führten wir Tracking und Robotersteuerung in Processing zusammen, so dass wir den Roboter mit dem Software-Joystick durchs virtuelle Labyrinth navigieren konnten. Sicher wären noch ein paar sinnvolle Erweiterungen denkbar: Generativ erzeugte Level könnten dem statischen Labyrinth für längeren Spielspaß Dynamik verleihen. Da die Fernbedienung auf zwei Kanälen sendet, könnte man auch zwei Roboter unabhängig voneinander steuern - oder aber mit einer zweiten gehackten Fernbedienung ein Multi-User-Spiel kreieren (es bleibt jedem vorbehalten, ob er -dies für eine kollaborative oder eine Konkurrenzsituation einsetzt). Nicht zuletzt könnte man dem Roboter eine leichte Minikamera aufsetzen, mit der er wie ein Marsmobil fremde Landschaften erkundet. Unser kleiner Käfer hatte jedoch seine Aufgabe gemeistert und wir unser 24-Stunden-Ziel erreicht - und so begaben wir uns -zufrieden für eine Handvoll Schlaf in unsere Betten. Zzzzz ...