Raspberry Pi – Grondvochtigheid sensor (3-aderig) (GPIO/MCP3008)
Deze pagina beschrijft hoe je een grondvochtigheid sensor kan uitlezen op de Raspberry Pi met behulp van de MCP3008 chip.
Hardware
3-aderige vochtsensoren:
Van links naar rechts: wRobot, Onbekend, Funduino
Met deze module kun je de grondvochtigheid meten, er loopt een spanning van de ene zijde van de sensor naar de andere, hier wordt de ohmse weerstand gemeten en kan er een waarde gegeven worden aan de vochtigheid, waarbij meer vocht een lagere waarde geeft.
Er zijn verschillende soorten sensoren in omloop, afhankelijk van de fabrikant, zie boven, al deze sensoren zijn analoog (er zit geen DA converter bij) en dus niet meteen geschikt voor een Raspberry Pi.
Pinout module:
Pin (vanaf bovenkant): | Functie: |
S | Analoge uitgang |
GND | GND |
VCC | +5v |
LET OP: Er zijn ook andere versie in omloop, controleer altijd de pinout of raadpleeg de handleiding!
Aansluiten op de Raspberry Pi
Wat heb je nodig
1) MCP3008 + python module
Sluit de grond vochtigheid sensor aan zoals aangegeven op onderstaand schema:
Script:
Met onderstaand python script kun je de sensor uitlezen via de MCP3008:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#!/usr/bin/python import spidev import time spi = spidev.SpiDev() spi.open(0,0) def read_spi(channel): spidata = spi.xfer2([1,(8+channel)<<4,0]) return ((spidata[1] & 3) << 8) + spidata[2] try: while True: channeldata = read_spi(0) print("Waarde = {}".format(channeldata)) time.sleep(.1) except KeyboardInterrupt: spi.close() |
Start het script met: sudo python grond.py , druk op CTRL+C om het script te stoppen!
Dit is de output in de console:
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 |
Waarde = 470 Waarde = 502 Waarde = 521 Waarde = 541 Waarde = 555 Waarde = 559 Waarde = 566 Waarde = 578 Waarde = 591 Waarde = 604 Waarde = 609 Waarde = 612 Waarde = 615 Waarde = 623 Waarde = 625 Waarde = 628 Waarde = 633 Waarde = 635 Waarde = 644 Waarde = 658 Waarde = 670 Waarde = 680 Waarde = 686 Waarde = 688 Waarde = 691 Waarde = 691 Waarde = 692 |
Meetwaarden
De sensor kan alleen een analoge waarde van 0 tot 1023 weergeven, om de vochtigheid te bepalen zou je tests moeten uitvoeren met het materiaal of grond die je meet, desnoods meten met een geijkte vochtigheidsmeter en kijken welke waarde daar bij hoort.
Mijn waarde meting:
Sensor: Funduino
– Droog (lucht) = 0
– Glas met (kraan)water = 700
Meetwaarden omzetten in een vochtigheids-percentage
Je kan bijvoorbeeld de volgende code gebruiken om een percentage (vochtigheid) te hangen aan de waarde:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/usr/bin/python import spidev import time spi = spidev.SpiDev() spi.open(0,0) def read_spi(channel): spidata = spi.xfer2([1,(8+channel)<<4,0]) return ((spidata[1] & 3) << 8) + spidata[2] try: while True: channeldata = read_spi(0) test = channeldata * 100 / 700 print("Vochtigheid = {}".format(test)) time.sleep(.1) except KeyboardInterrupt: spi.close() |
Resultaat:
1 2 3 4 5 6 7 8 9 10 11 |
Vochtigheid = 0 Vochtigheid = 1 Vochtigheid = 6 Vochtigheid = 12 Vochtigheid = 15 Vochtigheid = 16 Vochtigheid = 17 Vochtigheid = 18 Vochtigheid = 19 Vochtigheid = 20 Vochtigheid = 16 |
Tegengaan van snelle corrosie door stroom
Afhankelijk van wat voor een materiaal er gebruikt wordt op de sensor, kan het voorkomen dat deze (sneller) corrodeert:
Wanneer er gelijkstroom door 2 elektroden van de sensor gevoerd wordt, treed er sneller corrosie op op de sensor, dit komt door elektrolyse, na een mum van tijd zijn de elektroden vergaan, om dit tegen te gaan is het raadzaam alleen de sensor te activeren wanneer er daadwerkelijk gemeten wordt, op deze manier kan de elektrode wel aanzienlijk langer meegaan!
Dit kan bijvoorbeeld in combinatie met:
– Een transistor.
– Een (Solid State) relais.