Arduino UNO Q - Potentiometer steuert Servomotor

Dieses Tutorial zeigt, wie Sie den Winkel eines Servomotors mit einem Potentiometer mit Arduino UNO Q steuern. Durch Drehen des Potentiometer-Knopfs dreht sich der Servomotor proportional von 0° bis 180°.

※ Notiz:

Arduino UNO Q ADC-Unterschied: Der STM32 MCU auf Arduino UNO Q hat einen 12-Bit-ADC (Werte 0–4095), nicht 10-Bit (0–1023). Bilden Sie ADC-Werte von 0–4095 auf den Servomotor-Winkel 0–180 Grad ab.

Arduino UNO Q - Potentiometer steuert Servomotor

Erforderliche Hardware

1×Arduino UNO Q
1×USB Cable for Arduino Uno Q
1×Servo-Motor
1×Potentiometer
1×Alternativ: 10k Ohm Trimmer Potentiometer
1×(Alternativ) Potentiometer Kit
1×(Alternativ) Potentiometer Module with Knob
1×Breadboard
1×Verbindungskabel
1×(Empfohlen) Schraubklemmenblock-Shield für Arduino Uno
1×(Empfohlen) Sensors/Servo Expansion Shield for Arduino Uno
1×(Empfohlen) Breadboard-Shield für Arduino Uno
1×(Empfohlen) Gehäuse für Arduino Uno
1×(Empfohlen) Prototyping-Grundplatte & Breadboard-Kit für Arduino Uno

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Kaufhinweis: Falls Sie mehrere Servomotoren verwenden möchten, empfehlen wir die Verwendung des PCA9685 16 Channel PWM Servo Driver Module, um MCU-Pins zu sparen und die Verdrahtung zu vereinfachen.

Über das Potentiometer und den Servomotor

Wenn Sie mit dem Potentiometer oder dem Servomotor neu sind, schauen Sie sich zunächst diese Tutorials an:

Schaltplan

  • Bei Verwendung des grundlegenden Potentiometers:
Arduino UNO Q Servomotor Potentiometer Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

  • Bei Verwendung des Potentiometermoduls:
Arduino UNO Q Servomotor Potentiometer Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Programmieranleitung

  • Lesen Sie den ADC-Wert vom Potentiometer aus (12-Bit auf Arduino UNO Q, 0–4095):
int analogValue = analogRead(A0);
  • Bilden Sie den ADC-Wert auf den Servomotor-Winkel ab (0–180 Grad):
int angle = map(analogValue, 0, 4095, 0, 180);
  • Bewegen Sie den Servomotor zum berechneten Winkel:
myServo.write(angle);

MCU-Code — Potentiometer steuert Servomotor

Arduino UNO Q hat zwei Prozessoren: die STM32 MCU (verwaltet echtzeitige Hardwaresteuerung) und die Qualcomm MPU (läuft Debian Linux). In diesem Abschnitt wird nur der STM32 MCU programmiert — die Linux-Seite bleibt untätig. Ein späterer Abschnitt zeigt, wie beide Prozessoren zusammenarbeiten.

/* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-potentiometer-servo-motor */ #include <Servo.h> Servo myServo; void setup() { myServo.attach(9); // attach servo to pin 9 } void loop() { // Read ADC value from potentiometer (12-bit: 0-4095 on Arduino UNO Q) int analogValue = analogRead(A0); // Map ADC value to servo angle (0-180 degrees) int angle = map(analogValue, 0, 4095, 0, 180); // Move servo to the mapped angle myServo.write(angle); delay(50); }

Schnelle Schritte

  • Erstes Mal mit Arduino UNO Q? Folgen Sie dem Tutorial Erste Schritte mit Arduino UNO Q, um Ihre Entwicklungsumgebung vorzubereiten, bevor Sie fortfahren.
  • Verdrahten Sie die Komponenten: Verbinden Sie die Potentiometerausgangsleitung mit A0, GND mit GND, VCC mit 3,3 V. Verbinden Sie das Servosignal mit Pin 9 gemäß dem Schaltplan.
  • Verbinden: Stecken Sie die Arduino UNO Q mit einem USB-C-Kabel in Ihren Computer ein.
  • Öffnen Sie Arduino App Lab: Starten Sie Arduino App Lab und warten Sie, bis es Ihre Arduino UNO Q erkennt.
  • Erstellen Sie eine neue App: Klicken Sie auf die Schaltfläche Neue App erstellen.
Neue App im Arduino App Lab auf Arduino UNO Q erstellen
  • Geben Sie der App einen Namen, z. B.: DIYables_PotServo
  • Klicken Sie auf Erstellen, um zu bestätigen.
  • Sie sehen einen Satz von Ordnern und Dateien, die in Ihrer neuen App generiert werden.
Arduino App Lab App-Ordner und -Dateien auf Arduino UNO Q
  • Finden Sie die Datei sketch/sketch.ino — hier fügen Sie die MCU-Skizze ein.
  • Fügen Sie die Skizze ein: Kopieren Sie den MCU-Code oben und fügen Sie ihn in die Skizzendatei ein. Behalten Sie andere Dateien wie in der Standardeinstellung.
    • Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.
    Add sketch library in Arduino App Lab on Arduino UNO Q
    • Search for Arduino_RouterBridge created by Arduino and click the Install button.
    My Apps / DIYables Apps
    Run
    Bricks
    No bricks added...
    Sketch Libraries
    No sketch libra...
    Files
    python
    sketch
    .gitignore
    README.md
    app.yaml
    sketch.ino
    Add sketch library
    Arduino_RouterBridge Arduino

    This library provides a simple RPC bridge for Arduino UNO Q boards, allowing communication between the board and other devices using MsgPack serialization.

    0.4.1
    Install
    More Info
    • Upload: Klicken Sie auf die Ausführungsschaltfläche im Arduino App Lab, um zu kompilieren und auf den STM32 hochzuladen.
    Klicken Sie auf die Ausführungsschaltfläche im Arduino App Lab auf Arduino UNO Q
    • Drehen Sie den Potentiometer-Knopf — der Servomotor sollte die Position des Knopfes reibungslos von 0° bis 180° nachfahren.

    Linux + MCU Bridge-Programmierung

    Arduino UNO Q hat zwei Prozessoren, die zusammenarbeiten: die MPU (Qualcomm, läuft Debian Linux) und die MCU (STM32, läuft Zephyr OS mit Ihrer Arduino-Skizze). Sie kommunizieren über RPC über die Arduino_RouterBridge-Bibliothek — niemals über rohe serielle Ports.

    • Das Potentiometer und der Servomotor sind mit der MCU (STM32) verbunden — die Potentiometerausgangsleitungen sind mit A0 verbunden und das Servosignal mit Pin 9. Der MCU liest kontinuierlich ADC-Werte und aktualisiert den Servomotor-Winkel in loop().
    • Die MPU kann das Potentiometer nicht lesen oder den Servomotor direkt steuern — sie muss den aktuellen Servomotor-Winkel vom MCU über Bridge.call() anfordern.
    • Die MPU hat Wi-Fi — da die MPU vollständiges Debian Linux mit Wi-Fi ausführt, kann es den Servomotor-Winkel 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 Servomotor-Winkel an → MCU liest ADC und konvertiert → MCU meldet ADC und Winkel → MPU protokolliert oder leitet weiter.

    MCU-Skizze — Potentiometer-Servomotor mit Bridge und Monitor-Ausgang:

    /* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-potentiometer-servo-motor */ #include "Arduino_RouterBridge.h" #include <Servo.h> Servo myServo; int current_angle = 0; void get_servo_angle() { Monitor.print("Potentiometer ADC: "); Monitor.print(analogRead(A0)); Monitor.print(" => Servo angle: "); Monitor.println(current_angle); } void setup() { myServo.attach(9); Bridge.begin(); Monitor.begin(); Bridge.provide("get_servo_angle", get_servo_angle); Monitor.println("Potentiometer-Servo Bridge ready"); } void loop() { int analogValue = analogRead(A0); current_angle = map(analogValue, 0, 4095, 0, 180); myServo.write(current_angle); delay(50); }

    Python-Skript (Arduino App Lab) — Servomotor-Winkel vom Linux-System abrufen:

    /* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-potentiometer-servo-motor */ from arduino.app_utils import * import time def loop(): while True: Bridge.call("get_servo_angle") time.sleep(1) App.run(user_loop=loop)
    • Hinweis: Vergewissern Sie sich, dass Bridge.begin() in der MCU-Skizze aufgerufen wird und die Skizze 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 bricht die Bridge.

    Schnelle Schritte

    • MCU-Skizze hochladen: Öffnen Sie Arduino App Lab, erstellen Sie eine neue App, fügen Sie die Bridge MCU-Skizze oben in sketch/sketch.ino ein, installieren Sie die Servo- und 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 derselben App ein.
    • Führen Sie die App aus: Klicken Sie auf Ausführen — die Python-Seite fragt den Servomotor-Winkel jede Sekunde ab.
    • Drehen Sie den Potentiometer-Knopf und beobachten Sie, wie der Servomotor die Position des Knopfes nachfahrt.
    • Überprüfen Sie die Konsole: Öffnen Sie die Registerkarte Konsole → Unterregisterkarte MCU Monitor, um die ADC- und Winkelwerte protokolliert zu sehen.

    App Lab Konsolenausgabe

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    Message (Enter to send a message to "Newbiely" on usb(2820070321))
    New Line
    9600 baud
    Potentiometer-Servo Bridge ready Potentiometer ADC: 0 => Servo angle: 0 Potentiometer ADC: 1024 => Servo angle: 45 Potentiometer ADC: 2048 => Servo angle: 90 Potentiometer ADC: 3072 => Servo angle: 135 Potentiometer ADC: 4095 => Servo angle: 180

    Telegram-Integration

    Überprüfen Sie den aktuellen Servomotor-Winkel remote von überall über Telegram.

    Wenn Sie noch keinen Telegram-Bot haben, siehe Wie man einen Telegram-Bot erstellt, um Ihr Bot-Token vor dem Fortfahren zu erhalten.

    MCU-Skizze: Behalten Sie die gleiche MCU-Skizze aus dem vorherigen Bridge-Abschnitt — keine Änderungen erforderlich. Vergewissern Sie sich, dass sie bereits auf dem STM32 hochgeladen und ausgeführt wird, bevor Sie fortfahren.

    Python-Skript (Arduino App Lab) — Telegram-Bot für Servomotor-Winkel:

    /* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-potentiometer-servo-motor */ from arduino.app_utils import * import requests import time BOT_TOKEN = "YOUR_BOT_TOKEN" API_URL = f"https://api.telegram.org/bot{BOT_TOKEN}" last_update_id = 0 def send_message(chat_id, text): requests.post(f"{API_URL}/sendMessage", json={"chat_id": chat_id, "text": text}) def get_updates(): global last_update_id resp = requests.get(f"{API_URL}/getUpdates", params={"offset": last_update_id + 1, "timeout": 5}) return resp.json().get("result", []) def loop(): global last_update_id updates = get_updates() for update in updates: last_update_id = update["update_id"] msg = update.get("message", {}) chat_id = msg.get("chat", {}).get("id") text = msg.get("text", "").strip() if text == "/angle": angle = Bridge.call("get_servo_angle") send_message(chat_id, angle) else: send_message(chat_id, "Commands:\n/angle — read current servo angle (based on potentiometer position)") time.sleep(1) App.run(user_loop=loop)
    • Hinweis: Ersetzen Sie YOUR_BOT_TOKEN mit dem Token, das Sie von @BotFather auf Telegram erhalten haben.
    • Senden Sie /angle, um den aktuellen Servomotor-Winkel basierend auf der Potentiometerposition zu überprüfen.

    Schnelle Schritte

    • MCU-Skizze hochladen: Verwenden Sie die Bridge MCU-Skizze aus dem vorherigen Abschnitt (laden Sie sie zuerst hoch, falls nicht bereits geschehen).
    • Fügen Sie das Telegram-Skript ein: Kopieren Sie den Python-Code oben in die Python-Registerkarte Ihrer App im Arduino App Lab.
    • Legen Sie Ihr Token fest: Ersetzen Sie YOUR_BOT_TOKEN im Skript mit Ihrem aktuellen Bot-Token.
    • Führen Sie die App aus: Klicken Sie auf Ausführen — der Bot beginnt, auf Telegram-Nachrichten zu lauschen.
    • Testen Sie es: Drehen Sie das Potentiometer, senden Sie /angle — der Bot antwortet mit dem ADC-Wert und dem Servomotor-Winkel.

    App Lab Python-Konsolenausgabe

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    [2026-04-29 12:00:01] Telegram: /angle [2026-04-29 12:00:01] Potentiometer ADC: 2048 => Servo angle: 90 [2026-04-29 12:03:20] Telegram: /angle [2026-04-29 12:03:20] Potentiometer ADC: 4095 => Servo angle: 180
    Telegram
    Telegram 12:45
    Welcome to Telegram!
    ArduinoBot 10:19
    Chatting with Arduino...
    telegram-botfather
    BotFather Yesterday
    Your bot has been created.

    ArduinoBot

    bot
    Today
    /angle
    10:15 AM ✓✓
    Potentiometer ADC: 2048 => Servo angle: 90
    10:16 AM

    OpenClaw-Integration

    Sie können den OpenClaw an dieses Tutorial anpassen, indem Sie die Anleitung im Tutorial Arduino Uno Q - OpenClaw beachten

    Anwendungs-/Projektideen

    • Kameraschwenkssteuerung: Verwenden Sie ein Potentiometer als physischen Schwenkjoystick für eine Servo-gesteuerte Kamera — überprüfen Sie die Position über Telegram
    • Roboterarmgelenk: Steuern Sie ein Roboterarmgelenk manuell mit einem Potentiometer
    • Remote-Antennenpositiotierer: Verwenden Sie ein Potentiometer, um eine Antenne mit einem Servomotor auszurichten — überprüfen Sie den Winkel über Telegram
    • Ventil-Durchsatzregler: Bilden Sie ein Potentiometer auf ein Servo-betätigtes Ventil ab — überprüfen Sie den Ventilöffnungsprozentsatz remote
    • Interaktive Skala: Erstellen Sie eine physische Schnittstelle, bei der eine Skala einen visuellen Indikator durch einen Servomotor steuert

    Fordern Sie sich selbst heraus

    • Leicht: Fügen Sie zwei Potentiometer hinzu (A0 und A1), die jeweils einen separaten Servomotor an zwei verschiedenen Pins steuern
    • Mittel: Setzen Sie ADC-Wert und Winkel als separate Bridge-Callbacks frei: get_adc() und get_angle()
    • Erweitert: Erstellen Sie einen Telegram-Bot, der Sie automatisch benachrichtigt, wenn sich der Servomotor um mehr als 15° vom zuletzt aufgezeichneten Winkel bewegt — verwenden Sie eine Überwachungsschleife in Python

    ※ UNSERE NACHRICHTEN

    • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!