Arduino UNO Q - Encodeur Rotatif
Un encodeur rotatif détecte le mouvement et la direction de rotation. Contrairement à un potentiomètre, il peut tourner en continu sans limite. Dans ce tutoriel, vous apprendrez à connecter un encodeur rotatif à l'Arduino UNO Q, à compter les pas de rotation, détecter la direction, et vérifier le compteur à distance via Telegram.

Matériel Requis
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Capteurs DIYables (18 capteurs/écrans) |
À Propos de l'Encodeur Rotatif
Brochage
Un module encodeur rotatif possède généralement 5 broches :
- CLK (Sortie A) : Impulsion à chaque cran de rotation (LOW→HIGH→LOW)
- DT (Sortie B) : Même impulsion que CLK mais décalée de 90° ; utilisée pour détecter la direction
- SW : Bouton-poussoir intégré (LOW lorsqu'appuyé, HIGH lorsque relâché via pull-up)
- VCC (+) : 3,3V ou 5V
- GND : Masse

Encodeur Rotatif vs Potentiomètre
- Un encodeur rotatif tourne en continu dans les deux sens ; un potentiomètre est limité à environ 270°
- Un encodeur rotatif génère des impulsions (numérique) ; un potentiomètre produit une tension (analogique)
- Utilisez un encodeur lorsque vous devez savoir de combien quelque chose a tourné ; utilisez un potentiomètre lorsque vous avez besoin de connaître la position absolue
Fonctionnement

Lorsque le bouton tourne, CLK et DT génèrent des impulsions alternées. Le déphasage de 90° entre eux indique la direction :
- CLK passe de LOW à HIGH :
- DT est LOW → Rotation horaire → incrémenter le compteur
- DT est HIGH → Rotation antihoraire → décrémenter le compteur
- Détecter la transition de CLK de LOW à HIGH
- Lire DT pour déterminer la direction
- Mettre à jour un compteur : +1 pour le sens horaire, -1 pour le sens antihoraire

Comment Programmer
Schéma de Câblage

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Code MCU — Encodeur Rotatif (Par Polling)
L'Arduino UNO Q possè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.
Cette version utilise le polling pour détecter les transitions de CLK. Elle est simple mais peut manquer des comptages si loop() s'exécute lentement :
Étapes Rapides
- Première utilisation d'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'encodeur : Connectez CLK à la broche 2, DT à la broche 3, SW à la broche 4, VCC à 3,3V, GND à GND.
- 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.

- Donnez un nom à l'application, par exemple : DIYables_RotaryEncoder
- Cliquez sur Créer pour confirmer.
- Vous verrez un ensemble de dossiers et fichiers générés dans votre nouvelle application.

- Trouvez le fichier sketch/sketch.ino — c'est ici que vous collerez le sketch MCU.
- Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.

- Search for ezButton created by ArduinoGetStarted.com and click the Install button.
- Search for Arduino_RouterBridge created by Arduino and click the Install button.
- Téléverser : Cliquez sur le bouton Exécuter dans Arduino App Lab pour compiler et téléverser vers le STM32.

- Tournez le bouton dans le sens horaire et antihoraire. Les changements de compteur sont enregistrés via Bridge Monitor dans la section suivante.
- Appuyez sur le bouton — un événement de pression de bouton se déclenche.
Code MCU — Encodeur Rotatif (Par Interruption)
L'utilisation d'une interruption matérielle sur la broche CLK garantit qu'aucun comptage de rotation n'est manqué, même lorsque loop() est occupé :
Étapes Rapides
- Utilisez le même câblage et la même application que l'exemple précédent.
- Remplacez le sketch par la version avec interruption et cliquez sur Exécuter.
- Tournez le bouton et appuyez dessus — les résultats sont enregistrés via Bridge Monitor.
Programmation Bridge Linux + MCU
L'Arduino UNO Q possè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 grâce à la bibliothèque Arduino_RouterBridge — jamais via des ports série bruts.
- L'encodeur rotatif est connecté au MCU (STM32) — câblé aux broches numériques avec support d'interruption. Le MCU suit le compteur et la direction en temps réel.
- Le MPU ne peut pas lire l'encodeur directement — il doit demander la valeur du compteur au MCU via Bridge.call(). Le MCU répond immédiatement.
- Le MPU dispose du Wi-Fi — parce que le MPU exécute Debian Linux complet avec Wi-Fi, il peut signaler le compteur de l'encodeur 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 le routeur Arduino — ne les ouvrez jamais directement
En bref : Le MPU demande le compteur → Le MCU lit le compteur actuel et la direction → Le MCU rapporte les valeurs → Le MPU les enregistre ou les transmet.
Sketch MCU — encodeur rotatif avec Bridge et sortie Monitor :
Script Python (Arduino App Lab) — interroger le compteur de l'encodeur depuis Linux :
- 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) ou n'utilisez pas Serial1 (sur MCU) dans votre code — ces ports sont réservés par le routeur Arduino 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, et 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 le compteur de l'encodeur toutes les 2 secondes.
- Tournez le bouton de l'encodeur dans les deux sens.
- Vérifier la console : Ouvrez l'onglet Console → sous-onglet MCU Monitor pour voir les changements de compteur enregistrés en temps réel.
Sortie de la Console App Lab
Intégration Telegram
Vérifiez le compteur de l'encodeur à 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 : Gardez 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 le compteur d'encodeur :
- Remarque : Remplacez YOUR_BOT_TOKEN par le token obtenu auprès de @BotFather sur Telegram.
- Envoyez /count pour vérifier la valeur actuelle du compteur d'encodeur.
- Envoyez /reset pour remettre le compteur à 0.
É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 token de bot réel.
- Exécuter l'application : Cliquez sur Exécuter — le bot commence à écouter les messages Telegram.
- Testez : Tournez l'encodeur, envoyez /count — le bot répond avec la valeur du compteur et la direction.
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
- Contrôle du volume à distance : Associer la rotation de l'encodeur aux niveaux de volume audio — vérifier le niveau actuel via Telegram
- Compteur de pas : Compter les impulsions de l'encodeur pour mesurer le mouvement dans un système mécanique — signaler via Telegram
- Navigateur de menu : Utiliser la rotation de l'encodeur pour parcourir les options d'un menu distant piloté depuis le MPU
- Suivi de position : Suivre la position absolue en comptant les pas depuis une position initiale connue
- Cadran de vitesse : Tourner l'encodeur pour définir une vitesse cible pour un moteur — confirmer le réglage via Telegram
Défiez-vous
- Facile : Ajouter un buzzer qui émet un bip à chaque fois que le bouton de l'encodeur est appuyé
- Moyen : Exposer des callbacks séparés pour get_counter(), get_direction(), et get_button_count()
- Avancé : Créer un bot Telegram qui envoie automatiquement une alerte lorsque le compteur dépasse un seuil configurable — stocker le seuil dans une variable Python configurable via Telegram