Il existe des capteurs pour le Raspberry Pi qui peuvent mesurer l’humidité, la température et d’autres valeurs. Néanmoins, ces modules sont presqu’exclusivement adaptés à l’air et ne sont pas destinés à être utilisés dans la terre.
Pour certains projets, tels que l’alimentation automatique des plantes, il faut mesurer l’humidité du sol, puis, par exemple, le remplir d’eau.
Dans ce tutoriel, je vais vous montrer comment ignorer la lecture (analogique) de l’humidité avec un capteur et la convertir en une valeur numérique afin que le Pi de la framboise puisse l’interpréter.
Pièces de matériel nécessaires
Voici les pièces de matériel que j’ai utilisées:
Installation
Le MCP3008 IC est un convertisseur analogique/numérique. Comme le Raspberry Pi ne peut pas détecter les signaux intrinsèquement analogiques, vous avez besoin d’un convertisseur comme le MCP3008.
Bien que ce capteur fournisse également une broche numérique qui peut envoyer un signal dès qu’un seuil est dépassé, il n’est cependant pas exactement déterminable. Le seuil peut être modifié en tournant la roue (s’il a été atteint, le feu vert s’allume).
Pour lire la broche analogique, nous la connectons comme suit:
Voici les connexions au MCP3008 :
RaspberryPi | MCP3008 |
---|---|
Broche 1 (3.3V) | Broche 16 (VDD) |
Broche 1 (3.3V) | Broche 15 (VREF) |
Broche 6 (GND) | Broche 14 (AGND) |
Broche 23 (SCLK) | Broche 13 (CLK) |
Broche 21 (MISO) | Broche 12 (DOUT) |
Broche 19 (MOSI) | Broche 11 (DIN) |
Broche 24 (CE0) | Broche 10 (CS/SHDN) |
Broche 6 (GND) | Broche 9 (DGND) |
Le VCC du capteur est également connecté à 3,3V (broche 1) du Raspberry Pi, GND et broche 6 (GND) et A0 vient à CH0 du MCP3008.
Logiciel
Afin de pouvoir accéder au MCP3008, le SPI doit être activé. Cela fonctionne comme suit:
sudo raspi-config
« 8 Options avancées » -> « A6 SPI » -> « Oui ».
Confirmez ensuite le redémarrage.
Vous pouvez maintenant installer la bibliothèque spidev si vous ne l’avez pas encore fait:
sudo apt-get install git python-dev git clone git://github.com/doceme/py-spidev cd py-spidev/ sudo python setup.py install
Avec le script suivant, vous pouvez alors accéder au capteur (sudo nano humidity.py
):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#!/usr/bin/python import spidev import os import time delay = 0.2 spi = spidev.SpiDev() spi.open(0,0) spi.max_speed_hz=1000000 def readChannel(channel): val = spi.xfer2([1,(8+channel)<<4,0]) data = ((val[1]&3) << 8) + val[2] return data if __name__ == "__main__": try: while True: val = readChannel(0) if (val != 0): print(val) time.sleep(delay) except KeyboardInterrupt: print "Cancel." |
Une valeur comprise entre 0 et 1023 est indiquée. Dans mon test, le capteur a souvent renvoyé un 0, ce qui signifierait une humidité totale (conductivité). Mais comme seules les valeurs autour de 100-200 apparaissent, si le capteur est complètement submergé dans l’eau, une valeur de 0 est évidemment fausse, alors je filtre cette valeur dans le script. De plus, des valeurs apparaissent autour de ~ 1000 s’il n’y a rien de conducteur (air) entre les plaques du capteur.
En fonction du matériau (terre, eau, sable, etc.), qui se trouve entre les plaques, d’autres valeurs sortent à l’état sec/humide. Il est donc logique de prendre plusieurs mesures et d’ajuster le seuil analogique en fonction de votre application.