Arduino UNO Q - Antrieb mit Rückmeldung
In diesem Leitfaden erfahren Sie, wie Sie einen Linearantrieb mit Positionsrückmeldung mithilfe eines Potentiometers auf Arduino UNO Q und des Motor Shield Rev3 steuern. Sie erfahren:
- Wie Sie das Rückmeldungspotentiometer des Antriebs kalibrieren
- Wie Sie die aktuelle Antriebsposition in Millimetern berechnen
- Wie Sie den Antrieb automatisch zu einer bestimmten Zielposition fahren
- Wie Sie die Antriebsposition von Linux aus über die Bridge überwachen und steuern
- Wie Sie die Antriebsposition remote über Telegram steuern
Für grundlegende Aus-/Einfahrsteuerung ohne Rückmeldung siehe Arduino UNO Q - Antrieb.

Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Über den Linearantrieb mit Rückmeldung
Ein Linearantrieb mit Rückmeldung hat ein integriertes Potentiometer, dessen Widerstand sich ändert, wenn sich der Stab ausfährt und einzieht. Durch das Auslesen dieses Potentiometers können Sie die aktuelle Position des Stabes berechnen und ihn zu einer genauen Zielposition fahren.
Linearantrieb mit Rückmeldungs-Pinbelegung
Ein Linearantrieb mit Rückmeldung hat 5 Drähte (oder 4 bei einigen Modellen):
- Motordrähte (2): Stromversorgung und Polaritätskontrolle über Motor Shield Rev3 Kanal A
- Potentiometerdrähte (3): VCC, GND und Signal (Schleifer)

※ Notiz:
Der Motor Shield Rev3 Kanal A verwendet A0 für die Stromerfassung. Verbinden Sie den Signaldraht des Potentiometers des Antriebs mit A2, um Konflikte zu vermeiden.
Funktionsweise
- Stromversorgung des Motors über den Motor Shield Rev3 (motor.run(MOTOR_FORWARD, 255) zum Ausfahren, motor.run(MOTOR_BACKWARD, 255) zum Einfahren, motor.brake() zum Stoppen).
- Lesen Sie das Potentiometersignal mit analogRead(A2) — gibt einen 12-Bit-Wert (0–4095) auf Arduino UNO Q zurück.
- Verwenden Sie map(), um den rohen ADC-Wert in Millimetern zu konvertieren.
- Vergleichen Sie die aktuelle Position mit dem Ziel; fahren Sie weiter oder halten Sie entsprechend an.
※ Notiz:
Bevor Sie die Position steuern, müssen Sie den Antrieb kalibrieren: Fahren Sie zur vollständigen Grenze aus, lesen Sie POTENTIOMETER_MAX; fahren Sie zur vollständigen Grenze ein, lesen Sie POTENTIOMETER_MIN. Diese Werte ersetzen die Platzhalter im Code.
Wenn Sie den Motor Shield Rev3 nicht kennen (Pinbelegung, Funktionsweise und Programmierung), siehe zuerst das Tutorial Arduino UNO Q - DC Motor Shield.
Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
MCU-Code
Der Arduino UNO Q hat zwei Prozessoren: die STM32 MCU (verwaltet die Hardware-Echtzeit-Steuerung) und die Qualcomm MPU (führt Debian Linux aus). In diesem Abschnitt wird nur die STM32 MCU programmiert. Ein späterer Abschnitt zeigt, wie beide Prozessoren zusammenarbeiten.
Dieses Tutorial ist in drei Schritte unterteilt:
Schritt 1 – Kalibrierung
Führen Sie diesen Code aus, um die rohen ADC-Werte zu finden, wenn der Antrieb vollständig ausgefahren und vollständig eingezogen ist. Notieren Sie sich die Werte — Sie werden sie in den Schritten 2 und 3 verwenden.
Schnellschritte
- Schild stapeln: Drücken Sie das Motor Shield Rev3 fest auf die Arduino UNO Q Header. Verbinden Sie die Motordrähte des Antriebs mit den Schraubklemmen von Kanal A. Verbinden Sie die 12V-Stromversorgung mit den Schraubklemmen des Schildes. Verbinden Sie den Signaldraht des Potentiometers mit A2, Potentiometer VCC mit 3,3V, Potentiometer GND mit GND.
- Verbinden: Stecken Sie den Arduino UNO Q mit einem USB-C-Kabel in Ihren Computer.
- Arduino App Lab öffnen: 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_ActuatorFeedback
- Klicken Sie auf Erstellen, um zu bestätigen.
- Suchen Sie die Datei sketch/sketch.ino und fügen Sie den Kalibrierungscode oben ein.
- Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.

- Search for DIYables_DC_Motor created by DIYables.io and click the Install button.
- Hochladen: Klicken Sie auf „Ausführen", um hochzuladen.
- Notieren Sie sich die Werte: Nach 40 Sekunden (Ausfahren 20 s + Einfahren 20 s) notieren Sie sich die Werte POTENTIOMETER_MAX und POTENTIOMETER_MIN.
Schritt 2 – Position berechnen
Verwenden Sie die kalibrierten Werte, um die aktuelle Position in Millimetern zu berechnen:
- Ersetzen Sie STROKE_LENGTH durch die Hubhöhe Ihres Antriebs in mm.
- Ersetzen Sie POTENTIOMETER_MAX und POTENTIOMETER_MIN durch die in Schritt 1 notierten Werte.
Schnellschritte
- Aktualisieren Sie die Platzhalter oben im Code mit Ihren tatsächlichen Werten.
- Hochladen und beobachten: Beobachten Sie, wie der Antrieb ausfährt, während Sie die berechnete Position überprüfen.
Schritt 3 – Position steuern
Mit kalibrierten Werten fahren Sie den Antrieb zu einer bestimmten Zielposition:
- Stellen Sie targetPosition_mm auf die gewünschte Position (0 = vollständig eingezogen, STROKE_LENGTH = vollständig ausgefahren).
Schnellschritte
- Aktualisieren Sie die Platzhalter (STROKE_LENGTH, POTENTIOMETER_MAX, POTENTIOMETER_MIN) und stellen Sie targetPosition_mm ein.
- Hochladen und testen: Der Antrieb bewegt sich zur Zielposition und hält diese.
Linux + MCU Bridge-Programmierung
Der Arduino UNO Q hat zwei Prozessoren, die zusammenarbeiten: die MPU (Qualcomm, führt Debian Linux aus) und die MCU (STM32, führt Zephyr OS mit Ihrem Arduino-Sketch aus). Sie kommunizieren über RPC über die Arduino_RouterBridge-Bibliothek.
- Der Motor Shield Rev3 und der Antrieb werden von der MCU (STM32) gesteuert — die DIYables_DC_Motor-Bibliothek steuert Kanal A; Potentiometer-Rückmeldung auf A2.
- Die MPU kann den Antrieb nicht direkt steuern — sie ruft Bridge.call("read_position") auf, um die MCU-Funktion aufzurufen, die Position liest und den Antrieb steuert.
- Die MPU hat Wi-Fi — damit kann sie Telegram-Befehle akzeptieren, um die Antriebsposition remote zu überwachen oder zu ändern.
- Kommunikation: Bridge.call() auf der Linux-Seite ruft Bridge.provide_safe() auf der MCU-Seite auf (da motor.run() und motor.brake() Hardware-APIs verwenden).
- ⚠️ Reserviert: /dev/ttyHS1 (Linux) und Serial1 (MCU) werden vom Arduino Router verwendet — öffnen Sie sie niemals direkt.
MCU-Sketch — Positions-Rückmeldung mit Bridge:
Python-Skript (Arduino App Lab) — kontinuierliches Lesen und Steuern der Position:
- Hinweis: Stellen Sie sicher, dass Bridge.begin() im MCU-Sketch aufgerufen wird und der Sketch hochgeladen ist, bevor Sie das Python-Skript ausführen.
- ⚠️ Warnung: Öffnen Sie niemals direkt /dev/ttyHS1 (auf Linux) oder verwenden Sie Serial1 (auf MCU) — diese sind vom Arduino Router reserviert.
Schnellschritte
- Aktualisieren Sie die Platzhalter im Bridge-MCU-Sketch (STROKE_LENGTH, POTENTIOMETER_MAX, POTENTIOMETER_MIN) und stellen Sie targetPosition_mm ein.
- Aktualisieren Sie die Platzhalter im Bridge-MCU-Sketch (STROKE_LENGTH, POTENTIOMETER_MAX, POTENTIOMETER_MIN) und stellen Sie targetPosition_mm ein.
- Laden Sie den MCU-Sketch hoch: Öffnen Sie Arduino App Lab, fügen Sie den Bridge-MCU-Sketch in sketch/sketch.ino ein, installieren Sie sowohl DIYables_DC_Motor als auch Arduino_RouterBridge Bibliotheken, und klicken Sie auf „Ausführen".
- Fügen Sie das Python-Skript hinzu: Fügen Sie den Python-Code oben in die Python-Registerkarte ein.
- Führen Sie die App aus: Python ruft read_position alle 200 ms auf; die MCU bewegt sich zum Ziel und meldet die Position.
- Überprüfen Sie die Konsole: Öffnen Sie die Konsole → Subtab „MCU-Monitor".
App Lab-Konsolenausgabe
Telegram-Integration
Überwachen Sie die Antriebsposition und melden Sie sie via Telegram mit dem /position-Befehl.
Wenn Sie noch keinen Telegram-Bot haben, finden Sie unter So erstellen Sie einen Telegram-Bot Ihr Bot-Token, bevor Sie fortfahren.
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, bevor Sie fortfahren.
Python-Skript (Arduino App Lab) — Telegram-Bot für Antriebsposition:
- Hinweis: Ersetzen Sie YOUR_BOT_TOKEN durch das Token, das Sie von @BotFather erhalten haben.
- Senden Sie /position, um einen Positionsabfrage auf der MCU auszulösen.
Schnellschritte
- Laden Sie den MCU-Sketch hoch: Verwenden Sie den Bridge-MCU-Sketch (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.
- Stellen Sie Ihr Token ein: Ersetzen Sie YOUR_BOT_TOKEN durch Ihr tatsächliches Bot-Token.
- Führen Sie die App aus und senden Sie /position über Telegram.
App Lab-Konsolenausgabe
ArduinoBot
OpenClaw-Integration
Sie können die OpenClaw mit diesem Tutorial anpassen, indem Sie auf die Anleitung im Tutorial Arduino Uno Q - OpenClaw verweisen.
Anwendungs- und Projektideen
- Präzisions-Tor: Öffnen Sie ein Tor zu einer exakten Position (z.B. 50 % Weg) basierend auf einem Zeitplan
- Verstellbares Solarpanel: Kippen Sie das Panel in einem berechneten Winkel mithilfe der Antriebspositionsrückmeldung
- Höhenverstellbare Vorrichtung: Bewegen Sie ein Werkstück zu einer kalibrierten Höhe in einem Fertigungsaufbau
- Automatisiertes Ventil: Positionieren Sie ein Ventil auf einen bestimmten offenen Prozentsatz basierend auf dem Durchsatzanforderung
- Rehabilitationsgerät: Fahren Sie einen Übungsantrieb zu Zielwinkeln mit Positionsverfolgung
Fordern Sie sich selbst heraus
- Einfach: Ändern Sie targetPosition_mm, um den Antrieb auf 25 mm zu fahren und überprüfen Sie die Genauigkeit
- Mittel: Fügen Sie einen /set50-Telegram-Befehl hinzu, der den Antrieb zu 50 mm fährt
- Fortgeschritten: Akzeptieren Sie einen /goto <mm>-Befehl mit einem dynamischen Ziel und validieren Sie den Bereich, bevor Sie fahren