Entrée analogique? Sortie Analogique?
Les broches GPIO du Raspberry Pi sont des broches numériques. Lorsqu'elles sont configurées en sortie, elles ne peuvent prendre que deux états différents: 0 V ou 3,3 V. De même, lorsqu'elles sont configurées en entrée, elles ne peuvent que distinguer deux états différents: 0 V ou 3,3 V.
Une sortie analogique peut prendre n'importe quelle valeur située entre 0 V et 3,3 V. Et une entrée analogique peut distinguer n'importe quelle valeur située entre 0 V et 3,3 V. Par exemple, une entrée analogique pourra faire la distinction entre une tension de 1 V et une tension de 1,2 V.
Petit bémol, cependant: quand je dis "n'importe quelle valeur", j'exagère un peu. Le PCF8591 est un convertisseur à 8 bits, ce qui signifie que la tension peut prendre 255 valeurs différentes échelonnées entre 0 et 3,3 V.
Description du module
Il est possible d'utiliser un simple circuit intégré PCF8591, mais j'ai plutôt utilisé un module qui comprend, en plus, un petit potentiomètre, une photorésistance et une thermistance (il n'est pas obligatoire d'utiliser ces trois composants: il est facile de les désactiver en retirant les jumpers qui les relient aux entrées du PCF8591).
Les 4 connecteurs situés du côté gauche du module servent à l'alimentation du module (VCC et GND) et à la communication i2c avec le microcontrôleur (SDA e SCL).
Du côté droit, AOUT est la sortie analogique, que nous pouvons régler à n'importe quelle valeur située entre 0 et 3,3 V. AIN0, AIN1, AIN2 et AIN3 sont les 4 entrées analogiques qui nous permettent de mesurer la valeur d'une tension se situant entre 0 et 3,3 V.
Le potentiomètre est relié à la broche INPUT0, la photorésistance est reliée à la broche INPUT1, et la thermistance est reliée à la broche INPUT2. Lorsque vous achetez le module, des jumpers acheminent le signal du potentiomètre à l'entrée AIN0, le signal de la photorésistance à l'entrée AIN1 et le signal de la thermistance à l'entrée AIN2, mais vous pouvez évidemment retirer ces jumpers et brancher des capteurs analogiques de votre choix aux entrées AIN0, AIN1, AIN2 et AIN3.
Connexions
4 fils conducteurs sont nécessaires pour brancher le module PCF8591 au Rasbperry Pi:
Module PCF8591 ---------- Raspberry Pi
SDA --------------- Broche 3 (GPIO2)
SCL -------------- Broche 5 (GPIO3)
VCC --------------- Broche 1 (3,3 V)
GND ---------------- Broche 6 (GND)
Préparation du Raspberry Pi pour la communication i2cIl n'y a pas si longtemps, l'activation de l'i2c sur un Raspberry Pi impliquait la modification manuelle de quelques fichiers de préférence à l'aide d'un éditeur de texte. Ce n'est heureusement plus le cas de nos jours, le réglage se limitant à ouvrir "Configuration du Rasbperry Pi" dans le menu "Préférences"...
...régler "I2C" à "Activé", et redémarrer le Raspberry Pi.
Si le module PCF8591 est correctement branché à votre Raspberry Pi, vous devriez le voir à l'adresse 48 en entrant la commande "sudo i2cdetect -y 1" dans le Terminal.
Notez que si vous avez un très ancien Raspberry Pi, vous devrez plutôt inspecter le bus 0 ("sudo i2cdetect -y 0"). Sur mon Banana Pi M2 Berry, c'est plutôt le bus 2 ("sudo i2cdetect -y 2").
Script pour la lecture d'une entrée analogique
Voici un script en Python qui affiche la tension mesurée à l'entrée AIN0 du module PCF8591. Elle est convertie en volts (multipliée par 3,3 et divisée par 255), sinon la valeur affichée serait un entier situé entre 0 et 255 volts. Vous pouvez facilement tester ce script en tournant le potentiomètre du module PCF8591, qui est relié à l'entrée AIN0. Vous pouvez également remplacer AIN0 par AIN1, dans le script, et faire varier la valeur affichée en modifiant la quantité de lumière qui atteint la photorésistance.
Script pour le réglage de la sortie analogique
Ce deuxième script fait varier la tension de la sortie analogique AOUT du module PCF8591. Cette tension prendra successivement les valeurs 0 V, 0,5 V, 1 V, 1,5 V, etc.
Vous pouvez brancher un voltmètre à la sortie AOUT pour vérifier le résultat.
Yves Pelletier (Twitter, Facebook)
Bonjour,
RépondreSupprimerMerci beaucoup d'abord pour cet article :)
J'aurais besoin d'aide. Lorsque dans un même programme j'essaye d'afficher les valeurs des 3 capteurs, cela marche à moitié car les valeurs deviennent fausses comparé à quand je demande d'afficher la valeur d'un seul capteur dans mon programme. Si vous avez une solution pour y remédier, je suis preneur ! Merci. Cordialement, Thomas