Arduino UNO Q - Drehimpulsgeber
Ein Drehimpulsgeber erkennt Rotationsbewegungen und -richtungen. Im Gegensatz zu einem Potentiometer kann er sich unbegrenzt drehen. In diesem Tutorial lernen Sie, wie Sie einen Drehimpulsgeber an Arduino UNO Q anschließen, Rotationsschritte zählen, die Richtung erkennen und den Zähler remote über Telegram überprüfen.

Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Über den Drehimpulsgeber
Pinbelegung
Ein Drehimpulsgeber-Modul hat normalerweise 5 Pins:
- CLK (Ausgang A): Pulsiert einmal pro Rastklick (LOW→HIGH→LOW)
- DT (Ausgang B): Derselbe Puls wie CLK, aber um 90° verzögert; wird verwendet, um die Richtung zu erkennen
- SW: Eingebauter Druckknopf (LOW wenn gedrückt, HIGH wenn freigegeben über Pull-up)
- VCC (+): 3,3V oder 5V
- GND: Masse

Drehimpulsgeber vs. Potentiometer
- Ein Drehimpulsgeber dreht sich kontinuierlich in beide Richtungen; ein Potentiometer ist auf ~270° begrenzt
- Ein Drehimpulsgeber gibt Impulse aus (digital); ein Potentiometer gibt Spannung aus (analog)
- Verwenden Sie einen Encoder, wenn Sie verfolgen müssen, wie viel sich etwas gedreht hat; verwenden Sie ein Potentiometer, wenn Sie die absolute Position kennen müssen
Wie es funktioniert

Wenn der Drehknopf gedreht wird, pulsieren CLK und DT abwechselnd. Der 90°-Phasenunterschied zwischen ihnen gibt die Richtung an:
- CLK steigt von LOW auf HIGH:
- DT ist LOW → Drehung im Uhrzeigersinn → Zähler inkrementieren
- DT ist HIGH → Drehung gegen den Uhrzeigersinn → Zähler dekrementieren
- Erkennen Sie, wenn CLK von LOW zu HIGH übergeht
- Lesen Sie DT, um die Richtung zu bestimmen
- Aktualisieren Sie einen Zähler: +1 für im Uhrzeigersinn, -1 für gegen den Uhrzeigersinn

Programmiervorgehen
Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
MCU-Code — Drehimpulsgeber (Polling)
Die Arduino UNO Q hat zwei Prozessoren: das STM32 MCU (verwaltet Echtzeit-Hardware-Steuerung) und das Qualcomm MPU (führt Debian Linux aus). In diesem Abschnitt wird nur das STM32 MCU programmiert — die Linux-Seite bleibt inaktiv. Ein späterer Abschnitt zeigt, wie beide Prozessoren zusammenarbeiten.
Diese Version verwendet Polling, um CLK-Übergänge zu erkennen. Sie ist einfach, kann aber Zählungen verpassen, wenn loop() langsam läuft:
Schnelle Schritte
- Erstes Mal mit Arduino UNO Q? Folgen Sie dem Tutorial Getting Started with Arduino UNO Q, um Ihre Entwicklungsumgebung vorzubereiten.
- Schließen Sie den Encoder an: Verbinden Sie CLK mit Pin 2, DT mit Pin 3, SW mit Pin 4, VCC mit 3,3V, GND mit GND.
- Verbinden: Schließen Sie 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 Arduino UNO Q erkennt.
- Erstellen Sie eine neue App: Klicken Sie auf die Schaltfläche Create New App.

- Geben Sie der App einen Namen, zum Beispiel: DIYables_RotaryEncoder
- Klicken Sie auf Create zum Bestätigen.
- Sie sehen eine Reihe von Ordnern und Dateien in Ihrer neuen App.

- Finden Sie die sketch/sketch.ino Datei — hier fügen Sie die MCU-Skizze ein.
- Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.

- Search for ezButton created by ArduinoGetStarted.com and click the Install button.
- Search for Arduino_RouterBridge created by Arduino and click the Install button.
- Hochladen: Klicken Sie auf die Run-Schaltfläche in Arduino App Lab, um zum STM32 zu kompilieren und hochzuladen.

- Drehen Sie den Drehknopf im Uhrzeigersinn und gegen den Uhrzeigersinn. Zähleränderungen werden im nächsten Abschnitt über Bridge Monitor protokolliert.
- Drücken Sie den Drehknopf — ein Druckknopf-Ereignis wird ausgelöst.
MCU-Code — Drehimpulsgeber (Interrupt-basiert)
Die Verwendung eines Hardware-Interrupts auf dem CLK-Pin stellt sicher, dass keine Rotationszählungen verpasst werden, auch wenn loop() beschäftigt ist:
Schnelle Schritte
- Verwenden Sie die gleiche Verdrahtung und App aus dem vorherigen Beispiel.
- Ersetzen Sie die Skizze durch die Interrupt-Version und klicken Sie auf Run.
- Drehen Sie den Drehknopf und drücken Sie die Schaltfläche — Ergebnisse werden über Bridge Monitor protokolliert.
Linux + MCU Bridge-Programmierung
Die Arduino UNO Q hat zwei Prozessoren, die zusammenarbeiten: das MPU (Qualcomm, führt Debian Linux aus) und das MCU (STM32, führt Zephyr OS mit Ihrem Arduino-Sketch aus). Sie kommunizieren über RPC über die Bibliothek Arduino_RouterBridge — niemals über Raw-Serienports.
- Der Drehimpulsgeber ist mit dem MCU (STM32) verbunden — verdrahtet mit digitalen Pins mit Interrupt-Unterstützung. Das MCU verfolgt den Zähler und die Richtung in Echtzeit.
- Das MPU kann den Encoder nicht direkt lesen — es muss den Zählerwert über Bridge.call() vom MCU anfordern. Das MCU antwortet sofort.
- Das MPU hat Wi-Fi — da das MPU vollständiges Debian Linux mit Wi-Fi ausführt, kann es den Encoder-Zähler bei Bedarf über Telegram melden.
- 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 fordert Zähler an → MCU liest aktuelle Zählung und Richtung → MCU meldet Werte → MPU protokolliert oder leitet weiter.
MCU-Sketch — Drehimpulsgeber mit Bridge und Monitor-Ausgabe:
Python-Skript (Arduino App Lab) — Encoder-Zähler von Linux abfragen:
- Hinweis: Stellen Sie sicher, dass Bridge.begin() im MCU-Sketch aufgerufen wird und der Sketch hochgeladen wird, bevor Sie das Python-Skript auf der Linux-Seite ausführen.
- ⚠️ Warnung: Öffnen Sie /dev/ttyHS1 (auf Linux) oder verwenden Sie Serial1 (auf MCU) niemals direkt in Ihrem Code — diese sind vom Arduino Router reserviert und der Zugriff darauf zerstört die Bridge.
Schnelle Schritte
- Laden Sie den MCU-Sketch hoch: Öffnen Sie Arduino App Lab, erstellen Sie eine neue App, fügen Sie den Bridge MCU-Sketch oben in sketch/sketch.ino ein, installieren Sie die Bibliotheken ezButton und Arduino_RouterBridge, und klicken Sie auf Run.
- Fügen Sie das Python-Skript hinzu: Fügen Sie den Python-Code oben in die Python-Registerkarte derselben App ein.
- Führen Sie die App aus: Klicken Sie auf Run — die Python-Seite fragt den Encoder-Zähler alle 2 Sekunden ab.
- Drehen Sie den Encoder-Knopf in beide Richtungen.
- Überprüfen Sie die Konsole: Öffnen Sie die Registerkarte Konsole → Unterregisterkarte MCU Monitor, um Zähleränderungen in Echtzeit zu protokollieren.
App Lab Konsolenausgabe
Telegram-Integration
Überprüfen Sie den Encoder-Zähler von überall remote über Telegram.
Wenn Sie noch keinen Telegram-Bot haben, lesen Sie How to Create a Telegram Bot, um vor dem Fortfahren Ihr Bot-Token zu erhalten.
MCU-Sketch: Behalten Sie den gleichen MCU-Sketch aus dem vorherigen Bridge-Abschnitt — keine Änderungen erforderlich. Stellen Sie sicher, dass er bereits auf dem STM32 hochgeladen und ausgeführt wird.
Python-Skript (Arduino App Lab) — Telegram-Bot für Encoder-Zähler:
- Hinweis: Ersetzen Sie YOUR_BOT_TOKEN durch das Token, das Sie von @BotFather auf Telegram erhalten haben.
- Senden Sie /count, um den aktuellen Encoder-Zählerwert zu überprüfen.
- Senden Sie /reset, um den Zähler auf 0 zurückzusetzen.
Schnelle Schritte
- 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 Python-Code oben in die Python-Registerkarte Ihrer App in Arduino App Lab.
- Legen Sie Ihr Token fest: Ersetzen Sie YOUR_BOT_TOKEN im Skript durch Ihr aktuelles Bot-Token.
- Führen Sie die App aus: Klicken Sie auf Run — der Bot beginnt, auf Telegram-Nachrichten zu lauschen.
- Testen Sie es: Drehen Sie den Encoder, senden Sie /count — der Bot antwortet mit dem Zählerwert und der Richtung.
App Lab Python-Konsolenausgabe
ArduinoBot
OpenClaw-Integration
Sie können die OpenClaw an dieses Tutorial anpassen, indem Sie sich auf die Anleitung im Tutorial Arduino Uno Q - OpenClaw beziehen.
Ideen für Anwendungen/Projekte
- Remote-Lautstärkeregelung: Ordnen Sie die Encoder-Drehung Audio-Lautstärkepegeln zu — überprüfen Sie den aktuellen Pegel über Telegram
- Schrittkoordinatensystem: Zählen Sie Encoder-Impulse, um Bewegungen in einem mechanischen System zu messen — melden Sie über Telegram
- Menü-Navigator: Verwenden Sie Encoder-Drehung, um durch Optionen in einem von MPU gesteuerten Fernmenü zu zykleln
- Positionsverfolgung: Verfolgen Sie die absolute Position, indem Sie Schritte von einer bekannten Ausgangsposition zählen
- Schnellwahl: Drehen Sie den Encoder, um eine Zielgeschwindigkeit für einen Motor einzustellen — bestätigen Sie die Einstellung über Telegram
Herausforderung für Sie selbst
- Einfach: Fügen Sie einen Buzzer hinzu, der jedes Mal piept, wenn der Encoder-Knopf gedrückt wird
- Mittel: Stellen Sie separate Callbacks für get_counter(), get_direction() und get_button_count() bereit
- Fortgeschritten: Erstellen Sie einen Telegram-Bot, der automatisch eine Warnung sendet, wenn der Zähler einen konfigurierbaren Schwellenwert überschreitet — speichern Sie den Schwellenwert in einer über Telegram einstellbaren Python-Variablen