Système de surveillance mobile – Robot caméra Raspberry Pi/Arduino piloté par Android (MQTT, uv4l, Docker)
Vue d'ensemble
Robot téléopéré avec retour vidéo temps réel : châssis 4 roues (2 motrices avant, 2 roues libres arrière), caméra Raspberry Pi, Arduino Pro Mini pour contrôle bas niveau (moteurs, lumière, capteurs IR), liaison série vers Pi. Le Pi héberge : streaming vidéo uv4l (WebRTC/MJPEG), broker MQTT Mosquitto, passerelle Python (Docker) ↔ Arduino. L'application Android affiche le flux vidéo et envoie les commandes via MQTT.
Architecture logicielle (4 couches)
- Android App : WebView (flux uv4r) + joystick virtuel + boutons → publie sur topics MQTT (
robot/cmd). - MQTT Broker (Mosquitto) : sur Pi, port 1883, authentification user/pass.
- Passerelle Python (Docker) : abonnée à
robot/cmd, traduit en protocole série Arduino (M:dir:power;,L:0/1;), publie télémétrie (robot/telemetry: distances IR avant/arrière). - Arduino Pro Mini : exécution temps-réel (PWM moteurs, lecture IR 10 Hz, sécurité timeout 300 ms).
Matériel – Châssis & Électronique
Mécanique (plexiglas/plastique découpé)
- Base 18×13 cm : 2 moteurs DC + réducteurs + supports, pont en H (L298) face dessous.
- Roues arrière : 2 roues multidirectionnelles sur entretoises hexagonales 2 cm.
- Partie haute : 2 plaques en L (12×13 + 6,5×13 cm) collées, supportent Pi, caméra, phare LED, électronique.
- Écartement au sol > 2 cm.
Électronique embarquée
| Arduino Pro Mini 328P 5V/16 MHz | 1 |
| Shield L298 Dual H-Bridge (ou module) | 1 |
| 2 × Capteurs IR obstacle (avant/arrière) | 2 |
| Phare LED 5V (démonté d'une lampe torche) + transistor NPN + R 220 Ω | 1 |
| Régulateur 7805 (5V pour Arduino), Régulateur 3,3V (ligne TX Pi→Arduino) | 1+1 |
| Connecteurs PCB (KF301, headers), interrupteur, prise XT60 (LiPo 2S 1300 mAh) | 1 lot |
| Raspberry Pi 3 + Caméra + Boîtier + Carte SD (Raspbian) | 1 |
| Powerbank 5V pour Pi (ou convertisseur 12V→5V depuis LiPo) | 1 |
Brochage Arduino
- Phare : D3
- Moteur G : PWM D5, EN1 A4, EN2 A5
- Moteur D : PWM D6, EN1 A3, EN2 A2
- IR Avant : A0, IR Arrière : A1
- Série vers Pi : TX D11, RX D10 (SoftwareSerial)
Firmware Arduino – Protocole série
Commandes reçues (ASCII, terminées par ;) :
M:-25:16;→ direction gauche (-25), puissance 16 → conversion % gauche/droite + sens.M:44:19;→ direction droite (44), puissance 19.L:1;/L:0;→ phare ON/OFF.
Télémétrie émise toutes les 500 ms : F=3:B=0; (distance avant/arrière 0–10).
Bibliothèque requise : TextMotorCommandsInterpretter (GitHub danionescu0).
Configuration Raspberry Pi
- Raspbian Lite + activation caméra (
raspi-config) + SSH. - IP fixe WiFi ou réservation DHCP. Port forwarding routeur : 9090 (uv4l), 1883 (Mosquitto) si accès externe.
- Installer uv4l :
git clone .../robot-camera-platform.git→sh ./uv4l/install.sh→ configureruv4l/start.sh(port, résolution, fps, rotation, mot de passe). - Installer Docker & Docker Compose (ARM) :
curl -sSL https://get.docker.com | sh,pip3 install docker-compose. - Configurer
config.py(port série/dev/ttyS0ou/dev/ttyAMA0, 9600 bauds, credentials MQTT). - Configurer
docker-container/mosquitto/Dockerfile(user/pass Mosquitto). - Lancer :
docker-compose up -d(construit image Python + lance Mosquitto + passerelle). - Services systemd pour auto-démarrage :
robot-camera.service(passerelle),robot-camera-video.service(uv4l).
Application Android
- Cloner android-robot-camera.
- Ouvrir dans Android Studio, configurer
passwords.xml(hôte MQTT, port, user/pass, URL streaminghttps://IP_PI:9090/stream/video.mjpeg). - Compiler, installer sur téléphone (mode développeur + débogage USB).
Interface utilisateur
- Gauche : flux vidéo MJPEG dans WebView.
- Droite : joystick tactile (direction + puissance), bouton phare.
- Haut-droite : statut – flèches obstacles (avant/arrière), « Connected »/« Disconnected » MQTT.
Débogage par couches
- Arduino : FTDI sur pins 10/11 → moniteur série → envoyer
M:0:50;,L:1;. - Pi – Docker :
docker ps(2 conteneurs up),netstat -nltp(ports 9090, 1883),ls -l /dev/ttyS0. - Pi – Série :
systemctl stop robot-camera→picocom -b 9600 /dev/ttyS0→ tester commandes. - MQTT : client mosquitto_sub/pub depuis PC ou téléphone.
- Streaming : navigateur →
https://IP_PI:9090/stream. - Android : Logcat, vérifier « Connected » en haut à droite.
Extensions – Suivi d'objet par couleur
Script Python navigation/object_tracking.py (OpenCV 3 + HSV) : détection blob couleur configurable (hsv_bounds, object_size_threshold). Lancer dans session VNC graphique sur le Pi : python3 object_tracking.py colored-object --show-video. Peut servir de base pour suivi de personne, patrouille, etc.
Ressources
- Dépôt principal (Arduino, Python, Docker, systemd) : GitHub danionescu0/robot-camera-platform
- Application Android : GitHub danionescu0/android-robot-camera
- Schéma Fritzing :
sketch_nWf7cZeUWL.fzz
Processus de fabrication
- L'Évolution et la Conception des Appareils Photo Modernes
- Comprendre les objectifs d'appareil photo : conception, histoire et innovations futures
- MrRobot : Robot Rapiro piloté par mobile Ubuntu avec interaction voix, toucher et secousse
- Roomberry : Transformer un Roomba en robot de surveillance avec Raspberry Pi Zero W
- Slider Motorisé pour Caméra Contrôlé par Bluetooth avec Arduino : Pour des Plans Cinématiques Fluides
- Affichage LED Interactif Gyroscopique avec Anneau NeoPixel et Arduino
- Construire une télécommande Android universelle avec Arduino, 1Sheeld et contrôle IR
- Manette de jeu USB Arduino DIY – Construisez votre propre gamepad haute performance
- Pixie : Montre-bracelet NeoPixel à base d'Arduino – Élégante, DIY, montre LED