Ein autonomer Motivationsautomat für Entwickler

Motiviert auf Knopfdruck: Mit PiXtend und Raspberry Pi Automaten bauen
Keine Kommentare

Ein motiviertes Team ist die Basis für ein erfolgreiches Projekt – das ist für uns nichts Neues. Wie kann man ein Team aber zu dauerhaft hohen Leistungen anspornen? Die ein oder andere Süßigkeit hilft da doch bestimmt. Der Zucker hat eine zentrale Bedeutung im Gehirnstoffwechsel und Süßigkeiten mag eh jeder. Darum setzt unser autonomer Motivationsautomat genau da an.

Da die Selbstmotivation von Mitarbeitern eine Wissenschaft ist, die noch in den Kinderschuhen steckt, bauen wir den ersten Prototyp unseres Motivationsautomaten mit fischertechnik auf. Dabei kommt unter anderem der Bausatz fischertechnik PROFI Pneumatic Power zum Einsatz. Da wir davon ausgehen müssen, dass der Automat im Dauereinsatz arbeiten wird, wählen wir von Anfang an nur wartungsarme und betriebssichere Komponenten aus. Das war die Entscheidungsgrundlage dafür, alle beweglichen Teile des Automaten mit pneumatischen Komponenten aufzubauen. In Kasten „Pneumatik“ werden die Grundlagen dieser praxiserprobten Technik erörtert.

Da wir uns auf wissenschaftliches Neuland begeben und nicht genau abschätzen können, wie komplex die Steuerung des Automaten wird, wählen wir das PiXtend V2 -L- ePLC Pro dazu aus. Es verfügt über ausreichend Leistung, um auch komplexe Steueraufgaben leicht bewältigen zu können. Das PiXtend ist eine auf dem Raspberry Pi basierende Steuerplatine, die über industrieübliche Schalteigenschaften verfügt. Für weitere Informationen werfen Sie bitte einen Blick in den Kasten „PiXtend“.

Der typische Entwickler möchte zur Motivation nicht einfach beschenkt werden. Wir müssen dafür also eine kleine Hürde einbauen, die seinen Intellekt anspricht. Im ersten Schritt muss er Rechenaufgaben lösen, um an die Süßigkeiten zu kommen. Das ist keine zufällige Wahl: Es ist erwiesen, dass es die Konzentration verbessert, aber auch Denkblockaden löst, wenn man sich hin und wieder mit anderen Themen beschäftigt, um dann wieder am eigentlichen Problem zu arbeiten. Kopfrechnen ist also tatsächlich eine gute Ablenkung für einen Softwareentwickler, weil er es bei der täglichen Arbeit nie braucht. Mathematik und Algorithmen sind sein Tagesgeschäft, das Ausrechnen überlässt er üblicherweise der Maschine.

Der Automat muss in der Lage sein, große Mengen Süßigkeiten zu bevorraten. Daher verwenden wir als Süßigkeitenspeicher ein Fallmagazin. Es ist einfach aufzubauen, kann präzise gesteuert werden und ist mechanisch unanfällig gegen Störungen. Sollte die Kapazität des Magazins nicht ausreichend sein, kann man es leicht erweitern. Um den Automaten unabhängig von externer Pressluft betreiben zu können, verfügt er über einen eigenen Kompressor, der ihn mit Luft versorgt. Der Kompressor wird von einem kleinen Getriebemotor angetrieben (Abb. 1).

Abb. 1: Der Kompressor für den Motivationsautomaten

Abb. 1: Der Kompressor für den Motivationsautomaten

Um mit dem Anwender in Verbindung treten zu können, verwenden wir ein Display, das direkt an den Raspberry Pi angeschlossen wird. In Abbildung 2 ist der Prototyp des Motivationsautomaten zu sehen.

Abb. 2: Der Motivationsautomat mit allen seinen Komponenten

Abb. 2: Der Motivationsautomat mit allen seinen Komponenten

In Abbildung 3 ist zu sehen, wie die Pneumatikventile, der Zylinder und der Kompressor verbunden werden müssen. Es ist einfacher, den Aufbau zu fotografieren, als alle Schaltsymbole der Komponenten bekannt zu machen, um dann einen professionellen Pneumatikplan zu erstellen. Der Schaltplan für den Automaten würde auch sehr übersichtlich ausfallen, daher ist in Tabelle 1 beschrieben, welche Anschlüsse des PiXtend mit den einzelnen Komponenten verbunden werden müssen. Wir verwenden hierbei die Relaisausgänge des PiXtend. In unserem Beispiel haben die Ventile wie auch der Motor für den Kompressor eine Betriebsspannung von 6 Volt. Falls Sie andere Komponenten verwenden, achten Sie bitte darauf, sie mit der richtigen Betriebsspannung zu betreiben. Um die LEDs anzusteuern, verwenden wir die 5-Volt-Betriebsspannung des PiXtend, die wir über den Anschluss VCC0-3 einspeisen. Sie können den Automaten unter dem YouTube-Link in Aktion sehen.

Abb. 3: Pneumatikventile zur Ansteuerung des Zylinders im Fallmagazin

Abb. 3: Pneumatikventile zur Ansteuerung des Zylinders im Fallmagazin

PiXtend-Anschluss Komponente
Relay0 Kompressor
Relay1 Magnetventil einfahren
Relay2 Magnetventil ausfahren
DO0 LED grün
DO1 LED rot

Tabelle 1: PiXtend-Anschlüsse für die einzelnen Komponenten

Pneumatik

In der Pneumatik geht es darum, mit Hilfe von komprimierter Luft Aktoren zu bewegen. Aktoren können Pneumatikzylinder, Motoren oder auch pneumatisch angesteuerte Ventile sein. Mit Pneumatikzylindern kann man lineare Bewegungen erzeugen. Je nach Druck und Aufbau können pneumatische Zylinder überraschend hohe Kräfte erzeugen. Da pneumatische Bauelemente einfach und robust aufgebaut sind, können sie auch in rauen Betriebsumgebungen verwendet werden. Über den Luftstrom werden die pneumatischen Komponenten von innen mit Schmiermittel versorgt. Klingt eigentümlich, aber das Gerät dazu heißt Luftöler, er ist immer Bestandteil der Wartungseinheit. Die zweite Komponente, von der man glauben könnte, dass es sie gar nicht gibt, ist die Rückholfeder. Sie ist in „einfach wirkenden Zylindern“ verbaut, um den Zylinder in seine Ausgangsposition zurückzuholen. Auch viele Pneumatikventile haben eine Rückholfeder eingebaut, um sie in ihre Ausgangsschaltstellung zurückzubringen. Ein Kompressor erzeugt die Druckluft, die von den Aktoren verbraucht wird. Zum Zwischenspeichern der Druckluft werden sogenannte Windkessel verwendet. Nicht mehr benötigte Druckluft wird an die Umgebung abgegeben. Da das schlagartige Entweichen von Druckluft ein sehr lautes Knallen erzeugen kann, sind an den Austrittsstellen immer Schalldämpfer angebracht, die das Geräusch in ein leiseres Rauschen verwandeln. Es ist möglich, die Steuerung von Anlagen vollständig pneumatisch aufzubauen. Heute wird aber eher eine Mischung aus elektrischer Steuerung und pneumatischen Aktoren verwendet.

An dieser Stelle möchte ich die Erklärungen zu Pneumatik abschließen, sonst sprengen wir die Grenzen dieses Artikels. Nur ein Wort zum Schluss: Wenn Sie hin und wieder kleine Projekte aufbauen, bei denen Sie eine lineare Bewegung benötigen, sollten Sie sich intensiver mit dem Thema Pneumatik auseinandersetzen.

PiXtend

Das PiXtend V2 -L- ist ein professionelles Erweiterungsboard für den Raspberry Pi. Es verfügt über industriekompatible IO-Ports und viele zusätzliche Schnittstellen, die ein Raspberry Pi von Haus aus nicht hat. Beispielhaft zu nennen sind die analogen Ein- und Ausgänge, wie auch die Relaisausgänge mit einer sehr hohen Schaltleistung. Eine komplette Übersicht der Schnittstellen des PiXtend V2 -L- ist unten aufgeführt. Der PiXtend kann mit folgenden Produkten programmiert werden:

  • Die Linux-Tools sind einige Kommandozeilenprogramme, mit denen man die Funktionen des PiXtend aufrufen kann. Es ist damit möglich, einfache Unix-Skripte zu schreiben, die die Steuerung übernehmen.
  • FHEM ist eine weit verbreitete Hausautomationssoftware, die auf Linux basiert.
  • Die PiXtend Python Library stellt ein API bereit, mit dem man einfach auf die Schnittstellen des PiXtend zugreifen kann.
  • OpenPLC ist eine Open-Source-SPS-Software, die gerne von Hochschulen verwendet wird.
  • Node-RED ist ein IoT-Entwicklungswerkzeug, bei dem komplexe Abläufe in einem Web-Frontend einfach grafisch dargestellt werden können.
  • CODESYS ist eine IDE zur Erstellung von Programmen für Industriesteuerungen. Viele Hersteller von Steuerungen verwenden CODESYS. Das bedeutet, Sie lernen einmal den Umgang mit der Programmierumgebung und können dann für fast alle am Markt befindlichen Steuerungen Programme erstellen.

Das hier eingesetzte PiXtend-Board ist nur eine von vielen PiXtend-Varianten. Auf der Homepage des Herstellers können Sie Informationen zu den unterschiedlichen Typen bekommen. Da ist zum einen das PiXtend V1, das selbst zusammengelötet werden kann. Es kann sehr gut für die Aus- und Weiterbildung eingesetzt werden. Die V2-Varianten sind eher für den professionellen Einsatz in Anlagen gedacht.

chnittstellen des PiXtend V2 -L-:

  • 16 digitale Eingänge (3,3 V/5 V/12 V/24 V)
  • 12 digitale Ausgänge (max. 30 V, je 0,5 A)
  • 6 PWM-/Servo-Ausgänge (6x 16 Bit)
  • 4 Relais (max. 230 V, 6 A)
  • 4 Spannungseingänge (0–5 V/0–10 V), 2x Stromeingänge (0–20 mA)
  • 2 analoge Spannungsausgänge (0–10 V)
  • 4 GPIOs (5 V)
  • Serielle Schnittstelle: RS232, RS485 (CAN)
  • Echtzeituhr (Real Time Clock – RTC) mit Batteriepufferung
  • Unterstützung von bis zu vier DHT11-DHT22/AM2302-Sensoren (Temperatur und Luftfeuchtigkeit)
  • Onboard-Spannungsregler
  • Eingang: 12–24 V DC (max. 30 V)
  • Ausgang: 5 V DC/2,4 A (versorgt PiXtend V2 -L-, Raspberry Pi und angeschlossene USB-Geräte)
  • Retain-/Persistent-Speicher, 64 Bytes Flash EEPROM
  • Ausgelegt für die Raspberry-Pi-Modelle B+/2 B/3 B/3 B+
  • Zulassung: CE, RoHS

Software

Man kann das PiXtend-Board mit der Software von CODESYS programmieren. Neben einer mit der IEC-61131-3-Norm kompatiblen Programmierumgebung stellt CODESYS auch eine Visualisierungskomponente bereit, mit der es leicht möglich ist, Abläufe grafisch darzustellen. In unserem Projekt verwenden wir diese zur Darstellung und zur Eingabe von Werten. CODESYS unterstützt unterschiedliche Arten der Programmierung. Die wichtigsten sind:

  • FUP (Funktionsplan): Komponenten lassen sich wie logische Gatter aus der Digitaltechnik miteinander verbinden. So lassen sich Abläufe der Steuerung schnell zusammenklicken. Jeder, der schon einmal in der Schule oder im Studium die Grundlagen der Digitaltechnik kennen gelernt hat, kommt mit dieser Darstellung sehr gut zurecht.
  • KOP (Kontaktplan): Die Abläufe werden, wie in der Schütztechnik üblich, mit Öffnern und Schließern realisiert. Diese Darstellungsform wird von Personen aus dem Elektrohandwerk bevorzugt.
  • ST (Strukturierter Text): Eine Pascal-ähnliche Programmiersprache. Pascal wurde früher als Einsteigerprogrammiersprache verwendet, weil sie leicht zu erlernen war und nur über wenige Kommandos verfügte. Entwickler, die schon einmal für den Arduino entwickelt haben, werden viele Parallelen sehen. Hier ist darauf zu achten, dass eine SPS zyklisch arbeitet. Eine Endlosschleife (oder Programmcode, der zur Ausführung länger als einen Zyklus benötigt) würde die Steuerung anhalten lassen.

Für unseren Automaten verwenden wir die Programmiersprache ST (Strukturierter Text), da sich die Abläufe damit recht gut programmieren lassen. Eine Darstellung von Zahlen in FUP oder KOP ist zudem etwas unhandlich.

Allgemeines zur SPS

SPS ist die Abkürzung für den Begriff Speicherprogrammierbare Steuerung. Der Begriff beschreibt auch schon ziemlich genau, was diese Geräte machen. Sie werden in der Industrie und zur Hausautomation eingesetzt. Durch die IEC-61131-3-Norm ist schon ein Großteil des Funktionsumfangs definiert. Einige Hersteller bieten in ihren Geräten zusätzliche Funktionen mit an, aber im Großen und Ganzen kann man sich darauf verlassen, dass alle Geräte der IEC-Norm entsprechen.

Jede SPS arbeitet mit einer fest definierten Zykluszeit. Das heißt, die SPS garantiert, dass das in ihr laufende Programm innerhalb eines Zyklus einmal komplett ausgeführt wird. Sollte das nicht möglich sein, beendet sie definiert die Programmausführung. Das bedeutet, das eine SPS mit der Einschränkung der Zykluszeit echtzeitfähig ist. Bei Zykluszeiten von wenigen Millisekunden kann man für einen überwiegenden Teil der Anwendungen sagen, dass eine SPS echtzeitfähig ist. Mit FUP und KOP ist es fast unmöglich, die Zykluszeit zu überschreiten. Bei ST sieht das schon anders aus. Hier ist es möglich, Schleifen zu programmieren, die endlos laufen können.

ML Conference 2019

Deep learning advances for signal processing

with Oleksandr Honchar (Mawi Solutions)

Towards meaningful AI

with Imola Fodor (Electrolux)

Jede SPS liest zu Beginn ihres Zyklus alle Eingänge ein und speichert die Werte zwischen (Prozessabbild der Eingänge). Auch die Werte der Ausgänge befinden sich im Speicher. Sie werden am Ende des Zyklus auf die Ausgänge geschrieben. (Prozessabbild der Ausgänge). Das Programm arbeitet gar nicht direkt auf den Ein- und Ausgängen, sondern nur mit den in Speicher befindlichen Werten.

Man kann sicher noch Stunden über Industriesteuerungen erzählen, doch das soll es jetzt erst einmal gewesen sein.

Bedeutung von Amae

Der Begriff Amae wurde im Werk des japanischen Autors Takeo Doi aufgegriffen und geprägt. Er umschreibt den Wunsch nach Geborgenheit wie auch das Konzept der Abhängigkeit. Der Begriff stammt vom Verb „amaeru“ ab, das man mit „sich verwöhnen lassen“ übersetzen kann. Daher ist der Name so passend. Der Automat soll unsere Entwickler verwöhnen und ihnen das Gefühl von Geborgenheit geben. Eine sich dabei einstellende Abhängigkeit muss nicht schlecht für den Erfolg eines Softwareprojekts sein. Wenn Sie mehr über die Bedeutung des Begriffs Amae erfahren wollen, schauen Sie bei Wikipedia vorbei, dort werden die unterschiedlichen Aspekte detailliert erklärt.

Das Programm

Unser Programm ist in ST geschrieben. In ST können, wie in anderen Programmiersprachen, Variablen definiert werden. Eine Übersicht der verwendeten Variablen sehen Sie in Listing 1. Die Variablen können innerhalb eines Programms verwendet werden. Über eine Mapping-Tabelle können einzelne Variablen auch mit physikalischen Ausgängen des PiXtend verbunden werden. Die Verwendung der Mapping-Tabelle hat viele Vorteile. Zum einen können Verdrahtungsfehler per Software repariert werden, zum anderen ist es auch leicht möglich, ein Programm auf eine Steuerung eines anderen Herstellers zu portieren. Die Mapping-Tabelle unseres Programms ist in Abbildung 4 zu sehen. Kommen wir aber nun zurück zum Programm.

Abb. 4: Die Mapping-Tabelle unseres Programms

Abb. 4: Die Mapping-Tabelle unseres Programms

PROGRAM PLC_PRG
VAR
  xInit	: BOOL;	
  lock: BOOL := FALSE;
  sweets:BOOL;
  random_0: INT;
  random_1: INT :=0;
  random_2: INT :=0 ;
  total: INT;
  input: INT;

  button_reset: BOOL;
  button_check_result: BOOL;
  button_start: BOOL;

  relais_compressor: BOOL;
  relais_cylinder_in:BOOL;
  relais_cylinder_out:BOOL;	

  timer_1 :ton;
  timer_2 :ton;
  timer_3 :ton;
  
  red:BOOL := FALSE;
  green:BOOL := FALSE;

END_VAR

Die ersten vier Zeilen unseres Programms wurden automatisch bei der Erstellung des Projekts von der CODESYS-Programmierumgebung generiert. Sie sind nötig, damit das PiXTend mit der CODESYS-Software zusammenarbeitet. Das folgende IF fragt in jedem Zyklus den Zahlen erzeugen-Button ab. Beim Betätigen des Buttons wird lock auf true gesetzt. Das verhindert, dass mehr als eine Zufallszahl erstellt wird. Für unser Programm benötigen wir zwei Zufallszahlen. Zufall ist in der industriellen Steuerungstechnik eher unerwünscht, daher gibt es keine Standardfunktion dafür. Das ist aber kein Problem, wir können uns aus der Systemzeit einen Pseudozufallswert erzeugen. Das erreichen wir mit folgender Zeile im Programmcode:

ABS(DINT_TO_INT(TIME_TO_DINT(TIME())) MOD(100));

Leider wird unser Programm so schnell ausgeführt, dass wir für unsere zweite Zahl innerhalb eines Zyklus genau den gleichen Wert bekommen oder im besten Fall nur eine kleine Differenz zum ersten Wert haben. Daher verwenden wir als zweiten Wert eine Zufallszahl, die im vorherigen Zyklus generiert wurde. Die Summe der beiden Zufallszahlen wird in den Variablen total abgespeichert. Die nächste IF-Anweisung fragt den Reset-Button ab. Wird er gedrückt, werden alle Variablen auf die Initialwerte zurückgesetzt. Diese Funktion ist in der Testphase der Software sehr hilfreich, wird aber für den normalen Betrieb nicht benötigt, da sich alle Variablen immer in einem definierten Zustand befinden sollten.

Die nun folgende IF-Anweisung startet die Auswertung der Eingabe. Stimmt die eingegebene Zahl mit dem errechneten Wert überein, wird die Variable sweets auf true gesetzt und die grüne LED eingeschaltet. Stimmt die Eingabe mit der errechneten Zahl nicht überein, wird die rote LED aktiviert und sweets bleibt false (Listing 2).

IF NOT xInit THEN
  RPI_GPIO_OUT24   := TRUE;
xInit              := TRUE;
END_IF

IF button_start AND NOT(lock)  THEN 
    lock:=TRUE;
    random_1 := random_0; 
    random_2 := ABS(DINT_TO_INT(TIME_TO_DINT(TIME())) MOD(100));
    total := random_1 + random_2;
    END_IF;
IF button_reset  THEN
    lock:=FALSE;
    sweets:=FALSE;
    random_1:=0;
    random_2:=0;
    input:=0;
    red:=FALSE;
    green:=FALSE;
END_IF;
IF button_check_result THEN
    IF total=input THEN 
        sweets:=TRUE;
        green:=TRUE;
        red:=FALSE;
   ELSE
        red:=TRUE;
        green:=false;
        sweets:=FALSE;
    END_IF;
END_IF;

relais_compressor := sweets AND NOT timer_1.Q;
timer_1(IN:=sweets,PT:=T#4S);
relais_cylinder_out := timer_1.Q AND NOT timer_2.Q;
timer_2(IN:=timer_1.Q,PT:=T#2S);
relais_cylinder_in:=timer_2.Q AND NOT timer_3.Q;
timer_3(IN:=timer_2.Q,PT:=T#2S);
IF timer_3.Q THEN
    lock :=FALSE;
    sweets:=FALSE;
    random_1:=0;
    random_2:=0;
    input:=0;
    red:=FALSE;
    green:=FALSE;
END_IF;
random_0 := ABS(DINT_TO_INT(TIME_TO_DINT(TIME())) MOD(100));

Mit der Variable sweets wird ein kleiner zeitgesteuerter Ablauf in Gang gesetzt. Drei Timer steuern den Ablauf. Die Timer sind vom Typ TON, das bedeutet, dass sie die vorgegebene Zeit warten, bevor sie das Eingangssignal durchschalten. Das Eingangssignal wird an IN übergeben. Das Ausgangssignal kann von Q abgefragt werden. Die Timer lassen als Erstes den Kompressor für vier Sekunden laufen, dann wird der Zylinder ausgefahren. Der Zylinder bekommt zwei Sekunden Zeit, um seinen Weg zu bewältigen. Danach wird der Zylinder wieder eingefahren, auch dafür ist eine Zeit von zwei Sekunden vorgesehen. Am Ende des Ablaufs werden alle Variablen wieder auf die Initialwerte zurückgesetzt und der Ablauf kann von Neuem gestartet werden. Die letzte Zeile in dem Programm ist die eingangs schon angesprochene zweite Zufallszahl aus dem vorherigen Zyklus.

Visualisierung

Das Frontend unserer Anwendung wurde mit der Visualisierungskomponente der CODESYS-Software erstellt. Mit ihr können Anwender leicht eine beliebige Benutzeroberfläche erstellen, die dann im Webbrowser dargestellt werden kann. Es stehen sehr viele sogenannte Werkzeuge wie Schalter und Leuchten bereit, um das Frontend zu erstellen. Die einzelnen Werkzeuge können die Werte von Variablen verändern oder reagieren auf den Wert von Variablen. In Abbildung 5 sehen Sie das Frontend unserer Anwendung. Eine detaillierte Beschreibung, wie man mit CODESYS ein Web-Frontend erstellt, würde den Umfang des Artikels sprengen. Daher nur der Rat: Wenn Sie selbst ein Frontend erstellen möchten, sehen Sie sich ein Tutorial bei YouTube an. Hier werden die nötigen Schritte zur Erstellung einer Visualisierung anschaulich gezeigt.

Abb. 5: Die Visualisierung des Motivationsautomaten

Abb. 5: Die Visualisierung des Motivationsautomaten

Fazit

Der Aufbau des Automaten bietet dem Leser die Möglichkeit, eine ganze Menge über verschiedene Techniken zu lernen. Der Automat kann auch als Einleitung in unterschiedlich Bereiche der Automationstechnik dienen.

Um das Belohnungssystem etwas praxisnäher zu gestalten, könnte man die Belohnung mit einem erfolgreichen Unit Test oder einem Commit verbinden. Es wäre auch denkbar, die Entwickler anstelle von Rechenaufgaben einfache Fragen beantworten zu lassen. Der Kreativität sind da keine Grenzen gesetzt.
Beim Lesen der Einleitung ist Ihnen sicher nicht entgangen, dass unser „Motivationsautomat für den Entwickler“ mit einem Augenzwinkern zu sehen ist. Nichtsdestotrotz ist es in der Praxis eines Softwareentwicklers oft so, dass neben Kaffee auch Süßigkeiten eine große Rolle spielen. Und ich bin mir sicher, dass ein Entwicklerteam seine wahre Freude an einer solchen Hardware hätte. Ich wünsche Ihnen viel Spaß bei Ihrem eigenen Teammotivationsprojekt.

Entwickler Magazin

Entwickler Magazin abonnierenDieser Artikel ist im Entwickler Magazin erschienen.

Natürlich können Sie das Entwickler Magazin über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. In unserem Shop ist das Entwickler Magazin ferner im Abonnement oder als Einzelheft erhältlich.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu:
X
- Gib Deinen Standort ein -
- or -