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 la raison du condensateur placé 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)

jeudi 19 juillet 2018

Bluetooth et MPLAB Xpress Evaluation Board

Voici un petit tutoriel qui pourrait vous être utile si vous désirez envoyer ou recevoir de l'information par bluetooth avec une carte MPLAB Xpress Evaluation Board (ou un autre microcontrôleur PIC).

Pour ce faire, nous utiliserons un module bluetooth HC-06 et, bien entendu, un appareil pouvant converser en bluetooth (télépĥone, tablette...).

Avant d'aller plus loin, je vous mentionne tout de suite que si vous désirez plutôt communiquer en bluetooth avec un Raspberry Pi, un Arduino, un MSP430 Launchpad ou un STM32 Nucleo, vous trouverez sur ce blog des tutos spécialement conçus pour votre plateforme de développement préférée!  Si vous voulez programmer vous-même l'application android qui conversera avec votre carte, c'est déjà couvert aussi.

Connexions

Nous allons régler la carte MPLAB Xpress Evaluation Board afin qu'elle émette un signal UART par sa broche RB1, et qu'elle le reçoive sur sa broche RB0.  Par conséquent, les quatre connexions sont:
  • RXD du module HC-06 ----- RB1 de la carte MPLAB Xpress
  • TXD du module HC-06 ----- RB0 de la carte MPLAB Xpress
  • GND du module HC-06 ----- GND de la carte MPLAB Xpress
  • VCC du module HC-06 ----- 5 V de la carte MPLAB Xpress
(Je crois que certains modules HC-06 sont conçus pour une alimentation de 3,3 V.  Le mien indique clairement "Power 3.6 V - 6 V" même si le niveau logique est de 3.3 V.)




Exemple 1: transmission d'information (carte MPLAB Xpress vers téléphone)

Dans ce premier exemple, la carte MPLAB Xpress va émettre par bluetooth une série de messages qui pourront être captés par un téléphone ou une tablette.

Configuration dans MCC

Après avoir créé un nouveau projet dans l'IDE en ligne MPLAB Xpress, nous ouvrons le logiciel MPLAB Xpress Code Configurateur, afin d'effectuer quelques réglages.

Nous devons d'abord ajouter un module "EUSART" à notre projet.  Pour ce faire, nous cliquons deux fois sur "EUSART" dans la liste "Device Resources"...


On coche les cases "Enable Transmit" et "Redirect STDIO to EUSART". Si votre module HC-06 est réglé à une vitesse autre que 9600 bauds, vous en profitez pour modifier ce paramètre aussi.



On clique ensuite sur les petits cadenas correspondant au port B0 pour EUSART RX, et au port B1 pour EUSART TX.


Ne pas oublier de cliquer sur le bouton "Generate" afin que ces réglages soient transmis à MPLAB Xpress.

Script

Le script ci-dessous (à insérer dans le fichier main.c de votre projet), permet d'émettre un message par bluetooth chaque seconde.



Couplage avec un appareil hôte

S'il s'agit de la première utilisation de ce module HC-06 avec le deuxième appareil (smartphone, tablette, ordinateur) il faut coupler les deux dispositifs.  Voici la procédure pour l'appairage avec un appareil android (c'est similaire si vous utilisez autre chose qu'un appareil android).

Dans Paramètres, Bluetooth, assurez-vous d'abord que Bluetooth est activé.  S'il est alimenté, le module HC-06 devrait figurer dans la liste des appareils disponibles.



Cliquez sur le nom du module. Le mot de passe par défaut est généralement "1234" (si ce mot de passe ne vous plaît pas, il est possible de le modifier).


Si tout se passe bien, le HC-06 apparaît ensuite dans la liste des périphériques couplés.



À cette étape, la LED rouge du module HC-06 continue de clignoter.  Ce n'est que lorsque la connexion sera établie avec une application de l'appareil android qu'elle demeurera allumée de façon continue.

Appli bluetooth

Il existe tout plein d'applications android permettant la communication bluetooth.  Pour effectuer mes tests, j'ai utilisé Serial Bluetooth Terminal par Kai Morich.

Après avoir démarré Serial Bluetooth Terminal, il est important d'établir la communication bluetooth avec le Nucleo en cliquant sur le bouton illustré ci-dessous:


Lorsque la communication est établie, le bouton change de forme, et la LED rouge du module HC-06 cesse de clignoter.

Résultats

Les messages émis de façon répétitive par la carte MPLAB Xpress s'affichent à l'écran de la tablette.



Exemple 2: réception d'information (téléphone vers carte MPLAB Xpress)

Dans ce deuxième exemple, nous contrôlerons les 4 LEDs intégrées à la carte MPLAB Xpress par bluetooth, à partir d'un téléphone ou d'une tablette.

Configuration dans MCC

Il s'agit des mêmes réglages que pour le premier exemple, sauf qu'il n'est pas nécessaire de cocher la case "Enable Transmit". De plus, dans la zone des cadenas, il est important de définir les ports A0, A1, A2 et A3 comme des sorties:  "GPIO output" (elles sont reliées aux  LEDs de la carte).


Script

On peut ensuite utiliser le script ci-dessous (à coller dans le fichier main.c).  Si on reçoit par bluetooth le message "a", on allume la première LED. Si on reçoit le message "b", on allume la deuxième, etc.



Résultats

La zone située dans le bas de l'écran de l'appli Serial Bluetooth Terminal permet d'envoyer un message. Si vous écrivez la lettre a, puis cliquez sur le bouton de droite, la première LED de la carte MPLAB Xpress Evaluation Board s'allume.


Yves Pelletier   (TwitterFacebook)

Related Posts Plugin for WordPress, Blogger...