====== À quoi sert un convertisseur analogique-numérique (ADC) ? ======
{{ :raspberry:mcp3008-ip-convertisseur-analogique-numerique.jpg?200|}}
###
**Le Raspberry Pi**, contrairement à un Arduino, **n’a pas d’entrée analogique**. Il ne peut lire que **des valeurs numériques** (0 ou 1, HIGH ou LOW). Or, certains capteurs — comme la **sonde d’humidité du sol Gravity SEN0193** — peuvent envoyer une **tension variabl**e représentant un niveau d’humidité, et non un simple "sec" ou "humide".
###
👉 C’est là qu’intervient le **convertisseur analogique-numérique (ADC)**, comme le **MCP3008**.
===== Pourquoi préférer une lecture analogique pour la sonde SEN0193 ? =====
La sonde Gravity SEN0193, selon sa version, peut fonctionner en deux modes :
* **Numérique** : elle renvoie simplement 1 (sol sec) ou 0 (sol humide). C’est tout.
* **Analogique** : elle renvoie une **valeur continue** entre 0 et 3.3V, que le MCP3008 convertit en une valeur entre **0 et 1023**.
==== Avantages de l’analogique : ====
* Permet un **suivi plus fin et progressif de l’humidité** (utile pour déclencher l’arrosage à un seuil précis).
* Donne la **possibilité de créer des graphiques, des seuils personnalisés**, des alertes...
* Ouvre la voie à une gestion **intelligente et économe de l’eau**.
===== Présentation du MCP3008 =====
###
Le **MCP3008** est une petite puce qui permet de convertir jusqu’à **8 signaux analogiques** en valeurs numériques que le Raspberry Pi peut comprendre, via le protocole **SPI**.
###
Il se connecte au Raspberry Pi **via la breadboard** pour simplifier les branchements.
===== Branchement du MCP3008 =====
###
La **puce MCP3008** doit être connectée au breadboard **à cheval sur la "tranchée centrale"**, tu assures que **chaque broche du MCP3008 est sur une rangée indépendante**, ce qui permet de câbler proprement
###
{{ :raspberry:mcp3008.webp |}}
| MCP3008 | Fonction | Branche sur la breadboard |
| --------- | ------------------ | ---------------------------------------- |
| 16 (VDD) | Alimentation | Un jumper vers la ligne rouge (3.3V) |
| 15 (VREF) | Référence | Ligne rouge aussi |
| 14 (AGND) | Masse analogique | Ligne bleue (GND) |
| 9 (DGND) | Masse numérique | Ligne bleue (GND) |
| 13 (CLK) | Horloge SPI | Vers GPIO11 du Pi |
| 12 (DOUT) | Données vers Pi | GPIO9 |
| 11 (DIN) | Données du Pi | GPIO10 |
| 10 (CS) | Chip Select | GPIO5 |
| 1 (CH0) | Canal analogique 0 | Vers la sortie AO de ta sonde analogique |
| Broche | Nom | Rôle / Explication |
| --------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| **16** | **VDD** | Tension d’alimentation **du circuit numérique** (généralement **3,3V ou 5V**). |
| **15** | **VREF** | Tension de **référence** pour la conversion analogique. En général, **on la relie à VDD**. La précision des mesures dépend de cette valeur. |
| **14** | **AGND** | **Masse (GND)** pour la partie **analogique** (capteurs). À relier au GND du circuit. |
| **13** | **CLK** | **Horloge SPI**. Le Raspberry Pi envoie un signal ici pour cadencer les échanges de données. |
| **12** | **DOUT** | **Data OUT** : les données **numériques sortent** du MCP3008 vers le Raspberry Pi. |
| **11** | **DIN** | **Data IN** : le Raspberry Pi envoie des commandes **vers le MCP3008** (ex : "lis le canal 0"). |
| **10** | **CS** | **Chip Select** (ou CE = Chip Enable). Sert à dire "je parle maintenant à ce composant SPI". |
| **9** | **DGND** | **Masse (GND)** pour la partie **numérique** (Raspberry Pi). À relier au GND général. |
| **1 à 8** | **CH0 à CH7** | **Canaux analogiques d’entrée** (pour capteurs). Le MCP3008 peut lire **jusqu’à 8 capteurs analogiques**. CH0 est le plus utilisé. |
* 🟥 VDD + VREF = alimentent la puce et définissent la précision.
* 🟦 AGND + DGND = masses nécessaires pour les parties analogiques et numériques.
* 📡 CLK, DOUT, DIN, CS = communication SPI avec le Raspberry Pi.
* 🌱 CH0 à CH7 = brancher ici les capteurs analogiques, comme l’humidité du sol SEN0193.
===== Le protocole SPI =====
###
C’est un **protocole de communication** utilisé pour faire dialoguer un microcontrôleur (comme le Raspberry Pi) avec des composants externes
###
Le protocole SPI utilise 4 fils :
| Nom du fil | Fonction | Correspondance sur le Raspberry Pi |
| --------------- | -------------------------------------------------------------- | ---------------------------------- |
| `MOSI` | Master Out Slave In : le Pi envoie les données vers le capteur | GPIO10 (Pin 19) |
| `MISO` | Master In Slave Out : le Pi lit les données du capteur | GPIO9 (Pin 21) |
| `SCLK` ou `CLK` | Clock : le signal d’horloge synchronise les échanges | GPIO11 (Pin 23) |
| `CS` ou `CE` | Chip Select : active le capteur concerné | Par exemple GPIO5 (Pin 29) |
C’est un **bus rapide**, synchrone (horloge partagée), **plein-duplex** (on peut envoyer et recevoir en même temps).
===== Activer le protocole SPI =====
{{ :raspberry:interface_option.png?400|}}
Aller dans l'interface d'administration du Raspberry Pi :
sudo raspi-config
* Aller dans Interfaces
* Activer SPI
* Redémarrer
===== Installation de la bibliothèque =====
Pour pouvoir installer la bibliothèque, commençons pas entrer dans notre environnement virtuel :
source meteo/bin/activate
Installation de la bibliothèque :
pip3 install Adafruit_CircuitPython_MCP3xxx
----
Suite vers [[jardin_couleur|Utilisation de couleurs dans le terminal avec rich]]