DE PROGRAMMEERBARE PLANTENKAS // GROVE CAPACITIVE MOISTURE SENSOR AANSLUITEN EN PROGRAMMEREN OM DE VOCHTIGHEID VAN DE GROND TE METEN
In deze tutorial laten we zien hoe je een Grove Capacitive Moisture Sensor aansluit, kalibreert en programmeert om de vochtigheid van grond te meten met een Arduino microcontroller of een andere microcontroller. Onderaan de pagina vindt je meer informatie over de techniek achter deze sensor.
Aansluiten
Het aansluiten en installeren van de Grove Capacitive Moisture Sensor is niet moeilijk door de Grove aansluiting op de sensor. Hier steek je de ene kant van de Grove aansluit kabel in en de andere kant steek je in een analoge poort van een microcontroller, voorzien van een Grove Base Shield. In dit voorbeeld is de sensor aangesloten op de A0 poort van een Arduino Mega.
Wanneer de Grove Capacitive Moisture Sensor in de grond wordt gestoken, dan is het zeer belangrijk dat het deel van de sensor boven de witte lijn boven de grond blijft. Helaas zijn de onderdelen die boven de streep zitten niet water dicht. Hierdoor is de sensor in de huidige staat niet geschikt om buiten te gebruiken. Eventueel zou de bovenkant van de sensor voorzien kunnen worden van een epoxy laagje waardoor de sensor wel buiten gebruikt kan worden.
Kalibreren
Om te weten wat de waardes die uit de analoge pin waarop de Grove Capacitive Moisture Sensor aangesloten is betekenen, is het belangrijk om de sensor te kalibreren. De exacte waardes die uit de sensor komen hangen namelijk af van de samenstelling van de grond. Over het algemeen is een lineair verband tussen de hoeveelheid water in de grond en het aantal volt dat de analoge pin waarop de Grove Capacitive Moisture Sensor meet. Hierbij geldt dat hoe meer water er in de grond zit, hoe minder volt er gemeten wordt.
De meest eenvoudige manier om de Grove Capacitive Moisture Sensor te kalibreren is door eerst te kijken hoeveel volt er gemeten wordt in zeer droge grond, en vervolgens in met water verzadigde grond. Om dit te doen verzamel je eerst een paar handen grond en laat deze helemaal op drogen. Dit doe je door de grond fijn uit te spreiden op een vlakke ondergrond, zoals een dienblad, en daarna een aantal dagen op een warme, droge plek te zetten.
Als de grond eenmaal droog is, doe je deze in een maatbeker en druk je het licht aan. Schrijf daarna eerst ergens op hoeveel milliliter grond er in de maatbeker zit. Vervolgens steek je de aangesloten en geprogrammeerde sensor in de grond. De Grove Capacitive Moisture Sensor is een behoorlijk langzame sensor, omdat er eigenlijk een foutje in het design zit. Hierdoor kan het een uur duren voordat de waarde die door de microcontroller geregistreerd wordt correct is. Laat de microcontroller daarom een uur lang in de droge grond zitten, en schrijf de waarde die de sensor na een uur aan geeft op. Dit is de waarde die zeer droge grond hoort.
Na het opschrijven van de waarde die bij zeer droge grond hoort haal je de sensor even uit de grond. Vervolgens voeg je hetzelfde aantal milliliters water toe als dat er droge grond in de maatbeker zit. Als je bijvoorbeeld 200 milliliter droge grond in de maatbeker hebt gedaan, dan voeg je 200 milliliter water toe. Zorg ervoor dat het water en de grond goed door elkaar geroerd worden. Laat het grond-water mengsel staan totdat er geen bubbels meer uit komen, op dat punt is al het lucht uit de grond en is de grond dus verzadigd. Giet op dat punt het overtollige waterlaagje voorzichtig uit de beker. Vervolgens steek je de sensor in de grond en wacht je weer een uur totdat je de waarde opschrijft die bij de zeer natte grond hoort.
De twee waardes kun je vervolgens gebruiken om het programma van de sensor uit te breiden, zodat het de vochtigheid van de grond in een percentage uitgedrukt kan worden. Hiervoor voeg je een aantal extra commando’s toe aan het programma. Hou er wel rekening mee dat ook na het kalibreren de sensor er een uur over kan doen om een juiste waarde aan te geven na een verandering in vochtigheid.
De code die je nodig hebt voor het kalibreren is vrij eenvoudig. In de voorbereidingsfase laat je de microcontroller weten op welke pin de Grove
Capacitive Moisture Sensor aangesloten zit met het commando #define vochtSensorPin A0
. In dit voorbeeld zit de sensor dus op de analoge pin 0 aangesloten. Mocht de sensor op een
andere pin aangesloten worden, dan moet dit uiteraard even veranderd worden. Ook maken we een variabele aan waarin we de waarde die sensor doorgeeft aan de microcontroller wordt opgeslagen, met
het commando int vochtWaarde = 0;
.
In de setup fase moeten we de Serial Monitor aanzetten. Dit doen we met het commando Serial.begin(9600);
. In de meeste voorbeeld codes doen we dit niet standaard, omdat je dan
makkelijk zelf kunt bepalen wat je met de waarde doet. In dit geval is het wel handig om de waarde tijdens het kalibreren via de Serial Monitor te laten zien. Natuurlijk kan het zijn dat de
omgeving waarin je de sensor gaat kalibreren ongeschikt is voor een laptop. In dat geval kun je er voor kiezen om de waardes op een SD kaart op te slaan of op een display weer te geven.
Om de waarde uit de sensor op te halen, maken we een aparte functie. Dit is vooral handig wanneer je de code met andere stukjes code combineert. Om de functie te maken beginnen we met het
commando int vochtSensor(){}
. Binnen deze functie geven we alleen het commando vochtWaarde = analogRead(vochtSensorPin);
. Dit commando zorgt ervoor dat zodra de funcitie
in de loop fase geactiveerd wordt de waarde die de sensor op dat moment aan de analoge pin waarop de sensor aangesloten zit, die we vochtSensorPin hebben genoemd, opslaat in de variabele
vochtWaarde.
In de loop fase voeren we de vochtSensor functie elke minuut uit en laten we de waarde in de Serial Monitor af printen. Om dit te doen beginnen we met het commando
delay(60000);
. Een minuut is gelijk aan 60.000 milliseconden, de eenheid waarmee de delay functie. Daarna geven we het commando vochtSensor();
. Dit activeerd de functie
die we hebben gemaakt om de waarde uit de analoge pin te halen waarop de sensor zit aangesloten. Als laatste geven we het commando Serial.println(vochtWaarde);
. Dit zorgt ervoor dat
de waarde van de sensor elke keer op een nieuwe lijn wordt afgeprint.
ARDUINO IDE CODE (kalibratie)
/* Voorbeeld code gemaakt door www.foodplanting.com voor de Programmeerbare Plantenkas serie. Deze code is gemaakt voor het bepalen van de vochtigheid van de bodem met een Grove Capacitive Moisture Sensor na kalibratie. Deze code is zeer minimalistisch, omdat het idee is dat deze code gecombineerd wordt met codes voor andere modules. Zo wordt de vochtigheid bijvoorbeeld niet in de loop fase, maar in een aparte functie op geroepen en wordt de gemeten vochtigheid niet in de Serial Monitor af geprint. */ // Voorbereiding: #define vochtSensorPin A1 // Dit geeft aan op welke analoge input de sensor is aangesloten, in dit geval A0. int vochtWaarde = 0; // Een variable om de waarde van de vochtigheid van de bodem in op te slaan. int vochtPercentage = 0; // Een variable om de vochtigheid van de bodem als een percentage in op te slaan. #define nat 510 // Dit is de waarde die de sensor aangaf na een uur in een 1:1 grond:water mengsel te hebben gestaan. #define droog 750 // Dit is de waarde die de sensor aangaf na een uur in zeer droge grond te hebben gestaan. // Setup fase: void setup() { Serial.begin(9600); // In de setup fase hoeft niets te gebeuren. } // Loop fase: void loop() { vochtSensor(); // Vraag de microcontroller om de functie die de vochtigheid uit de sensor ophaalt uit te voeren. Serial.println(vochtWaarde); delay(5000); } //Functie voor vochtsensor: int vochtSensor() { vochtWaarde = analogRead(vochtSensorPin); // Lees de analoge pin waarop de vochtsensor zit aangesloten uit. vochtPercentage = map(vochtWaarde, droog, nat, 0, 100); // Zet de vochtigheid om in een percentage. }
Programmeren
Na het kalibreren kun je de code iets aanpassen zodat de vochtigheid van de grond omgezet wordt in een percentage. In de voorbereidingsfase voegen we hiervoor drie stukjes code toe:
Allereerst maken we een tweede variabele aan, met het commando int vochtPercentage =0;
. Daarna maken we nog twee waardes aan, met het commando #define nat
510
en #define droog 750
. De 510 vervang je met de waarde die de sensor aangaf nadat het minimaal een uur in de zeer natte grond gezeten heeft. De
750 vervang je met de waarde die de sensor aangaf nadat het minimaal een uur in zeer dorge grond gezeten heeft.
De laatste wijziging die we aanbrengen is in de int vochtSensor() functie. In deze functie voegen we een commando toe, namelijk int vochtPercentage = map(vochtWaarde, droog, nat, 0,
100)
. Dit zorgt ervoor dat de vochtigheid in een percentage uitgedrukt wordt.
Arduino IDE
/* Voorbeeld code gemaakt door www.foodplanting.com voor de Programmeerbare Plantenkas serie. Deze code is gemaakt voor het bepalen van de vochtigheid van de bodem met een Grove Capacitive Moisture Sensor na kalibratie. Deze code is zeer minimalistisch, omdat het idee is dat deze code gecombineerd wordt met codes voor andere modules. Zo wordt de vochtigheid bijvoorbeeld niet in de loop fase, maar in een aparte functie op geroepen en wordt de gemeten vochtigheid niet in de Serial Monitor af geprint. */ // Voorbereiding: #define vochtSensorPin A0 // Dit geeft aan op welke analoge input de sensor is aangesloten, in dit geval A0. int vochtWaarde = 0; // Een variable om de waarde van de vochtigheid van de bodem in op te slaan. int vochtPercentage = 0; // Een variable om de vochtigheid van de bodem als een percentage in op te slaan. #define nat 510 // Dit is de waarde die de sensor aangaf na een uur in een 1:1 grond:water mengsel te hebben gestaan. #define droog 750 // Dit is de waarde die de sensor aangaf na een uur in zeer droge grond te hebben gestaan. // Setup fase: void setup() { // In de setup fase hoeft niets te gebeuren. } void loop() { vochtSensor(); // Vraag de microcontroller om de functie die de vochtigheid uit de sensor ophaalt uit te voeren. } int vochtSensor() { vochtWaarde = analogRead(vochtSensorPin); // Lees de analoge pin waarop de vochtsensor zit aangesloten uit. vochtPercentage = map(vochtWaarde, droog, nat, 0, 100); // Zet de vochtigheid om in een percentage. }
Achtergrond
Een capacitieve bodemvochtigheidssensor, zoals de Grove Capacitive Moisture Sensor, is eigenlijk een soort condensator. De sensor bestaat namelijk uit twee metalen plaatjes, meestal twee koperen lussen, die niet met elkaar verbonden zijn. Wanneer het ene plaatje op de positieve kant van een batterij en het andere plaatje op de negatieve kant van een batterij wordt aangesloten, dan ontstaat er in de ruimte tussen de plaatjes een elektrisch veld. Het elektrische veld zorgt ervoor dat na een tijdje het plaatje aan de positieve kant positief geladen wordt en het plaatje aan de negatieve kant negatief geladen wordt. Uiteindelijk zijn de plaatjes helemaal opgeladen, en is het potentiaalverschil tussen het positieve en het negatieve plaatje van de condensator gelijk aan die van de batterij. Als de batterij 12 volt levert, dan is de spanning over de volledig opgeladen condensator ook 12 volt.
De tijd die nodig is om een condensator volledig op te laden, zodat de spanning over de condensator gelijk is aan die van de voeding, hangt af van wat er in het elektrische veld gebeurt. Wanneer er lucht tussen de plaatjes zit, dan is er niets dat het elektrische veld in de weg staat, waardoor het opladen op zijn snelst gaat. Wanneer we een ander materiaal tussen de plaatjes stoppen, zoals papier of een baksteen, dan wordt het elektrische veld als het waren tegengewerkt, waardoor de condensator er langer over doet om volledig op te laden.
Bij een Grove Capacitive Moisture Sensor zit er geen lucht tussen de plaatjes, maar grond. De grond bestaat voor het grootste deel uit vaste deeltjes, zoals zandkorrels en humus, en uit water en lucht. De verhouding tussen de hoeveelheid water en lucht in de grond bepaald hoe droog of nat de grond is.
Het fijne aan watermoleculen is dat ze een groot effect hebben op het elektrische veld dat tussen de plaatjes van de capacitieve bodemvochtigheidssensor ontstaat. Dit komt, omdat watermoleculen kunnen polariseren. Dit betekent dat wanneer de sensor aan gezet wordt, de negatieve kant van het watermolecuul, aan de kant waar de zuurstofatoom zit, zich naar het positieve plaatje van de sensor richt. De positieve kant van het watermolecuul, aan de kant waar de waterstofatomen zitten, richt zich richting het negatieve plaatje van de sensor.
Wanneer watermoleculen polariseren, dan ontstaat er een tweede elektrisch veld in de ruimte tussen de twee plaatjes van de sensor. Dit tweede elektrische veld dat ontstaat door de watermoleculen loopt echter in te tegenovergestelde richting van het originele elektrische veld tussen de plaatjes. Hoe meer water er in de grond zit, hoe groter het tegenovergestelde elektrische veld zal zijn. Hierdoor is de tijd die het duurt voordat de plaatjes volledig zijn opgeladen langer.
Elke capacitieve bodemvochtigheidssensor werkt net iets anders. De Grove Capacitive Moisture Sensor in deze tutorial meet niet hoelang het duurt voordat de in de sensor volledig zijn opgeladen, maar kijkt wat het maximale potentiaal verschil tussen de twee plaatjes is als er een bepaalde tijd spanning op de plaatjes wordt gezet. Om dit te doen, begint dit circuit met een NE555DR precisie timer. Deze timer zorgt ervoor dat de voeding van 5 volt 487.000 keer per seconden, ofwel met een frequentie van 487 kHz, aan gezet wordt.
Elke keer dat de voeding aan gezet wordt, dan beginnen de plaatjes van de sensor op te laden. De rest van het circuit van de Grove Capacitive Moisture Sensor meet wat het maximale potentiaalverschil is tussen de twee plaatjes wanneer de voeding naar de plaatjes wordt aangezet en geeft dit door aan de microcontroller.
Vragen en opmerkingen
We proberen de serie DE PROGRAMMEERBARE PLANTENKAS zo toegankelijk mogelijk te maken voor iedereen. Toch zijn sommige concepten best wel ingewikkeld, omdat er kennis van heel veel verschillende domeinen, zoals natuurkunde, elektrotechniek en computerwetenschappen, samen komen. Het kan daarom best zijn dat we iets niet goed uitgelegd hebben. Mocht er iets niet duidelijk zijn of iets niet zo werken zoals we het in deze tutorial uitgelegd hebben, stuur dan gerust een berichtje via de Disqus op deze pagina. Je kunt de Disqus vinden door naar beneden te scrollen, tot onder de bronvermelding en de advertenties.
Bronnen en verder lezen
- Borah, S., Kumar, R., & Mukherjee, S. (2020). Low-cost IoT framework for irrigation monitoring and control. International Journal of Intelligent Unmanned Systems.
- Chakraborty, M., Kalita, A., & Biswas, K. (2018). PMMA-coated capacitive type soil moisture sensor: Design, fabrication, and testing. IEEE Transactions on Instrumentation and Measurement, 68(1), 189-196.
- Das, S., Sarkar, T. S., & Chakraborty, B. (2014). A semi-cylindrical capacitive sensor used for soil moisture measurement. Int. Journal of Electrical, Robotics, Electronics and Comm. Engg., 8(1).
- Dorey, R. (2012). Microstructure–property relationships: How the microstructure of the film affects its properties. Ceramic Thick Films for MEMS and Microdevices, Micro and Nano Technologies, 85-112.
- Hrisko, J. (2020). Capacitive Soil Moisture Sensor Theory, Calibration, and Testing. no, 2, 1-12.
- Hubbard, S. S., Peterson Jr, J. E., Majer, E. L., Zawislanski, P. T., Williams, K. H., Roberts, J., & Wobber, F. (1997). Estimation of permeable pathways and water content using tomographic radar data. The leading EDGE, 16(11), 1623-1630.
- Knigh, R. D. (2007). Physics for Scientists and Engineers: A Strategic Approach with Modern Physics.
- Korošak, Ž., Suhadolnik, N., & Pleteršek, A. (2019). The implementation of a low power environmental monitoring and soil moisture measurement system based on UHF RFID. Sensors, 19(24), 5527.
- Okasha, A. M., Ibrahim, H. G., Elmetwalli, A. H., Khedher, K. M., Yaseen, Z. M., & Elsayed, S. (2021). Designing Low-Cost Capacitive-Based Soil Moisture Sensor and Smart Monitoring Unit Operated by Solar Cells for Greenhouse Irrigation Management. Sensors, 21(16), 5387.
- Placidi, P., Gasperini, L., Grassi, A., Cecconi, M., & Scorzoni, A. (2020). Characterization of low-cost capacitive soil moisture sensors for IoT networks. Sensors, 20(12), 3585.
- Placidi, P., Morbidelli, R., Fortunati, D., Papini, N., Gobbi, F., & Scorzoni, A. (2021). Monitoring Soil and Ambient Parameters in the IoT Precision Agriculture Scenario: An Original Modeling Approach Dedicated to Low-Cost Soil Water Content Sensors. Sensors, 21(15), 5110.
- Souza, G., De Faria, B. T., Alves, R. G., Lima, F., Aquino, P. T., & Soininen, J. P. (2020, November). Calibration equation and field test of a capacitive soil moisture sensor. In 2020 IEEE International Workshop on Metrology for Agriculture and Forestry (MetroAgriFor) (pp. 180-184). IEEE.