De Programmeerbare Plantenkas: Grove Capacitive Moisture Sensor Aansluiten En Programmeren Om De Vochtigheid Van De Grond Te Meten

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

Grove Capacitive Moisture Sensor

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.

Grove Capacitive Moisture Sensor

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.

Grove_Capacitive_Soil_Moisture_Sensor
Vergeet niet te noteren hoeveel milliliter droge grond er in de maatbeker gaat tijdens het kalibreren van de sensor.

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.

Grove_Capacitive_Soil_Moisture_Sensor
Roer het water goed door de grond heen en laat het staan tot er geen bubbels meer uit de grond komen.
Grove_Capacitive_Soil_Moisture_Sensor
Giet het water dat bovenop de grond staat voorzichtig uit de maatbeker zonder al te veel grond mee te gieten.
Grove_Capacitive_Soil_Moisture_Sensor
Stop de sensor vervolgens in de zeer natte, verzadigde grond om te bepalen welke waarde bij de natste 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.

Grove_Capacitive_Soil_Moisture_Sensor
Na een uur in droge grond lag de waarde die de sensor aangaf ongeveer rond de 750.
Grove_Capacitive_Soil_Moisture_Sensor
Na een uur in natte grond lag de waarde die de sensor aangaf ongeveer rond de 510.

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

Grove_Capacitive_Soil_Moisture_Sensor
Zorg ervoor dat de sensor nooit voorbij de witte streep in de grond wordt gestopt.

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.

Grove Capacitive Moisture Sensor, capacitieve bodemsensor
Wanneer je goed naar de Grove Capacitive Moisture Sensor kijkt, kun je de positieve plaat in het midden en de negatieve plaat aan de buitenkant van het deel van de sensor dat je in de grond steekt zien zitten.

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.

Condensator opladen
Wanneer er spanning op een condensator wordt gezet ontstaat er op het ene plaatje een positieve lading en op het andere plaatje een negatieve lading. De snelheid waarmee de plaatjes opladen hangt af van de kracht van het magnetische veld dat ontstaat.

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.

Condensator, vochtigheidssensor
De negatieve zuurstof kant van de watermoleculen tussen de condensator draait naar het positief geladen plaatje en de positieve waterstof kant van het watermolecuul draait naar het negatieve kant van de condensator.

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.

Grove Capacitive Moisture Sensor, bodemvochtigheidssensor
Het elektrische veld dat ontstaat wanneer watermoleculen zich polariseren zorgt ervoor dat het langer duurt voordat de condensator opgeladen is of het maximale potentiaalverschil dat in een bepaalde oplaadtijd wordt bereikt.

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.

Grove Capacitive Moisture Sensor
De NE555 timer zorgt ervoor dat de condensator platen een bepaalde tijd worden opgeladen. De rest van het circuit meet wat het maximale potentiaalverschil is dat tussen de condensator platen ontstaat in deze tijd.

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 advertenties.

Bronnen en verder lezen