mercredi 30 janvier 2019

PCF8591 et Raspberry Pi

Nous allons voir aujourd'hui comment ajouter une sortie analogique et quatre entrées analogiques au Rasbperry Pi grâce à un module PCF8591 (qui est à la fois un convertisseur analogique-numérique et un convertisseur numérique-analogique). Nous programmerons en langage Python.


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 i2c

Il 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   (TwitterFacebook)

1 commentaire:

  1. Bonjour,
    Merci 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

    RépondreSupprimer