Aus Raspberry Pi Geek 02/2019

Mit dem Ftduino-Modul Fischertechnik steuern (Seite 2)

Kopplungsmanöver

Es gibt mehrere Möglichkeiten, den RasPi mit dem Ftduino zu koppeln. Eine davon bietet eine Python-Bibliothek, die Sie im Netz finden [9]. Daneben existiert ein WebUSB-Server, den die Webseite des Ftduino-Projekts ausführlich beschreibt. Zu guter Letzt lässt sich der Ftduino über die I2C-Schnittstelle ansprechen (siehe Kasten “I2C”).

I<+>2<+>C

Der serielle Datenbus I2C (ausgesprochen: I-Quadrat-C) dient zur Kommunikation über kurze Distanzen innerhalb von Platinen oder Geräten. Das Übertragen der Daten erfolgt synchron über eine Daten- (SDA) und eine Taktleitung (SCL). Pullup-Widerstände ziehen beide auf ein positives Potenzial.

Eine Kommunikation geht immer vom Bus-Master aus. Der Bus verfügt über einen 7-Bit-Adressbereich, das entspricht 128 Teilnehmern. 16 bereits reservierte Adressen fallen weg, es verbleiben 112 freie Adressen. Üblicherweise dürfen Sie nur die unteren drei Bits der Adressen an den Clients frei wählen, die oberen Bits sind fest verdrahtet. Die möglichen Adressen für einen Baustein entnehmen Sie dem Datenblatt.

Der Bus überträgt die Daten byte- oder wortweise mit einer Geschwindigkeit zwischen 100 kbit/s bidirektional (Standard-Mode) und 5 Mbit/s unidirektional (Ultra-Fast-Mode). Es gibt verschiedene Möglichkeiten, die Reichweite des Busses zu erhöhen, vom Verringern der Pullup-Widerstände bis zum Tunneln durch den CAN-Bus-Treiber.

Als I2C-Fan hat sich der Autor für die dritte Möglichkeit entschieden. Der Einsatz dieser Schnittstelle hat den Charme, dass Sie die Programmiersprache frei wählen dürfen. Als Basis für die folgenden Experimente kam die Umgebung zum Einsatz, die in Teil 18 der I2C-Serie in diesem Heft als Grundlage diente.

Die I2C-Schnittstelle des RasPi arbeitet mit einer Betriebsspannung von 3,3 Volt. Das entsprechende Interface des Ftduino verwendet allerdings 5 Volt. Um den Mini-PC nicht zu beschädigen, müssen Sie beide Schnittstellen über einen sogenannten Level-Shifter [10] verbinden. Der Schaltplan in Abbildung 5 zeigt, wie Sie ihn anschließen.

Abbildung 5: Koppeln Sie Ftduino und RasPi via I<sup>2</sup>C, gilt es zu beachten, dass beide mit unterschiedlichen Spannungen arbeiten.

Abbildung 5: Koppeln Sie Ftduino und RasPi via I2C, gilt es zu beachten, dass beide mit unterschiedlichen Spannungen arbeiten.

Haben Sie beide Geräte verbunden, laden Sie als Nächstes die Software zur I2C-Kommunikation in den Ftduino. Den dafür nötigen I2cSlave finden Sie in den Beispieldateien für das Ftduino-Modul der Arduino IDE unter Datei | Beispiele | Ftduino | I2C | I2cSlave. Das Hochladen funktioniert wie bereits beschrieben.

Nun steht ein erster Test an. Dazu verwenden Sie den Befehl i2cdetect, der alle Teilnehmer am Bus findet. Wie Sie in Listing 2 sehen, meldet sich das Modul unter der hexadezimalen Adresse 0x2bh. Die 0x2b entspricht der Dezimalzahl 43. Diese findet sich im I2cSlave-Programm an der Stelle wieder, wo es die Verbindung initialisiert (Wire.begin(43);).

Listing 2

$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- 2b -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Möchten Sie mehrere Ftduino-Module über den Bus ansteuern, geben Sie diesen einfach unterschiedliche Adressen und schließen Sie sie dann an denselben Bus an.

I2cSlave verfügt intern über Register, die alle Funktionen des Moduls steuern. Eine Übersicht dazu finden Sie in der Anleitung [2] im Kapitel 5.13.5. Die Kommandos in den ersten beiden Zeilen von Listing 3 schalten den Ausgang O1 mit einem PWM-Signal von 100 Prozent an (siehe Kasten “PWM”). Möchten Sie weniger Leistung übertragen, geben Sie statt 0xff einfach ein anderes Puls-Pausenverhältnis an. Die nächsten zwei Zeilen schalten das PWM-Signal wieder aus, besser gesagt: Sie trennen den digitalen Ausgang komplett ab. Dadurch erlischt die Test-LED.

Listing 3

$ i2cset  -y 1 0x2b 0x00 0x01
$ i2cset  -y 1 0x2b 0x01 0xff
$ i2cset  -y 1 0x2b 0x00 0x02
$ i2cset  -y 1 0x2b 0x01 0xff

PWM

PWM steht als Kürzel für Pulsweitenmodulation. Bei diesem Verfahren erzeugt ein Generator ein Rechtecksignal mit konstanter Frequenz, bei dem nur das Verhältnis zwischen Puls- und Pausenzeiten variiert. Mittels dieses Verfahrens lässt sich die an einem Verbraucher ankommende Leistung genau einstellen. Der Grund ist recht einfach zu erklären: Eine Transistor-Endstufe erzeugt in gesperrtem und vollständig leitendem Zustand kaum Verlustleistung, wandelt also keine überschüssige Energie in Abwärme um. Stellen Sie einen Arbeitspunkt ein, der einer bestimmten Leistung entspricht, würde das Element im ungünstigsten Fall fast die Maximalleistung aus Verlustleistung produzieren – alte Netzteile mit linearer Regelung arbeiten auf diese Weise. Moderne Schaltnetzteile verwenden PWM oder ein ähnliches Verfahren und kommen so auf einen Wirkungsgrad von über 90 Prozent. Oft wird am Ausgang einer PWM-Stufe ein Tiefpassfilter installiert, um wieder eine saubere Gleichspannung zu erhalten. Auch bei Servomotoren kommt PWM zum Einsatz: Dort entspricht das Verhältnis zwischen Puls und Pause dem Winkel, den der Servo annimmt.

Als abschließendes Beispiel zeigt nun Listing 4, wie Sie den Ftduino mit ein wenig Shell-Magie so steuern, dass das einfache Lauflicht auf diesem Wege arbeitet. Der Code schaltet die Ausgänge O1 bis O8 nacheinander für je eine Sekunde an und wieder aus.

Listing 4

#!/bin/bash
for i in $(seq 0 2 0x0e); do
  i2cset -y 0x01 0x2b ${i} 0x01;
  let i+=1;
  i2cset -y 0x01 0x2b ${i} 0x80;
  sleep 1;
  i2cset -y 0x01 0x2b ${i} 0x00;
done

Fazit

Der Ftduino ist robust und fehlertolerant konzipiert – also genau das richtige Modul für den ambitionierten RasPi-Bastler, der gerne seine Fischertechnik-Modelle automatisieren möchte. Es arbeitet als Standalone-Hardware mit einem eigenen Programm in C. Alternativ steuern Sie es von außen über die I2C-Schnittstelle, etwa mit einem RasPi. Mit der guten Dokumentation und der Vielzahl an Beispielen fällt es leicht, nach kurzer Zeit eigene Programme für Fischertechnik-Modelle zu schreiben. Auch für die Aus- und Weiterbildung eignet sich das Modul perfekt. 

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben