DE PROGRAMMEERBARE PLANTENKAS // CROWTAIL CAPACITIVE MOISTURE V2.0 SENSOR AANSLUITEN EN PROGRAMMEREN OM DE VOCHTIGHEID VAN DE GROND TE METEN
In deze tutorial laten we zien hoe je een Crowtail Capacitive Moisture V2.0 Sensor aansluit 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 van de Crowtail Capacitive Moisture V2.0 Sensor is zeer eenvoudig. Je stopt de ene kant van de bijgeleverde kabel in de connector van de sensor en de andere kant in een analoge poort van een Grove base shield of Crowtail base shield.
Wanneer je de Crowtail Capacitive Moisture V2.0 Sensor in de grond steekt, dan is het belangrijk om de sensor niet dieper dan de witte lijn in de grond te steken. Ook is het belangrijk om te onthouden dat de onderdelen van de sensor niet beschermd zijn. Hierdoor is de bovenkant van de sensor niet geschikt om in een vochtige omgeving te gebruiken. Om de sensor langdurig te kunnen gebruiken, moet je de bovenkant van de sensor dus eigenlijk beschermen met een epoxy laagje of met bijvoorbeeld een grote krimpkous.
Programmeren
Het programmeren van de Crowtail Capacitive Moisture V2.0 Sensor is vrij eenvoudig, omdat het een analoge sensor is. In de voorbereidingsfase vertellen we het programma eerst op welke analoge
poort de sensor staat aangesloten. Dit doen we door het commando #define vochtSensorPin A1
te geven. Uiteraard zou je de poort verderop ook direct kunnen invullen bij het deel waar
je de sensor uitleest, maar op deze manier hoef je niet te zoeken waar je de poort kunt wijzigen als je de sensor anders aansluit.
Verder geven we in de voorbereiding de commando’s int vochtWaarde = 0;
en int vochtPercentage = 0;
om de variabelen aan te maken waarin we de rauwe waarde die uit de
sensor komt in op te slaan en om het berekende vochtpercentage van de bodem in op te slaan.
Als laatste geven we aan welke minimale en maximale waarde we verwachten te meten als de grond zeer droog en zeer nat is. Dit doen we met de commando’s #define nat 320
en
#define droog 340
. We hebben deze waardes gekregen door de calibratie zoals op de pagina “De Programmeerbare Plantenkas: Grove Capacitive Moisture Sensor Aansluiten En Programmeren Om De Vochtigheid Van De Grond Te Meten” beschreven staat uit te voeren. Volgens de fabrikant zou de sensor in de lucht een waarde van 600 en in puur water een waarde van 360 moeten aangeven. Onze
waardes liggen hier ver vanaf, wellicht omdat de sensor zeer gevoelig is voor de grond waarin de sensor zit, of omdat de sensor naar onze ervaring zeer onstabiel werkt.
Om deze code makkelijk met andere stukjes code te combineren, hebben we het stuk van de code die de rauwe waarde uit de sensor ophaalt en de code die dit vervolgens omzet in een percentage in een
aparte functie gezet. Deze functie beginnen we door het commando int vochtSensor() {}
te geven. In deze functie geven we twee commando's. De eerste is vochtWaarde =
analogRead(vochtSensorPin);
. Dit commando haalt de rauwe waarde uit de sensor op. De tweede is vochtPercentage = map(vochtWaarde, droog, nat, 0, 100);
. Dit commando zet de
rauwe waarde vervolgens om in een percentage, op basis van de minimale en maximale waarde die we in de voorbereiding hebben ingevoerd. De zelf
gemaakte functie activeren we in de loop-fase van het programma. Dit doen we met het commando vochtSensor();
.
Zoals altijd in onze tutorials is deze code nog erg minimalistisch, en wordt er niets gedaan met de waarde die uit de sensor wordt gehaald. Je kunt er bijvoorbeeld voor kiezen om deze waarde op de Serial Monitor te laten zien of om een rood lichtje af te laten gaan als de vochtigheid van de grond onder een bepaald percentage komt. Omdat deze sensor zo onstabiel lijkt te zijn, kun je de metingen ook proberen te verbeteren door bijvoorbeeld een gemiddelde van 10 metingen te nemen in plaats van een enkele meting om weer te geven of om beslissingen in de rest van het programma op te baseren.
Arduino IDE code
/* 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 Crowtail Capacitive Moisture V2.0 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 A1. 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 320 // Dit is de waarde die de sensor aangaf in een met water verzandigd grond mengsel. #define droog 340 // Dit is de waarde die de sensor aangaf in zeer droge grond. // Setup fase: void setup(){ // 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. } //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. }
Achtergrond
De Crowtail Capacitive Moisture V2.0 Sensor werkt op een vergelijkbare manier als de Grove Capacitive Moisture Sensor. Een 555 timer zet de spanning naar de twee condensator plaatjes in het deel van de sensor dat je in de grond steekt voor een vaste tijd aan. De rest van de sensor meet wat het maximale potentiaal verschil tussen de twee condensator plaatjes is op het moment dat de sensor aan gaat. Hoe natter de grond is, hoe hoger de capaciteit van de sensor, en hoe minder volt er gemeten wordt.
Het circuit van de Crowtail Capacitive Moisture V2.0 Sensor begint bij de 662K spanningsregelaar die ervoor zorgt dat de spanning die naar de ICM755ID timer loopt altijd tussen de 3,0 en 3,3 volt ligt, ongeacht of de microcontroller werkt met 3,3 of 5 volt. De ICM755ID timer zorgt er samen met de 2,2K-ohm weerstand, de 470 ohm weerstand en de 470 pF condensator ervoor dat er een wisselspanning met een frequentie van 978 kHz naar het positieve plaatje van de condensator sensor gaat. Het maximaal bereikte potentiaalverschil dat de condensator plaatjes bereiken wanneer de spanning aangezet wordt bepaald welke waarde er naar de microcontroller wordt gestuurd. Hierbij geldt dat hoe natter de grond is, hoe hoger het capaciteit van de grond tussen de condensator plaatjes, en daardoor hoe lager het maximaal bereikte potentiaal verschil zal zijn.
In het artikel “De Programmeerbare Plantenkas: Grove Capacitive Moisture Sensor Aansluiten En Programmeren Om De Vochtigheid Van De Grond Te Meten” gaan we nog niets dieper in op hoe het meten van capaciteit op basis van een 555 timer werkt. Het enige verschil tussen de Grove sensor en deze Crowtail sensor is dat de Crowtail wel een 1M-ohm weerstand bevat die ervoor zorgt dat de condensator plaatjes kunnen ontladen. Ondanks dat het design van de Crowtail Capacitive Moisture V2.0 Sensor daardoor op papier beter is dan die van de vergelijkbare Grove sensor, lijkt de Crowtail sensor alles behalve stabiel te presteren.
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.