Zum Hauptinhalt Zur Navigation

Tinkerforge im Test: Elektronik zum Stapeln

Tinkerforge bietet kleine Bausteine aus Open-Source-Hardware an, die sich leicht programmieren lassen. Mit der Mischung aus Lego Mindstorm und Arduino lassen sich beliebige Geräte bauen und erweitern, vom Roboter bis zur Heimautomation. Golem.de hat mit Tinkerforge gespielt.
/ Alexander Merz
23 Kommentare News folgen (öffnet im neuen Fenster)
Zwei drahtlos verbundene Brick-Stapel mit Motor und Batterie (Bild: Tinkerforge)
Zwei drahtlos verbundene Brick-Stapel mit Motor und Batterie Bild: Tinkerforge

Das Baukastensystem von Tinkerforge füllt für Entwickler die Lücke zwischen Lego Mindstorm(öffnet im neuen Fenster) und der Arduino(öffnet im neuen Fenster) -Plattform: Die Bausteine sind vorkonfektioniert, einfach zu verbinden und lassen sich abstrakt ansprechen wie bei Lego Mindstorm, die Ausbau- und Anwendungsfähigkeit entspricht aber weitgehend den Möglichkeiten von Arduino. In einer Hinsicht unterscheidet sich das Tinkerforge(öffnet im neuen Fenster) -System aber deutlich von beiden, denn aktuell ist für die Ausführung von Steuerprogrammen ein PC erforderlich, ein autarker Betrieb ist nicht möglich.

Tinkerforge - Test
Tinkerforge - Test (03:49)

Turm zu Babel

Das Tinkerforge-System besteht aus einzelnen Platinen, die über standardisierte Verbinder per Sockel oder mit Kabeln miteinander kombiniert werden. Tinkerforge unterscheidet zwischen Bricks, Bricklets und Extensions.

Bricks bilden die Basis einer Konstruktion: Sie stellen die Anschlüsse für weitere Elemente bereit und sorgen für die interne Kommunikation zwischen ihnen und den Kontakt mit dem PC per USB. Neben einem Master-Brick, der ausschließlich diese Funktion erfüllt, existieren weitere Bricks mit zusätzlicher Logik zum Beispiel für die Steuerung eines Schrittmotors oder Servos.

Diese Bricks können über Sockel aufeinandergestapelt werden. Die wesentliche Grenze für die Anzahl der gestapelten Bricks bildet der zur Verfügung stehende Strom. Wenn dieser nicht ausreicht, kann er durch einen externen Stromanschluss erhöht werden - der entsprechende Baustein hat ebenfalls die Form eines Bricks.

Bricklets sind Bausteine, auf denen sich Sensoren oder elektrische Ein- und Ausgänge befinden, es stehen aber auch verschiedene Bedienungselemente als Bricklet zur Verfügung. Ihre Größe ist nicht standardisiert und ihre Bauform unterscheidet sich, die Montagebohrungen folgen aber einem 5-mm-Raster.

Sie werden per Kabel mit einem Brick verbunden und sind damit einsatzfähig. Ein Brick enthält je zwei oder vier Buchsen zum Anschluss von Bricklets. Wenn diese Anzahl nicht ausreicht, können im Stack weitere Masterbricks und damit Anschlussbuchsen ergänzt werden.

Extensions sind ebenfalls Bauelemente in Brick-Form, die für eine transparente Kommunikation über Funk oder serielle Verbindung zwischen Bricks beziehungsweise Stacks sorgen.

Mechanische Belastbarkeit

Beanspruchend

Relevant für ein modulares System ist die mechanische Belastbarkeit der Bausteine: Die Leiterplatinen sind bemerkenswert dick (1,5 mm) und verwindungssteif, dazu sind sie mit Schutzlack überzogen, der auch kleine Kratzer verträgt. Die Verbindungssockel und Steckerbuchsen sitzen fest auf den Platinen und zeigten trotz des ständigen Neubaus von Stacks und Neuverkabelung keine Ermüdungserscheinungen.

Hardware-Baukasten Tinkerforge (Herstellervideo)
Hardware-Baukasten Tinkerforge (Herstellervideo) (04:11)

Eine Schrecksekunde gab es lediglich einmal beim Infrarotsensor: Er besteht aus zwei kleinen Platinen, die durch drei angelötete Kabel verbunden sind. Aus Versehen zogen wir an diesen Kabeln statt an der Platine. Aber das hatte keine Folgen - die Kabelenden sind satt verzinnt, eher dürften die Kabel selbst unter der Behandlung leiden als aus der Platine zu reißen.

Eine Schwachstelle in der Handhabung sind die Steckerbuchsen für die Verbindungskabel der Bricklets, allerdings vor allem bedingt durch ihre geringe Größe. Sie sind zwar prinzipiell verpolungssicher, aber leider ist die richtige Seite nur schwer zu erkennen. Dazu sitzen die Stecker sehr straff in den Buchsen, weshalb immer ein wenig Kraft zum Einstecken erforderlich ist. Dabei ist uns einmal das Missgeschick passiert, dass wir mit zu viel Kraft und dann auch noch zu schräg ansetzten, als ein Stecker eingesteckt werden sollte. Als Folge war ein Pin der Buchse verbogen und bei der geringen Größe der Buchse erforderte es einiges Geschick, den Pin wieder gerade zu biegen.

Von diesen Kleinigkeiten abgesehen, überstehen die Bausteine aber ohne Probleme einen harten Alltag und überleben auch einen Sturz vom Schreibtisch.

Programmierung

Ein erster Test der eigenen Konstruktion ist mit dem Brick Viewer -Programm auch ohne Programmierung möglich: Es zeigt für jeden angeschlossenen Baustein ein Bedienungsfenster mit den aktuell gelieferten Daten und erlaubt das Setzen von Parametern.

Für das eigene Programm oder Steuerskript muss sich ein Programmierer nicht mit den technischen Details einer Brick-Konstruktion auseinandersetzen, die Abstraktion übernehmen die Bauelemente selbst. Um die Kommunikation per USB kümmert sich der Brickv -Daemon (Linux/Mac) beziehungsweise ein -Dienst unter Windows, der eine Schnittstelle über eine Socketverbindung bereitstellt. Selbst über diese Socketverbindung muss sich ein Programmierer keine Gedanken machen, wenn eines der fertigen APIs für PHP, Python, Java, C oder C# zum Einsatz kommt.

Zum Pflichtpart eines Programms gehören die Verbindungsaufnahme mit dem Socket und die Angabe, welche Bausteine verwendet werden sollen, teilweise ist es sinnvoll, für einige Elemente Konfigurationswerte zu setzen. Für die jeweiligen Bausteine stehen dann spezifische, unkomplizierte Methoden zur Verfügung, um Werte auszulesen beziehungsweise zu setzen, zum Beispiel: getTemperature() für den Temperatursensor oder write_line() für das LCD-Display.

Sensoren und Bedienungselemente müssen nicht selbst per Polling abgefragt werden, stattdessen können Listener definiert werden, die bei Zustandsänderungen aufgerufen werden.

Die erhaltenen oder zu setzenden Werte bei den Sensoren und Bedienungselementen sind so weit abstrahiert, dass mit gewohnten Einheiten operiert werden kann: Die Temperatur ist in Grad Celsius, die Helligkeit in Lux angegeben, das Display erwartet einen String und so weiter. Es ist also in den meisten Fällen nicht notwendig, elektrische Messwerte einem Wertebereich zuzuordnen. Auch Zeiteinheiten werden zumeist in Sekunden angegeben und nicht in Vielfachen von Takten.

Das bedeutet aber nicht, dass die Werte in irgendeiner Form geglättet wären oder zu abstrakt werden. Schmerzlich bemerkbar macht sich das beim IMU-Brick zur Positions- und Bewegungsbestimmung - wer ihn nutzen will, tut gut daran, sich wieder an die Mathematikvorlesungen aus Unizeiten zu erinnern.

Drahtlose Übertragung und Fazit

Funken

Zu den interessantesten Bausteinen gehört die Chibi-Extension: Es handelt sich um ein intelligentes Funkmodul, das die Kommunikation zwischen zwei oder mehreren Stacks transparent abwickelt. Es arbeitet auf Basis des Zigbee(öffnet im neuen Fenster) -Standards. Zuerst ist dafür eine Chibi-Erweiterung per USB am PC als Master zu konfigurieren und alle weiteren als Slave. Die Master-Einheit verbleibt am PC. Mit der Slave-Erweiterung werden die übrigen notwendigen Bauelemente verbunden. Damit sind auch schon alle Schritte abgeschlossen, denn Einfluss auf die Programmierung hat es nicht.

Die Reichweite geben die Macher mit bis zu 2 Kilometern reine Luftlinie an, in unserem Büro blieb die Verbindung durch Trockenbauwände erhalten. Der ungewöhnlichste Test war die Platzierung in einem Kühlschrank, selbst im Eisfach blieb die Funkverbindung bei -22 Grad stabil.

Als wir den magnetfeldempfindlichen IMU-Brick zusammen mit der Chibi-Extension auf ein RC-Modellauto (2.4 Ghz Funkfrequenz) packten, verliefen der Betrieb und die Datenauswertung ebenfalls störungsfrei.

Fazit

Eine uneingeschränkte Empfehlung gilt für jeden, der sich schon immer in die Welt der Mess-, Steuerungs- und Automatisierungstechnik stürzen wollte - einen eigenen Roboter zu bauen oder ein selbststeuerndes RC-Fahrzeug erfordert mit dem Tinkerforge-Baukasten keine Löt- und Elektrotechnikkenntnisse mehr, sondern wird zur reinen Programmieraufgabe.

Als Lernsystem für Jugendliche bietet sich Tinkerforge genauso an wie für den Einsatz in Universitäten bei Konstruktions- und Experimentalaufbauten.

Dass alle Bestandteile des Baukastens - Platinenentwürfe, Firmware und Softwarebibliotheken - Open Source sind, lässt dazu viel Raum zum Spielen und Hacken.

Wer hingegen bereits problemlos mit Arduino-Systemen arbeitet, muss abwägen. Dann stellt das Tinkerforge-System nur einen Vorteil dar, wenn die Programmlogik sowieso einen PC erfordert oder Rapid-Prototyping-Aspekte im Vordergrund stehen.

Ein Beispielprogramm

  1. # Anzeige ungelesener Emails über das
  2. # Tinkerforge LCD
  3.  
  4. from tinkerforge.ip_connection import IPConnection
  5. from tinkerforge.bricklet_lcd_16x2 import LCD16x2
  6. from time import sleep
  7. import threading
  8. import imaplib
  9.  
  10. class CheckThread(threading.Thread):
  11.     def __init__(self, mailbox, display):
  12.         threading.Thread.__init__(self)
  13.         self.mailbox = mailbox
  14.         self.display = display
  15.  
  16.     def run(self):
  17.         while(1):
  18.             self.poll()
  19.             sleep(10)
  20.  
  21.     def poll(self):
  22.         mails = checkMail(self.mailbox)
  23.         self.display.write_line(0, 0, 'Ungelesene Mails')
  24.         self.display.write_line(1, 0, str(mails))
  25.  
  26. def mailConnect():
  27.     mailbox = imaplib.IMAP4_SSL('imap.example.com', 993)
  28.     mailbox.login('email@example.com', 'geheim')
  29.     mailbox.select("INBOX")
  30.  
  31.     return mailbox;
  32.  
  33. def checkMail(mailbox):
  34.     list = mailbox.search(None, 'UNSEEN')[1][0]
  35.  
  36.     if '' == list:
  37.         return 0
  38.  
  39.     mails = len(list.split(' '))
  40.  
  41.     if mails:
  42.         return mails
  43.     else:
  44.         return 0
  45.  
  46. if __name__ == "__main__":
  47.  
  48.     ipcon = IPConnection("localhost", 4223)  # Verbindung zum Daemon herstellen
  49.     lcd = LCD16x2("71U")
  50.     ipcon.add_device(lcd)
  51.  
  52.     lcd.backlight_on() # LCD konfigurieren
  53.     lcd.set_config(0, 0)
  54.     lcd.clear_display()
  55.  
  56.     mailbox = mailConnect() # Mit Postfach verbinden
  57.  
  58.     thread = CheckThread(mailbox, lcd)
  59.     thread.start() # Thread zur Abfrage des Postfaches starten
  60.  
  61.     raw_input("Enter zum Beenden drücken")
  62.  
  63.     mailbox.close() # Aufräumen
  64.     mailbox.logout()
  65.  
  66.     lcd.backlight_off()
  67.  
  68.     ipcon.destroy()

Relevante Themen