Powered Up App Update 3.1 ergänzt Unterstützung für Fernbedienung und Power Functions

Durch das neue Update für die Powered Up App auf Version 3.1 wird Unterstützung für die Powered Up Fernbedienung und den Power Functions Modus vom Farb- und Abstandssensor hinzugefügt. Letzteres ist leider auf einem sehr niedrigen Level implementiert wodurch eine sehr umfangreiche Erklärung notwendig wird.

Die Fernbedienung nutzen

Kommen wir erst einmal zum einfacheren Punkt. Nun lässt sich die Powered Up Bluetooth Fernbedienung wie ein Hub über die App mit dem Smartphone/ Tablet verbinden. In der orangen Sensor-Kategorie gibt es am Ende einen Eingangs-Block mit dem Controller als Bild. Dort kann man den Anschluss/ Kanal (A oder B, so sind sie auch auf der Fernbedienung markiert) auswählen. Je nach gedrückter Taste wird ein Wert zurück gegeben.
Keine Taste: 0
+ Taste: 1
- Taste: -1
Rote Taste: 127
Die Fernbedienung wird als ganz normaler Hub gelistet. Dementsprechend kann gilt auch hier das Limit von maximal 4 Hubs, die mit der Software verbunden werden können.
Im folgenden gibt es ein Beispiel für die ganz normale "Bing-Bang" Steuerung mit der Fernbedienung (+ heißt volle Geschwindigkeit, - heißt volle Geschwindigkeit in die entgegengesetzte Richtung, keine Taste/ rot heißt Stopp).


Power Functions steuern

Jetzt beginnt der richtige Spaß. Wenn du keine Lust hast dich einzuarbeiten werde ich eine relativ einfache Lösung zeigen mit der man grundsätzlich alles machen kann. Eine detailiertere Erklärung steht dann weiter unten.
Zunächst müssen wir noch mal klären wie die Verbindung zwischen Powered Up und Power Functions genau funktioniert.
Der Farb- und Abstandssensor aus Lego Boost kann Infrarotsignale senden, die denen von Power Functions Infrarotfernbedingungen gleichen. Dadurch kann der Sensor quasi als Fernbedienung für Power Functions funktionieren. Man kann den Sensor übrigens auch einzeln im Lego Store oder im Lego Onlineshop bestellen.
Dieser Sensor muss dann an einen Boost, Control+ oder Powered Up Hub angeschlossen werden. Der Hub muss über die Powered Up App mit dem Smartphone oder dem Tablet verbunden werden.
Für jedes Programm, das den Sensor als Fernbedienung nutzen soll, muss der Sensor in den korrekten Modus gebracht werden. Dafür gibt es unter den lilafarbenen Blöcken am Ende einen Block mit dem Farb- und Abstandssensor, der 2 Eingänge hat. Bei dem ersten Eingang muss er Anschluss angegeben werden, an den der Sensor angeschlossen wurde. Der zweite Eingang muss auf "7" gestellt werden - das ist der Modus damit der Sensor im Power Functions Protokoll sendet.
Mit dem Block daneben, der 4 Eingänge hat und den Farbsensor mit einem roten Pfeil zeigt, kann man jetzt Power Functions Signale senden.

Eine einfache Methode

Wenn man sich nicht mit den Details des Power Functions Protokolls auseinandersetzen möchte genügt es im ersten Wert den Anschluss auszuwählen, an den der Farb- und Abstandssensor angeschlossen ist. Mit dem zweiten Wert kann man die Frequenz des Empfängers (die Zahl 0 entspricht dem 1. Kanal, die Zahl 1 dem 2. Kanal etc) auswählen. Durch den dritten Wert kann man angeben welcher der beiden Anschlüsse gesteuert werden soll: eine 4 steuert den linken Anschluss und eine 5 den rechten. Durch den dritten Wert kann man die Geschwindigkeit angeben. Hier steht 0 für auslaufen, 8 für hart stoppen, 1-7 schneller werdend für vorwärts und 9 bzw. A-F langsamer werdend für rückwärts.

Was wirklich passiert

Bevor wir zu der Erklärung kommen können was wirklich passiert ein paar Hintergrundinformationen dazu wie das Power Functions Protkoll funktioniert.
  • Nachricht: ich verwende den Begriff Nachricht für die Nutzdaten mit denen wir das gewollte Verhalten vom Motor angeben. Es geht nicht um die Kanalcodierung, also wie die Daten physisch übertragen/ empfangen werden.
  • Timeout: bei einem Timout stoppt der Empfänger kurz nachdem er kein Signal mehr erhalten hat die Motoren, ungefähr so wie bei der normalen Technic Power Functions Fernbedienung. Ohne Timeout stoppt der Empfänger die Motoren nicht ohne Stoppsignal. Dieses Verhalten hat die Power Functions Zug-Fernbedienung.
  • Nibble: Ein Nibble, auch Halbbyte, ist ein 4-Bit Äquivalent zu einem Byte, das aus 8 Bit besteht. Für diese 4 Bit gibt es 16 unterschiedliche Kombinationsmöglichkeiten. Diese werden binär mit 4 Werten die 0 oder 1 sind, Dezimal mit den Zahlen 0-16 oder Hexadezimal mit den Werten 0-9 und A-F dargestellt.
  • PWM: Pulsweitenmodulation bezeichnet eine Technik um mit digitaler Technologie kontinuierliche Signale erzeugen kann. In unserem Fall heißt das zum Beispiel, dass man die Geschwindigkeit eines Motors in mehreren Stufen steuern kann und nicht nur "Vollgas" und "Stopp". Bei Power Functions PWM Signalen gibt es 7 unterschiedliche Geschwindigkeitsstufen pro Richtung.
Es empfiehlt sich zumindest grob das Binäre, das Dezimale und das Hexadezimale System zu verstehen weil ich im folgenden dazwischen wechseln werde.

Wie eine Power Functions Nachricht aufgebaut ist

Power Functions Nachricht, dargestellt Bit. Quelle: Lego Power Functions RC Protokoll Version 1.20
Mit dem Block zum Senden von Power Functions Signalen können wir 3 Nibbles steuern: die drei, die hier dargestellt werden. Mit der Start-Bedingung, der Stop-Bedingung und der Prüfsumme (die L-Bit) werden wir uns nicht beschäftigen, da diese automatisch angefügt werden.
Die Buchstaben in den Nibbles stehen für jeweils einen binären Wert, sind also in der Realität entweder 0 oder 1.
Wenn du etwas nicht genau verstehst empfehle ich übrigens im Lego Power Functions RC Protokoll nachzulesen. Alle Informationen, die ich hier aufliste, stammen von dort.

Die Modi

Der aktuelle Power Functions IR Empfänger unterstützt 4 unterschiedliche Modi, die alle unterschiedliche Eigenschaften haben um den Motor zu steuern. Die Combo-Modi erlauben es im Gegensatz zu den anderen beiden mit einem Befehl beide Ausgänge des Infrarotempfängers gleichzeitig zu steuern.

Combo Direct Modus (hat Timeout)

Quelle: Lego Power Functions RC Protokoll Version 1.20
Ich denke dieser Modus ist der Einfachste. Er wird von der Lego Technic Power Functions Fernbedienung benutzt und kann beide Motoren gleichzeitig steuern. Allerdings nur Vollgas in beide Richtungen oder stoppen, kein PWM. Übrigens kann der Mindstorms EV3 IR Sensor auch Signale in diesem Modus empfangen.
Das Toggle-Bit wird soweit ich weiß in diesem Modus nicht genutzt und das Address-Bit unterstützen die aktuellen Empfänger nicht. Dementsprechend sind beide 0. Dadurch stehen die ersten beiden Nibbles fest. Das erste Nibble ist je nach Kanal des Empfängers 00, 01, 10 oder 11, also 0 bis 3 und das zweite Nibble ist 0001, also 1.
Beim letzten Nibble wird mit den 2 Bit "BB" der eine Motor und mit den 2 Bit "AA" der andere Motor gesteuert.
00: Motor Abschalten ohne zu bremsen
01: Vorwärts
10: Rückwärts
11: Bremse den Motor
Um zum Beispiel beide Motoren rückwärts fahren zu lassen wäre die Bitsequenz 10 10 nötig. In Hexadezimal wäre das A.
Damit ist die gesamte Nachricht um beide Motoren auf Kanal 1 rückwärts fahren zu lassen die Folgende: 0000 0001 1010 oder in Hexadezimal 0 1 A. Der Farbsensor sendet den Befehl immer wieder bis er einen neuen Befehl senden soll oder der Modus gewechselt wird.

Combo PWM Modus (hat Timeout)

Quelle: Lego Power Functions RC Protokoll Version 1.20

Dieser Modus ist auch noch relativ einfach. Das Address-Bit wird auch hier ignoriert. Im Gegensatz zu den anderen Modi ist das Escape-Bit 1 wodurch das erste Nibble je nach Power Functions Kanal von 0100 bis 0111, also von 4 bis 7 geht.
Nibble 2 und 3 funktionieren ziemlich gleich: beide geben mit 4 Bit die Geschwindigkeit für einen Motor an: Nibble 2 für den einen und Nibble 3 für den anderen. Es gibt die folgenden Einstellungen:
0000: Motor abschalten ohne zu bremsen
1000: Bremse den Motor
0001 bis 0111: Aufsteigende Geschwindigkeit vorwärts
1001 bis 1111: Absteigende Geschwindigkeit rückwärts
Um den einen Motor auf Kanal 4 vorwärts und den anderen rückwärts mit der Geschwindigkeit 6 zu drehen kann man also die folgende Nachricht senden: 0111 0110 1010. Das entspricht in Hexadezimal 7 6 A.

Single Output Modus (hat kein Timeout)

Quelle: Lego Power Functions RC Protokoll Version 1.20

Dieser Modus hat 2 Untermodi. Mit dem ersten Modus kann man einen Motor mit PWM ansteuern. Hier ist die Besonderheit, das es im Gegensatz zum Combo PWM Modus kein Timeout gibt. Dieser Modus wird von der Power Functions Zug-Fernbedienung genutzt.
Der zweite Modus erlaubt es, einzelne Pins im Power Functions Kabel zu setzen. Um mehr über den zweiten Modus zu erfahren empfehle ich das RC Protokoll zu lesen. Hier gehen wir davon aus, dass das M-Bit für den Modus immer 0 ist. Wenn das M-Bit 0 ist, dann wird laut Protokoll das Toggle-Bit T ignoriert. Das O-Bit (das letzte Bit im 2. Nibble) gibt an welcher Motor angesteuert werden soll.
Damit stehen die ersten beiden Nibbles schon fest. Nibble 1 ist 0000 bis 0011 bzw. 0 bis 3, abhängig vom Kanal. Nibble 2 ist 0100 bzw. 0101 also 4 bzw. 5 je nachdem ob der linke oder der rechte Ausgang vom Infrarotempfänger angesteuert werden soll. Dieser Modus wird übrigens unter dem Punkt "einfache Methode" verwendet. Die Daten-Bits sind wie beim Combo PWM Modus belegt.

Extended Modus

Um diesen Modus zu verstehen empfehle ich das RC Protokoll zu lesen. Ich denke dass er in der Praxis keinen größeren Anwendungsbereich hat.

Anwendungsbereiche

Auch wenn es grundsätzlich schon ziemlich cool ist das überhaupt zu können, so stellt sich doch die Frage nach den Anwendungsbereichen. In einem Fahrzeug lässt sich das normalerweise nicht nutzen, da diese Lösung viel Platz verbraucht und einiges an Gewicht hat.
Schon interessanter dürfte es für Zugliebhaber sein, die eine Reihe an Power Functions Zügen haben. So könnte man zum Beispiel in einem automatisierten Layout trotzdem die Power Functions Züge über die Powered Up App steuern.
Alternativ könnte man damit aus Powered Up eine Fernbedienung bauen, die Power Functions steuern kann. Das könnte für Kräne o.ä. interessant sein, die manchmal besondere Steuerungsschemata nutzen.
Ein weiteres Problem ist, dass dieser Block eigentlich auf einem niedrigeren Level funktioniert als die Anwendung gedacht ist. Schon für Kleinigkeiten wie Bitshifting, das man zum Beispiel im Combo Direct Modus gut gebrauchen könnte, muss man Workarounds finden. Ich hoffe, dass es für zumindest ein oder zwei Modi in der Zukunft noch einfachere Programmierblöcke geben wird.

Ein Beispiel

Abschließend habe ich es mir nicht nehmenlassen und ein Beispielprogramm geschrieben, das beide neue Funktionen nutzt. Man kann damit über die Powered Up Fernbedienung Power Functions steuern. Dabei gibt es die Optionen Vollgas vorwärts, Vollgas rückwärts und Stop (indem man nichts drückt). Die rote Stop-Taste auf der Fernbedienung zu drücken zerstört die Mathematik dahinter.

Wenn du trotzdem die Stop-Taste auf der Fernbedienung benutzen möchtest kannst du den eigenen Block durch die folgende Formel ersetzen. Ich empfehle allerdings die Ergebnisse zu runden, da es sonst zu Rundungsfehlern kommen könnte.

Kommentare