Arduino UNO Q - Ampelmodul
In diesem Tutorial erfahren Sie, wie Sie ein Ampelmodul mit Arduino UNO Q steuern. Wir werden mehrere Programmieransätze behandeln — von einer einfachen delay()-basierten Sequenz bis zu einer nicht-blockierenden millis()-Version — und dann das Projekt erweitern, um die Fernsteuerung der Lichtzeitdauern über Telegram zu ermöglichen.
In diesem Tutorial erfahren Sie:
- Wie Sie ein Ampelmodul mit Arduino UNO Q verdrahten
- Wie Sie den Arduino UNO Q MCU programmieren, um durch rotes, gelbes und grünes Licht zu wechseln
- Wie Sie einen millis()-basierten Ansatz für nicht-blockierende Ampelsteuerung verwenden
- Wie Sie die Lichtzeitdauern remote über Telegram anpassen

Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Über das Ampelmodul
Pinbelegung
Ein Ampelmodul hat 4 Pins:
- GND-Pin: Mit GND auf Arduino UNO Q verbinden
- R-Pin: Steuert das rote Licht — mit einem digitalen Ausgang verbinden
- Y-Pin: Steuert das gelbe Licht — mit einem digitalen Ausgang verbinden
- G-Pin: Steuert das grüne Licht — mit einem digitalen Ausgang verbinden

Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Wie man ein Ampelmodul programmiert
Legen Sie die Signalpins als digitale Ausgänge fest:
Aktivieren Sie das rote Licht:
MCU-Code — Ampelmodul (einfach)
Der Arduino UNO Q hat zwei Prozessoren: den STM32 MCU (verwaltet die Echtzeitkontrolle der Hardware) und die Qualcomm MPU (führt Debian Linux aus). In diesem Abschnitt wird nur der STM32 MCU programmiert — die Linux-Seite bleibt untätig. Ein späterer Abschnitt zeigt, wie beide Prozessoren zusammenarbeiten.
Dieses Beispiel wechselt mit delay() zwischen rot, gelb und grün:
Schnellschritte
- Erste Schritte mit Arduino UNO Q? Folgen Sie dem Leitfaden "Erste Schritte mit Arduino UNO Q", um Ihre Entwicklungsumgebung vorzubereiten, bevor Sie fortfahren.
- Verdrahten Sie das Modul: Verbinden Sie das Ampelmodul gemäß dem Schaltplan mit den Pins 2, 3 und 4.
- Verbinden Sie: Schließen Sie den Arduino UNO Q mit einem USB-C-Kabel an Ihren Computer an.
- Öffnen Sie Arduino App Lab: Starten Sie Arduino App Lab und warten Sie, bis es Ihren Arduino UNO Q erkennt.
- Erstellen Sie eine neue App: Klicken Sie auf die Schaltfläche Neue App erstellen.

- Geben Sie der App einen Namen, z. B.: DIYables_TrafficLight
- Klicken Sie auf Erstellen, um zu bestätigen.
- Sie sehen eine Reihe von Ordnern und Dateien, die in Ihrer neuen App generiert werden.

- Suchen Sie die Datei sketch/sketch.ino — hier werden Sie den MCU-Sketch einfügen.
- Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.

- Search for Arduino_RouterBridge created by Arduino and click the Install button.
- Hochladen: Klicken Sie in Arduino App Lab auf die Schaltfläche "Ausführen", um den Code zu kompilieren und auf den STM32 hochzuladen.

- Überprüfen Sie das Modul: Das Ampelmodul sollte folgende Abfolge zeigen: rot → gelb → grün → rot, sich wiederholend.
- Profi-Tipp: Die Timing-Werte der Ampel unterscheiden sich je nach Standort und Kreuzungsdesign. Passen Sie die Werte RED_TIME, YELLOW_TIME und GREEN_TIME an, um das gewünschte Verhalten zu erzielen.
MCU-Code — Reinere Version mit einer Funktion
Die Verwendung einer Hilfsfunktion macht den Code kürzer und leichter zu verwalten:
- Profi-Tipp: Die Funktion trafic_light_on(int light) schaltet genau ein Licht ein und schaltet die anderen aus — sauber und wiederverwendbar.
MCU-Code — Nicht-blockierende Version mit millis()
Die Funktion delay() blockiert den gesamten anderen Code während des Wartens. Für responsive Programme (z. B. Knöpfe oder Sensoren lesen, während die Ampel läuft), verwenden Sie stattdessen millis():
- Profi-Tipp: Mit millis() können Sie Button- oder Sensor-Code in loop() neben der Ampellogik einfügen — sie laufen gleichzeitig, ohne sich gegenseitig zu blockieren.
Linux + MCU Bridge-Programmierung
Der Arduino UNO Q hat zwei Prozessoren, die zusammenarbeiten: die MPU (Qualcomm, führt Debian Linux aus) und der MCU (STM32, führt Zephyr OS mit Ihrem Arduino-Sketch aus). Sie kommunizieren über RPC via der Arduino_RouterBridge-Bibliothek — niemals über rohe serielle Ports.
- Das Ampelmodul ist mit dem MCU (STM32) verbunden — verdrahtet mit digitalen Ausgangspins auf dem STM32. Der MCU wechselt die Lichter mit nicht-blockierendem millis()-Timing.
- Die MPU kann die Lichter nicht direkt steuern — sie muss Befehle an den MCU über Bridge.call() senden. Der MCU führt die registrierten Bridge.provide()-Funktionen aus.
- Die MPU hat Wi-Fi — da die MPU vollständiges Debian Linux mit Wi-Fi ausführt, kann sie Telegram-Befehle empfangen und die Lichtzeitdauern remote aktualisieren.
- Kommunikation: Bridge.call() auf der Linux-Seite ruft Bridge.provide()-Funktionen auf der MCU-Seite auf
- ⚠️ Reserviert: /dev/ttyHS1 (Linux) und Serial1 (MCU) werden vom Arduino Router verwendet — öffnen Sie sie niemals direkt
Kurz gesagt: MPU sendet Timing-Befehle → MCU empfängt sie → MCU aktualisiert Lichtzeitdauern in Echtzeit.
MCU-Sketch — Ampelmodul mit Bridge-Timing-Steuerung:
Python-Skript (Arduino App Lab) — Lichtzeitdauer von Linux aus steuern:
- Hinweis: Stellen Sie sicher, dass Bridge.begin() im MCU-Sketch aufgerufen wird und der Sketch hochgeladen ist, bevor Sie das Python-Skript auf der Linux-Seite ausführen.
- ⚠️ Warnung: Öffnen Sie niemals direkt /dev/ttyHS1 (auf Linux) oder verwenden Sie Serial1 (auf MCU) in Ihrem Code — diese sind vom Arduino Router reserviert und der Zugriff darauf unterbricht die Bridge.
Schnellschritte
- Laden Sie den MCU-Sketch hoch: Öffnen Sie Arduino App Lab, erstellen Sie eine neue App, fügen Sie den obigen Bridge MCU-Sketch in sketch/sketch.ino ein, behalten Sie die Standardbibliotheken bei (keine zusätzliche Bibliothek erforderlich), und klicken Sie auf "Ausführen".
- Fügen Sie das Python-Skript hinzu: Fügen Sie den obigen Python-Code auf der Python-Registerkarte derselben App ein.
- Führen Sie die App aus: Klicken Sie auf "Ausführen" — die Python-Seite passt die Ampeltiming automatisch an.
- Überprüfen Sie die Konsole: Öffnen Sie die Registerkarte "Konsole" → Unterregisterkarte "Python-Konsole", um die Timing-Updates anzuzeigen.
- Profi-Tipp: Ändern Sie das Python-Skript, um Timings basierend auf einem Zeitplan zu ändern (z. B. kürzerer Zyklus in der Nacht).
App Lab Konsolenausgabe
Telegram-Integration
Sie können die Ampeltiming remote über Telegram anpassen — ändern Sie, wie lange jedes Licht von überall aus eingeschaltet bleibt.
Wenn Sie noch keinen Telegram-Bot haben, lesen Sie Wie man einen Telegram-Bot erstellt, um Ihr Bot-Token zu erhalten, bevor Sie fortfahren.
Dieser Abschnitt behandelt:
- Ausführung eines Python-Skripts auf der Linux-Seite des Arduino UNO Q, um auf Telegram-Nachrichten zu warten
- Weiterleitung von Timing-Befehlen an den MCU über Bridge.call()
- Senden einer Bestätigungsantwort zurück zu Telegram
MCU-Sketch: Verwenden Sie denselben MCU-Sketch aus dem vorherigen Bridge-Abschnitt — keine Änderungen erforderlich. Stellen Sie sicher, dass er bereits hochgeladen und auf dem STM32 ausgeführt wird, bevor Sie fortfahren.
Python-Skript (Arduino App Lab) — Telegram-Bot für Ampelsteuerung:
- Hinweis: Ersetzen Sie YOUR_BOT_TOKEN durch das Token, das Sie von @BotFather auf Telegram erhalten haben.
- Senden Sie /timing 3000 1000 3000, um ROT=3s, GELB=1s, GRÜN=3s einzustellen.
- Senden Sie /status, um zu überprüfen, welches Licht derzeit eingeschaltet ist (Status wird auf MCU-Monitor protokolliert).
Schnellschritte
- Laden Sie den MCU-Sketch hoch: Verwenden Sie den Bridge MCU-Sketch aus dem vorherigen Abschnitt (laden Sie ihn zuerst hoch, falls noch nicht geschehen).
- Fügen Sie das Telegram-Skript ein: Kopieren Sie den obigen Python-Code auf die Python-Registerkarte Ihrer App in Arduino App Lab.
- Legen Sie Ihr Token fest: Ersetzen Sie YOUR_BOT_TOKEN im Skript durch Ihr tatsächliches Bot-Token.
- Führen Sie die App aus: Klicken Sie auf "Ausführen" — der Bot beginnt sofort, auf Telegram-Nachrichten zu warten.
- Testen Sie es: Senden Sie /timing 1000 500 1000 für einen schnellen Zyklus oder /timing 5000 2000 5000 für einen langsamen.
- Profi-Tipp: Fügen Sie einen Nachtzustand-Befehl hinzu, der ein langsam blinkendes gelbes Licht anwendet — großartig für Stunden mit wenig Verkehr.
App Lab Konsolenausgabe
ArduinoBot
OpenClaw-Integration
Sie können die OpenClaw an dieses Tutorial anpassen, indem Sie die Anweisungen im Arduino UNO Q - OpenClaw Tutorial beachten
Anwendungs-/Projektideen
Hier sind einige Projektideen, die Sie mit einem Ampelmodul und Arduino UNO Q umsetzen können:
- Fußgängerüberweg-Simulation: Fügen Sie einen Knopf hinzu — das Drücken löst ein Fußgänger-Signal nach der grünen Phase aus
- Telegram-gesteuerte Kreuzung: Stellen Sie das Timing remote ein, um unterschiedliche Verkehrsdichten zu simulieren
- Zeitgesteuerter Zeitplan: Verwenden Sie die Linux-Uhr der MPU, um zwischen Tages-Timing (kurzer Zyklus) und Nacht-Timing (längeres Rot/Grün) zu wechseln
- Modelleisenbahn-Übergang: Verwenden Sie die Ampel, um einen Modelleisenbahn-Übergang zu steuern — grün, wenn der Zug weg ist, rot während er vorbeifährt
- Labstatus-Anzeige: Verwenden Sie rot/gelb/grün, um die Verfügbarkeitsstatus eines Laborraums anzuzeigen
Fordere dich selbst heraus
Versuchen Sie diese Herausforderungen mit dem Ampelmodul und Arduino UNO Q:
- Einfach: Ändern Sie das Timing so, dass die gelbe Phase nur 500 ms lang und die grüne Phase 4 Sekunden ist
- Mittel: Erweitern Sie den Bridge-Sketch, um eine force_light(int light)-Funktion bereitzustellen, die sofort zu einem bestimmten Licht wechselt (0=rot, 1=gelb, 2=grün) von Python aus
- Fortgeschritten: Erstellen Sie einen Telegram-Bot, der die Befehle /schedule day und /schedule night unterstützt, die jeweils automatisch einen anderen Satz von Timings anwenden