dimanche 26 août 2018

Moteur pas à pas contrôlé par WiFi (ESP8266 ou ESP32)


N.B. Ce tutoriel a été mis à jour le 2 août 2019 (ajout d'informations concernant l'ESP32).

Il y a quelques semaines, nous nous sommes amusés à contrôler un moteur à courant continu par WiFi grâce à un ESP8266 ou un ESP32.

L'expérience d'aujourd'hui est dans le même ordre d'idées, sauf  que nous contrôlerons cette fois-ci un moteur pas à pas.

Une page web nous permettra de choisir le nombre de pas effectués par le moteur, la direction de sa rotation (horaire ou antihoraire) ainsi que le temps écoulé entre deux pas consécutifs (ce qui influencera évidemment la vitesse de rotation du moteur).

Matériel nécessaire

Un moteur pas à pas (j'ai utilisé un moteur bipolaire provenant d'une vieille imprimante), une carte de développement munie d'un ESP8266 ou d'un ESP32, un double pont en H (j'ai utilisé un module L298N),  et un accès à un réseau WiFi.

Préparation de l'IDE Arduino

L'IDE Arduino ne dispose pas par défaut des fichiers nécessaires pour programmer l'ESP8266 ou l'ESP32: si ce n'est pas déjà fait, vous pouvez consulter une marche à suivre détaillée pour l'ESP8266 ou pour l'ESP32.

Le circuit

Sans trop de surprise, le circuit est très similaire à celui que nous avions utilisé pour le contrôle d'un moteur électrique conventionnel, sauf que le moteur pas à pas accapare toutes les sorties du module L298N.

Dans le sketch (disponible un peu plus loin), j'ai supposé que le moteur pas à pas allait être contrôlé par les broches GPIO 4, GPIO5, GPIO 14 et GPIO 16­.

Voici le schéma du circuit pour le module ESP32 que j'utilise (sur cette carte, la broche GPIO 16 est identifiée par "RX2"):


Avec une petite carte Wemos D1 Mini, ça donne ça (la numérotation sur la carte n'est pas le numéro de GPIO: on utilise D2, D1, D5 et D0):


Et voici sur le schéma et les instructions pour un module ESP-12 programmé au moyen d'un convertisseur USB-TTL:

L'ESP8266 nécessite une alimentation de 3,3 V, ce qui est trop faible pour la plupart des moteurs pas à pas, d'où les deux alimentations distinctes.
  • 3 broches de l'ESP8266 sont connectées à 3,3 V:  VCC, RST et CH_PD (aussi appelée "EN" sur certains modèles).
  • 2 broches de l'ESP8266 sont connectées à la masse:  GND et GPIO0.
  • La broche RXD de l'ESP8266 est reliée à la broche TX du convertisseur USB-TTL, et la broche TXD de l'ESP8266 est reliée à la broche RX du convertisseur USB-TTL.
  • Les broches GPIO4, GPIO5, GPIO14 et GPIO16 de l'ESP8266 sont branchées à IN1, IN2, IN3 et IN4 du module 298N, puisqu'elles sont responsables de contrôler le moteur.
  • Toutes les masses sont reliées ensemble (GND de l'ESP8266, du convertisseur USB-TTL et du module L298N).



Le sketch

La fonction "construitPage()" retourne une chaîne de caractères contenant la totalité de la page web, en langage html.  Cette page web contient un champ qui permettra à l'utilisateur de déterminer de combien de pas il veut faire tourner le moteur, une paire de boutons radio permettant de choisir le sens de rotation, un champ permettant de choisir le délai en millisecondes entre deux pas consécutifs, et finalement un bouton "appliquer" qu'on clique pour que les nouveaux paramètres soient pris en compte par le microcontrôleur.

La fonction "gestionPage()" est appelée lors d'un clic sur le bouton "Appliquer".  Elle met à jour quelques variables globales en fonction des choix faits par l'utilisateur de la page web, et indique les paramètres choisis dans le moniteur série (ce qui sera surtout utile pour le débogage).

prochainStep() et gestionMoteur() sont responsable de faire tourner le moteur avec les paramètres spécifiés (j'ai choisi de ne pas utiliser la bibliothèque Stepper).


Le résultat

Au démarrage du programme, l'adresse de la page web construite par l'ESP8266 ou l'ESP32  est affichée dans le moniteur série.  Il suffit de coller cette adresse dans un navigateur web pour accéder à la page.


La page web vous permet de choisir le nombre de pas de la prochaine rotation du moteur, le sens de cette rotation, et le délai en millisecondes entre chaque pas.  Le moteur devrait se mettre à tourner lorsque vous cliquez sur le bouton "Appliquer".


Yves Pelletier   (TwitterFacebook)

9 commentaires:

  1. Bonjour,

    Merci pour ce tuto,

    Je rencontre cependant un problème... A chaque fois que j'essaye de mettre en fonction le moteur tout ce coupe. J'ai essayé avec un ESP 8266 et un ESP 32 et avec deux moteur différents. Le problème semble venir du branchement entre la carte d'alimentation et le moteur mais malgré tous les tests que j'ai fais j'ai toujours le même problème :s avez vous une piste ?

    RépondreSupprimer
    Réponses
    1. Je m'attendrais à ce genre de comportement si le moteur et l'ESP partageaient la même alimentation: le moteur entraînerait alors des perturbations dans l'alimentation de l'ESP.

      Supprimer
    2. Merci pour votre réponse mais ce n'est pas le cas. Au moment d'alimenté le moteur reçoit un courant et le module L298N se coupe

      Supprimer
  2. j'essaie d'utiliser le sketch ci dessus mais j'ai une erreur de compilation m'indiquant LWIP OPEN SRC must be defined qu'estce cela siginifie ?

    RépondreSupprimer
  3. bonjour et merci pour cet excellent tutoriel.A la fin du televersement j ai le message d erreur suivant: class ESP8266WiFiClass' has no member named 'begin'.Sur le net j'ai pas trouve d explication satisfaisante.si possible pourriez m eclairer,merci par avance. mail:jean.soscia@orange.fr

    RépondreSupprimer
    Réponses
    1. Il faut probablement mettre à jour les fichiers pour l'ESP8266 (dans le gestionnaire de cartes de l'IDE Arduino).

      Supprimer
    2. Bonjour.Merci ce probleme est resolu.
      J ai realise le montage wifi moteur courant continu qui fonctionne parfaitement.Je viens de terminer le montage wifi moteur pas a pas; compilation telechargement OK. ssid et mdp a jour.Cependant je n arrive pas a avoir l adresse IP comme le premier montage. J ai beaucoup cherche! pas de solution. Pourriez vous avoir l amabilite de me repondre eventuellement. Merci par avance.

      Supprimer
    3. Pour obtenir l'adresse IP il suffit d'ouvrir le moniteur série (réglé sur 115000 je crois) puis d'appuyé sur le bouton res de votre carte.

      Supprimer
  4. Bonjour, merci pour ce tuto, j'ai réalisé et tout c'est bien passé.
    Je ne suis pas très fort en codage et je cherche à ajouté du code afin d'avoir le le nombre de pas déjà effectué avec possibilité de reset.
    Je cherche également à convertir le nombre de pas en cm.
    Toujours via une page web.
    Si vous avez vu passé des tutos qui explique cela, merci d'avance.
    Encore bravo pour ce tuto.

    RépondreSupprimer