• Première étape
  • Matériel et accessoires ; GPIO
  • Projets
  • Logiciel
    • Serveur Web
  • Arduino & ESP8266
  • Automatisation de la maison
  • Sonstiges
    • News
Facebook Twitter YouTube
Tutorials for Raspberry Pi Tutorials for Raspberry Pi
  • Matériel et accessoires ; GPIO
  • Projets
  • Logiciel
  • Serveur Web
  • Première étape
  • Automatisation de la maison
  • Anglais
  • Allemand
Tutorials for Raspberry Pi Tutorials for Raspberry Pi
Home»Arduino & ESP8266»MCP3008 : Lire des signaux analogiques sur le Raspberry Pi

MCP3008 : Lire des signaux analogiques sur le Raspberry Pi

Facebook Twitter LinkedIn Tumblr Email Reddit
Raspberry Pi MCP3008 ADC
Share
Facebook Twitter LinkedIn Email Tumblr Reddit Telegram WhatsApp

De nombreux capteurs développés à l’origine pour l’Arduino n’offrent pas d’interface numérique et ne peuvent être lus que de manière analogique. Le problème est que le Raspberry Pi, avec ses GPIO, ne peut pas lire de signaux analogiques, c’est pourquoi vous avez besoin d’un convertisseur analogique-numérique (ADC) comme le MCP3008. Cela signifie que jusqu’à 8 entrées analogiques peuvent être lues via le bus SPI du Raspberry Pi.

Dans cet article, il y a une explication et une classe Python, avec laquelle les signaux de tous les capteurs et modules analogiques peuvent être lus.

Une possibilité est, bien sûr, de connecter un Arduino au Raspberry Pi, puisqu’il possède également des broches d’E/S analogiques et peut donc lire ces signaux sans ADC. La façon dont cela fonctionne est décrite en détail dans le tutoriel lié. L’inconvénient, cependant, est que d’une part, vous avez un autre microcontrôleur et qu’il ne peut pas être adressé via Python. Étant donné que Python est particulièrement adapté comme langage de programmation d’entrée de gamme, la plupart des tutoriels de cette page utilisent également Python. Un Arduino, en revanche, se programme en C ++.

 

Pièces de matériel requises

En plus du MCP3008 ADC, vous devez aussi avoir des Câbles Jumper et un Breadboard.

 

En outre, il existe un grand nombre de capteurs ou de modules qui ne peuvent être lus qu’en analogique, par exemple :

  • Joysticks
  • Capteurs de distance à infrarouge
  • Capteurs de pulsation/ fréquence cardiaque
  • Capteurs de son
  • Capteurs d’humidité
  • capteur photo
  • Codeur rotatif
  • Capteurs de gaz MQ
  • et bien d’autres encore

Pour la plupart de ces modules, vous trouverez également sur ce site des instructions plus détaillées et/ou des projets qui les utilisent. Cependant, si vous suivez ce tutoriel, vous serez en mesure de lire n’importe quel autre capteur/module analogique.

 

Différences entre l’analogique et le numérique

Il n’existe que deux états pour les signaux numériques : ON/HIGH ou OFF/LOW (1 ou 0). Si l’on suppose une tension d’entrée numérique maximale de 5V, toute valeur comprise entre 0V et 0,4V sera reconnue comme un niveau BAS et une valeur comprise entre 2,4V et 5V comme un niveau HAUT. Toutes les valeurs intermédiaires sont indéfinies. Si vous appliquez une telle tension, le signal sera reconnu aléatoirement comme 0 ou 1. Cependant, comme cela n’est pas cohérent, un signal numérique ne devrait jamais se trouver dans cette zone grise.

Contrairement aux signaux numériques, un signal analogique peut également prendre des valeurs intermédiaires, il n’est donc pas clairement défini. Par exemple, les valeurs en pourcentage sont données (valeur ÷ tension appliquée), ce que de nombreux capteurs analogiques utilisent.
Pour lire cette tension sur le Raspberry Pi, il faut utiliser un convertisseur analogique-numérique comme le MCP3008. Cependant, celui-ci ne spécifie pas des valeurs en volts, mais un nombre entre 0 et 1023, ce qui correspond à 10 bits (2 ^ 10). La tension peut être déterminée comme suit

(ADC Value ÷ 1023) * Voltage

Si le capteur analogique fonctionne avec une tension de 3,3 V et qu’une valeur de 789 a été lue, la tension appliquée correspond à 2,54 volts.

 

 

Connexion entre Raspberry Pi et MCP3008

Raspberry Pi MCP3008 Pinout
Les 8 canaux analogiques lisibles se trouvent sur le côté gauche du MCP3008.

La façon la plus simple d’adresser un convertisseur analogique-numérique est d’utiliser le bus SPI. Les 8 signaux peuvent être lus avec une requête et convertis.

Comme on peut le voir dans la fiche technique, le CAN tolère une tension d’entrée comprise entre 2,7V et 5V. Etant donné que les GPIOs fonctionnent avec 3.3V et qu’elles peuvent se rompre à des tensions plus élevées, le MCP3008 ne doit être utilisé qu’avec 3.3V. Si vous utilisez un module analogique qui a une tension d’entrée plus élevée que 3.3V (et qui peut aussi la transmettre), vous devez vous assurer qu’elle n’atteint pas l’ADC. Pour cela, on utilise par exemple des résistances en série qui peuvent être prises en compte dans la suite du parcours (calculs, etc.).

La connexion au Raspberry Pi est assez simple puisque seuls les GPIOs qui sont également destinés au bus SPI sont utilisés :

RaspberryPi MCP3008
Pin 1 (3.3V) Pin 16 (VDD)
Pin 1 (3.3V) Pin 15 (VREF)
Pin 6 (GND) Pin 14 (AGND)
Pin 23 (SCLK) Pin 13 (CLK)
Pin 21 (MISO) Pin 12 (DOUT)
Pin 19 (MOSI) Pin 11 (DIN)
Pin 24 (CE0) Pin 10 (CS/SHDN)
Pin 6 (GND) Pin 9 (DGND)

 

La connexion ressemble alors à ceci, bien que je n’aie explicitement pas placé de capteur sur le côté droit, car tous les signaux numériques peuvent être lus de cette manière :

Raspberry Pi MCP3008 ADC Connection

 

Préparation

Avant de pouvoir lire les valeurs, il faut mettre à jour les sources de paquets et installer une bibliothèque pour SPI et, bien sûr, activer le bus SPI, car celui-ci est désactivé par défaut dans Raspbian.

Commençons par mettre à jour les paquets et installer les outils Python Developer:

sudo apt-get update 
sudo apt-get upgrade
sudo apt-get install python-dev

Ensuite, nous pouvons télécharger, décompresser et installer la bibliothèque SpiDev :

wget https://github.com/doceme/py-spidev/archive/master.zip 
unzip master.zip
cd py-spidev-master
sudo python setup.py install

Enfin, le bus SPI doit encore être activé si ce n’est pas encore fait. Dans Raspbian Jessie (et d’autres systèmes d’exploitation basés sur ce dernier), la configuration du Raspberry Pi peut être modifiée en utilisant les commandes suivantes sudo raspi-config. L’option « SPI » se trouve sous « Options avancées ». Vous activez ici le SPI et redémarrez ensuite le système (si aucune requête correspondante ne vient: sudo reboot).

 

 

Classe Python pour l’ADC MCP3008 de Raspberry Pi

La classe suivante vous permet d’accéder facilement à l’ADC MCP3008. Vous pouvez soit télécharger le fichier ici ou le créer en utilisant sudo nano MCP3008.py et insérez le code suivant :

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from spidev import SpiDev
 
class MCP3008:
    def __init__(self, bus = 0, device = 0):
        self.bus, self.device = bus, device
        self.spi = SpiDev()
        self.open()
        self.spi.max_speed_hz = 1000000 # 1MHz
 
    def open(self):
        self.spi.open(self.bus, self.device)
        self.spi.max_speed_hz = 1000000 # 1MHz
    
    def read(self, channel = 0):
        adc = self.spi.xfer2([1, (8 + channel) << 4, 0])
        data = ((adc[1] & 3) << 8) + adc[2]
        return data
            
    def close(self):
        self.spi.close()
 

 

Vous pouvez alors insérer ce fichier dans tous les dossiers de votre projet et l’intégrer simplement :

Python
1
from MCP3008 import MCP3008

La classe doit ensuite être initialisée une fois et les 8 canaux analogiques peuvent être lus :

Python
3
4
5
adc = MCP3008()
value = adc.read( channel = 0 ) # Vous pouvez bien entendu adapter le canal à lire
print("Tension appliquée : %.2f" % (valeur / 1023.0 * 3.3) )

Maintenant, plus rien ne devrait vous empêcher de faire fonctionner tous les modules Arduino/Genuino possibles sur le Raspberry Pi.

ADC arduino Capteurs analogiques Convertisseur analogique-numérique Genuino MCP3008 Signaux analogiques spi spidev
Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
Previous ArticleHow to build a Smart Agriculture System using IoT
Next Article Solarbetriebenes Raspberry Pi Bitcoin Mining betreiben

Related Posts

Connecter un clavier Raspberry Pi – Code Lock

Construire un capteur de porte / fenêtre Raspberry Pi avec Reed Relais

Contrôler le module RTC de Raspberry Pi – Horloge temps réel I2C

Construisez votre propre boussole Raspberry Pi (HMC5883L)

Un commentaire

  1. Cyril on 21. mars 2023 23:36

    Bonjour,

    La dernière ligne de commande « sudo python setup.py install » ne fonctionne pas pour moi, il n’y aurait pas une erreur.

    Merci

    Reply

Leave A Reply Cancel Reply

Comment réaliser un émetteur radio Raspberry Pi

Contrôle de moteur Stepper Raspberry Pi avec L293D / ULN2003A

Connectez et contrôlez bandes LED WS2812 RGB via Raspberry Pi

Contrôlez votre Raspberry Pi à l’aide d’une manette Xbox 360 sans fil

Construisez votre propre boussole Raspberry Pi (HMC5883L)

Pulsation de Raspberry Pi / Mesure du pouls

ABONNEZ-VOUS MAINTENANT
Et recevez de nouveaux tutoriels dans votre boîte de réception.
Cliquez ici pour soumettre!

Merci!

Nous vous contacterons bientôt.

Tutorials for Raspberry Pi
Facebook Twitter YouTube
  • Politique de confidentialité
  • Conditions de service & Politique sur les cookies

Type above and press Enter to search. Press Esc to cancel.