Bekijk de 38 andere Arduino lessen

31 · Vochtigheidsmeter voor planten


Leerdoelen

  • Uitlezen capacitieve vocht sensor
  • Verschil weerstand- en capacitieve sensoren
  • Werking map() functie

Benodigdheden

  • 1× Arduino
  • 3× Jumper wire (man-man)
  • 1× Sensor kabel
  • 1× Capacitieve vochtsensor
  • 1× Glas water

Introductie

In deze les gaan we een capacitieve vochtsensor uitlezen. Met deze sensor kun je bijvoorbeeld bepalen of een plant water nodig heeft 🤓

Lesmateriaal

Onderaan op deze pagina vind je de knop lesmateriaal waarmee je het lesmateriaal kunt downloaden. Dit materiaal bestaat uit de code, schakelschema en andere bestanden die in de les worden gebruikt.

Traditionele vochtsensor

Traditionele vochtsensor
Traditionele vochtsensor

Hierboven zie je de meest bekende vochtsensor. Hij bestaat uit twee pinnen die je in de aarde steekt. Deze twee pennen werken als een weerstand. Hierdoor kun je meten hoeveel stroom het ware in de aarde geleidt. Kunstmest veranderd ook de weerstand van de aarde. Hierdoor wordt je meting dus minder nauwkeurig.

Geoxydeerde vochtsensor
Geoxydeerde vochtsensor

Het grootste nadeel van deze sensor is dat hij naar verloop van tijd kan gaan oxyderen. Op de foto zie je dat bij de rechterpin het metaal bijna helemaal is weggeroest.

Dit komt omdat de gelijkstroom van de sensor met het water gaat reageren. Gebruik deze sensor dus NIET!

Capacitieve vochtsensor

Capacitieve vochtsensor
Capacitieve vochtsensor

Voor onze Arduino gaan we een andere vochtsensor gebruiken: de capacitieve vochtsensor . Op deze sensor zie je 1.2 staan, er is ook een versie met 2.0. Beide kun je gewoon gebruiken dat maakt voor deze les niets uit.

Deze sensor werkt op een andere manier dan de eerder genoemde traditionele sensor. De capacitieve vochtsensor werkt namelijk als een condensator. Het water in de aarde veranderd de capaciteit van de condensator. Door de laad- en ontlaadtijd te meten kunnen we bepalen hoe vochtig de aarde is.

Schematisch weergave

schematische weergave vochtsensor
schematische weergave vochtsensor

Linksboven zie je dat we een puls door een weerstand sturen. Deze komt vervolgens bij onze sensor die zich als condensator (de twee horizonale streepjes) gedraagt.

schematische weergave vochtsensor
schematische weergave vochtsensor

Als de condensator is opgeladen, begint deze zich te ontladen. De tijdsduur van dit proces wordt door de sensor gemeten. Dit is weergegeven met het klokje rechtsboven. Het meten van de tijd wordt gedaan door de 555 chip. Deze kun in het midden van de sensor zien zitten.

De schakeling

Sluit de sensor volgens onderstaand schema aan.

De schakeling de aangesloten vochtsensor
De schakeling de aangesloten vochtsensor

Arduino Code - deel 1

Onderstaande code doet niets anders dan pin A0 uitlezen, en vervolgens de gemeten waarde naar de seriële monitor sturen.

1 void setup()
2 { 
3   Serial.begin(9600);
4 }
5 
6 void loop()
7 {
8   Serial.println(analogRead(A0));
9   delay(100);
10 }

Upload deze code naar je Arduino. Schrijf de op de seriële monitor weergeven waarde op. Deze waarde gaan we in deel 2 gebruiken om de vochtigheid te bepalen. Doe hetzelfde als de sensor in het water ligt.

Arduino Code - deel 2

We beginnen met definiëren van twee constanten:

1 const int dry = 583; // waarde bij droge sensor
2 const int wet = 239; // waarde bij sensor in water

Vul hier je eigen gemeten waarden in.

setup()

1 void setup()
2 { 
3   Serial.begin(9600);
4 }

In de setup() doen we niets anders dan de seriële monitor op 9600 Baud in te stellen.

loop()

1 void loop()
2 {
3   int sensorVal = analogRead(A0);
4 
5   int percentageHumididy = map(sensorVal, wet, dry, 100, 0); 
6 
7   Serial.print(percentageHumididy);
8   Serial.println("%");
9   
10   delay(100);
11 }

De loop() functie bestaat uit 3 delen:

  • Uitlezen van de vochtsensor
  • De gemeten waarde omzetten naar een percentage
  • De waarden printen op de seriële monitor

map()

1 int percentageHumididy = map(sensorVal, wet, dry, 100, 0);

Het omzetten van de gemeten waarden naar een percentage doen we met map().

Voor het gemak gaan we er vanuit dat de sensor een lineair verloop heeft. Dit wil zeggen dat elke stap even groot is. In de praktijk zal dit niet zo zijn. Voor een echt nauwkeurige meting moet je de sensorwaarden van zo veel mogelijk tussenstappen meten, bijvoorbeeld elke 10%. Hierna kun je bepalen of de gemeten waarden tussen twee grenzen ligt, om ze het percentage te bepalen.

We hebben in deel 1 gemeten dat de sensor waarden geeft tussen 239 en 583. Dit willen we omzetten naar een schaal van 0 tot 100 om procenten te krijgen. De map() functie heeft 5 argumenten:

  • waarde: sensorVal
  • van waarde laag: 239
  • van waarde hoog: 583
  • naar waarde laag: 0
  • naar waarde hoog: 100

Dit is precies wat we aan de map() functie meegeven met map(sensorVal, wet, dry, 100, 0)

Serial.print() of Serial.println()

Verderop in de code zie je twee regels:

1 Serial.print(percentageHumididy);
2 Serial.println("%");

De eerste keer gebruiken wel print() en de tweede keer println(). Het verschil is dat println() een nieuwe regel start nadat deze geprint heeft, print() doet dit niet.

1 Serial.println(70);
2 Serial.println("%");

print:

1 70
2 %

en

1 Serial.print(70);
2 Serial.println("%");

print:

1 70%

Op deze manier kunnen we het percentage met daaraan vast het % teken printen. Er zijn nog andere functies om dit makkelijk te doen, daar kom ik in een andere les op terug.

Tot slot wachten we nog 100ms en lezen we de sensor opnieuw uit.

Code uploaden naar Arduino

Je kunt nu de code naar de Arduino uploaden. Open vervolgens de seriële monitor om de waarden van de sensor weer te geven.

Hulpmiddelen ▸ Seriële monitor

Arduino IDE seriële monitor
Arduino IDE seriële monitor

Je kunt nu de sensor in het water houden om het verschil in percentage te zien.

💡 Rechtsonder zie je de Baud-rate staan. Let op dat deze hetzelfde is als in Serial.begin() is opgegeven, in ons geval dus 9600.

31 · Vochtigheidsmeter voor planten schakelschema

Bas van Dijk

Over Bas on Tech


Mijn naam is Bas van Dijk, ondernemer, freelance frontend developer en maker. Onder de naam "Bas on Tech" bied ik op YouTube videolessen aan over technische onderwerpen zoals Arduino en 3D-printen.

De video’s zijn in het Nederlands met ondertiteling, zodat mensen met een gehoorbeperking ze ook kunnen volgen.

Jaren geleden toen ik mijn eerste Arduino kocht had ik maar één doel: zo snel mogelijk een LCD schermpje aansluiten en er een tekst op laten zien. Na allerlei bronnen te hebben geraadpleegd kwam ik er na veel puzzelen eindelijk uit. Ik was als een kind zo blij met die paar letters op een geel schermpje.

Met Bas on Tech wil ik mijn kennis delen zodat ook anderen deze blijheid kunnen ervaren. Ik heb gekozen voor kort en krachtige YouTube video’s, met een duidelijke vaste opbouw en één onderwerp per video. Daarnaast staan onder elke video links naar de broncode en webshops waar de onderdelen te koop zijn.