INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Modellierung eines Klatschschalters für die Arduino Plattform mit Zustandautomaten
06.10.2016, 08:31 (Dieser Beitrag wurde zuletzt bearbeitet: 06.10.2016 12:26 von TeDom.)
Beitrag #1
Modellierung eines Klatschschalters für die Arduino Plattform mit Zustandautomaten
In diesem Tutorial möchte ich zeigen wie man mit Hilfe von YAKINDU Statechart Tools eine einfache Lichtsteuerung ( LED Lichtband ) für einen Arduino entwirft. Das Hauptziel wird sein, das Lichtband durch doppeltes Klatschen ein- und auszuschalten. Dafür werde ich zunächst eine codebasierte Lösung vorstellen und danach zum Vergleich eine modelbasierte mithilfe eines endlichen Automaten. Aus dem Zustandsautomaten wird Programmcode generiert, der mit minimalem Aufwand auf einen Arduino geladen werden kann.

[Bild: jgk26v.jpg]

Die Klatschsteuerung

Die Idee ist, dass bei zweimaligem in die Hände Klatschen das Licht angeht und bei erneutem Doppelklatschen wieder ausgeht. Um eine solche Logik umsetzten zu können, muss man zunächst herausfinden, wie lange ein Klatschvorgang dauert. Das Ergebnis meiner Recherche und Experimente ist, dass ein Klatschgeräusch etwa 17 ms andauert und zwischen dem ersten und zweitem Klatschen zwischen 150 ms und 300 ms liegen. Spätestens nach 300 ms muss sich der Schalter wieder zurücksetzen wenn kein zweites Klatschen festgestellt wird. Natürlich sind das alles rein subjektive Werte. Der fertige Code sieht dann wie folgt aus (Anregung dafür bat mir die Seite code-bude.net).

[Bild: 1fzrmb.jpg]

Der fertige Code besteht aus mehreren geschachtelten if-Bedingungen. Natürlich lässt sich dieselbe Logik eleganter ausdrücken. Das Beispiel zeigt aber eine plausible Lösung, die man so ähnlich wahrscheinlich auch selber in einem ersten Schritt implementieren würde.
Aber wie lange brauchen Sie, um den Code zu verstehen?

Und nun zum Vergleich eine grafische Lösung mittels eines Zustandsautomaten, der dieselbe Logik definiert.

[Bild: s1jg1x.png]

Die Idee, die hinter dem Klatschschalter steckt, lässt sich hier gut erkennen. Zum Anfang befindet man sich im Zustand “WaitForClapOne”. Hier wartet man bis der Geräuschsensor 1 (HIGH) meldet, also wenn ein Klatschen erkannt wurde. Dadurch springt man in den Zustand “OneClapDetected”. Nach 150 ms Pause wird auf das zweite Klatschen gewartet (“WaitForClapTwo”). Sollte der Sensor nach 300 ms kein Klatschen erkennen, welchselt der Zustandsautomat wieder in den Zustand “WaitForClapOne” und wartet. Klatscht man aber innerhalb der 300 ms, wechselt der Zustand zu “TwoClapDetected”, wo entschieden wird ob das Licht ein oder ausgeschaltet werden soll. Im Anschluss geht es wieder zurück zum Anfangszustand “WaitForClapOne” und das Spiel fängt von vorne an.

Der Nachteil einer solchen Lösung ist in erster Linie der Aufwand, den man investieren muss um so ein grafisches Model zu erstellen. Doch erfahrungsgemäß wird die meiste Zeit der Software-Entwicklung für das Debuggen verbraucht. Und hier spielt Lesbarkeit eine entscheidende Rolle. Grafische Modelle, wie Zustandsautomaten, können dabei enorm hilfreich sein. Benutzt man ein entsprechendes Tool, wie in diesem Fall die YAKINDU Statechart Tools mit einer zusätzlichen Arduino Erweiterung, so lässt sich direkt aus dem Zustandsdiagram Programmcode generieren. Dieser Code muss nur noch einmal initial mit dem Arduino verbunden werden. In unserem Beispiel ist es lediglich das Weiterleiten des Geräuschsensorwertes an den Zustandsautomat:


Die YAKINDU Statechart Tools bieten zusätzlich auch die Möglichkeit den modellierten Zustandsautomat direkt zu simulieren ohne den Programmcode auf die Hardware (hier den Arduino) laden zu müssen. So lassen sich Fehler bei der Modellierung schneller erkennen.

Fazit

Die YAKINDU Statechart Tools habe ich im Rahmen meiner Studententätigkeit bei der itemis AG kennengelernt. Die Software hat mir die Programmierung meiner Arduino Platine erheblich vereinfacht. Komplex und ineinander verschachtelte Code-Absätze lassen sich oftmals schnell und unkompliziert in Form von endlichen Automaten darstellen, wie in unserem Beispiel zu sehen, und sind somit auch leichter nachvollziebar. Mit am besten hat mir die Option gefallen Zustandsautomaten im Tool selbst zu simulieren. Dadurch konnte ich immer wieder prüfen ob alles so funktioniert wie ich es mir vorstelle und auch anderen Schritt für Schritt zeigen wie meine Klatschsteuerung funktioniert.


So wird’s gemacht

Für alle Bastler unter uns, die dieselbe Klatschsteuerung nachbauen wollen, gibt es hier die Schritt-für-Schritt Anleitung:

1. Hardware
Wir benötigen für den Aufbau folgende Hardware, die mit dem Arduino Basispaket mitgeliefert wird:
4x 10k Widerstände
2x 220 Widerstände
3x MOSFET
4x Knöpfe
1x rote LED
1x blaue LED
1x LED-Band
1x Potentiometer
1x Geräusch Sensor
1x 12V Spannungsquelle
1x Arduino Uno

Wenn man alle Teile beisammen hat verbindet man die Komponenten, wie auf
dem Fritzing Diagramm zu sehen, zusammen. Natürlich kann man die Pins auf dem Arduino anderes belegen aber im folgendem Code wurden sie wie zu sehen
übernommen.

[Bild: 6jn634.jpg]

2. Software

Nach dem die Hardware nun fertig zusammen gesteckt ist muss man sich Gedanken
machen, womit man seinen Code schreibt. Ich habe mich für YAKINDU Statechart Tools entschieden mit einem integrierten Arduino Tool. Dafür muss man sich zuerst YAKINDU Statechart Tools herunterladen. Das Tool ist kostenlos und basiert auf Eclipse. Dadurch ist es möglich weitere Funktionen dazu zu installieren. In unserem Fall müssen wir noch eine Arduino Erweiterung installieren um direkt aus den Zustandsdiagrammen Arduino-kompatiblen Code generieren zu können. Der Installationsprozess dafür ist hier genau beschrieben.

[Bild: s2bm2a.jpg]

Zunächst muss man ein Projekt anlegen. Wie das geht, ist hier genau beschrieben.

Nachdem man das Projekt angelegt hat, öffnet sich die Statechart Model View. Hier entsteht nun der Automat. Fertig sollte es dann wie folgt aussehen.

[Bild: 2agq2kh.png]

Bei jedem Speichervorgang des Zustandsautomaten wird im Hintergrund C Code generiert, der die Funktion des Automaten abbildet. Allerdings müssen wir diesen Code noch anpassen, um die Kommunikation mit dem Arduino herzustellen. Das passiert in der Datei src/Clap_lightswitchConnector.cpp. Hier gibt es im Wesentlichen zwei wichtige Methoden: init() und runcycle():

In der init() Methode definieren wir welche Hardware Pins als Input oder Output dienen.
Die runcycle() Methode wird bei jedem Ausführungszyklus des Zustandsautomaten ausgeführt. Hier können wir Werte des Zustandsautomaten abfragen und an die Hardware senden, oder umgekehrt. Zum einen müssen wir das Licht einschalten wenn die entsprechenden Werte vom Zustandsautomat gesetzt werden. Zum anderen müssen wir den Wert des Geräuschsensors an den Zustandsautomat weiterleiten.

Der fertige Programmcode sieht dann wie folgt aus:

[Bild: iylod2.jpg]

Zum Schluss muss man den Code einmal bauen. Dazu klickt man auf den kleinen Hammer oben links im Fenster. In der Console kann man verfolgen, wie das Projekt Schritt für Schritt gebaut wird. Nachdem der Vorgang abgeschlossen ist, klickt man auf den Knopf, auch oben links, mit dem grünen Punkt und weißem Pfeil in der Mitte.

[Bild: 250nyhs.png]

Nun wird das Projekt auf den Arduino geflasht. Die Console gibt Bescheid wenn der Flash-Vorgang beendet ist. Fertig ist euer Klatschschalter.
Und nun viel Spass beim Ausprobieren und Nachbauen!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste