Arduino UNO Q - Feu de Circulation
Dans ce tutoriel, vous apprendrez à contrôler un module de feu de circulation en utilisant l'Arduino UNO Q. Nous couvrirons plusieurs approches de codage — d'une séquence simple basée sur delay() à une version non-bloquante avec millis() — puis nous étendrons le projet pour permettre le contrôle à distance des durées des feux via Telegram.
Dans ce tutoriel, vous apprendrez :
- Comment câbler un module de feu de circulation à l'Arduino UNO Q
- Comment programmer le MCU de l'Arduino UNO Q pour faire défiler les feux rouge, jaune et vert
- Comment utiliser une approche basée sur millis() pour un contrôle de feu de circulation non-bloquant
- Comment ajuster à distance les durées des feux via Telegram

Matériel Requis
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Capteurs DIYables (18 capteurs/écrans) |
À Propos du Module de Feu de Circulation
Brochage
Un module de feu de circulation a 4 broches :
- Broche GND : Connecter à GND sur l'Arduino UNO Q
- Broche R : Contrôle le feu rouge — connecter à une sortie numérique
- Broche Y : Contrôle le feu jaune — connecter à une sortie numérique
- Broche G : Contrôle le feu vert — connecter à une sortie numérique

Schéma de Câblage

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Comment Programmer un Module de Feu de Circulation
Définir les broches de signal comme sorties numériques :
Activer le feu rouge :
Code MCU — Feu de Circulation (basique)
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.
Cet exemple fait défiler les feux rouge, jaune et vert en utilisant delay() :
É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 le module : Connectez le module de feu de circulation aux broches 2, 3 et 4 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.

- Donnez un nom à l'application, par exemple : DIYables_TrafficLight
- 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 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.

- Vérifier le module : Le module de feu de circulation devrait faire défiler : rouge → jaune → vert → rouge, en répétant.
- Conseil Pro : Les durées des feux de circulation varient selon l'emplacement et le carrefour. Ajustez les valeurs RED_TIME, YELLOW_TIME et GREEN_TIME pour correspondre au comportement souhaité.
Code MCU — Version Plus Propre avec une Fonction
Utiliser une fonction d'aide rend le code plus court et plus facile à gérer :
- Conseil Pro : La fonction trafic_light_on(int light) allume exactement un feu et éteint les autres — propre et réutilisable.
Code MCU — Version Non-Bloquante avec millis()
La fonction delay() bloque tout autre code pendant qu'elle attend. Pour des programmes réactifs (ex. : lire des boutons ou des capteurs pendant que le feu de circulation fonctionne), utilisez millis() à la place :
- Conseil Pro : Avec millis(), vous pouvez ajouter du code de bouton ou de capteur dans loop() en parallèle avec la logique du feu de circulation — ils s'exécutent simultanément sans se bloquer mutuellement.
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.
- Le module de feu de circulation est connecté au MCU (STM32) — câblé aux broches de sortie numériques du STM32. Le MCU fait défiler les feux en utilisant le minutage non-bloquant millis().
- Le MPU ne peut pas contrôler directement les feux — il doit envoyer des commandes au MCU via Bridge.call(). Le MCU exécute les fonctions Bridge.provide() enregistrées.
- Le MPU dispose du Wi-Fi — parce que le MPU exécute Debian Linux complet avec Wi-Fi, il peut recevoir des commandes Telegram et mettre à jour les durées des feux à distance.
- 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 résumé : Le MPU envoie des commandes de minutage → le MCU les reçoit → le MCU met à jour les durées des feux en temps réel.
Sketch MCU — feu de circulation avec contrôle de minutage Bridge :
Script Python (Arduino App Lab) — contrôler le minutage des feux depuis Linux :
- Note : 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 (sur Linux) ou n'utilisez pas Serial1 (sur MCU) dans votre code — ceux-ci 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, conservez les bibliothèques par défaut (aucune bibliothèque supplémentaire nécessaire) 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 ajuste automatiquement le minutage du feu de circulation.
- Vérifier la console : Ouvrez l'onglet Console → sous-onglet Console Python pour voir les mises à jour de minutage.
- Conseil Pro : Modifiez le script Python pour changer les minutages selon un planning (ex. : cycle plus court la nuit).
Sortie de la Console App Lab
Intégration Telegram
Vous pouvez ajuster le minutage du feu de circulation à distance via Telegram — changez la durée d'allumage de chaque feu depuis n'importe où.
Si vous n'avez pas encore de bot Telegram, consultez Arduino UNO Q - Bot Telegram pour obtenir votre token de bot avant de continuer.
Cette section couvre :
- L'exécution d'un script Python côté Linux de l'Arduino UNO Q pour écouter les messages Telegram
- Le transfert des commandes de minutage au MCU via Bridge.call()
- L'envoi d'une réponse de confirmation en retour à Telegram
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 le contrôle du feu de circulation :
- Note : Remplacez YOUR_BOT_TOKEN par le token obtenu de @BotFather sur Telegram.
- Envoyez /timing 3000 1000 3000 pour définir ROUGE=3s, JAUNE=1s, VERT=3s.
- Envoyez /status pour vérifier quel feu est actuellement allumé (statut enregistré dans le monitor MCU).
É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 s'il ne l'est pas déjà).
- 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 immédiatement.
- Tester : Envoyez /timing 1000 500 1000 pour un cycle rapide, ou /timing 5000 2000 5000 pour un cycle lent.
- Conseil Pro : Ajoutez une commande de mode nuit qui applique un feu jaune clignotant lent — idéal pour les heures de faible trafic.
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
Voici quelques idées de projets que vous pouvez réaliser avec un module de feu de circulation et l'Arduino UNO Q :
- Simulation de passage piéton : Ajoutez un bouton — appuyer dessus déclenche un signal de marche après la fin de la phase verte
- Carrefour contrôlé par Telegram : Définissez le minutage à distance pour simuler différentes densités de trafic
- Planning horaire : Utilisez l'horloge Linux du MPU pour basculer entre le minutage de jour (cycle court) et le minutage de nuit (rouge/vert plus long)
- Passage de train miniature : Utilisez le feu de circulation pour bloquer un train miniature — vert quand le train est loin, rouge pendant qu'il passe
- Indicateur d'état de laboratoire : Utilisez rouge/jaune/vert pour afficher l'état de disponibilité d'une salle de laboratoire
Défiez-Vous
Essayez ces défis avec le module de feu de circulation et l'Arduino UNO Q :
- Facile : Changez le minutage pour que la phase jaune dure seulement 500ms et la phase verte 4 secondes
- Moyen : Étendez le sketch Bridge pour exposer une fonction force_light(int light) qui bascule immédiatement vers un feu spécifique (0=rouge, 1=jaune, 2=vert) depuis Python
- Avancé : Construisez un bot Telegram qui prend en charge une commande /schedule day et /schedule night, chacune appliquant automatiquement un ensemble différent de minutages