Arduino UNO Q - Interrupteur de Fin de Course

Un interrupteur de fin de course détecte lorsqu'un objet en mouvement a atteint une position spécifique. Il est également appelé interrupteur de voyage. Dans ce tutoriel, vous apprendrez à câbler un interrupteur de fin de course à l'Arduino UNO Q, à lire son état TOUCHÉ/NON TOUCHÉ, à détecter les événements de contact, et à vérifier l'état à distance via Telegram.

Arduino UNO Q - Interrupteur de Fin de Course

Matériel Requis

1×Arduino UNO Q
1×USB Cable for Arduino Uno Q
1×Interrupteur de fin de course (KW12-3)
1×Alternativement: Limit Switch (V-156-1C25)
1×Wires
1×Optionnel: Kit gaines thermorétractables
1×Optionnel: Fer à souder
1×Recommandé: Shield à bornier à vis pour Arduino Uno
1×Recommandé: Sensors/Servo Expansion Shield for Arduino Uno
1×Recommandé: Shield plaque d'essai pour Arduino Uno
1×Recommandé: Boîtier pour Arduino Uno
1×Recommandé: Kit plaque de base prototypage et plaque d'essai pour Arduino Uno

Ou vous pouvez acheter les kits suivants:

1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos de l'Interrupteur de Fin de Course

Un interrupteur de fin de course tire son nom de sa fonction principale : détecter lorsqu'un objet en mouvement atteint la limite de sa course.

Brochage

Les modèles courants d'interrupteurs de fin de course (par exemple, KW12-3, V-156-1C25) ont trois broches :

  • C (Commun) : Utilisé dans toutes les configurations de câblage
  • NO (Normalement Ouvert) : Actif lorsqu'il est touché ; ouvre le circuit lorsqu'il n'est pas touché
  • NC (Normalement Fermé) : Actif lorsqu'il n'est pas touché ; ouvre le circuit lorsqu'il est touché
Brochage de l'Interrupteur de Fin de Course

Fonctionnement

Il existe plusieurs options de câblage. Ce tutoriel utilise l'approche la plus simple — la broche C vers GND et la broche NO vers la broche d'entrée de l'Arduino UNO Q avec INPUT_PULLUP :

Broche C Broche NO Broche NC État de la Broche
1 GND Entrée Arduino UNO Q (INPUT_PULLUP) NON connecté HIGH = NON TOUCHÉ, LOW = TOUCHÉ

※ Note:

Comme un bouton, un interrupteur de fin de course nécessite un anti-rebond. La bibliothèque ezButton gère cela automatiquement.

Schéma de Câblage

Schéma de Câblage Arduino UNO Q Interrupteur de Fin de Course

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Nous recommandons de souder des fils aux broches de l'interrupteur et de les couvrir avec une gaine thermorétractable pour une connexion fiable et résistante aux vibrations.

Code MCU — Interrupteur de Fin de Course

L'Arduino UNO Q dispose de deux processeurs : le MCU STM32 (gère le contrôle matériel en temps réel) et le MPU Qualcomm (exécute Debian Linux). Dans cette section, seul le MCU STM32 est programmé — le côté Linux reste inactif. Une section ultérieure montrera comment les deux processeurs fonctionnent ensemble.

La bibliothèque ezButton gère à la fois l'anti-rebond et la lecture de l'état. Utilisez isPressed() pour détecter les transitions NON TOUCHÉ→TOUCHÉ et isReleased() pour TOUCHÉ→NON TOUCHÉ :

/* * Ce code Arduino UNO Q a été développé par newbiely.fr * Ce code Arduino UNO Q est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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 } }

※ Note:

Deux cas d'utilisation courants :

  • Basé sur le niveau : Vérifiez getState() == LOW pour savoir si l'interrupteur est actuellement appuyé/touché.
  • Basé sur le front : Utilisez isPressed() pour les transitions NON TOUCHÉ→TOUCHÉ et isReleased() pour TOUCHÉ→NON TOUCHÉ.

Étapes Rapides

  • Première fois avec Arduino UNO Q ? Suivez le tutoriel Démarrer avec Arduino UNO Q pour préparer votre environnement de développement avant de continuer.
  • Câbler l'interrupteur de fin de course : Connectez la broche C à GND et la broche NO à la broche 7 selon le schéma de câblage.
  • Connecter : Branchez l'Arduino UNO Q à votre ordinateur avec un câble USB-C.
  • Ouvrir Arduino App Lab : Lancez Arduino App Lab et attendez qu'il détecte votre Arduino UNO Q.
  • Créer une nouvelle application : Cliquez sur le bouton Créer une nouvelle application.
Créer une nouvelle application dans Arduino App Lab sur Arduino UNO Q
  • Donnez un nom à l'application, par exemple : DIYables_LimitSwitch
  • Cliquez sur Créer pour confirmer.
  • Vous verrez un ensemble de dossiers et fichiers générés dans votre nouvelle application.
Dossiers et fichiers de l'application Arduino App Lab sur Arduino UNO Q
  • Trouvez le fichier sketch/sketch.ino — c'est là que vous collerez le sketch MCU.
  • Coller le sketch : Copiez le code MCU ci-dessus et collez-le dans le fichier sketch. Conservez les autres fichiers par défaut.
    • 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
    • Téléverser : Cliquez sur le bouton Exécuter dans Arduino App Lab pour compiler et téléverser vers le STM32.
    Cliquez sur le bouton Exécuter dans Arduino App Lab sur Arduino UNO Q
    • Déclencher l'interrupteur de fin de course en appuyant sur le bras actionneur. Les transitions sont enregistrées via le Moniteur Bridge dans la section suivante.
    • Astuce Pro : Ajoutez votre propre code d'action dans chaque bloc d'état — par exemple, arrêtez un moteur lorsque TOUCHÉ et réactivez-le lorsque NON TOUCHÉ.

    Programmation Bridge Linux + MCU

    L'Arduino UNO Q dispose de deux processeurs qui fonctionnent ensemble : le MPU (Qualcomm, exécute Debian Linux) et le MCU (STM32, exécute Zephyr OS avec votre sketch Arduino). Ils communiquent via RPC à l'aide de la bibliothèque Arduino_RouterBridge — jamais via des ports série bruts.

    • L'interrupteur de fin de course est connecté au MCU (STM32) — câblé à une broche d'entrée numérique du STM32. Le MCU lit et supprime les rebonds de l'interrupteur à l'aide de la bibliothèque ezButton.
    • Le MPU ne peut pas lire l'interrupteur directement — il doit demander l'état au MCU via Bridge.call(). Le MCU répond immédiatement.
    • Le MPU dispose du Wi-Fi — car le MPU exécute Debian Linux complet avec Wi-Fi, il peut signaler l'état de l'interrupteur via Telegram à la demande.
    • Communication : Bridge.call() côté Linux invoque les fonctions Bridge.provide() côté MCU
    • ⚠️ Réservé : /dev/ttyHS1 (Linux) et Serial1 (MCU) sont utilisés par l'Arduino Router — ne les ouvrez jamais directement

    En résumé : MPU demande l'état de l'interrupteur → MCU lit la broche → MCU signale TOUCHÉ ou NON TOUCHÉ → MPU enregistre ou transmet.

    Sketch MCU — interrupteur de fin de course avec Bridge et sortie Moniteur :

    /* * Ce code Arduino UNO Q a été développé par newbiely.fr * Ce code Arduino UNO Q est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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"); }

    Script Python (Arduino App Lab) — interroger l'état de l'interrupteur de fin de course depuis Linux :

    /* * Ce code Arduino UNO Q a été développé par newbiely.fr * Ce code Arduino UNO Q est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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)
    • Remarque : Assurez-vous que Bridge.begin() est appelé dans le sketch MCU et que le sketch est téléversé avant d'exécuter le script Python côté Linux.
    • ⚠️ Avertissement : N'ouvrez jamais directement /dev/ttyHS1 (sous Linux) ni n'utilisez Serial1 (sur MCU) dans votre code — ceux-ci sont réservés par l'Arduino Router et y accéder cassera le Bridge.

    Étapes Rapides

    • Téléverser le sketch MCU : Ouvrez Arduino App Lab, créez une nouvelle application, collez le sketch MCU Bridge ci-dessus dans sketch/sketch.ino, installez les bibliothèques ezButton et Arduino_RouterBridge, puis cliquez sur Exécuter.
    • Ajouter le script Python : Collez le code Python ci-dessus dans l'onglet Python de la même application.
    • Exécuter l'application : Cliquez sur Exécuter — le côté Python interroge l'état de l'interrupteur de fin de course toutes les 2 secondes.
    • Déclencher l'interrupteur de fin de course en appuyant sur son actionneur.
    • Vérifier la console : Ouvrez l'onglet Console → sous-onglet Moniteur MCU pour voir les transitions enregistrées en temps réel.

    Sortie Console App Lab

    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

    Intégration Telegram

    Vérifiez l'état actuel de l'interrupteur de fin de course à distance depuis n'importe où via Telegram.

    Si vous n'avez pas encore de bot Telegram, consultez Arduino UNO Q - Bot Telegram pour obtenir votre token de bot avant de continuer.

    Sketch MCU : Conservez le même sketch MCU de la section Bridge précédente — aucune modification nécessaire. Assurez-vous qu'il est déjà téléversé et en cours d'exécution sur le STM32 avant de continuer.

    Script Python (Arduino App Lab) — bot Telegram pour l'état de l'interrupteur de fin de course :

    /* * Ce code Arduino UNO Q a été développé par newbiely.fr * Ce code Arduino UNO Q est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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)
    • Remarque : Remplacez YOUR_BOT_TOKEN par le token obtenu depuis @BotFather sur Telegram.
    • Envoyez /state pour vérifier si l'interrupteur de fin de course est actuellement TOUCHÉ ou NON TOUCHÉ.

    Étapes Rapides

    • Téléverser le sketch MCU : Utilisez le sketch MCU Bridge de la section précédente (téléversez-le d'abord si ce n'est pas déjà fait).
    • Coller le script Telegram : Copiez le code Python ci-dessus dans l'onglet Python de votre application dans Arduino App Lab.
    • Définir votre token : Remplacez YOUR_BOT_TOKEN dans le script par votre vrai token de bot.
    • Exécuter l'application : Cliquez sur Exécuter — le bot commence à écouter les messages Telegram.
    • Tester : Déclenchez l'interrupteur de fin de course, puis envoyez /state — confirmez qu'il indique "TOUCHED".

    Sortie Console App Lab

    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

    Intégration d'OpenClaw

    Vous pouvez adapter OpenClaw à ce tutoriel en vous référant aux instructions du tutoriel Arduino UNO Q - OpenClaw.

    Idées d'Applications/Projets

    • Protection de fin de course de moteur : Arrêter automatiquement un moteur lorsque l'interrupteur de fin de course détecte la fin de la course
    • Alerte de déplacement via Telegram : Signaler via Telegram chaque fois que l'actionneur atteint sa position limite
    • Détecteur d'ouverture/fermeture de porte : Monter un interrupteur de fin de course sur une charnière de porte — vérifier l'état à distance via Telegram
    • Référencement de type imprimante 3D : Utiliser des interrupteurs de fin de course pour référencer des axes linéaires sur une plateforme de mouvement DIY
    • Détection de fin de convoyeur : Détecter lorsqu'un article atteint la fin d'un convoyeur et déclencher l'action suivante

    Challengez-vous

    • Facile : Ajoutez une LED qui s'allume lorsque l'interrupteur est TOUCHÉ et s'éteint lorsqu'il est NON TOUCHÉ
    • Intermédiaire : Comptez combien de fois l'interrupteur a été déclenché et exposez le compte via get_trigger_count()
    • Avancé : Créez un bot Telegram qui vous notifie automatiquement dès que l'interrupteur est déclenché — utilisez une boucle de surveillance continue en Python

    Références des Fonctions

    ※ NOS MESSAGES

    • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !