Distributeur de Smarties Intelligent : ROS2 & Arduino
📌 Présentation
Le Distributeur de Smarties à accès contrôlé est un projet IoT interactif mêlant robotique, vision par ordinateur et systèmes embarqués. Architecturé autour d’une stack ROS2 et d’un cœur Arduino, le système met l’utilisateur au défi à travers un parcours ludique en plusieurs étapes — détection de sourire, quiz mathématique et défi de souffle — avant de délivrer une récompense sucrée.
- Rôle : Développeur principal (Intégration systèmes & Robotique)
- Technologies : ROS2 (Humble/Foxy), Arduino, Python, C++, OpenCV
- Matériel clé : Raspberry Pi (Caméra), Arduino, Servo, Récepteur IR, LCD, Capteur de souffle
🏗️ Architecture du Système
Le projet est conçu comme un système distribué où la logique de haut niveau est gérée par des nœuds ROS2 et les interactions matérielles de bas niveau par un pont Arduino.
🧠 Orchestration ROS2
face_smile_processor: Utilise les cascades de Haar d’OpenCV pour détecter les visages et les sourires en temps réel.game_master: Un nœud d’état qui gère le flux de jeu, les délais de récompense et les temps de recharge (cooldowns).math_quiz_node: Génère des multiplications dynamiques et valide les réponses saisies via la télécommande IR.microcontroller_communicator: Un pont série qui traduit les topics ROS en commandes textuelles pour l’Arduino.
📟 Contrôle des Périphériques Arduino
L’Arduino agit comme les “mains et les sens” du projet :
- Capteurs : Décode les signaux de la télécommande IR et calibre le capteur de souffle (A0).
- Interface : Pilote un écran LCD 16x2 pour l’UI, une LED RGB pour le statut et un buzzer piézo pour les retours sonores.
- Actionneur : Contrôle un servomoteur pour l’ouverture de la trappe de récompense.
🎮 Déroulement du Jeu
- Détection de sourire : La caméra surveille l’utilisateur. Un sourire déclenche le début du défi.
- Quiz Mathématique : L’utilisateur répond à une multiplication affichée sur l’écran LCD via la télécommande IR. Une erreur entraîne un blocage de 30 secondes.
- Défi de Souffle : L’utilisateur doit souffler dans le capteur pour remplir une jauge visuelle sur l’écran.
- Récompense : Une fois validée, la trappe s’ouvre via le servo avec une mélodie de victoire. Un cooldown de 30s empêche les abus.
📈 Défis Techniques & Solutions
-
Communication Série en Temps Réel : * Défi : Assurer une latence minimale entre les nœuds Python (ROS2) et le code C++ (Arduino).
-
Solution : Création d’un protocole de commande personnalisé (
SERVO_OPEN <ms>,MATH_Q a b) avec une gestion d’erreurs pour éviter la saturation du buffer série. -
Calibration des Capteurs :
-
Défi : La valeur de base du capteur de souffle variait selon les conditions ambiantes.
-
Solution : Implémentation d’une routine d’auto-calibration au démarrage pour mapper l’écart entre le repos et l’activation sur une échelle de 0 à 100%.
🔗 Liens & Ressources
- Code Source : [Voir le dépôt GitHub]
🚀 Développé par Evanescent.