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.
-
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.
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.
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.
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.
-
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters