dimanche 26 août 2018

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

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

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), un module ESP8266 comportant un grand nombre de broches GPIO (j'ai utilisé le modèle ESP-12), un double pont en H (j'ai utilisé un module L298N), un convertisseur USB-TTL pour programmer votre ESP8266 (à moins que votre ESP8266 ne se trouve déjà sur une carte de développement complète), 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 un module ESP8266: si ce n'est pas déjà fait, il faut d'abord les installer.

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 (cliquez sur le schéma pour l'agrandir).


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).
Avant de procéder au téléchargement du sketch, branchez la broche RST à la masse pendant quelques secondes, avant de la rebrancher à 3,3 V.


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 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)

vendredi 10 août 2018

Moteur électrique contrôlé par WiFi (ESP8266)

Ça faisait une éternité que je ne m'étais pas amusé avec mon ESP8266, le petit microcontrôleur très économique spécialement conçu pour le WiFi. Aujourd'hui, je vais lui connecter un petit moteur à courant continu, qui pourra être contrôlé à distance à partir d'une page web.

Matériel

Nous utiliserons une version de l'ESP8266 qui comporte un nombre suffisant de sorties, un circuit intégré de type "pont en H" (L298, L293D ou autre) pour piloter le moteur, et un petit moteur électrique à courant continu.  Bien entendu, vous devez avoir accès à un réseau WiFi.

Pour ma part, lors du développement de ce projet, j'ai utilisé le module ESP-12, un module L298N et un moteur muni d'une boîte d'engrenages.  Un convertisseur USB-TTL fonctionnant à un niveau logique de 3,3 V a aussi été nécessaire pour la programmation de l'ESP8266,

Préparation de l'IDE Arduino

S'il s'agit de votre premier projet impliquant la programmation de l'ESP8266 avec l'IDE Arduino, assurez-vous d'installer les extensions nécessaires dans votre copie de l'IDE.

Circuit

Voici le schéma complet du circuit qui permet à la fois de programmer l'ESP8266 et d'utiliser le circuit de contrôle du moteur (cliquez sur le schéma pour l'agrandir).

L'ESP8266 exige une alimentation de 3,3 V, alors que le module L298 fonctionne avec au moins 5 V, d'où les deux alimentations distinctes.  De plus, l'ESP8266 est assez capricieux en matière d'alimentation: si cette dernière n'est pas impeccablement stable, il risque d'avoir un comportement imprévisible (c'est une bonne idée de placer un condensateur entre les deux bornes de la source de tension).

  • 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 et GPIO5 de l'ESP8266 sont branchées à IN1 et IN2 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).

Ne pas oublier de brancher la broche RST à la masse pendant quelques secondes juste avant de faire le téléchargement du sketch.

Sketch

Les bibliothèques pour l'ESP8266 font l'essentiel du travail pour nous.  Essentiellement, le sketch construit une page web comportant 3 boutons radio permettant de sélectionner la vitesse du moteur (arrêt, lent et rapide), et 3 boutons radio permettant de sélectionner le sens de rotation (horaire ou antihoraire), et contrôle le moteur en fonction des paramètres de la page web lorsque l'utilisateur clique sur le bouton "Appliquer".

Le moteur se contrôle de la façon habituelle: il tourne dans un sens lorsque la broche GPIO4 est à l'état logique haut pendant que la broche GPIO5 est à l'état logique bas, et dans l'autre sens si c'est le contraire.  La vitesse du moteur se règle grâce à un signal PWM (notez que pour l'ESP8266, la valeur maximale est de 1023 pour le PWM).

Évidemment, pour que ça fonctionne, vous devez mettre le nom de votre réseau Wifi ainsi que le mot de passe dans les variables "ssid" et "password" avant de le transférer dans l'ESP8266.

Résultats

Lors du démarrage de l'ESP8266, ouvrez le moniteur série de l'IDE Arduino afin de connaître l'adresse IP qui lui a été assignée.


Vous entrez ensuite cette adresse IP dans le navigateur web de n'importe quel appareil branché au même réseau local.


Une page web apparaît, présentant 3 boutons radio pour le réglage de la vitesse du moteur (arrêt, lent, rapide) et deux boutons pour le sens de rotation du moteur (horaire et antihoraire).  Le moteur devrait tourner selon vos spécifications lorsque vous cliquez sur le bouton "Appliquer".

Yves Pelletier   (TwitterFacebook)

mardi 7 août 2018

Livre: Arduino, le guide complet, par J. M. Hugues

Arduino, le guide complet
par J.M. Hugues
Éditions First
628 pages
Publié en 2018

J'aimerais bien qu'on m'explique comment un livre intitulé "Arduino, a technical reference" peut s'affubler en français d'un  titre aussi pompeux et trompeur que "Arduino, le guide complet".  Bien que ce livre présente certaines qualités, il est très, très loin d'être complet.

Dans son introduction, l'auteur indique lui-même que le livre s'adresse à ceux "qui ont exploité le plus possible les livres d'initiation et les guides pratiques de création de projets".  J'en déduis que l'auteur n'a jamais eu la prétention d'avoir écrit un guide complet!

Je qualifierais plutôt ce livre de "référence complémentaire", car l'auteur choisit souvent d'insister sur des aspects qui ne sont pas abordés dans les autres livres portant sur l'Arduino.  L'aspect positif de ce choix, c'est que ça rend ce livre pertinent si vous avez déjà lu quelques livres sur l'Arduino.  Par contre, le choix des sujets traités semble parfois arbitraire, et j'ai vraiment eu l'impression de lire 3 ou 4 livres différents rassemblés dans un même volume.

La première partie (chapitres 2 à 6), beaucoup plus aride que ludique, pourrait s'intituler "Ce que vous n'avez pas vraiment besoin de savoir pour programmer l'Arduino". On y présente, par exemple,  les caractéristiques techniques des microcontrôleurs AVR, quelques éléments de langage assembleur, comment programmer l'Arduino en utilisant autre chose que l'IDE Arduino (que le traducteur appelle "l'atelier Arduino").  Bref, le genre de connaissances qui étaient peut-être nécessaires pour programmer un microcontrôleur AVR lorsqu'Arduino n'existait pas, mais qui ne le sont plus maintenant qu'Arduino existe.

Le chapitre 7 présente en détail les bibliothèques fournies avec l'IDE Arduino, en énumérant les classes et méthodes de chacune de ces bibliothèques. Il s'agit à mon avis d'une initiative intéressante, car je ne me souviens pas avoir vu ce genre de référence dans d'autres livres.  Mais puisqu'il s'agit, selon le titre, du guide complet sur l'Arduino, on peut s'étonner qu'il n'y ait nulle part une liste des fonctions régulières du langage Arduino (domme digitalWrite(), delay(), etc.). Je mentionnerais aussi que certaines des bibliothèques qui ne sont pas fournies avec l'IDE Arduino (et qui ne sont donc pas présentées dans le livre) sont beaucoup plus utilisées que des bibliothèques ultra spécialisées comme Esplora...

Les chapitres 8 et 9 empruntent un style radicalement différent de tous ceux qui ont précédé: ça devient un genre de catalogue qui énumère une très grande quantité de boucliers (shields) et capteurs pouvant être branchés à une carte Arduino. Ça peut permettre au débutant d'avoir une idée de ce qui existe sur le marché.  Toutefois, les descriptions sont extrêmement brèves, et sont totalement insuffisantes pour permettre d'utiliser ces produits lorsque vous en avez fait l'acquisition.

Pourtant, dans son introduction, l'auteur déclarait "En tant qu'ingénieur, je suis souvent déçu d'acheter quelque chose d'intéressant, pour devoir constater qu'il n'y a aucune documentation. Cela m'oblige à me lancer dans une longue quête afin de trouver un peu de documentation sur Internet, et dans une langue que je peux comprendre (donc par exemple pas en chinois)."  À mon avis, ces chapitres ne font absolument rien pour régler ce problème!  On trouve bien quelques schémas de circuit ici et là, mais la grande majorité des descriptions vous fournissent moins d'informations qu'une annonce typique sur eBay.

Finalement, les derniers chapitre du livre adoptent un autre style différent: il s'agit maintenant de présenter, de façon détaillée, 4 projets spécifiques: le Greenshield (un système de surveillance et de contrôle pour l'horticulture), le Switchinator (14 sorties programmables), un générateur de signal et un thermostat intelligent. Il s'agit de projets assez ambitieux, incluant la conception de circuits imprimés au moyen des logiciels Eagle et Fritzing.  C'est la partie du livre qui m'a semblé la mieux réussie.

Bien qu'on mentionne à quelques reprise que les fichiers de code source sont disponible "sur le site de l'éditeur ainsi que sur GitHub", l'url n'est fourni nulle part dans le livre.  Voici un lien direct.

Je termine par une courte liste d'erreurs ou de négligences qui me semblent un peu embarrassantes:

Page 340, dans un paragraphe consacré aux photorésistances: "Ils réagissent bien moins vite que les composants basés sur une diode ou un transistor, mais cela suffit à créer par exemple un jeu de lumière piloté par de la musique".  (Détecter de la musique au moyen d'une photorésistance me semble une véritable prouesse technique.)

Page 353, dans une brève explication du principe de fonctionnement d'un télémètre à ultrasons: "Il suffit de diviser par deux le délai entre l'émission et la réception pour connaître la distance. Cette mesure est possible parce que la fréquence des ultrasons est bien inférieure à celle de la lumière. Il n'est donc pas difficile de distinguer les deux moments, si le programme va suffisamment vite."  (La mesure du délai est possible parce que la vitesse des ultrasons est beaucoup plus faible que celle de la lumière, peu importe leur fréquence.)

Page 270, au sujet de la fabrication de nos propres shields pour Arduino: "Vous pouvez faire le vôtre avec une plaque à pastilles et les connecteurs appropriés que vous trouverez chez tous les fournisseurs. Je rappelle que les connecteurs des cartes Arduino sont à la norme industrielle de 2,54 mm d'espacement (un dixième de pouce). Tous les électroniciens possèdent ce genre de connecteurs dans leur stock de base".  (Cette distance de 2,54 mm  n'est pas respectée entre les broches 7 et 8, ce qui complique considérablement l'utilisation d'une plaque à pastilles conventionnelle).

En résumé: un livre sans véritable fil conducteur, pas du tout conseillé aux débutants et, contrairement à ce que prétend le titre, pas du tout complet!

Yves Pelletier   (TwitterFacebook)

Related Posts Plugin for WordPress, Blogger...