NodeMCU (ESP8266) / Arduino – Ampel (Ampelsteuerung)

Mit einer Freundin hatte ich eine Wette abgeschlossen – der Gewinner bekommt eine Pizza im Lieblingsrestaurant der Wahl. Die Spielregeln sind einfach: Wenn die Freundin es schafft, die Anforderungen (Programmierung) umzusetzen, bezahle ich – sonst sie (was ich weniger hoffe). Das folgende Code-Beispiel (für Arduino oder NodeMCU / ESP8266) steuert eine LED-Ampel und kann für weitere Programmierungen genutzt werden.

Die fertige NodeMCU (ESP8266) / Arduino Ampel in Aktion

Das Video zeigt die funktionierende Ampel, gesteuert von einem NodeMCU (ESP8266). Natürlich funktioniert auch die Ampel mit einem Arduino.

Der Code für die Ampel

Die Programmierung

Der Code für die Ampel ist sehr einfach gehalten, hierbei gibt es einige Nachteile – zum Beispiel kann das Ampelprogramm im laufenden Zustand nicht geändert werden oder das gelbe „Blinklicht“ kann beispielsweise nicht genutzt werden.

Grundsätzlich ist eine Ampel eine Lichtsignalanlage oder Lichtzeichenanlage und per Gesetz (§37 Straßenverkehrs-Ordnung) wird die Reihenfolge und der Ablauf der Lichtfolge geregelt. Die Farbfolge ist Grün – Gelb – Rot – Rot und Gelb (gleichzeitig) – für Kinder natürlich Rot – Gelb – Grün ;)

Die Funktion phase() ist zwei Mal im Quellcode ( phase(int farbe) und phase(int farbe, int farbe2)) vorhanden. Im Fachjargon wird dies Funktionsüberladung genannt – die Funktionsüberladung nutze ich hier für die Phase Rot und Gelb (gleichzeitig) aus.

In der Programmierung sollte auf die Verwendung von  delay() verzichtet werden. Beim delay() wird das Programm gestoppt und weitere Eingaben werden zu dieser Zeit nicht verarbeitet, dies kann zu großen Problemen führen. Statt einem Delay sollte zum Beispiel ein Zeitgeber (Millisekundenzähler) verwendet werden.

Hardware

Die kleine Ampel habe ich auf dem Marktplatz eBay erworben und mir aus China zuschicken lassen. Leider ist die Ausschussrate sehr hoch, so dass Ihr lieber drei oder mehr „Ampeln“ bestellen solltet. Die Ampel wird über Verbindungskabel direkt mit dem NodeMCU (ESP8266) / Arduino verbunden, weitere Widerstände sind nicht nötig.

Beim Arduino wird die Ampel auf die I/O IDE-Anschlüsse (GND, 13 – Rot, 12 – Gelb & 11 -Grün) gesteckt.

Die LED-Ampel ist auf dem Arduino-Board aufgesteckt.

Der Quellcode muss in den Zeilen 10 bis 12 angepasst werden.

Ampel im Selbstbau (Eigenbau)

Die Ausgangsspannungen des Arduino und NodeMCU (ESP8266) betragen 3,3 oder 5 Volt. Wenn ihr eine Ampel baut, würde ist es sinnvoll sein die Vorwiderstände (ca. 220 Ohm) für eine Spannung von 5 Volt zu berechnen – die Ampel könnt ihr so an einem Raspberry Pi ohne Probleme anschließen und mit Python programmieren.

Ausgang der Wette

Die Zeit für jene Wette ist abgelaufen, die Freundin hat es nicht geschafft die Ampel zu programmieren. Problem war die fehlende Zeit durch das Studium oder ihr Unwille. ;) Der Pizza-Abend steht noch aus…

Links und Wissenswertes