jeudi 10 août 2017

Module bluetooth HC-06 et Raspberry Pi (python)

Comme le titre l'indique, je vous explique aujourd'hui comment brancher un module bluetooth HC-06 à un Raspberry Pi, et comment utiliser le langage python pour envoyer et recevoir des messages au moyen de ce module.

À moins que quelque chose m'échappe, ce tuto ne devrait être d'aucune utilité pour les propriétaires de Raspberry Pi 3 ou de Raspberry Pi Zero W, qui comportent déjà un module bluetooth intégré. J'ai moi-même fait mes tests avec un Rasbperry Pi 1 Modèle B, ainsi qu'avec un Raspberry Pi 2, avec une version à jour de Raspbian (PIXEL) dans les deux cas.

(Le module bluetooth HC-06 peut aussi être utilisé avec une carte Arduino ou STM32 Nucleo)

Pendant la préparation de cette article, comme c'est souvent le cas avec le Raspberry Pi, je suis tombé sur un tas d'informations désuètes un peu partout sur le web.  Les choses bougent rapidement dans le monde du Raspberry Pi, et les réglages à effectuer sous Raspbian Jessie sont significativement différents de ceux qui devaient être faits dans les précédentes versions de Raspbian.  J'espère donc que les informations de cet article pourront s'avérer utiles avant qu'elles ne deviennent, à leur tour, désuètes!

Connexions

Le module HC-06 est un convertisseur UART/Bluetooth:  ce que le Rasbperry Pi envoie par l'entremise de son transmetteur UART (pin # 8, GPIO 14) sera transmis en bluetooth pour le HC-06, et ce que le HC-06 reçoit par bluetooth est acheminé au Rasbperry Pi par son récepteur UART (pin #10, GPIO 15).

Le module HC-06 doit être alimenté en 5 V même s'il utilise un niveau logique de 3,3 V pour l'échange des données.



  • VCC du HC-06 : Une des sorties 5 V du Raspberry Pi (pin #2, par exemple)
  • GND du HC-06:  Une des pins GND du Rasbperry Pi (pin #6, par exmple)
  • TXD du HC-06:  Pin #10, GPIO 15 du Rasbperry Pi
  • RXD du HC-06:  Pin #8, GPIO 14 du Raspberry Pi

Aussitôt que le module HC-06 est alimenté, une LED rouge se met à clignoter.  Elle restera allumée de façon continue lorsqu'une communication bluetooth sera établie.


Désactivation de la console

Les deux pins UART du Rasbperry Pi peuvent être utilisées comme console Linux, ce qui peut constituer une façon pratique de recueillir des informations lors du démarrage, ou encore d'ouvrir une session sur un Raspberry Pi dépourvu d'un écran et d'un clavier.  Malheureusement, cette fonctionnalité risque d'interférer avec notre propre utilisation du port UART, et nous devrons donc la désactiver.

Pour ce faire, il est possible de modifier manuellement certains fichiers, mais le plus simple est d'utiliser ce bon vieux raspi-config:

sudo raspi-config

On choisit d'abord l'option 5:  Interfacing Options


Puis P6 Serial

Nous refusons la console sur le port série (répondez "non"!):


Mais nous acceptons que le port série soit activé (répondez "oui")




Il faut ensuite redémarrer le Raspberry Pi.


Installation de la bibliothèque pySerial

Si elle ne l'est pas déjà, vous installez la bibliotèque pySerial en écrivant cette commande dans le terminal:

      sudo apt-get install python-serial

Préparation d'un interlocuteur bluetooth

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 est "1234".


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 un grand nombre d'applications android permettant la communication bluetooth. Pour effectuer mes tests, j'ai utilisé avec succès Serial Bluetooth Terminal par Kai Morich, mais plusieurs autres options sont possibles.  Vous pouvez aussi utiliser l'application réalisée dans cet article au moyen de MIT App Inventor.

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.


Premier script:  communication unidirectionnelle (compteur)

Ce  premier script permet au Raspberry Pi d'envoyer des nombres croissants par bluetooth.  Ça peut être utile pour vérifier si la connexion fonctionne convenablement.




Le nom "/dev/Serial0" devrait fonctionner pour tous les modèles de Raspberry Pi.  Si ce n'est pas le cas, vous pouvez utiliser "/dev/ttyAMA0" pour les modèles antérieurs au Rasbperry Pi 3, et  "/dev/ttyS0"  pour le Raspberry Pi 3.

Voici ce que ça donne à l'écran de Serial Bluetooth Termibnal:



Deuxième script:  communication bi-directionnelle (contrôle de LEDs)

Ce deuxième script permet d'allumer et éteindre des LEDs branchées au Rasbperry Pi à partir d'un appareil qui supporte bluetooth.



Les connexions du HC-06 n'ont pas changé, mais nous ajoutons une LED à la pin #22 (GPIO 25), et une autre à la pin #24 (GPIO 8).




Les messages que vous pouvez envoyer au Rasbperry Pi sont "a", "b", "c", "d" ou "e". Sur réception d'un de ces messages, le Raspberry Pi allume ou éteint les LEDs selon le protocole pré-établi, puis retourne un message indiquant l'état actuel des deux LEDs.


Yves Pelletier   (TwitterFacebook)

mercredi 2 août 2017

Livre: À la découverte des cartes Nucleo, par Marc Laury


À la découverte des cartes Nucleo
par Marc Laury
Éditions Eyrolles, Collection Serial Makers
280 pages
2017

Saluons avec enthousiasme la parution de ce livre de Marc Laury: trois ans après la mise en marché des premières cartes STM32 Nucleo, les livres qui en parlent sont encore bien rares, et celui-ci, en plus, est en français!  (Du côté anglophone, McGraw-Hill annonce un livre sur le Nucleo par Donald Norris, mais il ne sera disponible que dans quelques mois).

Avant d'entreprendre la lecture de ce livre, je m'attendais à y trouver une bonne part d'informations avec lesquelles j'étais déjà familier, puisque j'utilise assez régulièrement les cartes Nucleo.  Ce ne fut pas le cas:  alors que j'utilise l'IDE en ligne Mbed pour programmer mon Nucleo, Marc Laury préconise plutôt l'utilisation de STM32CubeMX pour la configuration des GPIO, puis de Keil μVision5 pour l'écriture du programme.  Mbed n'est abordé que très brièvement, dans le 18e et dernier chapitre du livre (et une part importante de ces quelques pages explique comment importer un code qui se trouvait sur Mbed pour l'utiliser dans Keil μVision5!).

Première mise en garde, donc:  il ne s'agit pas d'un livre sur la programmation des cartes Nucleo avec mbed.

Deuxième mise en garde: ce livre n'est pas une initiation à la programmation, ni une initiation à la l'électronique.  Tout un tas de livre sur l'Arduino et le Raspberry Pi vont vous expliquer en détail ce qu'est une LED et une boucle "while", car ils supposent vous n'en avez jamais entendu parler auparavant.   Ce n'est pas du tout l'approche de ce livre:   pour être en mesure de bien l'apprécier, vous devriez déjà connaître les bases du C++ et, dans une moindre mesure (puisqu'on utilise exclusivement des shields prêts à l'emploi), quelques bases d'électronique.

Si vous faites partie de ce public cible, le contenu devrait vous plaire:  marches à suivre très détaillées, nombreuses captures d'écran en couleur, par un auteur qui maîtrise très bien son sujet (Marc Laury travaille chez STMicroelectronics depuis deux décennies).

(J'ai peut-être été un tantinet irrité par des répétitions fréquentes d'un chapitre à l'autre.  Par exemple, un variante de la phrase "La compilation via le menu Project and Rebuild all target fils doit donner en bas de l'environnement de développement l'indication 0 Error (s), 0 Warning (s)." apparaît à 22 reprises tout le long du livre.  Le paragraphe "Enfin, connectez la carte Nucleo à l'ordinateur avec un cordon USB, puis lancez la programmation du STM32L152RET6 dans le menu Flash and Download.  La LED LD1 clignote alternativement vert et rouge pendant la programmation, puis se stabilise au rouge une fois la programmation terminée." revient 10 fois.  Je suppose que le livre n'a pas été conçu pour être lu d'une couverture à l'autre.)

Au menu:

Chapitre 1:  un premier chapitre très théorique sur ce qui caractérise les processeurs ARM  Cortex-M (pipeline, architecture RISC, organisation mémoire, etc.) et la famille STM32 en particulier.

Chapitre 2:  description du "hardware" présent sur une carte Nucleo.

Chapitre 3:  L'environnement de développement pour STM32 (STM32 ODE)

Chapitre 4:  Mise au point d'un programme avec Keil μVision5.

Chapître 5:  On fait clignoter une LED...

Chapitre 6:  Port virtuel par USB (communication série entre le Nucleo et l'ordinateur)

Chapitre 7:  Afficheur 7 segments par liaison I2C

Chapitre 8:  Jeu de lumières par liaison SPI

Chapitre 9:  Mesure d'une tension par l'ADC

Chapitre 10:  Capteur de température interne sous l'environnement SW4STM32

Chapitre 11:  Lumière progressive avec un compteur

Chapitre 12:  Interruption par compteur

Chapitre 13:  Alarme par RTC (l'horloge temps réel intégrée du STM32)

Chapitre 14:  Mode faible consommation

Chapitre 15:  Application temps réel (FreeRTOS)

Chapitre 16:  Gestion d'un afficheur TFT

Chapitre 17:  Contrôleur de carte SD

Chapitre 18:  L'environnement de développement MBED

Voici, finalement, un extrait du livre disponible sur le site d'Eyrolles.

Yves Pelletier (Twitter) (Facebook)

samedi 29 juillet 2017

La machine à Ottawa

Ces jours-ci, deux créations de la compagnie française La Machine déambulent dans les rues d'Ottawa, dans le cadre des célébrations du 150e anniversaire du Canada:  Long Ma le dragon-cheval, et Kumo l'araignée géante.

Les voici sur deux petites vidéos que j'ai tournées plus tôt aujourd'hui.




P.S.:  Je suis conscient d'être un peu hors-sujet mais:
  1. C'est les vacances!
  2. Y a-t-il quelque part un maker qui ne rêve pas de construire un jour un truc de ce genre?

Yves Pelletier   (TwitterFacebook)


jeudi 27 juillet 2017

Module Bluetooth HC-06 et STM32 Nucleo (mbed)

Aujourd'hui, je vous explique comment établir une connexion bluetooth avec une carte STM32 Nucleo équipée d'un module HC-06.

(Si vous souhaitez utiliser le HC-06 avec un Arduino ou un Raspberry Pi, la lecture de précédents billets vous sera utile. )

Pour réaliser cet expérience, vous aurez besoin d'une carte STM32 Nucleo (j'ai utilisé le modèle F030R8), d'un module bluetooth HC-06, et d'un autre appareil qui supporte le protocole bluetooth, que ce soit un téléphone, une tablette ou un ordinateur (j'ai utilisé une tablette android).

Connexions

Au dos de mon module HC-06, on indique que le niveau logique est de 3,3 V (ce qui est parfait pour le Nucleo), et que l'alimentation doit se situer entre 3,6 V et 6 V (nous utiliserons donc la sortie 5 V de la carte Nucleo).

Le module HC-06 envoie par bluetooth tout ce que le microcontrôleur lui envoie par liaison série (UART), et il envoie au microcontrôleur tout ce qu'il reçoit par bluetooth.

On pourrait croire que les broches à utiliser pour la communication série sont D0 et D1, comme pour l'Arduino (d'autant plus que ces broches sont clairement identifiées "TX" et "RX" sur la carte), mais ce n'est pas le cas:  par défaut, les broches D0 et D1 du Nucleo sont désactivés car l'UART qui leur est associé est utilisé pour la communication avec l'ordinateur (par USB).  Si vous tenez à activer ces deux broches (afin d'utiliser un shield Arduino, par exemple), vous devrez sortir votre fer à souder et modifier quatre des ponts de soudure situés au verso de la carte.

Je ne me suis pas donné cette peine puisque le Nucleo comporte deux autres canaux de communication série.  J'ai utilisé les broches D8 (TX) et D2 (RX).

Les connexions sont donc:


  • VCC du module HC-06 :  5V du Nucleo
  • GND du module HC-06: GND du Nucleo
  • TXD du module HC-06:  D2 du Nucleo
  • RXD du module HC-06:  D8 du Nucleo


Notez que le TX (transmission) du HC-06 est branché au RX (réception) du Nucleo, et vice-versa.



Lorsque le module HC-06 est alimenté, une LED rouge se met à clignoter, ce qui indique l'absence de liaison bluetooth avec un deuxième appareil (une fois cette connexion établie, la LED restera allumée, sans clignoter).

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 est "1234".


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é avec succès Serial Bluetooth Terminal par Kai Morich, mais plusieurs autres options sont possibles.  Vous pouvez même utiliser l'application réalisée dans cet article au moyen de MIT App Inventor.

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.

Un premier script pour le Nucleo:  un compteur (communication unidirectionnelle)

Ce premier script est particulièrement utile pour vérifier rapidement si la communication bluetooth fonctionne.  Le Nucleo envoie des nombres croissants.  Évidemment, si tout va bien, ces nombres seront affichée par l'application android.



Voici le résultat à l'écran de Serial Bluetooth Terminal:



Un deuxième script pour le Nucleo:  contrôler deux LEDs branchées au Nucleo

Dans le script précédent, la communication était strictement unidirectionnelle (du Nucleo vers l'autre appareil).  Essayons maintenant une communication bi-directionnelle.

Nous branchons deux LEDs au Nucleo (sorties D3 et D4), tel qu'illustré ci-dessous.   On envoie le message "a", "b", "c", "d" ou "e" au moyen de l'appareil android.  Sur réception du message, le Nucleo allume ou éteint les LEDs appropriées, et retourne un message précisant l'état actuel des deux LEDs.





Lorsque vous envoyez le message "a" au moyen de Serial Bluetooth Terminal, la LED branchée à D3 s'allume, et le message "LED 1 allumee, LED 2 eteinte" s'affiche à l'écran.  Le Nucleo devrait réagir aux commandes "a", "b", "c", "d" et "e".


Yves Pelletier   (TwitterFacebook)

mardi 18 juillet 2017

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

Vous pouvez facilement trouver sur eBay des modules constitués de 8 afficheurs 7 segments, 8 LEDs et 8 boutons, dont la pièce maîtresse est un circuit intégré TM1638 (mon modèle porte la mention "LED AND KEY").

Même s'il est peu probable que vous ayez besoin de la totalité des composants qu'il contient, un tel module peut grandement faciliter la mise au point d'un prototype, d'autant plus qu'il n'accapare que 3 entrées/sorties de votre microcontrôleur.

Ce court tutoriel vous indiquera comment brancher un tel module à votre carte Arduino, et comment utiliser les différents éléments qui le composent.

Connexions

Le module comporte 5 connecteurs, qui seront branchés à l'Arduino de la façon suivante:

VCC du module TM1638 :  5V de l'Arduino
GND du module TM1638:  GND de l'Arduino
STB* (strobe) du module TM1638:  pin 4 de l'Arduino
CLK* (clock) du module TM1638:  pin 2 de l'Arduino
DIO* (digital input output) du moduleTM1638:  pin 3 de l'Arduino

*: Les connecteurs STB, CLK et DIO peuvent être branchés à d'autres pins de l'Arduino si désiré:  il s'agira de modifier les sketches proposés ci-dessous pour en tenir compte.



Installation de la bibliothèque

Nous allons utiliser la bibliothèque conçue par Ricardo Batista spécialement pour ce type de module. Il y a évidemment une page github d'où on peut télécharger la bibliothèque, afin de l'installer dans l'IDE Arduino.

Pendant que vous y êtes, le wiki de cette même page github dresse la liste de toutes les fonctions (ou devrais-je dire "méthode"?) de cette bibliothèque.

Initialisation de la bibliothèque

Dans chaque sketch qui utilise cette bibliothèque, on créé un objet de type "TM1638" en précisant, dans l'ordre, le numéro de la pin reliée à DIO, CLK et STB.

Puisque nous avons branché DIO à 3, CLK à 2 et STB à 4, je peux donc utiliser la syntaxe suivante:

TM1638 afficheur(3, 2, 4);

...où "afficheur" est le nom que j'ai choisi pour désigner cet objet.

Afficher des nombres

La bibliothèque TM1638 met à notre disposition plusieurs fonctions permettant d'afficher des nombres grâces aux 8 afficheurs à 7 segments:

setDisplayToDecNumber:  pour afficher un nombre décimal positif
setDisplayToSignedDecNumber: pour afficher un nombre décimal positif ou négatif
setDisplayToBinNumber:  pour afficher un nombre binaire
setDisplayToHexNumber:  pour afficher un nombre hexadécimal
setDisplayToString:  pour afficher des lettres plutôt que des nombres
clearDisplay:  pour effacer ce qui était précédemment affiché

Il est également possible de réglez un des 8 chiffres en particulier (plutôt que l'ensemble du nombre à 8 chiffres) en utilisant setDisplayDigit et clearDisplayDigit.

Penchons-nous sur la fonction "setDisplayToDecNumber", puisque c'est celle qui me semble la plus utile.  Elle comporte 3 arguments:
  1.  un ombre de type "long" qui est le nombre à afficher
  2.  un byte indiquant le ou les points décimaux qui doivent être  allumés
  3.  un booléen indiquant si les zéros qui précèdent le nombre doivent être affichée (True) ou non (False).
Par exemple:

"afficheur.setDisplayToDecNumber(12345, 0, true);"     affichera "00012345"
"afficheur.setDisplayToDecNumber(12345, 0, false);"     affichera "12345"
"afficheur.setDisplayToDecNumber(12345, 0b0001000 , false);"     affichera "12.345"
"afficheur.setDisplayToDecNumber(12345, 0b11111111 , true);"     affichera "0.0.0.1.2.3.4.5."

C'est dommage que la bibliothèque n'offre pas une fonction qui permettrait d'afficher un nombre décimal (float) sans qu'on soit forcé de placer nous-mêmes le point décimal à l'endroit approprié.

L'exemple ci-dessous est un simple compteur dont la valeur augmente d'une unité à chaque seconde.

Allumer des LEDs

La fonction "setLED" comporte deux arguments:

  1. La couleur de la LED:  TM1638_COLOR_RED, TM1638_COLOR_GREEN ou TM1638_COLOR_NONE (LED éteinte).  Sur certains module, les LEDs peuvent s'allumer en rouge ou en vert.  Mon module ne comporte que des LEDs rouges.
  2. Le numéro de la LED qu'on désire allumer ou éteindre, de 0 à 7 (La LED 0 est celle qui est située à gauche du module).

L'exemple ci-dessous allume successivement chaque LED, de gauche à droite.

Lire l'état des boutons

La fonction "getButtons" retourne un octet qui décrit l'état de chaque bouton.  Le bit est à 1 si le bouton correspondant est enfoncé, et à 0 s'il ne l'est pas.

Par exemple, si vous appuyez sur le deuxième bouton à partir de la gauche (S2), getButtons retourne la valeur binaire "01000000".  Grâce à la fonction bitRead (qui est une fonction régulière Arduino et non une fonction spécifique à la bibliothèque), il est facile de vérifier l'état de chaque bouton.

L'exemple ci-dessous indique dans le moniteur série le numéro du bouton enfoncé.


Yves Pelletier   (TwitterFacebook)

lundi 3 juillet 2017

Livre: Raspberry Pi 3 ou Pi Zero par François Mocq

Raspberry Pi 3 ou Pi Zero
Exploitez tout le potentiel de votre nano-ordinateur
par François Mocq
ENI Editions
2016
850 pages

J'ignore si vous réalisez à quel point la rédaction d'un livre général sur le Rasbperry Pi est héroïque. Premièrement, il faut avoir des connaissances encyclopédiques concernant le Raspberry Pi, Linux, les GPIOs,  Python, Scratch et tous les logiciels fournis par défaut avec Raspbian.  Il faut s'assurer que le livre sera aussi utile à ceux qui veulent construire un robot qu'à ceux qui veulent mettre sur pied un serveur web.  Il faut être capable d'expliquer ça clairement, en partant du principe que, très souvent. la personne qui débute avec le Rasbperry Pi n'a jamais utilisé Linux auparavant.   Finalement, puisque les choses bougent vraiment très rapidement dans le monde du Rasbperry Pi, il faut se résigner à ce qu'une bonne partie de ce qu'on a écrit doive être mise à jour dans les mois qui suivront!

Quiconque visite régulièrement Framboise 314 a pu constater à quel point François Mocq communique habilement ses vastes connaissances en matière de Raspberry Pi.  Et pour ce qui est de se tenir à jour, pas d'inquiétude: ce livre, publié fin 2016, fait suite à celui sur le Rasbperry Pi 2 (publié en 2015) et celui sur le Rasbperry Pi tout court (publié en 2014).

Voici un petit survol des nombreux sujets traités dans ce volumineux bouquin de 850 (!!!) pages:

Chapitre 1:  Présentation de l'historique du Raspberry Pi.

Chapitre 2:  Une description très précise et détaillée du côté "hardware" du Raspberry Pi 3 et du Raspberry Pi Zero (les version précédentes ne sont pas couvertes ici).

Chapitre 3:  Raspbian est le système d'exploitation dominant, mais plusieurs autres OS peuvent être utilisés sur le Raspberry Pi.  Ce chapitre nous les présente brièvement.

Chapitre 4:  Marche à suivre très détaillée pour préparer notre carte micro SD.

Chapitre 5:  Le premier démarrage de Raspbian (raspi-config, etc.).

Chapitre 6:  L'utilisation de Raspbian Jessie en mode graphique, incluant une impressionnante visite guidée des applications pré-installées.  Évidemment, on ne peut pas inclure dans un seul livre le guide d'utilisation complet de chacune de ces applications, mais c'est intéressant de savoir à quoi sert chacune d'entre elles.

Chapitre 7:  Utilisation de la ligne de commande; le strict minimum à connaître pour naviguer dans les fichiers sur Linux, et parfois un peu plus (initiation aux scripts shell!).

Chapitre 8:  Se connecter à distance au Raspberry Pi (SSH et VNC).

Chapitre 9: Gestion du réseau (avec beaucoup d'information théorique bien vulgarisée sur le fonctionnement d'un réseau, qu'il comporte un Raspberry Pi ou non).

Chapitre 10:  Utilisation d'une mémoire de masse externe (clé USB ou disque dur)

Chapitre 11:  Démarrage à partir d'un disque externe

Chapitre 12:  "Que faire avec un Raspberry Pi?" :  bureautique, centre multimédia, serveur web et caméra de surveillance.  Évidemment, il existe de nombreuses autres possibilités qui ne sont pas abordées ici, mais c'est une sélection intéressante.

Chapitre 13:  La programmation en Scratch, incluant la création d'un jeu complet.

Chapitre 14:   La programmation en Python

Chapitre 15:  Utilisation des entrées/sorties GPIO en ligne de commande, avec Python et avec Scratch.

Chapitre 16:  Exploration de quelques périphériques pour le Rasbperry Pi (caméra, cartes HAT, HifiBerry DAC+, ADC Pi Plus, IO Pi Plus, RTC Pi Plus, PiFace Digital 2, moteur pas à pas, moteur cc)

Chapitre 17:  Dépannage du Raspberry Pi.  Que faire si votre Raspberry Pi refuse de démarrer, si vous avez des problèmes avec la qualité de l'image ou du son ou encore ... si le clavier est QWERTY?!?!? Mais ce n'est pas un problème, ça!  Au Québec, c'est une configuration AZERTY qui serait fichtrement problématique.  Si je me mettqit q écrire sur un tel clqvier, il y qurait tout plein de mquvqises lettres dans mes textes!

Voilà!  Ça nous fait beaucoup, beaucoup de sujets différents dans un même livre, mais puisque l'auteur dispose de 850 pages, chaque thème est traité avec une profondeur appréciable.  Il s'agit donc d'un excellent livre de référence, très probablement le meilleur de sa catégorie.

Yves Pelletier   (TwitterFacebook)

lundi 26 juin 2017

Quiz: testez vos connaissances en électronique 1

Un petit quiz pour mettre à l'épreuve vos connaissances en électronique...

Question 1

Quelle est la valeur de cette résistance?

22 Ω
 220 Ω
2,2 kΩ
 22 kΩ
 220 kΩ

Question 2

Quel est le potentiel au point B?

0 V
4,8 V
6,0
7,2 V
12 V

Question 3



En courant alternatif, l'impédance d'une bobine d'induction...

...est toujours négligeable
...diminue à mesure qu'on augmente la fréquence
...augmente à mesure qu'on augmente la fréquence
...est indépendante de la fréquence
...est égale à la racine carrée du courant

Question 4

Quelle est la fonction de ce circuit intégré?


Il comporte 4 portes NON-ET
Il comporte 4 amplificateurs opérationnels
Il comporte 6 convertisseurs de niveau logique
C'est un double pont en H permettant de piloter deux moteurs cc
C'est un registre à décalage

Question 5

Quelle est le nom de la broche du centre (#2) ?

Base
Émetteur
Collecteur
Drain
Source

Question 6

En quelle année le circuit intégré NE555 a-t-il été mis au point?

1960
1970
1980
1990
2000

Question 7

Quelle est la capacité de ce condensateur?


68 pF
68 nF
68 µF
683 F
68 kF

Question 8

Que vaut, en notation décimale, le nombre binaire 10010111?

17
23
84
131
151

Question 9

Que peut-on dire de ce composant?


Quand la température augmente, sa résistance augmente
Quand la température augmente, sa résistance diminue
Quand la lumière devient plus intense, sa résistance augmente
Quand la lumière devient plus intense, sa résistance diminue
Quand la pression atmosphérique augmente, sa résistance augmente

Question 10

Quelle est la tension à la sortie de ce montage?

0 V
2,5 V
5 V
10 V
15 V

Après avoir répondu à chacune des 10 questions, cliquez sur le bouton "Valider" ci-dessous.

jeudi 22 juin 2017

Appli Android qui présente graphiquement le signal mesuré par un Arduino

Supposons que vous avez branché un capteur à votre Arduino, qui est relié par bluetooth à un appareil android.  Si vous avez lu mon récent article sur MIT App Inventor et bluetooth, vous savez comment programmer votre propre application android pour qu'elle affiche en temps réel la valeur numérique reçue de l'Arduino.  Mais ne pourrions-nous pas afficher à l'écran une jauge qui montrerait le résultat d'une façon plus visuelle?

Aujourd'hui, je vous montre deux options permettant d'obtenir un tel résultat.


Montage Arduino

Nous utiliserons une fois encore un module bluetooth HC-06.  Le circuit 4050 abaisse le signal de 5 V de la sortie Tx de l'Arduino car le module bluetooth HC-06 est conçu pour recevoir des signaux logiques de 3,3 V.

Pour effectuer mes tests, j'ai branché un potentiomètre à l'entrée A0 de l'Arduino.  Bien entendu, vous pouvez remplacer ce potentiomètre par tout autre capteur analogique ou numérique (photorésistance, thermomètre, etc).


En résumant un peu:
  • VCC du HC-06:  5 V de l'Arduino
  • GND du HC-06 : GND de l'Arduino
  • TXD du HC-06:  Rx de l'Arduino
  • RXD du HC-06 : 4050 : Tx de l'Arduino 

Sketch Arduino

Le sketch de l'Arduino est d'une très grande simplicité:  la valeur de l'entrée A0 est lue et envoyée à intervalles réguliers.


Appli android version 1:  utilisation de Google Charts

Pour cette première version, je me suis inspiré de ce document sur le portail Eduscol.  Il est possible d'utiliser Google Charts pour générée une jauge dont l'aiguille indique la valeur désirée.

Par exemple, cet url affiche une image indiquant une valeur équivalent à 20% du maximum (cliquez-le, pour voir!):

http://chart.apis.google.com/chart?cht=gom&chco=00CC00,0000CC&chs=450x200&chd=t:20

Alors que celui-ci affiche une image indiquant une valeur équivalent à 75% du maximum:

http://chart.apis.google.com/chart?cht=gom&chco=00CC00,0000CC&chs=450x200&chd=t:75

Évidemment, pour que ça fonctionne, votre appareil android doit avoir accès à internet.


En mode "Designer", j'ai créé 10 composants d'interface (la plupart de ces éléments se trouvaient déjà dans le programme créé dans l'article Programmer une appli Android pour communiquer en bluetooth, que vous pouvez consulter pour plus de détails):

A)  Un rectangle "Arrangement horizontal", contenant les éléments  B, C et D.
B)  Un label renommé "StatutConnexion" qui indiquera sur l'Arduino est connecté ou non.
C) Un sélectionneur de liste renommé "BoutonConnecter", qui affiche le texte "Connecter".
D) Un bouton renommé "BoutonDéconnecter" qui affiche le texte "Déconnecter".
E) Un label renommé "Label_Pourcentage", qui affichera la valeur mesurée en %.
F) Une image renommée "Image_Jauge".
G) Un label renommé "Label_Tension", qui affichera la valeur mesurée en volts.
H) Une horloge
I) Un client_bluetooth
J) Un notificateur

Tout ça est résumé dans la zone "Composants" d'App Inventor:


En mode "Blocs", je passe très rapidement sur tout ce qui concerne la connexion et la déconnexion: c'est identique à ce que nous avions fait dans Programmer une appli Android pour communiquer en bluetooth (vous pouvez cliquer sur l'image pour l'agrandir):


La partie nouvelle, se trouve dans la partie "Quand Horloge1.Chronomètre".  À intervalles réguliers (500 millisecondes, grâce au réglage effectué à l'initialisation de la fenêtre), le programme vérifie si on a reçu un message par bluetooth en provenance de l'Arduino.

Si c'est le cas, il calcule un pourcentage qu'il affiche dans le label "Label_pourcentage", il utilise ce même pourcentage pour afficher l'image "Image_Jauge" appropriée à partir de Google Charts, et il calcule le résultat en volts, qu'il affiche dans le label "Label_Tension".


Petite précaution, toutefois:  pendant que notre application android travaille pour afficher la jauge, l'Arduino a parfois le temps d'envoyer plusieurs messages consécutifs.  La variable "messageRecu" contient alors plusieurs nombres.  Au cas où une telle chose survient, il faut donc séparer cette variable en une liste de nombre, et utiliser dans nos calculs le dernier élément de la liste.

Voici le résultat à l'écran de l'appareil android.  Ça fonctionne très bien pour des valeurs qui ne changent pas très rapidement.  Si vous tournez brusquement le potentiomètre, vous remarquerez probablement que le temps de réponse est un peu long.



Vous pouvez télécharger le programme complet sous forme de fichier .aia.

Appli android version 2:  jauge linéaire

Cette deuxième version ne fait pas appel à Google Charts.  J'utilise plutôt les possibilités graphiques d'App Inventor pour dessiner une jauge linéaire (genre "progress bar").


En mode "Designer", un seul des 10 composants est différent par rapport à la version 1: le composant "F" est maintenant un cadre plutôt qu'une image (un cadre est un rectangle dans lequel notre programme pourra tracer des formes géométriques).

A)  Un rectangle "Arrangement horizontal", contenant les éléments  B, C et D.
B)  Un label renommé "StatutConnexion" qui indiquera sur l'Arduino est connecté ou non.
C) Un sélectionneur de liste renommé "BoutonConnecter", qui affiche le texte "Connecter".
D) Un bouton renommé "BoutonDéconnecter" qui affiche le texte "Déconnecter".
E) Un label renommé "Label_Pourcentage", qui affichera la valeur mesurée en %.
F) Un cadre auquel j'ai laissé le nom par défaut "Cadre1"
G) Un label renommé "Label_Tension", qui affichera la valeur mesurée en volts.
H) Une horloge
I) Un client_bluetooth
J) Un notificateur

Votre liste de composants devrait donc avoir cette allure:


Je vous montre aussi les caractéristique du cadre "cadre1".  J'ai réglé la couleur de fond à gris, pour que le rectangle soit visible.  La hauteur est de 20 pixels, alors que la largeur représente 80% de la largeur de la fenêtre.  La largeur de ligne est de 20 pixels, et la couleur de dessin est bleu.  Pour fournir une indication visuelle du signal reçu via bluetooth, nous allons donc tracer une grosse ligne bleue aussi large que le rectangle gris.


Basculons maintenant en mode "Blocs".  Toute la première partie demeure identique à ce qu'elle était dans la première version (il s'agit de la gestion des connexions/déconnexions).

La différence se trouve à l'intérieur de la partie "Quand Horloge1.Chronomètre".  Dans "Appeler Cadre1.Dessiner ligne", nous indiquons les coordonnées des deux extrémités de la ligne bleue que nous désirons tracer.  L'extrémité gauche se trouve à la coordonnée horizontale 0 (l'extrême gauche du cadre), alors que l'extrémité droite se trouve à une position proportionnelle à la valeur que nous désirons représenter.  La valeur donnée à nos coordonnées verticales (10) représentent le centre vertical de notre cadre.



Voici le résultat à l'écran de l'appareil android:




Yves Pelletier   (TwitterFacebook)

Related Posts Plugin for WordPress, Blogger...