Bloc-notes de Sylvain

Potentiomètre et Raspberry Pi

Sur la première version du Raspberry j'ai ajouté une option pour gérer le son sur la base d'un rotary encoder. Celui que j'ai utilisé est un YK-040 pour lequel j'ai pu adapter des scripts trouvés sur le web pour contrôler le volume. L'inconvénient de cette solution est que cet encodeur est une vis sans fin et qu'il n'y a pas de retour pour l'utilisateur. Impossible de savoir si l'on est au volume maximum ou si on peut continuer à tourner. Afin d'améliorer cela dans la nouvelle version j'ai pensé à utiliser un potentiomètre linéraire qui aurait l'avantage visuellement de montrer à quel niveau de volume on est par rapport aux possibilités de l'appareil. Il existe des milliers de modèles différents, pour un premier essai je me suis rabbatu sur un modèle de base qu'on trouve sur eBay à moins de 2 euros :

La glissière fait 75mm, ça devrait me permettre de disposer ce potentiomètre à la vertical du prochain jukebox pour le contrôle du volume. Il y a cependant un point problématique avec ce dispositif à la sortie de la boite. C'est un équipement qui communique en analogique, là où le raspberry Pi, contrairement à un Arduino par exemple, ne sait lire sur ces pins d'entrée que du numérique.

Il existe une solution pour cela (sûrement plusieurs mais c'est celle que j'ai trouvée pour le moment), utiliser une puce qui va se charger de faire la conversion analogique → numérique. La solution que j'ai utilisée actuellement est sûrement surdosée par rapport à mon besoin : un MCP3008, ça vaut entre 3 et 4 euros et ça va se charger de rendre disponible le signal via les GPIO du Raspberry. L'avantage de cette puce est qu'elle est très bien documentaire, Adafruit propose par exemple un tutoriel pas à pas et il existe une librairie dédiée qui permet de lire facilement ces informations. Après avoir fait pas mal de branchements on se retrouve avec un système qui fonctionne :

Après avoir fait le branchement (en faisant attention à l'encoche sur la puce pour connaitre les numéros de pin), on doit installer les librairies qui vont bien :

sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus python-pip
sudo pip install adafruit-mcp3008

On lance alors le script de test simpletest.py fourni par adafruit et vous devriez alors voir un tableau à 8 colonnes dont les valeurs évoluent en fonction des déplacements du potentiomètre (première colonne seulement poir moi car peu d'entrées utilisées sur les MCP3008, c'est pour ça que je dis qu'il est surdimensionné par rapport à mon besoin).

Il pourra être nécessaire de supprimer la ligne suivante pour éviter une erreur de bibliothèque non installée dans le cas où vous utilisez la config par défaut et pas le SPI (hardware configuration) : import Adafruit_GPIO.SPI as SPI

Ça fait 5 à 6 euros pour gérer le son, c'est raisonnable mais il semble qu'il y ait possibilité d'utiliser un système moins précis pour la conversion analogique → numérique, qui répondrait à notre besoin dans lequel la précision n'est pas un point critique, avec une puce sur base de PCF8591. On en trouve à partir de 1€, voire 30 centimes en les prenant par plusieurs, ça peut être intéressant de voir ce que ça donne, j'en ai commandé une, la suite au prochaine épisode.