jeudi 12 octobre 2017

Capteur infrarouge passif (PIR) avec une carte STM32 Nucleo


Dans ce court billet, je vous fournis quelques informations utiles pour détecter un mouvement au moyen d'un capteur à infrarouge passif (ou PIR, pour passive infrared) branché à une carte STM32 Nucleo.

Pour plus d'informations au sujet des capteurs PIR, je vous réfère à ce précédent billet:  vous y trouverez des informations utiles concernant leur principe de fonctionnement et les réglages qu'on peut effectuer au moyen de leurs potentiomètres. Si vous préférez utiliser une carte Arduino ou encore un Raspberry Pi, il existe également des tutoriels à ce sujet.

Connexions

Le capteur nécessite une tension d'alimentation d'au moins 5 V, mais sa sortie délivre malgré tout une tension de 3,3 V qui est tout à fait appropriée pour notre Nucleo.

En théorie, les branchements sont donc:
  • +5 V du PIR : 5V du Nucleo
  • OUT du PIR : D7 du Nucleo
  • GND du PIR:  GND du Nucleo


Pourquoi ai-je précisé "en théorie"?  Parce qu'aussi longtemps que je me suis obstiné à alimenter mon capteur au moyen de la sortie 5 V de ma carte Nucleo, le capteur s'est comporté de façon complètement erratique (le symptôme le plus fréquent, c'est qu'il continuait de détecter un mouvement alors qu'il n'y en avait plus depuis bien longtemps).  J'ai essayé de stabiliser l'alimentation avec le vieux truc du condensateur ajouté entre les deux bornes, mais ça n'a pas apporté d'amélioration notable.  Par contre, tout fonctionne à merveille si mon capteur est alimenté par sa propre source de tension.

Voici donc le circuit qui a correctement fonctionné pour moi:



Script mbed

Voici finalement un script réalisé au moyen de l'IDE en ligne mbed.  Lorsqu'un mouvement est détectée, la LED verte intégrée à la carte Nucleo s'allume, et un message est envoyé à l'ordinateur par liaison série.


Remarquez que si votre seul objectif est d'allumer une LED lorsque que capteur PIR détecte un mouvement, la carte Nucleo n'est pas nécessaire:  le capteur PIR peut très bien piloter une LED ou un relais sans l'aide d'un microcontrôleur.   Ce script se veut plutôt un exemple qui pourra servir de point de départ à un projet plus ambitieux.

Yves Pelletier   ( Twitter , Facebook )

dimanche 8 octobre 2017

Étude de CI: sonnette M581A

Alors que certains circuits intégrés peuvent accomplir de nombreuses fonctions très différentes l'une de l'autre, d'autres ont été conçus pour une seule tâche très spécifique.  Le M581A de Mosdesign (fiche technique) en est un bon exemple:  il sert exclusivement à produire un son de sonnette d'immeuble.

J'ai fait l'essai de la plus simple des 4 versions disponibles (le format TO-92, généralement utilisé pour un transistor).

Les trois broches du M581A sont:

VDD:  tension de 3 V (4,5 V au maximum)
OUT:  le signal de sortie
VSS:  la masse

Comme l'indique le schéma fourni dans la fiche technique, le signal de sortie est acheminé à un haut-parleur par l'entremise d'un transistor NPN (j'ai utilisé une résistance de 2,2 kΩ).

Le signal (une succession de deux fréquences) se déclenche lorsque la broche VDD est soumise à une tension de 3 V.  Pour émettre un nouveau signal, il faut rétablir l'alimentation de la broche VDD après l'avoir interrompue.  Une façon évidente d'y arriver est de placer un bouton poussoir entre la broche VDD et l'alimentation:  le son est émis chaque fois qu'on presse le bouton.


Vous pouvez entendre le résultat dans la vidéo ci-dessous.




Donc rien de bien spectaculaire, mais on obtient le résultat désiré au moyen d'un minimum de composants.  Il est par contre impossible de modifier les paramètres du son émis.

Yves Pelletier   (TwitterFacebook)

jeudi 5 octobre 2017

Une horloge à base d'ATTiny85

L'horloge affiche l'heure:  10h52min07sec
Même s'il s'agit du genre d'objet qu'on peut acheter tout fait pour un prix désisoire, c'est toujours amusant de fabriquer sa propre horloge à affichage numérique.  Aujourd'hui, je vous propose la fabrication d'une horloge numérique constituée d'un ATTiny85, d'une horloge temps réel DS1307 et d'un module "LED AND KEY" (basé sur le TM1638).

Notre horloge sera en mesure d'afficher l'heure et la date.  Grâce aux boutons inclus sur le module "LED and KEY", il sera facile pour l'utilisateur de régler à sa guise la date et l'heure.  De plus, puisque le module "LED and KEY" comporte également une série de 8 LEDs, nous utiliserons 7 de ces LEDs pour indiquer le jour de la semaine (lundi, mardi, etc.).

Installation des bibliothèques

J'ai réalisé cette horloge en programmant l'ATTiny85 avec l'IDE Arduino.  J'ai utilisé le core de David A. Mellis, avec une fréquence d'horloge de 1 MHz.  Pour plus de détails concernant l'installation de ce core, référez-vous à ce précédent billet.

Pour faciliter l'utilisation du module d'affichage LED and KEY, nous devons installer la bibliothèque TM1638 de Ricardo Batista (voir cet article qui explique une modification qui doit être apportée à cette bibliothèque lors de son utilisation avec l'ATTiny).

Quant au module d'horloge temps réel DS1307, il nécessite l'installation de deux bibliothèques spécialement conçues par Adafruit pour l'ATTiny: TinyRTCLib et  TinyWireM.

Assurez-vous donc d'avoir installé ces 3 bibliothèques.


Le sketch

L'affichage de la date et de l'heure ne nécessite que quelques lignes de code puisque les bibliothèques effectuent la plus grande partie du travail.

L'horloge affiche la date:  24 septembre 2017

Là où j'ai eu un peu plus de travail à faire, c'est dans la gestion des boutons:

Le bouton "S1" permet à l'utilisateur de basculer entre l'affichage de l'heure et l'affichage de la date.
Le bouton "S2" permet d'augmenter la valeur situé la plus à gauche sur l'afficheur (l'heure ou le jour, selon ce qui est affiché).  Si on appuie simultanément sur le bouton S8, la valeur diminue plutôt qu'augmenter.
Le bouton "S3" permet d'augmenter la valeur au centre de l'afficheur (les minutes ou le mois, donc). Encore une fois, si on appuie aussi sur le bouton S8, la valeur diminue.
Le bouton "S4" permet d'augmenter la valeur situé à droite sur l'afficheur (les secondes ou l'année), et on peut la diminuer si on appuie sur S8 au même moment.
Le bouton "S5" permet de changer le jour de la semaine, qui est indiqué par une des 8 LEDs située au-dessus de l'affichage numérique.

En ce qui concerne le jour de la semaine, cette fonction n'est pas offerte par le module RTC.  C'est donc notre sketch qui change la LED allumée lorsqu'on constate que la date vient de changer.

En plus de l'affichage numérique, nous utilisons donc 7 des 8 LEDs disponibles, et 6 des 8 boutons. Toutes les broches de l'ATTiny85 sont occupées, et le sketch occupe 58% de l'espace mémoire.



Le circuit

Lorsque l'ATTiny est programmé, on l'insère dans ce circuit:

  • La broche 8 de l'ATTiny, la broche Vcc du module LED and Key, et la broche Vcc du DS1307 sont branchées à la borne positive d'une alimentation 5 V.
  • Toutes les masses sont reliées à la borne négative d'une alimentation 5 V:  broche 4 de l'ATTiny85, broche GND du module LED and Key et broche Gnd du DS1307.
  • Broche 5 de l'ATTiny branchée à la broche Sda du DS1307.
  • Broche 7 de l'ATTiny branchée à la broche Scl du DS1307
  • Broche 2 de l'ATTiny branchée à la broche CLK du module LED and KEY
  • Broche 3 de l'ATTiny branchée à la broche STB du module LED and KEY
  • Broche 6 de l'ATTiny branchée à la broche DIO du module LED and KEY




Yves Pelletier   (TwitterFacebook)

samedi 30 septembre 2017

Quiz: testez vos connaissances en électronique 2




Voici une nouvelle occasion de mettre vos connaissances à l'épreuve dans ce deuxième quiz comportant 10 questions sur l'électronique.

Vous avez manqué le premier quiz?  Il n'est pas trop tard pour y répondre également.

1. Quelle est la valeur retournée par analogRead(A0) lorsque l'entrée analogique A0 de la carte Arduino est soumise à une tension de 5 V?

 a) 63
 b) 127
 c) 255
 d) 1023
 e) 2047

2. Que vaut le courant qui circule dans la résistance de 100 Ω ?


 a) 12 mA
 b) 26 mA
 c) 43 mA
 d) 68 mA
 e) 95 mA

3. C'est quoi, ce machin?


 a) Un thyristor
 b) Une diode zener
 c) Un transistor à effet de champ
 d) Un velociraptor
 e) Un triac

4. Sachant que la source de tension illustrée produit une tension qui varie de façon sinusoïdale, choisissez la courbe d'oscilloscope qui correspond à la tension aux bornes de la résistance.



 Graphique a:
 Graphique b:
 Graphique c:
 Graphique d:

 Graphique e:

5. En quelle année le transistor a-t-il été inventé?

 a) en 1947
 b) en 1957
 c) en 1967
 d) en 1977
 e) en 1987

6. Quel est ce composant?

 a) un MOSFET
 b) un transistor bipolaire
 c) un régulateur de tension
 d) un amplificateur
 e) un capteur pour mesurer la température


7.  MOSI, MISO, SCLK et CS symbolisent les 4 signaux logiques utilisés pour le protocole de communication...

 a) I2C
 b) SPI
 c) UART
 d) 1-Wire
 e) Morse

8. Que vaut le courant dans la résistance de 330 Ω?

 a) 40 mA
 b) 50 mA
 c) 60 mA
 d) 80 mA
 e) 100 mA

9. Vous désirez brancher une LED bleue (dont la tension de seuil est de 3,3 V) à une sortie 5 V d'une carte Arduino Uno.  Quelle résistance devriez-vous brancher en série avec la LED pour qu'elle soit traversée par un courant de 15 mA?

a) 67 Ω
b) 113 Ω
c) 220 Ω
d) 333 Ω
e) 470 Ω

10. Lequel de ces graphiques représente un signal PWM (modulé par largeur d'impulsion) dont le rapport cyclique est de 25%?

 Grahique a

 Graphique b

 Graphique c

 Graphique d

 Grahique e


mardi 26 septembre 2017

Détecteur de mouvement infrarouge passif (PIR) et Raspberry Pi

Je vous explique aujourd'hui comment faire en sorte que votre Raspberry Pi détecte un mouvement grâce à un capteur à infrarouge passif (ou PIR, pour passive infrared).  Nous utiliserons un script en langage python.

Si vous n'avez encore jamais utilisé un capteur PIR, je crois que ce serait une très bonne idée de lire d'abord ce billet:  vous y trouverez entre autres choses des informations concernant leur principe de fonctionnement et les réglages qu'on peut effectuer au moyen de leurs potentiomètres. Si vous préférez utiliser une carte Arduino plutôt qu'un Raspberry Pi il existe également un petit tutoriel à ce sujet.

Connexions

Le capteur nécessite une tension d'alimentation
d'au moins 5 V, mais sa sortie délivre malgré tout une tension de 3,3 V qui est tout à fait appropriée pour notre Raspberry Pi.

En théorie, les branchements sont donc:
  • +5 V du PIR : 5V du Raspberry
  • OUT du PIR : N'importe quel GPIO du Raspberry Pi, j'ai choisi la pin #16 (GPIO 23).
  • GND du PIR:  GND du Raspberry Pi

J'ai précisé "en théorie" car, bien que tous les tutoriels que j'ai consultés prétendent que tout fonctionne très bien de cette façon, mon module PIR était à toute fin pratique inutilisable si je l'alimentais au moyen d'une des sorties 5 V du Raspberry Pi (il détectait continuellement un mouvement, même lorsqu'il n'y en avait pas).

Si vous constatez ce genre de problème de votre côté également, la solution est simple:  utiliser une alimentation autonome pour le capteur PIR (en n'oubliant pas de relier la borne négative de l'alimentation à la masse (GND) du Rasbperry Pi, pour que toutes les parties de votre système mesurent la tension en utilisant la même référence).

Le circuit que j'ai utilisé était donc plutôt celui-ci:



Script python simple

Voici un premier script en python qui allume une LED (branchée à la pin #18: GPIO 24) lorsqu'un mouvement est détecté (un message indiquant qu'un mouvement a été détecté est également affiché à l'écran).



Émission d'un son lorsque le mouvement est détecté

Attaquons-nous maintenant à un projet un tout petit peu plus élaboré, qui pourrait s'avérer très amusant:  lorsque quelqu'un s'approchera du Raspberry Pi, celui-ci émettra un son (qui, espérons-le, surprendra notre intrus...).

Le son qui sera joué est le contenu d'un fichier ".wav".  Si vous voulez, vous pouvez créer vous-même ce fichier, au moyen d'un logiciel comme Audacity (par exemple, on pourrait vous entendre crier "SORTEZ D'ICI IMMÉDATEMENT!").  Pour réaliser cette expérience, je me suis rendu sur le site LaSonotheque.org, qui est une banque de sons libres de droits.  J'ai choisi ce rire un peu inquiétant, je l'ai téléchargé sur mon Raspberry Pi, et j'ai rebaptisé le fichier "mon_son.wav" (bien entendu, vous choisissez le nom que vous voulez, mais le script ci-dessous suppose qu'il s'appelle "mon_son.wav").

Avant d'aller plus loin, ce serait une bonne chose de vous assurer que votre Raspberry Pi est en mesure de produire le son décrit par ce fichier.  Vous vous assurez donc que des enceintes multimédia sont branchées sur la sortie jack audio de votre Raspberry Pi, ou encore que votre moniteur HDMI est en mesure de produire un son.

Une façon de jouer votre fichier ".wav", c'est d'entrer la commande "aplay mon_son.wav" dans le terminal.


Si vous n'entendez rien, ça pourrait être parce la sortie audio n'est pas correctement définie.

Pour forcer le son à être émis par le jack audio, vous écrivez cette commande:  "amixer cset numid=3 1"
Pour acheminer le son par la sortie HDMI, vous utilisez plutôt:  "amixer cset numid=3 2"


Maintenant que vous vous êtes assuré que le Rasbperry Pi joue correctement votre fichier ".wav", vous pouvez exécuter le script python ci-dessous (attention:  ce script doit se trouver dans le même répertoire que le fichier .wav).  Pour jouer le son, le script utilise la bibliothèque pygame, qui est déjà installée par défaut dans Rasbpian.

Il va sans dire que le capteur PIR est toujours branché à la pin #16 (GPIO 23), comme dans l'activité précédente.  La LED, toutefois, n'est pas nécessaire.



Chaque fois que quelqu'un s'approche du Rasbperry Pi, ce dernier émet un rire lugubre...

Photographie automatique

Si vous avez une Pi Camera, il est relativement facile de fabriquer un dispositif qui prendra une photographie ou une vidéo de tout intrus qui entre dans la pièce.  Puisqu'il s'agit d'un projet classique qui a souvent été traité ailleurs, je vous réfère à ce tuto (en anglais) par la Raspberry Pi Foundation.

Yves Pelletier (Twitter) (Facebook)

vendredi 22 septembre 2017

Afficheur 8 chiffres, 8 LEDs, 8 boutons TM1638 et ATTiny85

Un défi auquel nous devons fréquemment faire face lorsque nous développons des prototypes impliquant l'ATTiny85, c'est le faible nombre d'entrées/sorties.  Par exemple, un afficheur LCD conventionnel muni d'un pilote HD44780 accapare à lui seul 6 sorties, alors que l'ATTiny85 n'en comporte que 5.

Il y a quelques semaines, je vous présentais un module comportant 8 chiffres, 8 LEDs et 8 boutons pilotés par un TM1638, et qui n'utilise que 3 entrées/sorties de votre microcontrôleur. J'en ai fait l'essai avec un ATTiny85, et ça fonctionne parfaitement bien.

Notez tout d'abord que je programme l'ATTiny en utilisant une carte Arduino Uno comme programmateur (Arduino as ISP).  Si vous n'avez jamais programmé un ATTiny de cette façon auparavant, vous trouverez une marche à suivre détaillée ici.  J'utilise le core de David A. Mellis, avec une fréquence d'horloge de 1 MHz.

Installation de la bibliothèque

Si vous n'avez jamais utilisé ce genre de module avec une carte Arduino, vous devrez d'abord installer la bibliothèque conçue par Ricardo Batista.

Modification de la bibliothèque

Si vous tentez de compiler un sketch pour votre ATTiny85 en utilisant la bibliothèque TM1638, la compilation échoue avec un message d'erreur de ce genre:

error: 'Serial' was not declared in this scope 
Serial.println(values); 
exit status 1 
Erreur de compilation pour la carte ATtiny25/45/85

Le remède n'est pas très compliqué:

Ouvrez le document "TM1638QYF.cpp" avec un éditeur de texte (le fichier se trouve dans le dossier de votre bibliothèque TM1638, qui se trouve lui même à l'intérieur du dossier "libraries" de votre sketchbook Arduino).

Localisez la commande "Serial.println(values);" (ligne 119) et commentez-là (ou effacez-là).

Votre bibliothèque peut maintenant être utilisée pour programmer un ATTiny.


Exemples de sketch

À titre d'exemple, voici un sketch qui affiche un nouveau nombre aléatoire de 8 chiffres chaque seconde.  Pour d'autres exemples, et plus d'informations sur les fonctions disponibles, vous pouvez vous référer à cet article.



Connexions

Une fois l'ATTiny programmé, vous pouvez le connecter au module TM1638 de la façon suivante:

  • La broche STB du module TM1638 est branchée à la broche 7 du ATTiny85
  • La broche CLK du module TM1638 est branchée à la broche 6 du ATTiny85
  • La broche DIO du module TM1638 est branchée à la broche 5 du ATTiny85




Yves Pelletier   (TwitterFacebook)

mardi 19 septembre 2017

Déboguer l'ATTiny85 avec le moniteur série

Si vous êtes un tant soit peu familier avec la programmation d'une carte Arduino, vous savez à quel point le moniteur série peut s'avérer utile pour débusquer les erreurs dans votre sketch:  on affiche le contenu des variables à l'écran, ce qui permet souvent de trouver ce qui ne fonctionne pas correctement.

Lorsqu'on programme un ATTiny85 en utilisant une carte Arduino comme programmateur (Arduino as ISP), cette option n'est pas directement disponible puisque l'ATTiny85 ne dispose pas de ports UART hardware. Il est toutefois possible d'utiliser la bibliothèque "software serial" qui est distribuée par défaut avec l'IDE Arduino.

Je vais supposer que vous savez déjà comment utiliser une carte Arduino Uno comme programmateur de carte ATTiny (si ne n'est pas le cas, vous pouvez vous référez à cet article que j'ai récemment mis à jour).

Notez que j'utilise le core développé par David A. Mellis, avec une fréquence d'horloge de 1 MHz.

Pour transmettre les données de l'ATTiny vers l'ordinateur, j'utilise un convertisseur USB-TTL dont la broche "RX" est reliée au GPIO de l'ATTiny que j'ai choisi pour la communication série.



Je rappelle le pinout de l'ATTiny85, c'est toujours utile:



Première option:  affichage dans le moniteur série pendant que l'ATTiny demeure branché au programmateur Arduino

Cette option est pratique car vous pouvez téléverser votre sketch dans l'ATTiny et observer le résultat dans le moniteur série sans avoir à débrancher quoi que ce soit.  Elle n'est pas toujours réalisable, toutefois, car les GPIO 0, 1 et 2 de l'ATTiny sont déjà utilisées pour la programmation; vous devez donc dédier le GPIO 3 ou 4 à la transmission série, et un seul GPIO demeure disponible pour y brancher un capteur ou autre.

Sur le schéma ci-dessous, le GPIO 4 (qui est en fait la broche numéro 3 de l'ATTiny) est utilisé pour la transmission des données vers le moniteur série.  Les autres connexions sont celles qui sont requises pour programmer l'ATTiny au moyen de l'Arduino Uno.

La masse (GND) du convertisseur USB-TTL est reliée à la masse de l'ATTiny et à celle de la carte Arduino.



Puisque la carte Arduino et le convertisseur USB-TTL sont tous les deux branchés à l'ordinateur, je dois m'assurer de sélectionner le bon port dans le menu "Outil":  le port correspondant à l'Arduino lorsque je désire téléverser le sketch dans l'ATTiny, et le port correspondant au convertisseur Série-TTL lorsque je désire afficher le moniteur série.




Deuxième option:  affichage dans le moniteur série pendant que l'ATTiny n'est plus branché au programmateur Arduino

Puisque l'ATTiny85 comporte un nombre restraint de pins GPIO, il est souvent nécessaire de le débrancher de l'Arduino pour faire nos tests.  Vous pouvez alors utiliser n'importe lequel des GPIO pour la transmission des données, et utiliser les autres pour y brancher des capteurs, LEDs, etc.  Si désiré, le convertisseur USB-TTL peut servir à l'alimentation de votre circuit.



Un exemple de sketch

Aucune installation de bibliothèque n'est nécessaire, puisque "SoftwareSerial" est inclus avec l'IDE Arduino.  Les données sont transmise par le GPIO 4, ce qui correspond aux circuits illustrés plus haut.  Dans ce cas, puisque j'envoie des données vers l'ordinateur mais je ne désire pas en recevoir, j'ai assigné un numéro de GPIO bidon pour la pin RX.





Yves Pelletier   (TwitterFacebook)

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)
Related Posts Plugin for WordPress, Blogger...