← Back to CoursesStemExpert
StemExpert
Fundamental · Handboek · 25. Sensoren en automatisch regelen
StemExpert · Brecht Corbeel · schoolium.me
StemExpert
F25. Sensoren en automatisch regelen
FFundamental · deel F6 · Programmeren en automatiseren

Handboek · hoofdstuk 25Sensoren en automatisch regelen

Meten, beslissen, doen: de meetkas geeft zelf water en zet zelf haar dakraam open

Een microcontroller met alleen knoppen en leds weet niets van de wereld. Met sensoren meet hij temperatuur, licht en bodemvocht; met actuatoren zoals een relais, een pomp of een servo grijpt hij in. Daartussen zit een eenvoudige regel: is de meting te hoog of te laag, schakel dan iets aan of uit. In dit hoofdstuk leer je analoge waarden inlezen, een sensor ijken tegenover een betrouwbare referentie, en een aan/uit-regeling bouwen. De meetkas geeft voortaan zelf water en opent zelf haar dakraam.

5× uitleg4× uitgewerkt voorbeeld1× proef1× ontleed1× naslag1× verhaal1× het geheel2× code16 opdrachten in het werkboek± 8 lestijden
De meetkas regelt zichzelf: het dakraam staat open en de sensor bewaakt het vocht in de grond.
De meetkas regelt zichzelf: het dakraam staat open en de sensor bewaakt het vocht in de grond.
Na dit hoofdstuk
Verhaal · 25.1

Drie uitvinders en een vlotter

1/16

Al meer dan tweeduizend jaar bouwen mensen machines die zichzelf bijsturen. In de derde eeuw voor Christus maakte Ktesibios in Alexandrië een waterklok: water druppelt gelijkmatig in een vat, en het stijgende peil wijst de tijd aan. Gelijkmatig druppelen lukt alleen als het water erboven op een vaste hoogte blijft. Ktesibios gebruikte daarvoor een vlotter die de toevoer afsluit als het peil stijgt en opent als het daalt: hetzelfde principe als het vlotterventiel in een toiletreservoir.

Rond 1620 bouwde de Nederlandse uitvinder Cornelis Drebbel een broedoven die zijn temperatuur zelf op peil hield: een vloeistof die uitzette bij warmte, bewoog een klep die de luchttoevoer van het vuur verkleinde. Een van de eerste thermostaten. En in 1788 zette James Watt een centrifugaalregulateur op zijn stoommachine: twee draaiende kogels die uit elkaar zwaaien als de machine te snel draait, en dan de stoomklep wat dichtduwen.

Een vlotter, een uitzettende vloeistof, draaiende kogels: telkens meet iets de toestand, beslist het mechanisme of er bijgestuurd moet worden, en doet een klep het werk. Vandaag doet een sensor het meten, een microcontroller het beslissen en een actuator het doen. Het idee is hetzelfde gebleven.

Een centrifugaalregulateur: draait de machine te snel, dan zwaaien de kogels uit en gaat de stoomklep wat dicht.
Een centrifugaalregulateur: draait de machine te snel, dan zwaaien de kogels uit en gaat de stoomklep wat dicht.
Uitleg · 25.2

Meten, beslissen, doen

2/16

Elke automatische regeling bestaat uit dezelfde blokken:

  • een sensor meet de grootheid die je wil bewaken (het bodemvocht);
  • een regelaar vergelijkt de meting met wat je wil (de drempel) en beslist (de microcontroller met zijn programma);
  • een actuator grijpt in (het relais met de pomp);
  • het proces verandert (de grond wordt natter), en de sensor meet dat opnieuw.

Die laatste pijl terug heet terugkoppeling. Met terugkoppeling spreek je van een gesloten lus: de regeling ziet het resultaat van haar eigen actie, en ook van storingen zoals een zonnige dag of planten die veel drinken.

Zonder terugkoppeling heb je een open lus: een tuinsproeier met een timer geeft elke dag om 8 uur twee minuten water, ook als het de hele nacht geregend heeft. Open lussen zijn eenvoudig en goedkoop, maar reageren niet op wat er echt gebeurt.

Een sensor maakt een lus nog niet gesloten

Een buitenlamp met een bewegingsmelder heeft een sensor, maar de sensor meet niet het resultaat van de lamp (het licht). Dat is een open lus die door een gebeurtenis gestart wordt. Gesloten is een lus pas als de sensor meet wat de actuator verandert.

Sensormeet hetbodemvochtRegelaarvergelijkt met dedrempelActuatorrelais + pompProcesde kasmetenbeslissendoenterugkoppeling: de sensor meet wat de pomp veranderd heeftwaardeaan/uitwaterstoring: zon, wind,planten die drinken
Meten, beslissen, doen, en dan opnieuw meten: de pijl terug maakt er een gesloten regelkring van.
klok: elke dag om8 uurtimerpomp 2 minutende kasopen lus: niemand meet of de grond nat genoeg is
Een open lus: de timer weet niet of de grond al nat is.
Uitleg · 25.3

Sensoren: van grootheid naar spanning

3/16

Een microcontroller meet spanningen. Een sensor zet een grootheid om in een spanning (of in een weerstand die je met een tweede weerstand in een spanning omzet; hoe dat precies werkt, zie je in Intermediate, hoofdstuk 22).

grootheidsensorwat verandert er?in de meetkas
temperatuurTMP36uitgangsspanning: 0,5 V bij 0 °C, 10 mV meer per °CA1
temperatuurNTC-weerstandweerstand daalt als het warmer wordt(alternatief)
lichtLDR (lichtgevoelige weerstand)weerstand daalt bij meer lichtA2, met 10 kΩ
bodemvochtcapacitieve sensoruitgangsspanning daalt als de grond natter isA0
waterpeilvlotterschakelaarcontact open of dicht (digitaal)D3

Let op het verschil: een vlotter of een drukknop geeft maar twee toestanden (digitaal), een temperatuursensor elke waarde binnen een bereik (analoog). Analoge sensoren sluit je aan op A0 tot A5.

Het gegevensblad

Van elke sensor bestaat een gegevensblad (datasheet) met het bereik, de nauwkeurigheid en het verband tussen grootheid en spanning. Voor de TMP36 staat er: 10 mV per °C, 750 mV bij 25 °C, nauwkeurigheid ±2 °C. Een sensor van enkele euro's is dus niet op de tiende van een graad juist: daarom ijk je hem.

Temperatuur, licht en bodemvocht: drie sensoren voor de meetkas.
Temperatuur, licht en bodemvocht: drie sensoren voor de meetkas.
NTCLDRpotentiometerwarmer: kleinere Rmeer licht: kleinere Rdraaien: andere R
Symbolen van drie sensoren die hun weerstand veranderen: NTC, LDR en potentiometer.
Ontleed · 25.4

De capacitieve bodemvochtsensor

4/16

Een bodemvochtsensor meet hoeveel water er in de grond zit. Oudere sensoren hebben twee blote metalen pinnen en meten de weerstand van de grond; die pinnen roesten snel weg. De capacitieve sensor heeft geen blootliggend metaal: hij meet hoe goed de grond een elektrisch veld doorlaat, en dat hangt sterk af van het water erin.

GNDVCCAOUT
Een capacitieve bodemvochtsensor van ongeveer 10 cm lang, van voren gezien.
Wijs een nummer aan: de figuur zoomt in. Klik om vast te zetten.
  1. 1
    Aansluitingen

    GND naar GND, VCC naar 5V (of 3,3 V), AOUT naar een analoge ingang (A0). Drie draadjes.

  2. 2
    Elektronica

    Een kleine schakeling maakt van de meting een spanning. Moet droog blijven: niet in de grond, en best afdekken (krimpkous of lak).

  3. 3
    Tot hier in de grond

    De streep geeft aan hoe diep de sensor mag. Steek hem altijd even diep, anders verandert de meting.

  4. 4
    Meetzone

    Twee koperbanen onder een beschermlaag vormen een soort condensator. Hoe natter de grond, hoe lager de spanning op AOUT.

  5. 5
    Punt

    Steek de sensor voorzichtig in: de printplaat breekt als je ze tegen een steen duwt. Duw niet op de elektronica.

Uitleg · 25.5

Analoog inlezen: van spanning naar getal

5/16

Een analoge ingang meet een spanning en geeft een getal terug. Dat doet de analoog-digitaalomzetter (ADC) in de chip. Een Uno heeft een ADC van 10 bits: hij verdeelt het bereik van 0 tot 5 V in trapjes, genummerd van 0 tot 1023. Eén trapje is .

van spanning naar ruwe waarde (Arduino Uno)
Een micro:bit meet van 0 tot 3,3 V, ook in 1024 trapjes: vervang 5 V door 3,3 V.

In Arduino-code lees je de ruwe waarde met analogRead(A0); in blokken met 'lees analoge pin A0', in MakeCode met 'lees analoog pin P0'. Een spanning van 2,5 V geeft ongeveer 512: de helft.

Een getal is nog geen meting

De ruwe waarde heeft geen eenheid. 512 betekent 2,5 V, en wat 2,5 V betekent (een temperatuur, een vochtigheid) hangt af van de sensor. Die laatste stap doe je met het gegevensblad of met een ijklijn.

0,00,51,01,52,02,53,03,54,04,55,0010020030040050060070080090010001100U (V)ruwe waarde1023Arduino Uno (0-5 V)micro:bit (0-3,3 V)
Hoe hoger de spanning, hoe hoger het getal; boven 5 V (of 3,3 V op de micro:bit) blijft het 1023.
05101520253001234567U (mV)ruwe waardetrapjes van 4,9 mV
Van dichtbij: elke 4,9 mV een trapje hoger. Kleinere verschillen ziet de Uno niet.
Uitgewerkt voorbeeld · 25.6

Van getal naar temperatuur

6/16

Een TMP36 op A1 van een Uno geeft de ruwe waarde 150. Welke temperatuur is dat volgens het gegevensblad? Welke ruwe waarde verwacht je bij 30 °C? En hoe groot is één trapje in °C?

Gegeven
  • ruwe waarde 150, bereik 0-5 V, 0-1023
  • TMP36:
Gevraagd
  • bij ruw 150
  • ruwe waarde bij 30 °C
  • één trapje in °C
Oplossing
  1. 1
    Getal naar spanning. .
  2. 2
    Spanning naar temperatuur. Boven 0,5 V is elke 0,010 V één graad: .
  3. 3
    Omgekeerd, bij 30 °C. ; ruw (afgerond).
  4. 4
    Eén trapje is 4,9 mV, en 10 mV is 1 °C: één trapje is ongeveer 0,5 °C. Fijner kan deze opstelling de temperatuur niet onderscheiden.
Antwoord
Ruw 150 is 23,3 °C; bij 30 °C verwacht je ongeveer 164; de Uno meet de TMP36 in stapjes van ongeveer 0,5 °C.
Klopt dit? Eenheden: volt gedeeld door volt per graad geeft graden. Orde van grootte: 23 °C is een gewone kamertemperatuur, en 0,73 V ligt netjes tussen de 0,5 V (0 °C) en 1,0 V (50 °C) van de sensor. Maar de sensor zelf is maar op ±2 °C nauwkeurig: 23,3 °C kan ook 21,5 °C zijn. Dat zoek je uit door te ijken.
Proef · 25.7

Een temperatuursensor ijken

7/16
Onderzoeksvraag

Wijst onze TMP36 de juiste temperatuur aan, en hoe corrigeren we hem als dat niet zo is?

Materiaal
  • Arduino Uno met TMP36 op A1 (5V, A1, GND)
  • referentiethermometer (bv. een digitale labothermometer)
  • vier bekers: ijswater, kraanwater, lauw water, warm water (tot ±60 °C)
  • plastic zakje of krimpkous om de sensor waterdicht te maken
  • computer met de seriële monitor (Serial.println)
VeiligheidWarm water tot 60 °C kan brandwonden geven: vul de beker niet te vol en zet hem stevig neer. De elektronica mag niet nat worden: alleen de ingepakte sensor gaat in het water.
0102030405060110120130140150160170180190200210220230T referentiethermometer (°C)ruwe waarde21,8 °Cmetingenijklijn van deze sensorvolgens het gegevensblad
De ijklijn ligt evenwijdig met de lijn van het gegevensblad, 1,5 °C ernaast. Aflezen: 150 → 21,8 °C.
Werkwijze
  1. 1Pak de sensor waterdicht in. Laat de Arduino elke seconde analogRead(A1) naar de computer sturen.
  2. 2Hang de sensor en de referentiethermometer naast elkaar in de beker met ijswater. Roer, wacht tot beide waarden niet meer veranderen.
  3. 3Noteer de temperatuur van de referentie en de ruwe waarde van de sensor.
  4. 4Herhaal met kraanwater, lauw water en warm water.
  5. 5Zet de metingen in een grafiek: temperatuur van de referentie horizontaal, ruwe waarde verticaal. Teken de best passende rechte: de ijklijn.
  6. 6Teken in dezelfde grafiek de lijn volgens het gegevensblad en vergelijk.
Waarneming
referentie (°C)ruwe waardevolgens het gegevensblad (°C)verschil (°C)
3,21124,7+1,5
21,014822,3+1,3
38,518439,9+1,4
55,021856,5+1,5

De punten liggen op een rechte die evenwijdig loopt met de lijn van het gegevensblad, maar er iets boven ligt: deze sensor wijst telkens ongeveer 1,5 °C te hoog aan.

Verklaring

Elke sensor heeft kleine afwijkingen door de productie. Hier is het een vaste verschuiving (een offset) van ongeveer +1,5 °C: de helling klopt, het beginpunt niet. De ijklijn corrigeert dat. Lees je later de ruwe waarde 150 af, dan ga je in de grafiek van 150 horizontaal naar de ijklijn en dan naar beneden: 21,8 °C, en niet de 23,3 °C van het gegevensblad. In het programma trek je voortaan 1,5 °C af. Zo is een sensor van een paar euro even betrouwbaar als de referentie waarmee je hem ijkte, binnen het bereik dat je gemeten hebt (hier 3 tot 55 °C).

Uitgewerkt voorbeeld · 25.8

De bodemvochtsensor ijken in twee punten

8/16

Voor de bodemvochtsensor bestaat geen gegevensblad met een formule. Je ijkt hem daarom met twee referentiepunten: in droge potgrond meet je 600, in natte potgrond (net gegoten en uitgelekt) 300. Maak een schaal van 0 % (droog) tot 100 % (nat). Welk bodemvocht hoort bij 450? En bij welke ruwe waarde moet de kas water geven, als de drempel 30 % is?

water geven2503003504004505005506006500102030405060708090100110ruwe waarde op A0bodemvocht (%)510 ↔ 30 %ijklijn: vocht = (600 − ruw) : 3ijkpunten nat en droog
Een dalende ijklijn door twee referentiepunten: boven 510 zakt het vocht onder 30 %.
Gegeven
  • droog: ruw 600 → 0 %
  • nat: ruw 300 → 100 %
  • tussen de twee punten: een rechte (een aanname)
Gevraagd
  • vocht bij ruw 450
  • ruwe waarde bij 30 %
Oplossing
  1. 1
    Het bereik. Van droog naar nat daalt de ruwe waarde met . Dat zijn 100 procentpunten: elke 3 lager is 1 % natter.
  2. 2
    De ijklijn. . Controle: ruw 600 geeft 0 %, ruw 300 geeft 100 %.
  3. 3
    Ruw 450. : precies in het midden.
  4. 4
    De drempel. 30 % is onder 600: ruw . Boven 510 is de grond droger dan 30 %.
Antwoord
Ruw 450 is 50 %; de kas geeft water als de ruwe waarde boven 510 komt (vocht onder 30 %).
Klopt dit? Omgekeerd: hoe natter, hoe lager het getal. Wie dat vergeet, geeft water als de grond nat is. Let ook op wat de schaal betekent: 30 % is geen 30 % water in de grond, maar 'op 30 % van de weg van droog naar nat, voor deze sensor in deze potgrond'. Een andere grond of een sensor die dieper zit, vraagt een nieuwe ijking. In Arduino-code doet map(ruw, 600, 300, 0, 100) deze omrekening.
Uitleg · 25.9

Drempelwaarde en aan/uit-regeling

9/16

De eenvoudigste regelaar kent maar twee standen: aan of uit. Hij vergelijkt de meting met een drempelwaarde: 'is het kouder dan 20 °C, dan verwarming aan, anders uit'. Zo werkt de thermostaat van een verwarming, een koelkast of een strijkijzer. Het is precies de ruit van een stroomdiagram (hoofdstuk 22) in een eindeloze lus.

In de eerste grafiek meet de thermostaat elke minuut. Ligt de temperatuur net onder 20 °C, dan gaat de verwarming aan; een minuut later is het net boven 20 °C en gaat ze uit. De temperatuur blijft netjes op 20 °C, maar de verwarming schakelt in drie uur 107 keer (elke rode strook is een periode 'aan'). Voor een ketel, een relais of een motor is dat slecht: ze verslijten door het voortdurende aan en uit.

Echte thermostaten gebruiken daarom twee drempels: aan onder 19,5 °C, uit boven 20,5 °C. Daartussen verandert er niets. Nu schommelt de temperatuur een halve graad rond 20 °C, en schakelt de verwarming in drie uur maar 13 keer. Dat verschil tussen de aan- en de uitdrempel heet hysterese. Hoe je het goed kiest, leer je in Intermediate (hoofdstuk 31).

Waarom schommelt het?

Een aan/uit-regeling kan nooit precies op 20,0 °C blijven: de verwarming geeft ofwel alles, ofwel niets. Wie een temperatuur heel stil wil houden, doseert het vermogen: 30 % verwarmen in plaats van aan of uit. Dat doet de PID-regelaar van het station op Expert-niveau.

0,00,51,01,52,02,53,01415161718192021222324t (h)T (°C)drempel 20 °Ckamertemperatuur
Eén drempel: de temperatuur blijft op 20 °C, maar de verwarming (rood) flikkert aan en uit.
0,00,51,01,52,02,53,01415161718192021222324t (h)T (°C)uit boven 20,5 °Caan onder 19,5 °Ckamertemperatuur
Twee drempels: een halve graad schommeling, maar veel minder schakelingen.
Uitleg · 25.10

Actuatoren: van signaal naar actie

10/16

Een actuator zet het besluit van de regelaar om in een actie. Een microcontrollerpin levert hoogstens 20 mA bij 5 V (hoofdstuk 24): genoeg voor een led, niet voor een pomp. Daarom stuur je de meeste actuatoren via een tussenstap aan.

actuatorwat hij doethoe je hem aanstuurtin de meetkas
led, zoemerlicht, geluidrechtstreeks op een pin (met weerstand)statuslampje
servodraait naar een hoek van 0 tot 180°signaal op een pin; voeding apart (5 V)(opdracht 25.15)
pomp, ventilator (12 V)water pompen, lucht verplaatsenvia een relais of een transistorpompje 0,65 A
relaisschakelt een aparte kringrelaismodule op een pinK1 ledstrip, K2 pomp
duwstang (lineaire actuator)schuift in of uittwee relais (uit / in)dakraam, K3 en K4

Een relais is een schakelaar die bediend wordt door een elektromagneet. Loopt er stroom door de spoel, dan trekt ze een ijzeren anker aan en sluit het contact. De stuurkring (5 V) en de werkkring (12 V) zijn elektrisch gescheiden: een fout in de pompkring kan de microcontroller niet beschadigen. De spoel van een klein relais van 5 V vraagt ongeveer 70 mA: te veel voor een pin. Daarom gebruik je een relaismodule, met een transistor die de spoelstroom levert en een diode die de chip beschermt als de spoel uitgeschakeld wordt (Intermediate, hoofdstuk 23 en 26).

Actief hoog of actief laag?

Sommige relaismodules schakelen in als de pin HIGH is, andere als ze LOW is. Test je module eerst met een eenvoudig programma, en noteer het. In dit hoofdstuk schakelt HIGH het relais in.

spoel zonder stroomspoel met stroompinGNDcontact openstuurkring: 5 V, ±70 mAwerkkring:12 V, 0,65 ApinGNDcontact dichtstuurkring: 5 V, ±70 mAwerkkring:12 V, 0,65 A
In het schema verbindt een stippellijn de spoel met het contact dat ze bedient: geen elektrische verbinding, wel een mechanische.
Een servo, een pompje, een relaismodule en een duwstang: vier manieren om iets te laten gebeuren.
Een servo, een pompje, een relaismodule en een duwstang: vier manieren om iets te laten gebeuren.
Uitgewerkt voorbeeld · 25.11

Habitat: automatisch water geven

11/16

Zet het algoritme 'water geven' (hoofdstuk 22, getest in de simulatie van hoofdstuk 23) om in een echte schakeling. Welke pinnen gebruik je, hoe schakel je het pompje van 12 V, hoeveel water geeft een beurt, en hoeveel energie kost het per dag?

ArduinoD65VGNDrelaismoduleINVCCGNDtransistor + diodeF3 1 AK2vlotterMpompje12 Vstuurkant: 5 Vwerkkant: 12 V, 0,65 A
Links de stuurkant (5 V), rechts de werkkant (12 V). De stippellijn is de mechanische koppeling tussen spoel en contact K2.
Gegeven
  • bodemvochtsensor op A0, ijking: vocht = (600 − ruw) : 3
  • drempel 30 %, wachttijd 15 min
  • pompje 12 V, 0,65 A, 8,0 mL/s; verbruik ongeveer 1,8 L per dag
  • 12 V-tak van de pomp met zekering 1 A en vlotterschakelaar (hoofdstuk 18 en 20)
Gevraagd
  • pinplan en schema
  • water per beurt en aantal beurten per dag
  • energie van de pomp per dag
Oplossing
  1. 1
    Meten. Sensor op A0 (analoog). Vlotter van het reservoir op D3 (digitaal, INPUT_PULLUP), zoals in opdracht 24.12.
  2. 2
    Doen. De pomp trekt 0,65 A op 12 V: dat kan geen pin. Relaismodule op D6; het contact K2 komt in de 12 V-tak van de pomp, in serie met de zekering (1 A) en met de vlotterschakelaar. Zo zijn er twee beveiligingen: het programma pompt niet als D3 'leeg' meldt, en de vlotter in de pompkring breekt de stroom zelf als het peil te laag is.
  3. 3
    Beslissen. Het programma leest A0, rekent om naar procent, en pompt 30 s als het vocht onder 30 % is en er water is. Daarna 15 minuten wachten: het water moet eerst naar de sensor zakken.
  4. 4
    Water per beurt. . Voor 1,8 L per dag: beurten, of pompen per dag, zoals in het stationsdossier.
  5. 5
    Energie. Het pompje: , 225 s per dag: , of 0,49 Wh per dag (hoofdstuk 21). De spoel van het relais (±0,35 W) staat alleen aan tijdens het pompen: verwaarloosbaar.
Antwoord
A0 sensor, D3 vlotter, D6 relais K2 (pomp), D10/D11 statuslampje. Per beurt 240 mL; 7,5 beurten (225 s pompen) per dag; de pomp gebruikt 0,49 Wh per dag.
Klopt dit? Test in drie stappen. (1) Zonder pomp: laat het programma de vochtwaarde naar de computer sturen en controleer droog/nat met de hand. (2) Met een led in plaats van het relais: gaat ze aan bij een droge sensor en uit bij een natte? (3) Met pomp, eerst met een korte beurt van 3 s. Test ook de rare gevallen: reservoir leeg, sensor uit de grond getrokken (lucht is 'droog': pompt de kas dan het reservoir leeg?).
Code · 25.12

Automatisch water geven in code en in blokken

12/16

Het programma volgt het stroomdiagram van hoofdstuk 22. Nieuw zijn analogRead(), dat een getal van 0 tot 1023 geeft, en map(), dat een getal van het ene bereik naar het andere omrekent (hier van 600 → 300 naar 0 → 100). Met Serial.println() stuurt de Arduino elke meting naar de computer: handig om te testen en te ijken (Intermediate, hoofdstuk 29 en 30).

C++ (Arduino)water_geven.ino38 regelsDownload
// Automatisch water geven in de meetkasconst int SENSOR = A0;      // capacitieve bodemvochtsensorconst int VLOTTER = 3;      // vlotter naar GND: dicht (LOW) = er is waterconst int POMP = 6;         // relais K2 van het pompje (HIGH = aan)const int ROOD = 10;        // statuslampjeconst int GROEN = 11;const int DROOG = 600;      // ijkpunt: ruwe waarde in droge potgrondconst int NAT = 300;        // ijkpunt: ruwe waarde in natte potgrondconst int DREMPEL = 30;     // water geven onder 30 % void setup() {  pinMode(VLOTTER, INPUT_PULLUP);  pinMode(POMP, OUTPUT);  pinMode(ROOD, OUTPUT);  pinMode(GROEN, OUTPUT);  Serial.begin(9600);                         // metingen volgen op de computer} void loop() {  int ruw = analogRead(SENSOR);               // 0 tot 1023  int vocht = map(ruw, DROOG, NAT, 0, 100);   // ruwe waarde -> procent  Serial.println(vocht);  bool water = (digitalRead(VLOTTER) == LOW);  if (vocht < DREMPEL && water) {             // droog en er is water: pompen    digitalWrite(ROOD, HIGH);    digitalWrite(GROEN, LOW);    digitalWrite(POMP, HIGH);    delay(30000);                             // 30 s = 240 mL    digitalWrite(POMP, LOW);  } else if (vocht < DREMPEL) {               // droog, maar het reservoir is leeg    digitalWrite(ROOD, HIGH);    digitalWrite(GROEN, LOW);  } else {                                    // vochtig genoeg    digitalWrite(ROOD, LOW);    digitalWrite(GROEN, HIGH);  }  delay(900000UL);                            // 15 min: het water moet eerst inzakken}
wanneer Arduino Uno opstartherhaalmaakvocht600-lees analoge pinA0/3alsvocht<30enlees digitale pin3=0danzet digitale pin6ophoogwacht30sec.zet digitale pin6oplaagwacht900sec.
Hetzelfde in blokken: het vocht wordt berekend uit de analoge waarde, dan beslist 'als ... en ...'.

Een detail: map() rekent met gehele getallen en rondt naar beneden af. Ruw 511 wordt , dus 29: net onder de drempel. Voor een kas maakt dat niets uit. Wel belangrijk: tijdens de 15 minuten delay() doet de Arduino niets anders. Het dakraam kan in dezelfde lus dus niet tussendoor reageren. Wie beide wil, meet in één lus alles en wacht korter, of gebruikt millis() (Intermediate, hoofdstuk 29).

Uitgewerkt voorbeeld · 25.13

Habitat: het dakraam als thermostaat

13/16

Op een zonnige aprildag wordt het in de gesloten meetkas 32 °C (hoofdstuk 4). Boven 30 °C lijden de planten. De duwstang van hoofdstuk 12 kan het dakraam 20 cm openen. Ontwerp de regeling: wanneer gaat het raam open en dicht? Gebruik de simulatie om één drempel te vergelijken met twee.

open678910111213141516171819205101520253035tijdstip (h)T (°C)open boven 28 °Cdicht onder 25 °Cdakraam altijd dicht (hoofdstuk 4)met de regelingbuiten
Zonder regeling (stippellijn) 32 °C; met het automatische dakraam blijft het ongeveer tussen 25 en 28 °C. Groen: raam open.
Gegeven
  • TMP36 op A1, geijkt (−1,5 °C)
  • duwstang met eindschakelaars: relais K3 schuift uit, K4 schuift in
  • model: open raam haalt de helft van het verschil met buiten weg; meten elke minuut
Gevraagd
  • blokschema
  • drempels
  • aantal schakelingen en hoogste temperatuur
Oplossing
  1. 1
    Meten, beslissen, doen. Sensor TMP36 → regelaar (Arduino) → K3 of K4 → duwstang → dakraam → de kas koelt af → de sensor meet dat.
  2. 2
    Eén drempel (28 °C). Het raam gaat open zodra het warmer is dan 28 °C en dicht zodra het koeler is. De kas blijft onder 28,3 °C, maar in de simulatie schakelt de duwstang 166 keer tussen 6 en 20 uur: bijna elke minuut. De duwstang en de relais zouden dat niet lang overleven.
  3. 3
    Twee drempels. Open boven 28 °C, dicht onder 25 °C. Nu schakelt het raam 14 keer. Het eerste openen gebeurt om 12:07, het laatste sluiten om 15:41. De hoogste temperatuur is 28,2 °C.
  4. 4
    Waarom twee duwstangrelais? Een duwstang schuift uit bij de ene polariteit en in bij de andere. Met twee relais kies je de richting; ingebouwde eindschakelaars stoppen de stang aan het einde van haar slag. Hoe je zo'n richtingsschakeling (een H-brug) veilig bouwt, zie je in Intermediate, hoofdstuk 26.
Antwoord
Open boven 28 °C, dicht onder 25 °C: de kas blijft onder 28,2 °C (zonder regeling 32 °C), met 14 schakelingen per dag in plaats van 166 met één drempel.
Klopt dit? De simulatie is een model: het echte raam, de wind en de zon kunnen het beeld veranderen. Wat het model wel betrouwbaar toont, is het verschil tussen één en twee drempels. Test in het echt eerst met een lamp op de sensor (warmte) en noteer hoe vaak het raam schakelt. Wat bij stroomuitval? Het raam blijft staan waar het staat; daarom moet het met de hand te openen zijn (hoofdstuk 12).
SensorTMP36 op A1Regelaaropen > 28 °C, dicht <25 °CK3: uitschuivenK4: inschuivenduwstang +dakraamde kas koelt af of warmt op: de sensor meet het
Het dakraam in blokken: één sensor, één regelaar, twee relais voor de twee richtingen.
Code · 25.14

Het dakraam in code

14/16

Het programma onthoudt in de variabele raamOpen of het raam open is. Dat heb je nodig voor twee drempels: bij 26 °C moet het raam open blijven als het al open was, en dicht blijven als het dicht was. float is een variabele met cijfers na de komma; !raamOpen betekent 'niet raamOpen'.

C++ (Arduino)dakraam.ino28 regelsDownload
// Dakraam van de meetkas: open boven 28 graden, dicht onder 25 gradenconst int SENSOR = A1;      // TMP36const int UIT = 4;          // relais K3: duwstang schuift uit (raam open)const int IN = 5;           // relais K4: duwstang schuift in (raam dicht)bool raamOpen = false; void setup() {  pinMode(UIT, OUTPUT);  pinMode(IN, OUTPUT);} void loop() {  int ruw = analogRead(SENSOR);  float u = ruw * 5.0 / 1023.0;               // spanning in volt  float t = (u - 0.5) * 100.0 - 1.5;          // TMP36, met de ijkcorrectie van -1,5 graden  if (!raamOpen && t > 28.0) {    digitalWrite(UIT, HIGH);                  // uitschuiven tot de eindschakelaar    delay(15000);    digitalWrite(UIT, LOW);    raamOpen = true;  } else if (raamOpen && t < 25.0) {    digitalWrite(IN, HIGH);                   // inschuiven tot de eindschakelaar    delay(15000);    digitalWrite(IN, LOW);    raamOpen = false;  }  delay(60000);                               // een keer per minuut meten}

De relais blijven 15 s aan: ruim genoeg om de duwstang (typisch 5 à 10 mm per seconde) de 4 cm van haar slag te laten afleggen; de eindschakelaar stopt ze. Kijk in het gegevensblad van je duwstang hoe snel ze is. Nooit K3 en K4 tegelijk aan: in dit programma kan dat niet, want ze staan in verschillende takken van het if-else-blok.

Naslag · 25.15

Overzicht: sensoren, omrekenen, regelen en het pinplan

15/16
ruwe waarde naar spanning (Uno, 10 bits)
symboolbetekeniseenheid
ruwe waarde van analogRead0 tot 1023
spanningvolt (V)
TMP36 (gegevensblad)
symboolbetekeniseenheid
temperatuur°C
uitgangsspanningvolt (V)
twee-punts-ijking
symboolbetekeniseenheid
ruwe waarde in droge en in natte grond(getal)
regelingkenmerk
open lusgeen terugkoppeling: tijd of gebeurtenis bepaalt de actie
gesloten lusde sensor meet wat de actuator verandert
aan/uit met één drempelhoudt de waarde dicht bij de drempel, maar schakelt heel vaak
aan/uit met twee drempels (hysterese)schommelt tussen de drempels, schakelt veel minder
pinonderdeelsoorthoofdstuk
A0bodemvochtsensor (capacitief), ijkpunten 600 droog / 300 natanaloge ingang25
A1temperatuursensor TMP36 (ijkcorrectie −1,5 °C)analoge ingang25
A2lichtsensor (LDR met 10 kΩ)analoge ingang25
D2drukknop (test / handbediening)digitale ingang, INPUT_PULLUP24
D3vlotter reservoir (dicht = water)digitale ingang, INPUT_PULLUP24
D4 / D5relais K3 / K4: duwstang uit / in (dakraam)digitale uitgang25
D6relais K2: pompjedigitale uitgang25
D7relais K1: ledstrip (automaat, hoofdstuk 18)digitale uitgang25
D10 / D11statuslampje rood / groen (220 Ω)digitale uitgang24
Het geheel · 25.16

Waar regelen naartoe leidt

16/16

Met dit hoofdstuk begint de leerlijn regelen en robotica: meten, beslissen, doen, en opnieuw meten. Het bouwt op programmeren (de lus met een keuze) en elektronica (de pin, het relais), en raakt onderzoeken en meten (ijken met een referentie) en leven en systemen: ook je lichaam regelt zijn temperatuur met een gesloten lus.

Nauwkeurigheid van een instrument en aflezen: waarom ijken nodig is.

De dag in de meetkas (32 °C) en het aflezen van een grafiek, hier van een ijklijn.

De duwstang onder het dakraam: 29,5 N op 12 cm van het scharnier, 20 cm opening.

Het algoritme 'water geven' dat hier op een microcontroller draait.

Pinnen, INPUT_PULLUP, het statuslampje en de vlotter op D3.

Homeostase: je lichaamstemperatuur is een gesloten regelkring met zweten en rillen als actuatoren.

Een sensor kalibreren met de best passende rechte, met een rekenblad.

Hoe een LDR of NTC met een tweede weerstand een spanning geeft.

Servo, relais en de H-brug om een motor of duwstang in twee richtingen te sturen.

Hysterese goed kiezen, en een regeling beoordelen met een meting.

Niet aan of uit, maar precies zoveel als nodig: de PID-regelaar van het station.

HabitatDe meetkas regelt zichzelf. Sensor op A0 (ijkpunten 600 droog, 300 nat), drempel 30 %, 30 s pompen (240 mL) via relais K2 op D6, 15 minuten wachten; vlotter op D3. Het dakraam gaat open boven 28 °C en dicht onder 25 °C (TMP36 op A1, relais K3/K4 op D4/D5). In het integratieproject (hoofdstuk 33) bouw je alles samen en test je het een week lang. Opdracht 25.13 is het volledige ontwerp voor je portfolio.
Samenvatting

In het kort

Begrippen

Wat je nu kent

sensor
Onderdeel dat een grootheid (temperatuur, licht, vocht) omzet in een elektrisch signaal, meestal een spanning.
actuator
Onderdeel dat een elektrisch signaal omzet in een actie: bewegen, pompen, verwarmen, licht geven.
analoog signaal
Signaal dat elke waarde binnen een bereik kan aannemen, zoals een spanning tussen 0 en 5 V.
ADC (analoog-digitaalomzetter)
Deel van de microcontroller dat een spanning omzet in een getal; bij 10 bits van 0 tot 1023.
ijken (kalibreren)
Een meetinstrument vergelijken met een betrouwbare referentie en zijn aanwijzing zo nodig corrigeren.
ijklijn
Grafiek die het verband geeft tussen de aanwijzing van een sensor en de echte waarde, gemaakt met een referentie.
regelkring
Systeem dat meet, beslist en ingrijpt, en daarna opnieuw meet wat het effect was (gesloten lus, terugkoppeling).
aan/uit-regeling
Regeling die een actuator helemaal aan of helemaal uit zet, afhankelijk van of een meting boven of onder een drempel ligt.
hysterese
Werken met twee verschillende drempels voor aan en uit, zodat een regeling niet voortdurend schakelt.
relais
Schakelaar die bediend wordt door een elektromagneet: een kleine stroom in de spoel schakelt een grote stroom in een aparte kring.
Aan de slag in het werkboek16 opdrachten, van oefenen tot uitdagen