Construire un Spybot Arduino piloté par Bluetooth
Composants et fournitures
- Arduino UNO (×1)
- Module Bluetooth HC-06 (×1)
- Shield proto Arduino (×1) – ou toute plaque à souder avec connecteurs
- Shield Adafruit Motor/Stepper/Servo V2 (×1)
- Servo rotation continue SM-S4306R (×1)
- Moteurs DC génériques (×4)
- Pneus pour moteurs (×4)
- Fils de connexion (×8)
- Support 4 piles AA (×2)
- Piles AA (×8)
- Téléphone mobile (×1) – Nokia Lumia 520 utilisé
- Support téléphone mobile (×1)
- Châssis personnalisé (×1) – planche en bois simple
Applications et services en ligne
- Johnny-Five (framework JavaScript robotique)
À propos du projet
Présentation rapide
Ce robot à quatre roues est contrôlé via connexion Bluetooth. Il peut embarquer n'importe quel téléphone mobile servant de caméra IP. J'ai choisi de le programmer en JavaScript avec un serveur web Node.js pour surveiller les déplacements du robot.
Le circuit des éléments principaux est visible en Figure 1.

Après lancement du serveur, on obtient un écran avec une introduction aux commandes et une fenêtre pour la vue caméra (Figure 2). L'interface est responsive.

Le châssis
J'ai fabriqué moi-même le châssis. Si vous n'avez pas de perceuse ou préférez une solution plus simple, il existe de nombreux châssis plastiques tout faits.
La règle la plus importante pour la direction différentielle : placer les roues le plus près possible les unes des autres. Les erreurs principales et règles de base sont expliquées ici : Conception robot 4 roues motrices.
Le défi était de fixer les moteurs DC au châssis. Sans pièce spéciale, j'ai utilisé des colliers de serrage (150/3,5). Pour bien fixer les roues, il faut percer très précisément et utiliser 2 colliers par moteur. Malheureusement, les moteurs peuvent ne pas être parfaitement alignés, ce qui fait dévier le robot à gauche ou droite en marche avant/arrière.
Les batteries
Pour alimenter les cartes et les moteurs, j'ai opté pour une seule alimentation DC. Le châssis n'ayant pas de place pour un support 8×AA, j'ai assemblé deux supports 4×AA avec 2 vis chacun, en perçant le plastique.
Alimentation
L'Arduino Uno est alimenté par 8 piles AA rechargeables, ce qui alimente aussi le shield moteur. Ce shield possède un cavalier amovible pour ne pas tirer l'alimentation de l'Arduino ; on peut alors alimenter le shield séparément via ses broches d'alimentation. Voir les options d'alimentation : Adafruit Motor Shield V2 - Alimentation moteurs.
Connexion sans fil
J'ai utilisé un module Bluetooth HC-06 pour la liaison entre la voiture et l'ordinateur. Pour minimiser les câbles, j'ai construit un shield Arduino personnalisé en intégrant le module Bluetooth sur un shield prototype, en câblant sous le shield et en soudant des connecteurs pour l'emboîtement. Figures 3 et 4 montrent le résultat.


L'avantage : le module Bluetooth peut être démonté du shield à tout moment car il n'est pas soudé à la carte.
Pour configurer le module Bluetooth, suivez les instructions : Johnny-Five + JY-MCU Bluetooth.
Mouvements
Le robot avance, recule et tourne par direction différentielle. Le support caméra est monté sur un servo à rotation continue pour orienter le téléphone sans déplacer le châssis. Une courte démonstration vidéo est disponible.
Téléphone mobile
J'ai utilisé un Nokia Lumia 520 avec l'application Win IP Camera (Windows Store) : Win IP Camera.
À propos du code
En tant que développeur JavaScript, j'ai créé un serveur web Node.js pour la page de contrôle, avec des bibliothèques modernes pour l'interface et la syntaxe. La liste complète est sur mon GitHub.
J'ai choisi la modularisation tant côté frontend que backend. Voici le point d'entrée de l'application :
var boardModule = require('./src/boardModule'),
servoModule = require('./src/servoModule'),
motorModule = require('./src/motorModule');
boardModule.initBoard().then(function() {
motorModule.initMotors();
servoModule.initServo();
});
Côté frontend, même séparation par modules :
import {moveWheels, stopWheels} from './wheelsControl';
import {moveServo, stopServo} from './servoControl';
document.onkeydown = checkKeyDown;
document.onkeyup = checkKeyUp;
function checkKeyDown(e) {
moveWheels(e.keyCode);
moveServo(e.keyCode);
}
function checkKeyUp(e) {
stopWheels(e.keyCode);
stopServo(e.keyCode);
}
Pour la base de code complète, voir le dépôt GitHub ci-dessus.
Bibliothèques logicielles
- express.js – framework Node.js
- johnny-five – API JavaScript pour contrôle Arduino
- socket.io – WebSockets pour communication backend/frontend
- susy – mise en page et design responsive
- Google Material Design – éléments UI
- gulpJS – automatisation des tâches
- BabelJS – transpilation ES6
- Browserify – support modules
Mot de la fin
Je suis débutant dans l'IoT et c'est mon premier projet. Je ne prétends pas avoir utilisé les solutions optimales, mais j'espère que vous y trouverez des informations utiles.
Code
Dépôt GitHub
https://github.com/dominikfilkus/arduino-spybot-V2
Schémas
arduino-spybot.fzz (fichier Fritzing)
Processus de fabrication
- Guide professionnel : Animation bitmap sur écran tactile ILI9341 2,4″ avec Visuino
- Système d'éclairage DMX piloté par web – Contrôleur maître Arduino
- FlickMote : Télécommande IR à gestes pour maison connectée
- TV-B-Gone DIY Arduino : Télécommande universelle pour toutes les TV
- Construire une horloge maître LED personnalisée avec alarme – Visible à 12 mètres
- Horloge HSV : Un Garde-Temps Vibrant et Personnalisable pour Passionnés d'Arduino
- Véhicule Télécommandé par Android avec Raspberry Pi et Shield Moteur
- Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth
- Solutions d'alimentation optimisées pour projets Arduino