Hardware

Staubsauger

Als Prototyping-Objekt habe ich einen als defekt inserierten Roomba 555 gekauft. Erstes Problem war der fehlende Akku - provisorisch wurde das ganze durch zerlegen & rekombinieren zweier defekter Laptop-Akkus gelöst.

li-ion zellen aus laptop akkus
mit einem thermistor als akkupack zusammengesetzt

Die restlichen Probleme des Roboters waren rein mechanisch, nach zerlegen & reinigen des Getriebes an den Bürsten schien alles wieder zu funktionieren.

Serielle Steuerung

Die Geräte der 500er-Serie wurden abseits von ihrer Funktion als Staubsauger auch als “low-cost robotics platform” vermarktet und verfügen unter der Abdeckung über einen seriellen Port. Die Spezifikation für die Kommuikation wurde vom Hersteller als “Roomba 500 Open Interface (OI) Specification” veröffentlicht.

Nach etwas wühlen in der Restekiste fand sich ein Anschlusskabel einer alten Grafikkarte, welches zwar nicht über alle korrekten Pins verfügte, aber immerhin über die relevanten. Das zusammengebastelte Kabel wurde dann mittels eines Adapters (CP2102 USB-TTL) an USB angeschlossen und zeigte erste Lebenszeichen.

stecker kabel bootup message

Daten an den Roboter senden stellte sich als schwieriger heraus, anfangs konnte ich ihm keine Rückmeldung entlocken. Nach diversen Versuchen mit anderen Kabeln, Level Shifter, etc. lag das Problem aber schlussendlich an den serial interface tools - keines der Programme (screen, tio) scheint in der Lage raw serial zu sprechen. Nachdem ich auf die python shell wechselte und meine Befehle als Bytearrays schrieb, reagierte der Roboter.

import serial
# open serial port
ser = serial.Serial("/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0", 115200) # open serial port
# beep
ser.write(bytearray([128, 132, 140, 0, 1, 62, 32, 141, 0]))
# print acab
ser.write(bytearray([128, 132, 164, 65, 67, 65, 66]))
# poweroff
ser.write(bytearray([133]))

Motorsteuerung

Laut der Spezifikation lassen sich alle Motoren außer dem Gebläse drehzahlregeln. Ich hatte gehofft, dass ich evtl. auch mit dem Bürstenmotor klangliche Effekte erzielen könnte, leider war die Drehzahlregelung (wenn sie denn überhaupt vorhanden war) so minimal, dass eigentlich kein Unterschied hörbar war.

Ich hatte anfangs geplant die Ansteuerung des Gebläsemotors auch über den originalen Controller vorzunehmen und deswegen den Roboter komplett zerlegt, um die Verschaltung nachvollziehen zu können.

mainboard verbindung Gebläse

Als Backup-Lösung würde sich der integrierte Lautsprecher anbieten, dieser lässt sich mit einer MIDI-basierten Syntax ansprechen.

integrierter Lautsprecher
Tags: hardware