lundi 28 décembre 2020

Bilan de l'année 2020

Alors que cette étrange année 2020 tire à sa fin,  je vous présente ce bilan des publications des 12 derniers mois.

Dès le début de l'année, j'ai commencé à expérimenter avec l'ESP32-CAM: mes premières observations constituent d'ailleurs l'article le plus lu cette année (près de 6000 visionnements). Plusieurs autres projets ont suivi: un web server minimalisteenregistrement de photos sur la carte microSDmouvement panoramique, contrôle des LEDs de la carte, photographie time-lapse, enregistrement des photos sur Google Drivecapteur infrarouge passif (PIR), et gestion à distance de la carte SD .

L'ESP32 (sans caméra) et l'ESP8266 ont également fait l'objet de quelques articles: envoi de données vers Google Sheets ou vers Google Docs, matrice de LEDs contrôlée par une page web et balance connectée.

L'Arduino Uno demeure tout de même ma carte de confiance quand vient le temps d'expérimenter un nouveau capteur, comme le module GPS NEO 6MV2, le capteur de champ magnétique à effet Hall KY-024, le capteur de couleurs TCS3200, le capteur DHT22 (humidité et température), un thermocouple avec MAX6675, une balance à base de HX711, le capteur de son KY-038 et un microphone amplifié à base de MAX4466

Toujours avec l'Arduino Uno, j'ai piloté une matrice de LEDs RGB WS2812B , joué des fichiers MIDI , conçu un jeu MIDI pour s'entraîner à lire les notes sur une portée et enregistré des données dans un EEPROM I2C et dans l'EEPROM interne de l'Arduino.

J'ai utilisé la carte STM32 "Blue Pill" pour quelques projets spécifiques: enregistreur GPS , jeu de Pong, affichage sur un écran ST7735 les fichiers d'une carte SD et  mesure d'une distance avec le télémètre laser VL53L1X.


J'ai aussi eu l'occasion de m'initier à la carte micro:bit, mais ce ne fut pas vraiment le coup de foudre, même après avoir trouvé une façon bien personnelle d'utiliser tous ses connecteurs

Je m'en suis quand même servi pour mesurer une distance avec des ultrasons, pour mesurer la pression atmosphérique et pour contrôler un moteur pas à pas.


J'ai aussi fait quelques projets avec mon Raspberry Pi: balance à base de Raspberry Pimesure de la température et l'humidité relative avec un DHT22mesure de la pression atmosphérique avec le BMP180 , mesure d'une distance avec télémètre laser VL53L1X et détermination de la couleur grâce au capteur TCS3200.

J'ai aussi fait un robot contrôlé par Raspberry Pi, lui faisant tour à tour suivre une ligne et éviter des obstacles. Et puisque les robots suiveurs de ligne sont vraiment amusants, j'en ai fait deux autres: l'un à base d'Arduino, et l'autre à base de LM393.

Joyeuse année 2021!

Yves Pelletier (TwitterFacebook

mardi 22 décembre 2020

Capteur de couleurs TCS3200 (GY-31) et Raspberry Pi

Dans cet article, nous allons piloter un module GY-31, qui comporte un capteur de couleurs TCS3200,  au moyen d'un Raspberry Pi programmé en Python.

Comme je l'avais mentionné lorsque j'en ai fait l'essai avec un Arduino, le capteur de couleur TCS3200 est constitué d'une matrice de minuscules photodiodes. Certaines de ces photodiodes sont munies d'un filtre qui laisse passer la lumière rouge, alors que d'autres ne captent que la lumière bleue ou la lumière verte. Ces photodiodes peuvent être activées tour à tour de façon à connaître la quantité de rouge, de bleu et de vert qui se trouve dans la lumière qui atteint le capteur.

En plus du capteur TCS3200, le module GY-31 comporte 4 LEDs blanches qui assurent un éclairage adéquat de la cible dont on désire déterminer la couleur.

Les connecteurs du module GY-31 sont les suivants:

  • VCC: Alimentation située entre 2,7 et 5,5 V
  • GND: La masse
  • S0 et S1: Sélection de l'échelle de fréquence à la sortie
  • S2 et S3: Sélection des photodiodes actives
  • OUT: signal de sortie
  • LED: contrôle des 4 LEDs

L'état logique des entrées S2 et S3 détermine les photodiodes actives:

  • Si S2 = 0 et S3 = 0 : photodiodes avec filtre rouge
  • Si S2 = 0 et S3 = 1:  photodiodes avec filtre bleu
  • Si S2 = 1 et S3 = 1: photodiodes avec filtre vert
  • Si S2 = 1 et S3 = 0: photodiodes sans filtre

Le signal de sortie est un peu inhabituel: il s'agit d'une onde carrée dont la fréquence dépend de l'intensité lumineuse (plus l'intensité lumineuse captée es grande, plus le signal de sortie oscille rapidement)­.  Pour faciliter la mesure de cette fréquence, les entrées S0 et S1 permettent, si on le désire, de la diviser par 5 ou par 50:

  • Si S0 =1 et S1 = 1: 100% de la fréquence (environ 600 kHz)
  • Si S0 = 1 et S1 = 0: 20% de la fréquence (environ 120 kHz)
  • Si S0 = 0 et S1 = 1: 2% de la fréquence (environ 12 kHz)
  • Si S0 = 0 et S1 = 0: capteur inactif

Quant aux LEDs, elles sont allumées par défaut. Si vous désirez qu'elles demeurent éteintes, vous reliez l'entrée LED du module GY-31 à la masse, pour que sa tension soit nulle.

Connexions du module GY-31 au Rasperry Pi

Voici comment j'ai branché le module GY-31 à mon Raspberry Pi:

  • Broche GND du module GY-31: Broche GND (#6) du Raspberry Pi
  • Broche VCC du module GY-31: Sortie 3,3 V (#1) du Raspberry Pi
  • Broche S0 du module GY-31: Broche GPIO 27 (#13) du Raspberry Pi
  • Broche S1 du module GY-31: Broche GPIO 22 (#15) du Raspberry Pi
  • Broche S2 du module GY-31: Broche GPIO 23 (#16) du Raspberry Pi
  • Broche S3 du module GY-31: Broche GPIO 24 (#18) du Raspberry Pi
  • Broche OUT du module GY-31: broche GPIO 25 (#22) du Raspberry Pi
  • Broche LED du module GY-31: pas branchée
Script en Python:

Le script ci-dessous affiche tour à tour la valeur mesurée pour le rouge, le vert, le bleu et la totalité de la lumière captée.

Aux lignes 31 et 32, je règle le module pour que la fréquence du signal de sortie ne soit que 2% de la valeur maximale possible, en suivant l'hypothèse qu'un signal lent sera plus facile à mesurer avec une bonne précision. Les résultats semblent quand même très bons si vous réglez le capteur à 100% de la fréquence. 

Aux lignes 37 et 38, j'utilise la fonction GPIO.wait_for_edge afin de chronométrer le temps nécessaire pour que le signal de sortie du module effectue 10 oscillations. C'est ce temps qui est affichée comme résultat: une petite valeur correspond à une forte intensité lumineuse.

- -

Les résultats obtenus dépendent de la lumière ambiante et de la distance entre le capteur et la surface dont on désire connaître la couleur. Pour minimiser les perturbations, j'ai placé le capteur au fond d'un récipient sombre qui bloque la lumière ambiante et maintient une distance constante entre le capteur et la surface colorée.


J'ai effectué des tests avec des cartons de couleur vive. En utilisant les mesures des différents paramètres pour chaque carton, on peut faire en sorte que le programme reconnaît le carton rouge, le carton vert, etc. (j'ai laissé un exemple aux lignes 66 et 67 du script).




Sources: je me suis inspiré de ce projet publié sur Electronics Hub.


À lire également:

Yves Pelletier (TwitterFacebook

vendredi 18 décembre 2020

Jouer des fichiers MIDI avec Arduino

Ce projet consiste à utiliser une carte Arduino Uno pour lire des fichier MIDI préalablement enregistrés sur une carte SD afin que le contenu de ces fichiers soit joué en temps réel par un clavier MIDI.

Le circuit

La carte Arduino UNO est branchée, d'une part, à un lecteur de cartes SD et, d'autre part, à un clavier MIDI.

J'ai utilisé un module de carte SD bas de gamme qui communique en SPI avec un niveau logique de 3,3 V, ce qui m'a obligé à utiliser un circuit intégré 4050 pour abaisser le niveau logique des broches SCK (13), MOSI (11) et CS (10) de l'Arduino Uno.


  • Broche GND du module carte SD: Broche GND de l'Arduino Uno
  • Broche +3.3 du module carte SD: Broche 3.3 V de l'Arduino Uno
  • Broche CS du module carte SD: broche 2 du 4050
  • Broche MOSI du module carte SD: broche 4 du 4050
  • Broche SCK du module carte SD: broche 6 du 4050
  • Broche MISO du module carte SD: broche 12 de l'Arduino Uno

  • Broche 1 du 4050 : sortie 3,3 V de l'Arduino Uno
  • Broche 3 du 4050: broche 10 de l'Arduino Uno
  • Broche 5 du 4050: broche 11 de l'Arduino Uno
  • Broche 7 du 4050: broche 13 de l'Arduino Uno
  • Broches 8, 9, 11 et 14 du 4050: broche GND de l'Arduino Uno

Pour la connexion avec le clavier MIDI, j'ai utilisé l'interface MIDI que j'avais fabriquée il y a quelques années, mais on peut se contenter d'un circuit assez minimaliste constitué de deux résistances de 220 Ω puisqu'on se contente d'envoyer des données vers le clavier, sans chercher à capter les données qui proviennent du clavier. Les données émise sur la broche TX de l'Arduino Uno seront ainsi acheminées à l'entrée MIDI IN du clavier.

Installation des bibliothèques

J'ai d'abord installé la bibliothèque MD_MIDIFile de Majic Designs (il faut l'installer à partir du fichier zip car elle n'est pas disponible dans le gestionnaire de bibliothèques).

Il faut également installer la bibliothèque SDFat de Bill Greiman (je suppose que la bibliothèque SD régulière est trop gourmande en mémoire pour être utilisée en même temps que la bibliothèque MIDIFile). Attention, toutefois: au moment où j'ai fait mes tests, la version la plus récente de SDFat était incompatible avec MD_MIDIFile (erreur de compilation causée par la méthode chdir): j'ai dû installer une version plus ancienne de SDFat (1.1.4), ce qui est très simple avec le gestionnaire de bibliothèque de l'IDE Arduino.


L'exemple "MD_MIDIFile_Play"

Parmi les exemples fournis avec la bibliothèque MD_MIDIFile, celui qui s'intitule "MD_MIDIFile_Play" s'avère le plus intéressant pour un premier essai. Avant de l'utiliser, toutefois, il faut copier sur la carte SD les 24 fichiers MIDI qui sont fournis avec la bibliothèque (chemin d'accès: libraries/MD_MIDIFile/examples/SD_Card_Files).


Lors de l'exécution du sketch, les fichiers MIDI sont joués un à la suite de l'autre. J'ai aussi fait quelques essais avec d'autres fichiers MIDI issus de ma collection personnelle: certains d'entre eux ont été correctement exécutés, alors que d'autres sont restés désespérément muets. 

D'autre part, j'ai remarqué que ce message est affiché lors de la compilation du programme: "La mémoire disponible est faible. Des problèmes de stabilité pourraient survenir". De toute évidence, si on désire développer quelque chose d'un peu plus sophistiqué, on aura intérêt à utiliser autre chose qu'un Arduino Uno.

À lire également

Beaucoup d'autres projets MIDI avec l'Arduino:

Yves Pelletier (TwitterFacebook

vendredi 4 décembre 2020

Microphone amplifié MAX4466 et Arduino

Il y a quelques mois, en faisant l'essai du capteur de son KY-038,  j'avais été déçu par son manque de sensibilité. C'est pour cette raison que je me suis procuré un microphone amplifié à base de MAX4466, qui s'est révélé beaucoup plus performant.



Il s'agit visiblement d'un clone du module mis au point par la compagnie Adafruit:  le fabriquant a même fidèlement reproduit les informations imprimées sous le microphone!


Le module est à peine plus grand que le microphone: tous les autres composants du circuit se trouvent au verso. 


Le MAX4466 est un circuit intégré spécialement conçu pour la préamplification d'un microphone électret. Un minuscule potentiomètre permet de modifier son gain.

Connexions à l'Arduino Uno

Le module ne comporte que 3 connecteurs:
  • OUT: sortie dont la tension dépend de l'intensité sonore capté par le micro. On la branche à une entrée analogique du microcontrôleur (j'ai utilisé A0).
  • GND: à brancher à une des broches GND de l'Arduino.
  • VCC: l'alimentation, qui peut prendre n'importe quelle valeur entre 2,4 V et 5,5 V. Je l'ai reliée à la sortie 3,3 V (je vous explique pourquoi ci-dessous).




Alimentation 5 V vs alimentation 3,3 V

Lorsque le micro ne capte aucun son, la tension de sortie du module est égale à la moitié de la tension d'alimentation: 2,5 V si le micro est alimenté avec 5 V, et 1,15 V si le micro est alimenté avec 3,3 V.

Cependant, la tension de 3,3 V fournie par carte Arduino est beaucoup plus stable que celle de 5 V (la sortie 3,3 V comporte un régulateur de tension, ce qui n'est pas le cas de la sortie 5 V).

Pour vérifier à quel point les fluctuations de l'alimentation 5 V affectent le comportement du micro, j'ai fait un petit test au moyen de ce sketch:

Voici un échantillon des résultats obtenus pendant que le micro était alimenté par la sortie 3,3 V de l'Arduino Uno, pendant qu'aucun son n'était capté. On peut constater que la mesure varie entre 335 et 343, donc l'écart entre les deux extrêmes est de 8.


Voici maintenant un échantillon des résultats obtenus pendant que le micro était alimenté par la sortie 5 V de l'Arduino Uno, toujours en absence de son. Cette fois, les résultats varient entre 471 et 601, soit un écart de 130!


Conclusion: il est préférable d'utiliser la sortie 3,3 V si on ne veut pas que notre micro détecte des sons qui n'existent pas.


Exemple de sketch

Voici un exemple de sketch pour un détecteur de son: la LED intégrée à la carte Arduino s'allume brièvement lorsqu'un son est détecté. Ici, la sensibilité a été réglée à un niveau très bas (la LED s'allume aussitôt que l'écart entre la valeur mesurée et la valeur de référence est de 25). Il s'agit d'augmenter cette valeur si la LED s'allume même en absence de son.

-
-

Yves Pelletier (TwitterFacebook

Dans un blog près de chez vous (15)


Encore une fois, quelques suggestions de lecture...