Arduino UNO Q - Endschalter

Ein Endschalter erkennt, wenn ein bewegliches Objekt eine bestimmte Position erreicht hat. Es wird auch Fahrtschalter genannt. In diesem Tutorial erfahren Sie, wie Sie einen Endschalter mit Arduino UNO Q verdrahten, seinen BERÜHRT/NICHT BERÜHRT-Status lesen, Kontaktereignisse erkennen und den Status remote über Telegram überprüfen.

Arduino UNO Q - Limit Switch

Erforderliche Hardware

1×Arduino UNO Q
1×USB Cable for Arduino Uno Q
1×Endschalter (KW12-3)
1×(Alternativ) Limit Switch (V-156-1C25)
1×Wires
1×(Optional) Schrumpfschlauch-Set
1×(Optional) Lötkolben
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.

Über Endschalter

Ein Endschalter ist nach seiner Hauptfunktion benannt: zu erkennen, wenn ein bewegliches Objekt das Ende (Limit) seines Fahrtbereichs erreicht.

Pinbelegung

Gängige Endschalter-Modelle (z.B. KW12-3, V-156-1C25) haben drei Anschlüsse:

  • C (Common/Gemeinsam): Wird in allen Verdrahtungskonfigurationen verwendet
  • NO (Normally Open/Normalo Offen): Aktiv bei Berührung; Schalter öffnet sich, wenn nicht berührt
  • NC (Normally Closed/Normalerweise Geschlossen): Aktiv bei Nichtberührung; Schalter öffnet sich bei Berührung
Limit Switch Pinout

Funktionsweise

Es gibt mehrere Verdrahtungsoptionen. Dieses Tutorial verwendet den einfachsten Ansatz – den C-Anschluss zu GND und den NO-Anschluss zum Arduino UNO Q-Eingangspin mit INPUT_PULLUP:

C pin NO pin NC pin Pin State
1 GND Arduino UNO Q Input (INPUT_PULLUP) NOT connected HIGH = NICHT BERÜHRT, LOW = BERÜHRT

※ Notiz:

Wie ein Button benötigt ein Endschalter Entprellung. Die Bibliothek ezButton kümmert sich automatisch darum.

Verdrahtungsschaltplan

Arduino UNO Q Limit Switch Wiring Diagram

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

Wir empfehlen, Drähte an die Schalter-Anschlüsse zu löten und sie mit Schrumpfschlauch abzudecken, um eine zuverlässige, vibrationsfeste Verbindung zu gewährleisten.

MCU-Code – Endschalter

Der Arduino UNO Q verfügt über zwei Prozessoren: der STM32 MCU (verwaltet Echtzeit-Hardware-Steuerung) und die Qualcomm MPU (führt Debian Linux aus). In diesem Abschnitt wird nur die STM32 MCU programmiert – die Linux-Seite bleibt untätig. In einem späteren Abschnitt wird gezeigt, wie beide Prozessoren zusammenarbeiten.

Die Bibliothek ezButton verarbeitet sowohl die Entprellung als auch die Statusablesung. Verwenden Sie isPressed(), um NICHT BERÜHRT→BERÜHRT-Übergänge zu erkennen, und isReleased() für BERÜHRT→NICHT BERÜHRT:

/* * 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-limit-switch */ #include <ezButton.h> ezButton limitSwitch(7); // create ezButton object attached to pin 7 void setup() { limitSwitch.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { limitSwitch.loop(); // MUST call the loop() function first if (limitSwitch.isPressed()) { // limit switch just moved from UNTOUCHED to TOUCHED // TO DO: add your TOUCHED action here } if (limitSwitch.isReleased()) { // limit switch just moved from TOUCHED to UNTOUCHED // TO DO: add your UNTOUCHED action here } int state = limitSwitch.getState(); if (state == HIGH) { // limit switch is currently UNTOUCHED // TO DO: continuous UNTOUCHED action here } else { // limit switch is currently TOUCHED // TO DO: continuous TOUCHED action here } }

※ Notiz:

Zwei häufige Anwendungsfälle:

  • Ebenenbasiert: Überprüfen Sie getState() == LOW, um festzustellen, ob der Schalter derzeit gedrückt/berührt wird.
  • Kantenbasiert: Verwenden Sie isPressed() für NICHT BERÜHRT→BERÜHRT und isReleased() für BERÜHRT→NICHT BERÜHRT-Übergänge.

Schnelle Schritte

  • Erste Zeit mit Arduino UNO Q? Folgen Sie dem Tutorial Getting Started with Arduino UNO Q, um Ihre Entwicklungsumgebung einzurichten, bevor Sie fortfahren.
  • Endschalter verdrahten: Verbinden Sie den C-Anschluss mit GND und den NO-Anschluss mit Pin 7 nach dem Verdrahtungsschaltplan.
  • 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 Ihr Arduino UNO Q erkannt wird.
  • Neue App erstellen: Klicken Sie auf die Schaltfläche Create New App.
Create New App in Arduino App Lab on Arduino UNO Q
  • Geben Sie der App einen Namen, z.B.: DIYables_LimitSwitch
  • Klicken Sie auf Create, um zu bestätigen.
  • Sie sehen einen Satz von Ordnern und Dateien, die in Ihrer neuen App generiert werden.
Arduino App Lab App folders and files on Arduino UNO Q
  • Suchen Sie die Datei sketch/sketch.ino – hier werden Sie die MCU-Skizze einfügen.
  • Sketch einfügen: Kopieren Sie den MCU-Code oben und fügen Sie ihn in die Skizzendatei ein. Behalten Sie andere Dateien in ihrer Standardform bei.
    • 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 ezButton created by ArduinoGetStarted.com 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
    ezButton ArduinoGetStarted.com

    Button library supports debounce, pressed/released events and the press counting. It is easy to use with multiple buttons. The library can be used for push-button, momentary switches, toggle switch, magnetic contact switch (door sensor)... It is designed for not only beginners but also experienced users.

    1.0.6
    Install
    More Info
    • 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
    • Hochladen: Klicken Sie auf die Run-Schaltfläche in Arduino App Lab, um den Code zu kompilieren und auf den STM32 hochzuladen.
    Click Run button in Arduino App Lab on Arduino UNO Q
    • Endschalter auslösen, indem Sie den Betätigungshebel drücken. Übergänge werden im nächsten Abschnitt über den Bridge Monitor protokolliert.
    • Profi-Tipp: Fügen Sie Ihren eigenen Aktionscode in jedem Zustandsblock hinzu – beispielsweise einen Motor stoppen, wenn BERÜHRT und erneut aktivieren, wenn NICHT BERÜHRT.

    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 Ihrer Arduino-Skizze aus). Sie kommunizieren über RPC über die Arduino_RouterBridge-Bibliothek – nie über Raw-Serienports.

    • Der Endschalter ist mit der MCU (STM32) verbunden – verdrahtet mit einem digitalen Eingangspin auf dem STM32. Die MCU liest und entprellt den Schalter mit der Bibliothek ezButton.
    • Die MPU kann den Schalter nicht direkt lesen – sie muss den Status von der MCU über Bridge.call() anfordern. Die MCU antwortet sofort.
    • Die MPU hat Wi-Fi – da die MPU volles Debian Linux mit Wi-Fi ausführt, kann sie den Schalterstatus über Telegram auf Anfrage melden.
    • Kommunikation: Bridge.call() auf der Linux-Seite ruft die Funktionen Bridge.provide() auf der MCU-Seite auf
    • ⚠️ Reserviert: /dev/ttyHS1 (Linux) und Serial1 (MCU) werden von Arduino Router verwendet – öffnen Sie sie nie direkt

    Kurz gesagt: MPU fordert Endschalter-Status an → MCU liest Pin → MCU meldet BERÜHRT oder NICHT BERÜHRT → MPU protokolliert oder leitet es weiter.

    MCU-Skizze – Endschalter mit Bridge und Monitor-Ausgabe:

    /* * 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-limit-switch */ #include "Arduino_RouterBridge.h" #include <ezButton.h> ezButton limitSwitch(7); void get_switch_state() { int state = limitSwitch.getState(); if (state == HIGH) Monitor.println("Limit switch: UNTOUCHED"); else Monitor.println("Limit switch: TOUCHED"); } void setup() { limitSwitch.setDebounceTime(50); Bridge.begin(); Monitor.begin(); Bridge.provide("get_switch_state", get_switch_state); Monitor.println("Limit Switch Bridge ready"); } void loop() { limitSwitch.loop(); if (limitSwitch.isPressed()) Monitor.println("Limit switch: UNTOUCHED -> TOUCHED"); if (limitSwitch.isReleased()) Monitor.println("Limit switch: TOUCHED -> UNTOUCHED"); }

    Python-Skript (Arduino App Lab) – Endschalter-Status von Linux abfragen:

    /* * 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-limit-switch */ from arduino.app_utils import * import time def loop(): while True: state = Bridge.call("get_switch_state") print(f"Limit switch state: {state}") time.sleep(2) App.run(user_loop=loop)
    • Hinweis: Stellen Sie sicher, dass Bridge.begin() in der MCU-Skizze aufgerufen wird und die Skizze hochgeladen wurde, bevor Sie das Python-Skript auf der Linux-Seite ausführen.
    • ⚠️ Warnung: Öffnen Sie nie direkt /dev/ttyHS1 (auf Linux) oder verwenden Sie Serial1 (auf MCU) in Ihrem Code – diese sind von Arduino Router reserviert und der Zugriff auf sie unterbricht 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 Bibliotheken ezButton und Arduino_RouterBridge und klicken Sie auf Run.
    • Python-Skript hinzufügen: Fügen Sie den Python-Code oben in der Python-Registerkarte derselben App ein.
    • App ausführen: Klicken Sie auf Run – die Python-Seite fragt den Endschalter-Status alle 2 Sekunden ab.
    • Endschalter auslösen, indem Sie seinen Betätigungshebel drücken.
    • Konsole überprüfen: Öffnen Sie die Registerkarte Konsole → Unterregisterkarte MCU Monitor, um Übergänge in Echtzeit protokolliert zu sehen.

    App Lab Console Output

    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
    Limit Switch Bridge ready Limit switch: UNTOUCHED -> TOUCHED Limit switch: TOUCHED -> UNTOUCHED Limit switch: UNTOUCHED -> TOUCHED

    Telegram-Integration

    Überprüfen Sie den aktuellen Endschalter-Status remote von überall über Telegram.

    Wenn Sie noch keinen Telegram-Bot haben, lesen Sie How to Create a Telegram Bot, um Ihr Bot-Token zu erhalten, bevor Sie fortfahren.

    MCU-Skizze: Behalten Sie die gleiche MCU-Skizze aus dem vorherigen Bridge-Abschnitt – es sind keine Änderungen erforderlich. Stellen Sie sicher, dass sie bereits auf den STM32 hochgeladen und ausgeführt wird, bevor Sie fortfahren.

    Python-Skript (Arduino App Lab) – Telegram-Bot für Endschalter-Status:

    /* * 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-limit-switch */ 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 == "/state": state = Bridge.call("get_switch_state") send_message(chat_id, f"Limit switch is currently: {state}") else: send_message(chat_id, "Commands:\n/state — check limit switch state (TOUCHED or UNTOUCHED)") time.sleep(1) App.run(user_loop=loop)
    • Hinweis: Ersetzen Sie YOUR_BOT_TOKEN durch das Token, das Sie von @BotFather auf Telegram erhalten haben.
    • Senden Sie /state, um zu überprüfen, ob der Endschalter derzeit BERÜHRT oder NICHT BERÜHRT ist.

    Schnelle Schritte

    • MCU-Skizze hochladen: Verwenden Sie die Bridge MCU-Skizze aus dem vorherigen Abschnitt (laden Sie sie zuerst hoch, wenn nicht bereits geschehen).
    • Telegram-Skript einfügen: Kopieren Sie den Python-Code oben in die Python-Registerkarte Ihrer App in Arduino App Lab.
    • Ihr Token setzen: Ersetzen Sie YOUR_BOT_TOKEN im Skript durch Ihr tatsächliches Bot-Token.
    • App ausführen: Klicken Sie auf Run – der Bot beginnt, auf Telegram-Nachrichten zu lauschen.
    • Testen Sie es: Lösen Sie den Endschalter aus, und senden Sie dann /state – bestätigen Sie, dass er "BERÜHRT" liest.

    App Lab Console Output

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    [2026-04-29 12:00:01] Telegram: /state [2026-04-29 12:00:01] Limit switch is currently: UNTOUCHED [2026-04-29 12:03:20] Telegram: /state [2026-04-29 12:03:20] Limit switch is currently: TOUCHED
    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
    /state
    10:15 AM ✓✓
    Limit switch is currently: UNTOUCHED
    10:16 AM
    /state
    10:17 AM ✓✓
    Limit switch is currently: TOUCHED
    10:18 AM

    OpenClaw-Integration

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

    Anwendungs-/Projektideen

    • Motor-Endanschlag-Schutz: Stoppen Sie einen Motor automatisch, wenn der Endschalter das Ende der Fahrt erkennt
    • Telegram-Fahrt-Warnung: Melden Sie über Telegram, wenn der Aktuator seine Endposition erreicht
    • Türöffnung/Schließung-Detektor: Bringen Sie einen Endschalter an einem Türscharnier an – überprüfen Sie den Status remote über Telegram
    • 3D-Drucker-ähnliches Homing: Verwenden Sie Endschalter zum Nullpunkt-Setzen linearer Achsen auf einer DIY-Bewegungsplattform
    • Förderband-Enddetektion: Erkennen Sie, wenn ein Element das Ende eines Förderbands erreicht, und lösen Sie die nächste Aktion aus

    Stelle dir selbst Herausforderungen

    • Einfach: Fügen Sie eine LED hinzu, die eingeschaltet wird, wenn der Endschalter BERÜHRT ist, und ausgeschaltet wird, wenn NICHT BERÜHRT
    • Mittel: Zählen Sie, wie oft der Endschalter ausgelöst wurde, und setzen Sie die Anzahl über get_trigger_count() frei
    • Fortgeschritten: Erstellen Sie einen Telegram-Bot, der Sie automatisch benachrichtigt, sobald der Endschalter ausgelöst wird – verwenden Sie eine kontinuierliche Ü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!