Test du Shield Motor I2C Wemos D1 Mini (ou Pro) pour piloter 2 moteurs 15Vdc • Domotique et objets connectés à faire soi-même

Aujourd’hui, je vous propose de découvrir le Shield Motor I2C pour Wemos D1 Mini. Ce petit shield construit autour du pilote Toshiba TB6612FNG permet de piloter 2 moteurs à courant continu (DC). La carte d’extension permet de contrôler indépendamment la vitesse et la direction de chaque moteur (A, B). La puissance maximale admissible est de 1,2A par moteur. Elle supporte un pic de puissance à 3,2A.

Par défaut, la carte se trouve à l’adresse 0x30 sur le bus I2C. La carte est livrée avec une librairie en C++ ainsi que 4 exemples de code Arduino. Le firmware du STM32F030 permettant de piloter la shield via le bus I2C n’est pas installé (ou correctement installé) sur certains clones. Il est préférable d’acheter le shield Motor directement sur la boutique officielle de Wemos sur Aliexpress. En plus la carte ne coûte pas plus cher.

Déballage du Shield Motor I2C TB6612FNG pour Wemos D1 mini

Le Shield Motor I2C est livré dans une pochette anti-statique avec un jeu de connecteur simples. Il est donc prévu pour venir fermer la pile de Shields. C’est assez logique compte tenu du câblage à réaliser.

eranljamchjksojo6i8d-1168202

Contenu du paquet du shield Motor v1.0.0 pour Wemos d1 mini ou Pro.

La communication avec la carte se fait via le bus I2C. Par défaut, se sont les broches D1 et D2 qui sont utilisées. La page officielle de la carte se trouve ici.

Le Shield est construit autour du circuit TB6612FNG de Toshiba. La fiche technique complète se trouvent ici.

tocxpguk6vtpbnms5tkn-5359743

Caractéristiques techniques du shield TB6612FNG

  • Interface I2C (voir paragraphe suivant pour modifier l’adresse par défaut 0x30)
  • Tension maximale d’alimentation (broche VM) : 15Vdc max
  • Courant de sortie (broche Iout) : 1.2A (moyen) – 3.2A (en pic)
  • Fonction Standby pour économie d’énergie
  • CW/CCW/short brake/stop motor control modes
  • Broches
    • VM: Alimentation moteur + (max. 15Vdc)
    • GND: borne négative moteur –
    • A1 A2: Moteur A
    • B1 B2: Moteur B
    • S: contrôle du standby
    • Pilotage du standby
      • Mode I2C: Contrôle la fonction standby du circuit TB6612FNG à l’aide du protocole I2C
      • Mode IO: Contrôle la fonction standby du circuit TB6612FNG avec la broche “S”
    • Modes reset
      • soudé: reset avec la d1 mini (reset à la mise sous tension ou par appui sur le bouton Reset de la wemos d1 mini). C’est le mode par défaut.
      • ouvert: reset par la broche marquée “DTR”

Comment modifier l’adresse I2C de la carte

Le Shield se trouve par défaut à l’adresse 0x30 sur le bus I2C. Il existe au dos de la carte 2 jumpers AD0 et AD1. En réalisant un pont en soudant les deux bornes de chaque jumper, on peut changer l’adresse du shield. Le ‘-‘ signifie que le pot est ouvert. Le ‘x’ signifie que le pont est fermé par une soudure.

AD1 AD0 Adresse
0x2D
x 0x2E
x 0X2F
x x 0x30 (défaut)

Souder les connecteurs

Il y a 4 connecteurs à souder sur le Shield Motor. Un de chaque coté qui permet d’empiler le shield sur la Wemos D1 Mini comme d’habitude. Le troisième (coté connecteur USB) sert à alimenter le moteur sur une batterie externe (la Wemos n’est pas assez puissante pour alimenter des moteurs) et à piloter pour les deux moteurs. Le quatrième connecteur situé en vis à vis du connecteur des moteurs n’est pas documenté. Il semble que ce soit tout simplement un port série. Les hackers pourront s’en servir pour reprogrammer le micro-contrôleur STM32F030 utilisé pour la communication I2C (tutoriel complet). La broche DTR permet de faire un Reset du TB6612FNG. Il faudra désouder le jumper RST au dos de la carte pour activer ce mode. Pour souder le connecteur moteur, je vous conseille de l’insérer sur une breadboard pour maintenir le shield à la vertical durant la soudure.

pz2hg524npbu9uff0b0f-2423868 6gdocvepqoxb0zdmn3l9-1000384

Wemos a développé une librairie en C++ pour Arduino. Le code source ainsi que quatre exemples de base sont disponibles sur GitHub ici :

  • Motor_base
  • Motor_base2
  • Motor_standby_i2c
  • Motor_standby_io

Pour appeler la librairie dans vos programmes Arduino, il suffira de la déclarer celle-ci en début de programme

#include "WEMOS_Motor.h"

La méthode Motor permet d’initialiser un objet pour chaque moteur A et B. La classe Motor prend comme paramètre :

  • L’adresse I2C de la carte. Par défaut 0x30
  • Utilisez la clé _MOTOR_A ou _MOTOR_B pour indiquer à quel moteur l’objet est associé
  • La fréquence PWM. Par défaut, elle est de 1000Hz.
  • Le mode standby. Par défaut, il est géré par le shield. Si vous devez le piloter depuis la Wemos, indiquez la broche utilisée. N’oubliez pas de souder le pont STBY au dos de la carte.

Ce qui donne par exemple pour le moteur A

Motor M1(0x30,_MOTOR_A, 1000);

Pour piloter le moteur, on dispose de la méthode setmotor qui prend 1 ou 2 paramètres. Le premier paramètre est l’ordre à exécuter. Le second est la consigne du paramètre. On retrouve les commandes proposées par le circuit intégré TB6612FNG de Toshiba, à savoir :

  • _SHORT_BRAKE. Un début d’explication sur l’intérêt de la fonction ici
  • _CCW qui signifie counter clockwise ou rotation en sens anti-horaire. On passe en paramètre un niveau de puissance compris entre 0% et 100%, ce qui correspond également à la vitesse maximale du moteur
  • _CW qui signifie counter wise ou rotation en sens horaire
  • _STOP, pas besoin d’explication
  • _STANDBY, permet de mettre en pause le moteur.

7sxtjayynz38m0lwo8lb-6576634

Vous l’avez compris, il n’y a rien de bien compliqué dans l’utilisation de cette librairie. Comme d’habitude, on obtient un montage très compact et très facile à intégrer dans nos projets. Nous verrons dans un prochain tutoriel comment l’utiliser pour recycler une ancienne voiture télécommandée. Ce shield qui coûte moins de 3€ (hors frais de port) sera plus facile à utiliser qu’un pont en H L293D.

Avez-vous aimé cet article ?