Pour ce nouveau projet, je vous propose de recycler une voiture télécommandée en remplaçant le récepteur radio par un ESP8266. Les moteurs seront contrôlés à l’aide d’un shield Motor pour Wemos d1 mini présenté dans cet article. Vous avez certainement une vieille voiture télécommandée qui traine à la maison. La télécommande ne fonctionne plus ou elle a été perdue.
Pour ce projet, nous allons retirer le circuit imprimé qui contient le récepteur et les commandes des moteurs. Nous conserverons uniquement les moteurs et bloc de piles qui servira à alimenter en énergie les 2 moteurs. Pour ce tutoriel, j’ai utilisé un modèle de voiture télécommandée équipé d’un moteur pour l’orientation des roues avant. La télécommande sera remplacée par une tablette ou un smartphone à l’aide de l’application et de la librairie Blynk. Si vous n’avez pas de vielle voiture télécommandée, nous adapterons le programme dans un prochain tutoriel pour un kit RC Car.
Sommaire
Matériel utilisé
Pour ce projet, je vous propose d’utiliser le shield Motor pour Wemos d1 mini. Elle vient s’empiler sur l’ESP8266 ce qui permet d’obtenir un montage très compact. Ls moteurs seront alimentés à l’aide de l’ancien bloc de piles. La Wemos sera alimentée à l’aide d’un batterie LiPo. Ici, j’ai utilisé une batterie de 1100mAh. Je vous conseille d’utiliser le shield Battery (présenté ici) ou utiliser une Power Bank.
Comme c’est un projet de voiture télécommandée, il y a forcément des options :-).
Chargeur pour batterie LiPo avec connecteur micro USB. | |
Câble de remplacement avec connecteur JST XH2-2.54mm
environ 0,23€ le cable |
|
Base double. | |
Kit connecteur pour jumper Dupont
Environ 4,17€ la boite de 310 pièces |
|
Power Bank. Vous pouvez également alimenter la Wemos par une batterie délivrant une tension de 5V servant habituellement à recharger un smartphone ou tablette en voyage |
Attention. Le firmware n’est pas correctement installé sur de nombreux clones. Je vous conseille d’acheter directement ce shield sur la boutique officielle de Wemos CC ici.
Pourquoi ne pas utiliser un pont en H L293D ?
Effectivement, si vous ne voulez pas investir dans un shield Motor, il est tout à fait possible d’utiliser un pont en H, par exemple le L293D. Le prix de revient est équivalent. Par contre au niveau de la mise en oeuvre, ça n’a rien à voir ! Sur le shield Motor, vous n’aurez que 6 fils à brancher. L’alimentation électrique en provenance du bloc de piles et 2 fils par moteur. Vous n’aurez même pas besoin de jumpers. Vous pourrez recycler les anciens fils (s’ils sont assez long évidemment). Enfin dernier avantage, le shield Motor est déjà correctement câblé pour délivrer toute la puissance au moteur.
Sur un L293D, il faudra brancher une alimentation électrique complémentaire (par exemple une pile 4.5V) sur la broche 8 (VCC2) pour délivrer suffisamment de puissance aux moteurs. La Wemos d1 mini ne délivre pas assez de puissance pour faire fonctionner les moteurs correctement. La broche 16 sert uniquement à alimenter le pont en H. Vous pouvez la relier à la sortie 5V de la Wemos. Enfin, n’oubliez pas de brancher la masse de la batterie à la masse de la Wemos.
Repérage des broches du pont en H L293D
Enable pin pour Moteur 1. Actif sur état Haut | ||
Alimentation électrique des Moteurs. 9 à 12V (jusqu’à 36V) | ||
Enable pin pour Moteur 2. Actif sur état Haut | ||
Alimentation 5V du pont L293H (jusqu’à 36V) |
Préparation de la voiture télécommandée
La première chose à faire est donc de démonter l’ancien circuit. Le plus difficile est le démontage. Dans mon cas, la carrosserie était collée au chassis. Coupez tous les câbles au plus près du récepteur radio.
Circuit ESP8266
Pour connecter les anciens câbles au shield Motor, vous pouvez utiliser un kit de connecteur Dupont. Voici le montage terminé.
J’ai utilisé une base double pour limiter la hauteur de l’assemblage. Il n’y a pas de position particulière à respecter. La Wemos d1 mini peut être placée aussi bien à droite qu’à gauche. Le Shield Motor n’est pas livré avec des connecteurs à empiler,, elle a pris place au dessus de la Wemos. Le shield Battery sur l’emplacement libre avec la Led. Une Led verte de 5mm de diamètre pouvant supporter une tension d’alimentation comprise entre 3 et 3.4V, il n’est pas utile de réduire la tension délivrée par la Wemos d1 mini (3.3V).
Projet Blynk
Lancez Blynk sur votre smartphone ou tablette. Si vous disposez d’un serveur local, connectez vous à celui-ci en modifiant la source comme indiqué sur la copie d’écran ci-dessous.
Créez un nouveau projet. Dans la liste Device, sélectionnez ESP8266. Dans la liste Connexion Type, choisissez WiFi.
Placez ensuite 4 boutons. Choisissez le mode Push. La valeur est maintenue jusqu’au relâchement de celui-ci. Voici les variables virtuelles utilisées dans le code Arduino :
- V1 : avancer
- V2 : reculer
- V3 : droite
- V4 : gauche
Placez enfin un slider (V0). Cochez Send values on release only, ce qui permet de n’envoyer la valeur de la consigne qu’au moment du relâchement du slider. La borne maximale ne doit pas excéder 100 (%).
Voici le projet obtenu
Code Arduino / ESP8266
Pour ce projet, nous allons inclure les 3 librairies suivantes :
#include #include #include "WEMOS_Motor.h"
Les variables suivantes permettent de définir
- la consigne de la puissance du moteur de propulsion
- la broche sur laquelle est branchée la Led qui indique l’état de connexion au serveur Blynk
- les paramètres de connexion au réseau WiFi
- le token du projet Blynk
// Vitesse exprimée en % de la puissance - Speed depend % of the power int _speed = 25; // % int STATUS_BLYNK = D4; // Etat connexion serveur Blynk - Blynk connexion status // Vos paramètres de connexion WiFi - Your WiFi credentials. char ssid[] = "yourSSID"; char pass[] = "yourPassword"; // Jeton Blynk - Blynk Token char auth[] = "b065eb0a6e36434da42367b3fa7c3340";
Maintenant, nous allons créer deux objets qui permettent de contrôler les moteurs
Motor M1(0x30,_MOTOR_A, 1000);//Motor A - Direction Motor M2(0x30,_MOTOR_B, 1000);//Motor B - Propulsion
Dans la boucle setup, on initialise la sortie de Led et on lance la connexion au serveur Blynk local. Si vous n’utilisez pas un serveur Blynk local, supprimez simplement les deux derniers paramètres (IP du serveur Blynk local et port).
void setup() { Serial.begin(115200); // Initialise la Led indiquant l'état de connexion au serveur Blynk - Init status Led inidcating Blynk connexion status pinMode(STATUS_BLYNK, OUTPUT); digitalWrite(STATUS_BLYNK, LOW); // Authentification auprès du serveur local Blynk - Authenticate to Blynk Private Server Serial.println("Connecting Blynk"); Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,24), 8442); }
La boucle loop est très simple. On appel simplement à chaque passage Blynk. On vérifie que l’on est toujours connecté au serveur Blynk. Si c’est le cas, on allume la Led. Dans le cas contraire, on l’éteint.
void loop() { Blynk.run(); // Actualise la Led indiquant l'état de connexion au serveur Blynk - Update Blynk led Status if (Blynk.connected()){ digitalWrite(STATUS_BLYNK,HIGH); } else { digitalWrite(STATUS_BLYNK, LOW); } }
Maintenant il ne reste plus qu’à gérer les commandes de pilotage :
- V0 : ajuste la puissance moteur entre 0 et 100%
- V1 : avance
- V2 : recule
- V3 : tourne à gauche
- V4 : tourne à droite
Pour avancer par exemple, on utilise la méthode setmotor qui prend deux paramètres
- l’ordre (_CW, _CCW, _SHORT_BRAKE, _STOP ou _STANDBY)
- une consigne
Donc ici, pour avancer, on passera les paramètres _CW avec la consigne contenue dans la variable _speed. Pour reculer, on passera l’ordre inverse, _CCW. Si les commandes sont inversées, vous pouvez simplement inverser le câblage au niveau du shield Motor. Vous remarquerez dans le code complet que j’ai limité la vitesse de recul à 50% de la vitesse d’avance. Libre à chacun de supprimer cette limitation.
// Avance - Drive BLYNK_WRITE(V1) { if (param.asInt()) { Serial.println("D"); M2.setmotor(_CW, _speed); } else { M2.setmotor(_STOP); } }
Pour aller à droite ou à gauche, c’est exactement la même chose. On fera tourner le moteur dans un sens ou dans l’ordre. Les roues directrices reviennent en position centrale à l’aide d’un ressort. Il n’y a donc rien à programmer. Par contre c’est un fonctionnement tout ou rien.
// Droite - Right BLYNK_WRITE(V3){ if (param.asInt()) { Serial.println(">>"); M1.setmotor(_CW,100); } else { M1.setmotor(_STOP); } }
Voici le code complet du projet. Il vous reste à modifier les paramètres présentés plus haut avant de le téléverser le programme sur l’ESP8266 de la Wemos d1 mini.
#include #include #include "WEMOS_Motor.h" Motor M1(0x30,_MOTOR_A, 1000);//Motor A - Direction Motor M2(0x30,_MOTOR_B, 1000);//Motor B - Propulsion int _speed = 25; // Vitesse exprimée en % de la puissance - Speed depend % of the power int STATUS_BLYNK = D4; // Etat connexion serveur Blynk - Blynk connexion status // Vos paramètres de connexion WiFi - Your WiFi credentials. char ssid[] = "yourSSID"; char pass[] = "yourPassword"; // Jeton Blynk - Blynk Token char auth[] = "b065eb0a6e36434da42367b3fa7c3340"; void setup() { Serial.begin(115200); // Initialise la Led indiquant l'état de connexion au serveur Blynk - Init status Led inidcating Blynk connexion status pinMode(STATUS_BLYNK, OUTPUT); digitalWrite(STATUS_BLYNK, LOW); // Authentification auprès du serveur local Blynk - Authenticate to Blynk Private Server Serial.println("Connecting Blynk"); Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,24), 8442); } BLYNK_WRITE(V0) { Serial.print("Set speed: "); _speed = param.asInt(); Serial.print(_speed); Serial.println("%"); } // Avance - Drive BLYNK_WRITE(V1) { if (param.asInt()) { Serial.println("D"); M2.setmotor(_CW, _speed); } else { M2.setmotor(_STOP); } } // Recule - Rear BLYNK_WRITE(V2) { if (param.asInt()) { Serial.println("R"); M2.setmotor(_CCW, _speed / 2); } else { M2.setmotor(_STOP); } } // Droite - Right BLYNK_WRITE(V3){ if (param.asInt()) { Serial.println(">>"); M1.setmotor(_CW,100); } else { M1.setmotor(_STOP); } } // Gauche - left BLYNK_WRITE(V4){ if (param.asInt()) { Serial.println("