Arduino UNO Q - Actionneur avec Retour de Position
Dans ce guide, vous apprendrez à contrôler un actionneur linéaire avec retour de position via un potentiomètre sur Arduino UNO Q et le Motor Shield Rev3. Vous apprendrez :
- Comment calibrer le potentiomètre de retour de l'actionneur
- Comment calculer la position actuelle de l'actionneur en millimètres
- Comment piloter l'actionneur vers une position cible spécifique automatiquement
- Comment surveiller et contrôler la position de l'actionneur depuis Linux via le Bridge
- Comment contrôler la position de l'actionneur à distance via Telegram
Pour le contrôle basique d'extension/rétraction sans retour, voir Arduino UNO Q - Actionneur.

Matériel Requis
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Capteurs DIYables (18 capteurs/écrans) |
À Propos de l'Actionneur Linéaire avec Retour de Position
Un actionneur linéaire avec retour de position possède un potentiomètre intégré dont la résistance change au fur et à mesure que la tige s'étend et se rétracte. En lisant ce potentiomètre, vous pouvez calculer la position actuelle de la tige et la déplacer vers une position cible précise.
Brochage de l'Actionneur Linéaire avec Retour de Position
Un actionneur linéaire avec retour de position possède 5 fils (ou 4 sur certains modèles) :
- Fils moteur (2) : alimentation et contrôle de polarité via le canal A du Motor Shield Rev3
- Fils potentiomètre (3) : VCC, GND et signal (curseur)

※ Note:
Le canal A du Motor Shield Rev3 utilise A0 pour la mesure de courant. Connectez le fil de signal du potentiomètre de retour de l'actionneur à A2 pour éviter tout conflit.
Fonctionnement
- Alimentez le moteur via le Motor Shield Rev3 (motor.run(MOTOR_FORWARD, 255) pour étendre, motor.run(MOTOR_BACKWARD, 255) pour rétracter, motor.brake() pour arrêter).
- Lisez le signal du potentiomètre avec analogRead(A2) — retourne une valeur 12 bits (0–4095) sur Arduino UNO Q.
- Utilisez map() pour convertir la valeur brute ADC en millimètres.
- Comparez la position actuelle avec la cible ; continuez à bouger ou arrêtez en conséquence.
※ Note:
Avant de contrôler la position, vous devez calibrer l'actionneur : étendez-le jusqu'à la limite maximale, lisez POTENTIOMETER_MAX ; rétractez-le jusqu'à la limite minimale, lisez POTENTIOMETER_MIN. Ces valeurs remplacent les espaces réservés dans le code.
Si vous n'êtes pas familier avec le Motor Shield Rev3 (brochage, fonctionnement et programmation), consultez d'abord le tutoriel Arduino UNO Q - Bouclier Moteur DC.
Schéma de Câblage

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Code MCU
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é. Une section ultérieure montrera comment les deux processeurs fonctionnent ensemble.
Ce tutoriel est divisé en trois étapes :
Étape 1 – Calibrage
Exécutez ce code pour trouver les valeurs ADC brutes lorsque l'actionneur est complètement étendu et complètement rétracté. Notez les valeurs — vous les utiliserez aux étapes 2 et 3.
Étapes Rapides
- Monter le bouclier : Emboîtez fermement le Motor Shield Rev3 sur les connecteurs de l'Arduino UNO Q. Connectez les fils du moteur de l'actionneur aux borniers à vis du canal A. Connectez l'alimentation 12V aux borniers d'alimentation du bouclier. Connectez le fil de signal du potentiomètre à A2, VCC du potentiomètre à 3,3V, GND du potentiomètre à GND.
- Connecter : Branchez l'Arduino UNO Q sur 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.

- Donnez un nom à l'application, par exemple : DIYables_ActuatorFeedback
- Cliquez sur Créer pour confirmer.
- Trouvez le fichier sketch/sketch.ino et collez-y le code de calibrage ci-dessus.
- 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.
- Téléverser : Cliquez sur Exécuter pour téléverser.
- Notez les valeurs : Après 40 secondes (extension 20s + rétraction 20s), notez les valeurs POTENTIOMETER_MAX et POTENTIOMETER_MIN.
Étape 2 – Calcul de la Position
Utilisez les valeurs calibrées pour calculer la position actuelle en millimètres :
- Remplacez STROKE_LENGTH par la longueur de course de votre actionneur en mm.
- Remplacez POTENTIOMETER_MAX et POTENTIOMETER_MIN par les valeurs notées à l'étape 1.
Étapes Rapides
- Mettez à jour les espaces réservés en haut du code avec vos valeurs réelles.
- Téléversez et observez : Regardez l'actionneur s'étendre tout en vérifiant la position calculée.
Étape 3 – Contrôle de la Position
Avec les valeurs calibrées, déplacez l'actionneur vers une position cible spécifique :
- Définissez targetPosition_mm sur la position souhaitée (0 = complètement rétracté, STROKE_LENGTH = complètement étendu).
Étapes Rapides
- Mettez à jour les espaces réservés (STROKE_LENGTH, POTENTIOMETER_MAX, POTENTIOMETER_MIN) et définissez targetPosition_mm.
- Téléversez et testez : L'actionneur se déplacera vers la cible et maintiendra sa position.
Programmation Bridge Linux + MCU
L'Arduino UNO Q dispose de deux processeurs fonctionnant ensemble : le MPU (Qualcomm, exécute Debian Linux) et le MCU (STM32, exécute Zephyr OS avec votre programme Arduino). Ils communiquent via RPC grâce à la bibliothèque Arduino_RouterBridge.
- Le Motor Shield Rev3 et l'actionneur sont contrôlés par le MCU (STM32) — la bibliothèque DIYables_DC_Motor pilote le canal A ; retour du potentiomètre sur A2.
- Le MPU ne peut pas contrôler l'actionneur directement — il appelle Bridge.call("read_position") pour invoquer la fonction MCU qui lit la position et pilote l'actionneur.
- Le MPU dispose du Wi-Fi — il peut donc accepter des commandes Telegram pour surveiller ou modifier la position cible à distance.
- Communication : Bridge.call() côté Linux invoque Bridge.provide_safe() côté MCU (car motor.run() et motor.brake() utilisent des API matérielles).
- ⚠️ Réservé : /dev/ttyHS1 (Linux) et Serial1 (MCU) sont utilisés par le routeur Arduino — ne les ouvrez jamais directement.
Programme MCU — retour de position avec Bridge :
Script Python (Arduino App Lab) — lecture et contrôle continus de la position :
- Remarque : Assurez-vous que Bridge.begin() est appelé dans le programme MCU et que le programme est téléversé avant d'exécuter le script Python.
- ⚠️ Avertissement : N'ouvrez jamais directement /dev/ttyHS1 (sous Linux) ou Serial1 (sur MCU) — ces ports sont réservés par le routeur Arduino.
Étapes Rapides
- Mettez à jour les espaces réservés dans le programme MCU Bridge (STROKE_LENGTH, POTENTIOMETER_MAX, POTENTIOMETER_MIN) et définissez targetPosition_mm.
- Téléversez le programme MCU : Ouvrez Arduino App Lab, collez le programme MCU Bridge dans sketch/sketch.ino, installez les bibliothèques DIYables_DC_Motor et Arduino_RouterBridge, puis cliquez sur Exécuter.
- Ajoutez le script Python : Collez le code Python ci-dessus dans l'onglet Python.
- Exécutez l'application : Python appelle read_position toutes les 200 ms ; le MCU se déplace vers la cible et rapporte la position.
- Vérifiez la console : Ouvrez la Console → sous-onglet Moniteur MCU.
Sortie de la Console App Lab
Intégration Telegram
Surveillez et rapportez la position de l'actionneur via Telegram avec la commande /position.
Si vous n'avez pas encore de bot Telegram, consultez Arduino UNO Q - Bot Telegram pour obtenir votre token de bot avant de continuer.
Programme MCU : Conservez le même programme 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 la position de l'actionneur :
- Remarque : Remplacez YOUR_BOT_TOKEN par le token obtenu depuis @BotFather.
- Envoyez /position pour déclencher une lecture de position sur le MCU.
Étapes Rapides
- Téléversez le programme MCU : Utilisez le programme MCU Bridge (téléversez-le d'abord s'il ne l'est pas déjà).
- Collez le script Telegram : Copiez le code Python ci-dessus dans l'onglet Python de votre application.
- Définissez votre token : Remplacez YOUR_BOT_TOKEN par votre vrai token de bot.
- Exécutez l'application et envoyez /position via Telegram.
Sortie de la Console App Lab
ArduinoBot
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
- Portail de précision : Ouvrir un portail à une position exacte (ex. 50 % de la course) selon un planning
- Panneau solaire orientable : Incliner un panneau à un angle calculé grâce au retour de position de l'actionneur
- Gabarit à hauteur réglable : Déplacer une pièce à une hauteur calibrée dans un atelier de fabrication
- Vanne automatisée : Positionner une vanne à un pourcentage d'ouverture spécifique en fonction de la demande de débit
- Dispositif de rééducation : Piloter un actionneur d'exercice vers des angles cibles avec suivi de position
Mettez-Vous au Défi
- Facile : Changez targetPosition_mm pour déplacer l'actionneur à 25 mm et vérifiez la précision
- Moyen : Ajoutez une commande Telegram /set50 qui déplace l'actionneur à 50 mm
- Avancé : Acceptez une commande /goto <mm> avec une cible dynamique et validez la plage avant de déplacer