jeudi 14 septembre 2017

Appli Android pour contrôler un moteur pas à pas par bluetooth (Arduino)

Vous désirez contrôler un moteur pas à pas par bluetooth au moyen de votre téléphone android? Ça tombe bien, c'est justement le sujet du billet d'aujourd'hui!

Côté récepteur, notre montage est constitué d'un moteur pas à pas bipolaire, d'une carte Arduino Uno, d'un module bluetooth HC-06, et d'un double pont en H L293D (un L298N aurait fait l'affaire aussi).

Côté émetteur, un appareil android qui exécutera une application que nous aurons nous-même conçue sur MIT App Inventor.

Cette activité suppose certaines connaissances préalables.  Si ce n'est pas déjà fait, je crois qu'il serait préférable de lire mon introduction au module bluetooth HC-06 avec Arduino, mes explications détaillées sur la façon de piloter un moteur pas à pas avec un L293D, mon introduction à la programmation d'une appli android avec MIT App Inventor 2 et, finalement, la programmation d'une appli androit pour communiquer en bluetooth avec MIT App Inventor 2!

Voici une vidéo du dispositif en action:



Connexions du L293D

Le circuit intégré L293D est branché de la même façon que dans ce précédent billet consacré au pilotage d'un moteur pas à pas.

  • Les broches 1, 9 et 16 du L293D sont branchées à la sortie 5 V de la carte Arduino.
  • Les broches 4, 5, 12 et 13 constituent la masse du L293D.  On doit y brancher la masse (GND) de l'Arduino, et la borne négative de la source d'alimentation du moteur pas à pas.
  • La borne positive de l'alimentation du moteur pas à pas est branché à la broche 8 du L293D.
  • Le moteur pas à pas est branché aux borches 3, 6, 11 et 14 du L293D
  • Les broches 2, 7, 10 et 15 du L293D sont branchées respectivement aux sorties 8, 9, 10 et 11 de l'Arduino.
Connexions du module bluetooth HC-06 et du CI 4050

Le module bluetooth HC-06 est conçu pour fonctionner à un niveau logique de 3,3 V.  Pour cette raison, l'utilisation d'un circuit intégré 4050 est conseillée pour abaisser le signal de 5 V émis par l'Arduino.

Voici les connexions du 4050; pour plus d'explications, référez-vous au billet sur l'utilisation d'un 4050 pour abaisser un niveau logique.


  • Broche 1 du 4050:  sortie 3,3 V de l'Arduino
  • Broche 2 du 4050:  entrée RXD du module HC-06
  • Broche 3 du 4050:  sortie Tx de l'Arduino (pin 1)
  • Broche 8 du 4050:  masse (GND de l'Arduino)


Le module HC-06, quant à lui, est branché de la façon suivante:


  • Vcc du HC-06 --- sortie 5 V de l'Arduino
  • GND du HC-06 --- GND de l'Arduino
  • TXD du HC-06 --- Rx de l'Arduino (pin 0)
  • RXD du HC-06 --- broche 2 du 4050

Vous pouvez bien sûr vous référer au billet Bluetooth et Arduino: le module HC-06 pour plus de détails.




Circuit complet

Voici donc le schéma complet, incluant la carte Arduino, le L293D, le 4050, le module HC-06 et le moteur pas à pas!



Sketch de l'Arduino

L'Arduino recevra par bluetooth un nombre entier situé entre 0 et 100.  Par défaut, on considère que la position angulaire initiale du moteur est 50.  À partir de cette position initiale, le moteur doit faire un demi-tour dans un sens pour atteindre la position 0, et un demi tour dans l'autre sens pour atteindre la position 100.




Réalisation de l'appli android avec MIT App Inventor 2

L'appli android comporte les boutons nécessaires pour établir une communication bluetooth, ainsi qu'un "ascenseur" que l'utilisateur déplace afin de faire tourner le moteur pas à pas à la position désirée.

L'interface comporte 8 éléments:



1)  Un rectangle "Arrangement horizontal", pris dans la catégorie "Disposition", qui permet de faire en sorte que les éléments 2, 3 et 4 seront disposés dans la fenêtre sur une même ligne horizontale.

2)  Un "Label" (disponible dans la catégorie "Interface Utilisateur").  Par défaut, ce label portait le nom "Label1", mais je l'ai renommé "StatutConnexion".  La mention "connecté" ou "déconnecté" s'affichera à cet endroit.

3)  Un "Sélectionneur de liste" (disponible dans la catégorie "Interface Utilisateur").  Lorsque l'utilisateur cliquera sur cet élément, la liste des appareils bluetooth disponibles s'affichera à l'écran. J'ai renommé cet élément "BoutonConnecter", et j'ai remplacé son texte par "Connecter".

4)  Un "Bouton" (disponible dans la catégorie "Interface Utilisateur") qui servira à interrompre la connexion avec l'Arduino.  J'ai renommé cet élément "BoutonDéconnecter", et j'ai remplacé son texte par "Déconnecter".

5)  Un deuxième "Label" (disponible dans la catégorie "Interface Utilisateur").  J'y ai inscrit le texte "Position".

6)  Un "Ascenseur" (disponible dans la catégorie "Interface Utilisateur").  Largeur:  80% de la fenêtre, valeur maximale:  100, valeur minimale:  0.

7) Un "Client Blutooth" (disponible dans la catégorie "Connectivité"), indispensable pour toute application qui communique avec bluetooth.

8)  Un "Notificateur" (disponible dans la catégorie "Interface Utilisateur"), qui permet d'afficher un message d'alerte si bluetooth n'a pas été activé sur l'appareil android.


Construction du programme

Passons maintenant en mode "Blocs".  Tout ce qui concerne le contenu le contenu de l'élément "Arrangement horizontal" est identique à ce que j'avais décrit dans le billet intitulé "Programmer une appli android pour communiquer en bluetooth":


Il ne reste plus qu'à gérer le comportement de notre ascenseur:  lorsqu'on le déplace, il envoie sa nouvelle position (un nombre situé entre 0 et 100) par l'entremise du client bluetooth:


Fichier .aia

Vous pouvez télécharger ici le programme complet:  Moteur_PAP.aia

Yves Pelletier   (TwitterFacebook)

1 commentaire:

  1. Bonjour Yves,
    J'aurais une question que je n'ai pas trouvé de réponse sur le net .
    Je dois faire tourner un moteur PàP a des degrés précis .
    J'ai trouvé cela sur cette chaine : Controlar Motor desde su Teléfono
    La commande sur pc est parfaite car elle utilise les 360° mais par Bluetooth c'est limité et à des degrés qui ne correspondent pas a mes attentes .
    Donc je me posais la question si on pouvait modifier ce programme Bluetooth afin d'avoir une sélection a tout les degrés comme sur le pc ?
    Je n'ai pas vraiment de connaissance en informatique et j'ai des problèmes pour garder les choses en mémoire flash . Mon projet c'est de motoriser une plaque tournante que j'ai acheté il y a plus de 30 ans pour mon réseau de train .
    Je suis bloqué depuis plus de 3 semaines :(
    De très bonnes choses pour apprendre Arduino , je vais m'y mettre dés mon retour de l’hôpital .
    Bonne continuation .

    RépondreSupprimer