Raspberry: lecture analogique
Apprendre comment lire une tension analogique à l'aide d'un Raspberry Pi pourrait être plus facile que vous ne le pensez!
Le Pi n'inclus pas de convertisseur Analogique/Digital mais un convertisseur ADC externe tel que le MCP3008 peut être utilisé avec du code Python pour faire une lecture analogique en utilisant le protocole SPI.
Voici une liste de quelques entrées analogiques qui peuvent être lue avec ce montage:
Le Pi Cobbler d'AdaFruit (disponible chez MC Hobby) est utiliser pour faciliter le montage.
Le Raspberry Pi ne dispose pas de moyen matériel pour lire une entrée analogique. Le Raspberry est purement digital a contrario des Arduino, AVR ou microcontroleur qui eux disposent souvent de 6 entrées analogiques ou plus!
Les entrées analogiques sont vraiment pratiques parce que beaucoup de senseur utilisent des sorties analogiques, il est donc important de faire en sorte que le Raspberry soit aussi capable de faire des lectures analogiques.
Cela est rendu possible en raccordant une puce MCP3008 sur notre Pi. The MCP3008 agit comme un "pont" entre le monde digital et analogique. Il dispose de 8 entrées analogiques que le Pi peut "lire" en utilisant 4 pins digitales. Le MCP3008 est donc un ajout idéal pour permettre au Pi de lire des senseurs simples comme des photorésistance, des senseurs de forces, des potentiomètres ou des résistances sensibles à la chaleur, etc!
En jetant un oeil sur la fiche technique du MCP3008, la première page présente le diagramme de brochage du MCP3008 avec le nom des différentes broches.
Montage
Voici le plan de montage du MCP3008.
Vous trouverez de plus amples détails sur la page de notre Wiki.
Cette interface matérielle est identifiable sur le Cobbler aux broches identifiées par MISO/MOSI/SCLK/CE0/CE1. Une interface SPI matérielle est super rapide mais malheureusement elle n'est pas prise en charge par toutes les distributions.
C'est pour cette raison que notre exemple met oeuvre une interface SPI logicielle. C'est le programme qui contrôle les broches relatives à l'interface SPI, les bits et le protocole. Comme le protocole SPI est assez simple, le code mis en oeuvre n'est pas trop long.
Le principal avantage de cette approche logicielle c'est que le protocole SPI peut être utilisé avec n'importe quelles broches GPIO du Raspberry Pi.
Ce qui produit le résultat suivant:
Où Acheter
Tout le matériel nécessaire est disponible chez MCHobby.
Utilisation d'un potentiomètre sur Raspberry |
Le Pi n'inclus pas de convertisseur Analogique/Digital mais un convertisseur ADC externe tel que le MCP3008 peut être utilisé avec du code Python pour faire une lecture analogique en utilisant le protocole SPI.
Voici une liste de quelques entrées analogiques qui peuvent être lue avec ce montage:
- Un potentiomètre
- Une Photorésistance
- Un FSR (résistance sensible à la force) voir notre FSR et Flex Sensor.
- Un senseur de température comme le TMP36
- Un joystick 2 axes
Le Pi Cobbler d'AdaFruit (disponible chez MC Hobby) est utiliser pour faciliter le montage.
Pourquoi avons nous besoin d'un ADC?
ADC signifie "Analog to Digital Converter" autrement dit "Convertisseur Analogique vers Digital".Le Raspberry Pi ne dispose pas de moyen matériel pour lire une entrée analogique. Le Raspberry est purement digital a contrario des Arduino, AVR ou microcontroleur qui eux disposent souvent de 6 entrées analogiques ou plus!
Les entrées analogiques sont vraiment pratiques parce que beaucoup de senseur utilisent des sorties analogiques, il est donc important de faire en sorte que le Raspberry soit aussi capable de faire des lectures analogiques.
Cela est rendu possible en raccordant une puce MCP3008 sur notre Pi. The MCP3008 agit comme un "pont" entre le monde digital et analogique. Il dispose de 8 entrées analogiques que le Pi peut "lire" en utilisant 4 pins digitales. Le MCP3008 est donc un ajout idéal pour permettre au Pi de lire des senseurs simples comme des photorésistance, des senseurs de forces, des potentiomètres ou des résistances sensibles à la chaleur, etc!
En jetant un oeil sur la fiche technique du MCP3008, la première page présente le diagramme de brochage du MCP3008 avec le nom des différentes broches.
Montage
Voici le plan de montage du MCP3008.
Vous trouverez de plus amples détails sur la page de notre Wiki.
Le MCP3008 branché avec un Cobbler. |
Raspberry et SPI
Les utilisateurs avancés de Raspberry PI aurons certainement déjà notés que le Raspberry PI dispose d'une interface SPI matérielle.Cette interface matérielle est identifiable sur le Cobbler aux broches identifiées par MISO/MOSI/SCLK/CE0/CE1. Une interface SPI matérielle est super rapide mais malheureusement elle n'est pas prise en charge par toutes les distributions.
C'est pour cette raison que notre exemple met oeuvre une interface SPI logicielle. C'est le programme qui contrôle les broches relatives à l'interface SPI, les bits et le protocole. Comme le protocole SPI est assez simple, le code mis en oeuvre n'est pas trop long.
Le principal avantage de cette approche logicielle c'est que le protocole SPI peut être utilisé avec n'importe quelles broches GPIO du Raspberry Pi.
Le code
Voici notre exemple Rasp-PiAnalog.py écrit en python et abondamment documenté en Français.#!/usr/bin/env python # -*- coding: latin-1 -*- import time import RPi.GPIO as GPIO GPIO.setmode( GPIO.BCM ) DEBUG = 1 # Lit les données SPI d'une puce MCP3008, 8 canaux disponibles (adcnum de 0 à 7) def readadc( adcnum, clockpin, mosipin, misopin, cspin ): if( (adcnum > 7) or (adcnum < 0)): return -1 GPIO.output( cspin, True ) GPIO.output( clockpin, False ) # met Clock à Low GPIO.output( cspin, False ) # met CS à Low (active le module MCP3008) commandout = adcnum # numéro de channel commandout |= 0x18 # OR pour ajouter Start bit + signle-ended bit # 0x18 = 24d = 00011000b commandout <<=3 # décalage de 3 bits à gauche # Envoi des Bits sur le bus SPI for i in range(5): # faire un AND pour determiner l'état du bit de poids le plus # fort (0x80 = 128d = 10000000b) if( commandout & 0x80 ): # faire un AND pour déterminer l'état du bit GPIO.output( mosipin, True ) else: GPIO.output( mosipin, False ) commandout <<= 1 # décalage de 1 bit sur la gauche # Envoi du bit mosipin avec signal d'horloge GPIO.output( clockpin, True ) GPIO.output( clockpin, False ) # lecture des bits renvoyés par le MCP3008 # Lecture de 1 bit vide, 10 bits de données et un bit null adcout = 0 for i in range(12): # Signal d'horloge pour que le MCP3008 place un bit GPIO.output( clockpin, True ) GPIO.output( clockpin, False ) # décalage de 1 bit vers la gauche adcout <<= 1 # stockage du bit en fonction de la broche miso if( GPIO.input(misopin)): adcout |= 0x1 # active le bit avec une opération OR # Mettre Chip Select à High (désactive le MCP3008) GPIO.output( cspin, True ) # Le tout premier bit (celui de poids le plus faible, le dernier lut) # est null. Donc on l'elimine ce dernier bit en décalant vers la droite adcout >>= 1 return adcout # Broches connectées sur l'interface SPI du MCP3008 depuis le Cobbler # (changer selon vos besoins) SPICLK = 18 SPIMISO = 23 SPIMOSI = 24 SPICS = 25 # Initialisation de l'interface SPI GPIO.setup(SPIMOSI, GPIO.OUT) GPIO.setup(SPIMISO, GPIO.IN) GPIO.setup(SPICLK, GPIO.OUT) GPIO.setup(SPICS, GPIO.OUT) # Potentiomètre 10KOhms raccordés sur le canal ADC #0 potentiometer_adc = 0 while True: # Lecture analogique, retourne une valeur entre 0 et 1023 # pour une valeur de tension entre 0 et VRef (3.3v) trim_pot = readadc( potentiometer_adc, SPICLK, SPIMOSI, SPIMISO, SPICS ) print( "Valeur: " + str( trim_pot ) ) # convertir en tension print( "tension: "+ str( (3.3*trim_pot)/1024 ) ) # attendre une demi-seconde time.sleep(0.5)
Ce qui produit le résultat suivant:
Valeur: 665 tension: 2.14306640625 Valeur: 666 tension: 2.1462890625 Valeur: 665 tension: 2.14306640625 Valeur: 668 tension: 2.152734375 Valeur: 665 tension: 2.14306640625Pour savoir comment télécharger et exécuter ce programme sur votre Py, nous vous proposons de prendre connaissance de notre premiers articles sur Raspberry Pi et LED
Où Acheter
Tout le matériel nécessaire est disponible chez MCHobby.
- Un Pi-Cobbler (disponible chez MCHobby)
- Un potentiomètre
- Un MCP3008 ADC (Convertisseur Analogique Digital) modèle DIP.
- Un Rapsberry
- Du fil de prototypage pour breadboard
- Un breadboard (demi ou grande taille).
Écrire un commentaire