← Back to CoursesStemExpert
StemExpert
Intermediate · Handboek · 22. De spanningsdeler en sensoren
StemExpert · Brecht Corbeel · schoolium.me
StemExpert
I22. De spanningsdeler en sensoren
IIntermediate · deel I6 · Elektronica

Handboek · hoofdstuk 22De spanningsdeler en sensoren

Hoe een microcontroller licht en temperatuur 'ziet': van weerstand naar spanning naar getal

Een LDR, een NTC en een draaiknop hebben één ding gemeen: hun weerstand verandert. Een microcontroller kan geen weerstand meten, alleen spanning. De brug tussen die twee is de spanningsdeler: twee weerstanden in serie, met een aftakking in het midden. In dit hoofdstuk leid je zijn formule af, kies je de juiste vaste weerstand, reken je een ADC-waarde om naar lux en graden, en leer je waarom een meter of een ingang de meting zelf kan verstoren. Je ijkt een NTC met een referentie en bouwt de lichtsensor die beslist of de groeilampen van de klimaatmodule aan moeten.

9× uitleg4× uitgewerkt voorbeeld1× proef1× ontleed1× naslag1× verhaal1× het geheel2× code17 opdrachten in het werkboek± 8 lestijden
Een lichtsensor onder een melkwit kapje beslist of de groeilampen aan moeten.
Een lichtsensor onder een melkwit kapje beslist of de groeilampen aan moeten.
Na dit hoofdstuk
Verhaal · 22.1

Twee toevallige ontdekkingen

1/20

In 1833 zag Michael Faraday iets vreemds bij zilversulfide: het geleidde beter naarmate het warmer werd. Bij metalen is het net omgekeerd; een warme koperdraad heeft een iets grotere weerstand (F19). Faraday had, zonder het te weten, een halfgeleider in handen: een stof waarin warmte extra ladingen vrijmaakt (hoofdstuk 23). Een NTC, de temperatuursensor van dit hoofdstuk, werkt nog altijd zo.

Veertig jaar later, in 1873, schreef de Engelse telegraafingenieur Willoughby Smith een brief aan het tijdschrift Nature. Hij gebruikte staafjes selenium als zeer grote weerstanden bij het testen van onderzeese telegraafkabels, en merkte dat hun weerstand sterk wisselde. De oorzaak bleek het licht: in een afgesloten doos was de weerstand groot, zodra het deksel openging, daalde ze. Dat is het principe van de LDR, de lichtgevoelige weerstand, en de voorloper van de eerste lichtmeters en fotocellen.

Beide ontdekkingen gaan over een weerstand die verandert met de omgeving. Wie die verandering kan meten, heeft een sensor. Daarvoor is één schakeling nodig, zo eenvoudig dat ze in bijna elk toestel zit: de spanningsdeler.

Waarom dit hoofdstuk ertoe doet

De groeilampen van de klimaatmodule zijn goed voor 93 % van haar energieverbruik (hoofdstuk 20). Als er genoeg daglicht is, hoeven ze niet te branden. Een goede lichtsensor spaart dus meer energie dan welke andere maatregel ook. Hetzelfde geldt voor de temperatuur van het reservoir: te warm water bevat weinig zuurstof voor de wortels.

Selenium tussen koperen klemmen: in het donker een grote weerstand, in het licht een veel kleinere.
Selenium tussen koperen klemmen: in het donker een grote weerstand, in het licht een veel kleinere.
Uitleg · 22.2

Een microcontroller meet spanning, geen weerstand

2/20

Een analoge ingang van een Arduino Uno (A0 tot A5; de Mega van de klimaatmodule heeft er zestien, A0 tot A15, met dezelfde ADC) meet de potentiaal van één punt ten opzichte van GND (hoofdstuk 21), en zet die om in een getal. Dat doet de ADC, de analoog-digitaalomzetter. Hij verdeelt het gebied van 0 tot 5 V in stappen: het getal gaat van 0 tot 1023, en één stap is . Hoe dat binnenin werkt, zie je in hoofdstuk 25.

van spanning naar ADC-waarde (10 bit)
is bij een Uno de voedingsspanning van 5 V. De haken betekenen: naar beneden afronden.

Een LDR of een NTC levert geen spanning: het is een weerstand. Hang je hem gewoon aan een ingang, dan gebeurt er niets. Zet je hem in serie met een vaste weerstand tussen 5 V en GND, dan hangt de spanning op het punt ertussen af van de weerstand van de sensor. Die schakeling is de spanningsdeler. De figuur toont de drie sensoren van dit hoofdstuk, elk met hun eigen deler aan hun eigen ingang.

wat je al weetwat er nu bijkomt
Een analoge ingang geeft een getal van 0 tot 1023 (F24, F25).Wat dat getal precies is: een spanning, in stappen van 4,88 mV.
In serie verdeelt de spanning zich; de grootste weerstand krijgt het meest (F20).De formule van de spanningsdeler, en hoe je ze omkeert om een weerstand te meten.
Een sensor ijken met een referentie (F25, hoofdstuk 3).Een niet-lineaire sensor ijken door hem eerst recht te trekken.
Knooppunt- en maaswet (hoofdstuk 21).Waarom de ingang van een microcontroller bijna geen stroom mag trekken.
1023 of 1024?

In veel voorbeeldcode (ook in hoofdstuk 11 en 16) staat U = N * 5.0 / 1023. De datasheet van de ATmega328P, de chip op de Uno, rekent met 1024 stappen: betekent 'tussen 4,995 en 5 V'. Het verschil tussen beide formules is kleiner dan één stap (0,1 %). In dit hoofdstuk volgen we de datasheet.

+5 VGND (0 V)lichttemperatuurinstelknopLDRA11,0 kΩNTC 10 kΩA010 kΩ10 kΩA2
LDR en NTC boven, een vaste weerstand onder; de potentiometer is zelf al een deler. Elke aftakking gaat naar een analoge ingang.
Uitleg · 22.3

De spanningsdeler

3/20

Twee weerstanden en staan in serie over een spanning . Zolang er niets aan de aftakking hangt (of iets dat geen stroom trekt), loopt door beide dezelfde stroom (knooppuntwet). De maaswet geeft , dus . De spanning over is dan :

spanningsdeler (onbelast)
: spanning over (tussen de aftakking en GND). De uitgang is altijd een deel van : nooit meer, nooit negatief.

Drie dingen vallen op. De uitgang hangt alleen af van de verhouding van de weerstanden: 1 kΩ met 1 kΩ geeft dezelfde 2,5 V als 1 MΩ met 1 MΩ. De grootste weerstand krijgt het grootste deel van de spanning (F20). En de formule is eenvoudig om te keren: ken je en , dan vind je :

een onbekende weerstand uit de deler
Zo meet een microcontroller een weerstand: hij kent en en meet .
Ratiometrisch: de 5 V valt weg

Voedt de deler zich uit dezelfde 5 V die de ADC als referentie gebruikt, dan is . De voedingsspanning valt uit de formule: of de USB-poort nu 4,8 of 5,1 V levert, het getal blijft hetzelfde. Daarom voed je een sensordeler altijd uit de 5 V van de microcontroller zelf, en niet uit een andere voeding.

UinR₁R₂UuitI
Door R₁ en R₂ loopt dezelfde stroom; de uitgang is de spanning over R₂.
Uitgewerkt voorbeeld · 22.4

De batterijspanning meten

4/20

De microcontroller van de klimaatmodule volgt de spanning van de LiFePO4-batterij (hoofdstuk 16). Die schommelt tussen ongeveer 10 V (helemaal leeg) en 14,6 V (laden). Een ingang verdraagt hoogstens 5 V. Daarom hangt er een deler van 100 kΩ (boven) en 33 kΩ (onder) tussen de batterij en GND, met de aftakking op A0. (a) Welke spanning en welke ADC-waarde horen bij 12,8 V en bij 14,6 V? (b) Tot welke batterijspanning kan je meten? (c) Hoeveel stroom kost de deler? (d) Hoe groot is één ADC-stap, uitgedrukt in batterijspanning?

12,8 V100 kΩ33 kΩnaar A0I
Een deler van 100 kΩ en 33 kΩ brengt tot 20 V batterijspanning terug tot 5 V.
Gegeven
  • ,
  • ADC: 10 bit,
Gevraagd
  • U op A0 en N bij 12,8 V en 14,6 V
  • grootste meetbare spanning
  • stroom
  • stap
Oplossing
  1. 1
    Verhouding: .
  2. 2
    (a) Bij 12,8 V: , . Bij 14,6 V: , .
  3. 3
    (b) De ingang mag 5,00 V krijgen: .
  4. 4
    (c) ; over een dag , tegenover 120 Ah in de batterij.
  5. 5
    (d) Eén stap is 4,88 mV op A0, dus batterijspanning.
Antwoord
12,8 V geeft 3,18 V (N = 650), 14,6 V geeft 3,62 V (N = 741). Je kan meten tot ongeveer 20 V, de deler kost 0,11 mA, en de meting verspringt per 20 mV batterijspanning.
Klopt dit? Waarom zulke grote weerstanden? Met 1 kΩ en 330 Ω zou de deler 11 mA trekken, dag en nacht: 260 mAh per dag, voor niets. Maar te groot mag ook niet: de ADC wil een bron van hoogstens ongeveer 10 kΩ (verder in dit hoofdstuk). Deze deler zit daarboven, daarom komt er een condensator van 100 nF op A0 (hoofdstuk 24).
Ontleed · 22.5

De LDR

5/20

Een LDR (light dependent resistor, fotoweerstand) is een keramisch schijfje met een laagje cadmiumsulfide (CdS). Het schijfje van de GL5528 is ongeveer 5 mm breed.

zijaanzichtsymbool
Links het bovenaanzicht: twee metalen kammen met daartussen een kronkelend spoor CdS.
Wijs een nummer aan: de figuur zoomt in. Klik om vast te zetten.
  1. 1
    CdS-spoor

    Het oranje spoor tussen de kammen. In het donker zijn er in cadmiumsulfide bijna geen vrije ladingen: grote weerstand. Licht maakt elektronen vrij, en hoe meer licht, hoe meer (hoofdstuk 23).

  2. 2
    Elektroden (kammen)

    Twee in elkaar grijpende metalen kammen. Zo is het spoor kort en heel breed: dat geeft een kleine weerstand en een grote gevoelige oppervlakte.

  3. 3
    Aansluitdraden

    Twee draadjes, geen plus of min: een LDR is een gewone weerstand en werkt in beide richtingen.

  4. 4
    Doorzichtige laklaag

    Epoxy beschermt het CdS tegen vocht. De gevoeligheid is het grootst voor groen licht (540 nm), net als bij het menselijk oog.

  5. 5
    Keramische drager

    Isoleert, en voert de beetje warmte af: volgens de datasheet mag de LDR hoogstens 100 mW opnemen.

  6. 6
    Symbool

    Een weerstand met twee pijlen die naar binnen wijzen: er valt licht op.

Uitleg · 22.6

De karakteristiek van een LDR

6/20

Hoe meer licht, hoe kleiner de weerstand, maar niet evenredig: tien keer meer licht maakt de weerstand ongeveer vijf keer kleiner. Zet je zowel de verlichtingssterkte (in lux) als de weerstand op een logaritmische schaal (hoofdstuk 5), dan krijg je een rechte. Een rechte in een log-loggrafiek is een machtsfunctie:

model van een LDR
: weerstand bij 10 lux; (gamma): de helling in de log-loggrafiek. Voor de GL5528: tot , ; donker minstens 1 MΩ.

Met : bij 100 lx is , bij 1000 lx . Het model geldt goed tussen ongeveer 1 en 1000 lux; daarbuiten buigt de echte kromme af.

Een LDR is een goedkope, robuuste en gevoelige sensor, maar geen precisie-instrument. De spreiding is groot: ligt ergens tussen 8 en 20 kΩ, dus zonder ijking is elke lux-waarde een schatting. Hij is traag: na een lichtflits duurt het tientallen milliseconden, van licht naar donker zelfs langer, voor de weerstand stabiel is. En hij is wat temperatuurgevoelig. Om te beslissen of het 'licht genoeg' is, is dat allemaal geen probleem.

Cadmium

Cadmiumsulfide is giftig. De Europese RoHS-regels beperken cadmium in elektrische toestellen, zodat LDR's in nieuwe producten zelden nog gebruikt worden: daar zitten fotodiodes, fototransistoren of digitale lichtsensoren (bv. de BH1750, die lux rechtstreeks via I²C doorgeeft, hoofdstuk 30). In de klas en voor een prototype is een LDR prima; een kapotte LDR hoort bij het elektronicaschroot.

01234101102103104105106log(E / lx)R (Ω)1 lx10 lx100 lx1000 lx10 000 lxtypisch: 15 kΩ bij 10 lxspreiding: 8 tot 20 kΩ
In een log-loggrafiek is de karakteristiek een rechte met helling −0,7. Bij de stippellijnen: de spreiding volgens de datasheet.
De kronkelende lijn tussen de twee kammen is het lichtgevoelige cadmiumsulfide.
De kronkelende lijn tussen de twee kammen is het lichtgevoelige cadmiumsulfide.
Uitleg · 22.7

Welke vaste weerstand kies je?

7/20

Zet de LDR bovenaan (tussen 5 V en de ingang) en een vaste weerstand onderaan. Dan is : meer licht, kleinere , hogere spanning. Zet je ze andersom, dan daalt de spanning met het licht. Beide werken; kies wat in je programma het logischst leest.

De keuze van bepaalt waar de sensor gevoelig is. De grafiek toont het voor de klimaatmodule: met 220 Ω stijgt de spanning pas bij veel licht, met 4,7 kΩ is ze bij veel licht al bijna 5 V en verandert ze nauwelijks nog. Met 1,0 kΩ ligt het steilste stuk precies rond de 5000 lux waar de beslissing valt. Twee vuistregels:

  • Wil je één waarde zo nauwkeurig mogelijk herkennen (een drempel), kies dan gelijk aan de weerstand van de sensor bij die waarde. Dan staat er 2,5 V op de ingang, en daar is de deler het gevoeligst.
  • Wil je een heel gebied bestrijken, van tot , kies dan : dat geeft het grootste verschil in spanning tussen beide uiteinden (opdracht 22.15 bewijst het).
Het kapje

Op een zonnige dag valt er in de kas tot 100 000 lux. Daar zit de LDR ver buiten zijn model. Een melkwit kapje over de sensor verspreidt het licht (de sensor 'ziet' de hele hemel, niet één heldere wolk) en laat maar ongeveer 10 % door. Zo blijft de LDR tussen 10 en 10 000 lux. Welk percentage het kapje echt doorlaat, hoef je niet te weten: dat haal je eruit bij het ijken.

12345012345log(E / lx) buiten het kapjeU op A1 (V)5000 lx220 Ω1,0 kΩ4,7 kΩ
Met 1,0 kΩ ligt het steilste stuk bij 5000 lux daglicht, waar de lampen aan of uit moeten.
Uitgewerkt voorbeeld · 22.8

Habitat: een lichtsensor voor de kasverlichting

8/20

De groeilampen van de klimaatmodule moeten bijspringen als er te weinig daglicht is. Eén lamp geeft het kweekbed ongeveer 100 µmol lichtdeeltjes per m² per seconde (hoofdstuk 20); daglicht van 5000 lux komt daarmee ongeveer overeen (zonlicht: ±54 lux per µmol/(m²·s)). Ontwerp de sensor: LDR (GL5528, , ) onder een kapje dat 10 % doorlaat, met een vaste weerstand naar GND. (a) Kies . (b) Welke ADC-waarde hoort bij de drempel van 5000 lux? (c) Hoe groot is de sensor bij volle zon (100 000 lux), en hoeveel vermogen neemt de LDR dan op?

Gegeven
  • drempel: 5000 lx daglicht; kapje: 10 % doorlaat
  • LDR tussen 5 V en A1, tussen A1 en GND
Gevraagd
  • ADC-waarde bij de drempel
  • spanning en vermogen bij volle zon
Oplossing
  1. 1
    Op de LDR valt bij de drempel : .
  2. 2
    (a) Voor de grootste gevoeligheid bij de drempel kies je : de E12-waarde 1,0 kΩ.
  3. 3
    (b) en .
  4. 4
    (c) Volle zon: 10 000 lx op de LDR, ; (). Stroom ; vermogen in de LDR .
Antwoord
; de drempel ligt bij ADC-waarde 519 (2,54 V). Bij volle zon geeft de sensor 4,47 V, en de LDR neemt 2,4 mW op, ver onder zijn 100 mW.
Klopt dit? Tussen 4500 en 5500 lux verandert de ADC-waarde van 500 naar 536: meer dan dertig stappen voor 20 % licht. Gevoelig genoeg; de spreiding van de LDR en het kapje is veel groter, en die haal je weg door te ijken. Het hele bereik staat in de tabel hieronder.
daglicht (lx)op de LDR (lx) (Ω)U op A1 (V)ADC
100010029931,25256
200020018421,76360
50005009702,54519
10 00010005973,13641
20 00020003683,66748
100 00010 0001194,47914
Uitleg · 22.9

De NTC: weerstand die daalt als het warmer wordt

9/20

Een NTC (negative temperature coefficient) is een bolletje of schijfje van metaaloxiden, een halfgeleider zoals bij Faraday: hoe warmer, hoe meer vrije ladingen, hoe kleiner de weerstand. De verandering is groot, ongeveer 4 % per graad rond kamertemperatuur, en ze volgt goed een exponentiële functie (hoofdstuk 5):

B-model van een NTC
in kelvin (); ; : weerstand bij 25 °C; : de B-waarde in kelvin. De gangbare NTC van 10 kΩ heeft .

Met en is de weerstand bij 0 °C 33,6 kΩ, bij 50 °C 3,59 kΩ: een factor negen op vijftig graden. De tabel geeft ook meteen de spanning en de ADC-waarde in de deler met 10 kΩ, verder in dit hoofdstuk.

T (°C)05101520253035404550
R (kΩ)33,625,920,215,812,510,08,046,515,304,353,59
U op A0 (V)1,151,391,661,942,222,502,773,033,273,483,68
ADC-waarde234285339396454512567620669713753

Het B-model is nauwkeurig tot op enkele tienden van een graad tussen ongeveer 0 en 50 °C. Voor een groter gebied gebruiken fabrikanten een model met drie constanten, de vergelijking van Steinhart-Hart, of geven ze een tabel. De twee constanten en hebben elk een tolerantie (vaak 1 %): ook een NTC moet je ijken als je beter dan een halve graad wil meten.

−20−10010203040506070800102030405060708090100110T (°C)R (kΩ)0 °C: 33,6 kΩ25 °C: 10,0 kΩ50 °C: 3,59 kΩNTC: 10 kΩ bij 25 °C, B = 3950 K
Exact volgens het B-model: van 105 kΩ bij −20 °C tot 1,3 kΩ bij 80 °C.
In het roestvaststalen buisje zit een NTC van 10 kΩ, waterdicht ingegoten.
In het roestvaststalen buisje zit een NTC van 10 kΩ, waterdicht ingegoten.
Uitleg · 22.10

Van ADC-waarde naar temperatuur

10/20

Zet de NTC bovenaan en een vaste weerstand van 10 kΩ onderaan. Warmer geeft een kleinere en dus een hogere spanning. Omdat de deler en de ADC dezelfde 5 V gebruiken, valt die spanning weg, en haal je de weerstand rechtstreeks uit het getal :

weerstand uit de ADC-waarde (sensor boven, vaste weerstand onder)

Daarna keer je het B-model om (neem de natuurlijke logaritme van beide kanten):

temperatuur uit de weerstand
in kelvin; trek er 273,15 van af voor graden Celsius.

Hoe fijn meet dit? De grafiek toont de spanning in functie van de temperatuur. Rond 25 °C, waar , is ze het steilst: per graad. Eén ADC-stap van 4,88 mV is daar dus . Tussen 10 en 40 °C loopt de kromme bijna recht; daarbuiten wordt de sensor minder gevoelig.

Fijn meten is nauwkeurig meten

Een stap van 0,09 °C betekent niet dat de meting tot op 0,09 °C juist is. Resolutie (hoe fijn) en nauwkeurigheid (hoe juist) zijn verschillende dingen (hoofdstuk 1). Met een NTC van 1 % tolerantie en een vaste weerstand van 1 % kan je zonder ijking tot ongeveer een halve graad naast de echte temperatuur zitten, hoe fijn de ADC ook meet.

051015202530354045500,00,51,01,52,02,53,03,54,04,55,0T (°C)U op A0 (V)raaklijn bij 25 °C:55,5 mV per °CNTC boven, 10 kΩ onder
Rond 25 °C is de spanning bijna recht evenredig met de temperatuur; de stippellijn is de raaklijn.
Uitgewerkt voorbeeld · 22.11

Welke temperatuur heeft het reservoir?

11/20

De NTC van het reservoir (10 kΩ, ) zit bovenaan in een deler met 10 kΩ, op A0. De microcontroller leest . Welke temperatuur heeft het water? Hoeveel verschilt de temperatuur als het getal één stap hoger is?

Gegeven
  • ;
  • ,
Gevraagd
  • en
  • voor één stap
Oplossing
  1. 1
    Spanning (ter controle): .
  2. 2
    Weerstand: .
  3. 3
    , gedeeld door 3950: .
  4. 4
    , dus .
  5. 5
    Met : en .
Antwoord
Het water is 22,2 °C. Eén ADC-stap komt hier overeen met 0,087 °C.
Klopt dit? Het getal 480 ligt iets onder 512 (2,5 V): de NTC is iets groter dan 10 kΩ, dus iets kouder dan 25 °C. Klopt. De tabel van het vorige blad geeft bij 20 °C N = 454 en bij 25 °C N = 512: 480 ligt ertussen.
Code · 22.12

C++: licht en temperatuur op de microcontroller

12/20

Dit programma leest beide sensoren, middelt telkens zestien metingen tegen ruis, rekent de getallen om met de formules van dit hoofdstuk en beslist of de lampen nodig zijn. Het vangt ook twee fouten op: een losse draad aan de NTC (dan trekt de vaste weerstand A0 naar 0) en een pikdonkere LDR (dan is en zou je door nul delen).

C++ (Arduino)sensoren.ino48 regelsDownload
// sensoren.ino - NTC in het reservoir (A0) en lichtsensor van de kasverlichting (A1), Arduino Mega 2560 op 5 Vconst float R_VAST_NTC = 10000.0;   // ohm, tussen A0 en GND (NTC tussen 5 V en A0)const float R25 = 10000.0;          // ohm bij 25 graden Cconst float B = 3950.0;             // Kconst float T25 = 298.15;           // Kconst float R_VAST_LDR = 1000.0;    // ohm, tussen A1 en GND (LDR tussen 5 V en A1)const float R10 = 15000.0;          // ohm bij 10 lux op de LDRconst float GAMMA = 0.7;const float KAPJE = 0.10;           // het melkwitte kapje laat 10 % van het licht doorconst float DREMPEL_LUX = 5000.0;   // onder dit daglicht moeten de lampen bij int gemiddeld(int pin) {            // 16 metingen middelen tegen ruis  long som = 0;  for (int i = 0; i < 16; i++) som += analogRead(pin);  return som / 16;} float temperatuur() {  int n = gemiddeld(A0);  if (n < 5 || n > 1018) return NAN;                // draad los of kortsluiting  float r = R_VAST_NTC * (1024.0 - n) / n;          // spanningsdeler omgekeerd  float invT = 1.0 / T25 + log(r / R25) / B;        // B-model: log() is de natuurlijke logaritme  return 1.0 / invT - 273.15;} float daglicht() {  int n = gemiddeld(A1);  if (n < 1) n = 1;                                  // pikdonker: vermijd delen door nul  float r = R_VAST_LDR * (1024.0 - n) / n;  float luxOpLdr = 10.0 * pow(r / R10, -1.0 / GAMMA); // R = R10 * (E / 10)^-gamma, omgekeerd  return luxOpLdr / KAPJE;                           // het licht buiten het kapje} void setup() {  Serial.begin(9600);} void loop() {  float t = temperatuur();  float e = daglicht();  Serial.print("reservoir: ");  Serial.print(t, 1);  Serial.print(" C   daglicht: ");  Serial.print(e, 0);  Serial.print(" lx   lampen: ");  Serial.println(e < DREMPEL_LUX ? "nodig" : "niet nodig");  delay(2000);}

Op de seriële monitor verschijnt elke twee seconden een regel zoals reservoir: 22,2 C daglicht: 3981 lx lampen: nodig. Twee dingen ontbreken nog. Rond 5000 lux zou de beslissing bij elke wolk heen en weer springen: een regeling met twee drempels (hysterese) lost dat op (opdracht 22.10 en hoofdstuk 31). En delay() legt het hele programma stil; in hoofdstuk 29 vervang je het door millis().

Uitleg · 22.13

De potentiometer

13/20

Een potentiometer is een weerstand met een derde aansluiting: een contact, de loper, dat over de weerstand schuift als je aan de knop draait. Hang je de uiteinden aan 5 V en GND, dan is de loper de aftakking van een spanningsdeler die je met de hand instelt. Staat de loper op een fractie van onderen, dan is en :

onbelaste potentiometer (lineair verloop)

In de klimaatmodule zit er een op het bedieningspaneel, aan A2: een instelknop voor de lichtdrempel. Het programma zet de ADC-waarde van 0 tot 1023 om naar een drempel tussen bijvoorbeeld 1000 en 20 000 lux. Door de potmeter van 10 kΩ loopt , in elke stand.

Gebruik je alleen de loper en één uiteinde, dan is de potentiometer een regelbare weerstand (rheostaat): van 0 tot 10 kΩ. Let dan op: in de stand 'nul' kan er een grote stroom lopen. Zet er een vaste weerstand in serie mee.

Lineair of logaritmisch

Potentiometers voor volumeknoppen hebben een logaritmisch verloop: bij de eerste helft van de draai verandert de weerstand weinig, daarna veel, omdat ons oor zo werkt. Voor een meetknop wil je een lineair verloop. De lettercode verschilt per fabrikant: kijk in de datasheet.

5 VRA2RLloperαR
De loper deelt de weerstand R in αR (onder) en (1 − α)R (boven). In stippellijn: een belasting RL.
Een draaiknop op het bedieningspaneel: achter de knop zit een potentiometer van 10 kΩ.
Een draaiknop op het bedieningspaneel: achter de knop zit een potentiometer van 10 kΩ.
Uitleg · 22.14

Belasting: de deler verandert als je er iets aan hangt

14/20

De formule van de spanningsdeler geldt alleen als er geen stroom uit de aftakking loopt. Hang je er een belasting aan (een meter, een ingang, een led), dan staat parallel met , en die combinatie is kleiner dan (hoofdstuk 21). De uitgang zakt:

belaste spanningsdeler

Een handige manier om ernaar te kijken: een deler gedraagt zich als een bron met bronspanning (de onbelaste uitgang) en een inwendige weerstand , zoals de batterij in hoofdstuk 21. Voor 10 kΩ met 10 kΩ is . Een belasting die veel groter is dan , verandert bijna niets: met zakt de uitgang ongeveer 1 %.

Waarom een ingang hoogohmig moet zijn. Een meetingang mag het signaal niet veranderen dat hij meet. Een analoge ingang van de ATmega328P gedraagt zich als een weerstand van ongeveer 100 MΩ: voor een deler van 10 kΩ is de fout 0,005 %, onmeetbaar klein. Een digitale multimeter heeft ongeveer 10 MΩ, een goedkope analoge meter soms maar 20 kΩ per volt. Er is één addertje: bij elke meting laadt de ADC een klein condensatortje (ongeveer 14 pF) op. De datasheet vraagt daarom een bron van hoogstens ongeveer 10 kΩ. Heb je een grotere , zoals de batterijdeler met 24,8 kΩ, dan zet je een condensator van 100 nF tussen de ingang en GND die dat opladen levert (hoofdstuk 24).

234567890,00,51,01,52,02,5log(RL / Ω)Uuit (V)10 MΩ100 MΩdeler 10 kΩ / 10 kΩdeler 100 kΩ / 100 kΩ
Links op de as een zware belasting, rechts een lichte (4 is 10 kΩ; bij 10 MΩ een multimeter, bij 100 MΩ de ADC-ingang). De deler van 100 kΩ zakt al waar die van 10 kΩ nog niets merkt.
0,00,10,20,30,40,50,60,70,80,91,00,00,10,20,30,40,50,60,70,80,91,0stand van de loper αUuit / UinonbelastRL = RRL = R / 10
Een potentiometer met een zware belasting verliest zijn rechte lijn: de uitgang zakt het meest in het midden.
Uitgewerkt voorbeeld · 22.15

Een meter die de meting verandert

15/20

(a) Je controleert de batterijdeler (100 kΩ en 33 kΩ, batterij 13,2 V) door op A0 te meten, eerst met een digitale multimeter van 10 MΩ, dan met een oude meter van 1,0 MΩ. Wat lees je af, en hoeveel procent is dat te laag? (b) Iemand gebruikt de instelknop (10 kΩ, loper in het midden) om rechtstreeks een module te sturen met een ingangsweerstand van 10 kΩ. Welke spanning krijgt die module?

Gegeven
  • (a) ; , ; of
  • (b) potentiometer 10 kΩ op 5 V, ;
Gevraagd
  • afgelezen spanningen en de fout
  • spanning op de module
Oplossing
  1. 1
    (a) Onbelast: . Uitgangsweerstand .
  2. 2
    Met 10 MΩ: , 0,25 % te laag.
  3. 3
    Met 1,0 MΩ: , 2,4 % te laag.
  4. 4
    (b) Onderste helft: ; in plaats van 2,5 V.
Antwoord
(a) 3,267 V met de goede meter, 3,196 V met de oude: 0,25 % en 2,4 % te laag. (b) 2,0 V in plaats van 2,5 V: 20 % te weinig.
Klopt dit? Omgerekend naar de batterij leest de oude meter 12,88 V in plaats van 13,2 V: een laadtoestand die er helemaal naast zit. De microcontroller zelf (±100 MΩ) meet 13,197 V. Vuistregel: de belasting minstens honderd keer groter dan de uitgangsweerstand. Moet een deler toch een zware belasting sturen, gebruik dan een buffer (een opamp, hoofdstuk E22).
Proef · 22.16

Een NTC ijken in water

16/20
Onderzoeksvraag

Hoe goed meet een NTC met de waarden uit de datasheet, en hoe maak je hem beter?

Materiaal
  • NTC 10 kΩ () in een waterdicht buisje, weerstand 10 kΩ, microcontroller
  • referentiethermometer (±0,1 °C)
  • bekers: ijswater, water van 10, 20, 30, 40 en 50 °C
  • roerstaafje, computer
VeiligheidWater van 50 °C is warm maar niet gevaarlijk; heter water gebruik je niet. Houd de microcontroller en de USB-kabel droog.
3,03,13,23,33,43,53,63,73,88,08,59,09,510,010,51000 / T (1/K)ln(R / Ω)metingengeijkt: B = 3913 Kdatasheet: B = 3950 K
Gelineariseerd liggen de metingen op een rechte; de geijkte rechte ligt iets lager en minder steil dan die van de datasheet.
Werkwijze
  1. 1Bouw de deler: NTC tussen 5 V en A0, 10 kΩ tussen A0 en GND. Laat de microcontroller elke seconde N doorsturen (gemiddelde van 16 metingen).
  2. 2Hang de NTC en de referentiethermometer vlak naast elkaar in het ijswater. Roer, wacht tot beide stabiel zijn (minstens een minuut) en noteer en .
  3. 3Herhaal voor de andere bekers.
  4. 4Reken elke N om naar en naar met de waarden van de datasheet. Vergelijk met .
  5. 5Zet uit tegen (in kelvin) en bepaal de best passende rechte.
Waarneming
(°C)ADC-waarde (Ω) volgens datasheet (°C)fout (°C)
0,123134 329−0,39−0,49
10,433720 3869,79−0,61
20,244812 85719,45−0,75
30,0558835129,11−0,89
40,3662546839,23−1,07
50,1745374548,87−1,23

Voorbeeldmeting. De NTC meet overal te laag, van een halve graad bij 0 °C tot meer dan een graad bij 50 °C.

Verklaring

De fout is systematisch (hoofdstuk 1): altijd dezelfde kant op, en groeiend met de temperatuur. Ze komt uit de toleranties van , van en van de vaste weerstand. Het B-model zelf is niet het probleem, alleen zijn constanten. Neem de logaritme van het model: . Tegen uitgezet is dat een rechte met helling (hoofdstuk 3: lineariseren). De best passende rechte door de metingen geeft en . Met die constanten valt elke meting binnen 0,02 °C van de referentie; wat overblijft, is de onzekerheid van de referentie zelf.

Code · 22.17

Python: de ijking uitrekenen

17/20

Het programma rekent de proef na: van ADC-waarde naar weerstand, de rechte door met np.polyfit (hoofdstuk 3 en 4), en daarna de temperaturen met de datasheet en met de geijkte constanten naast elkaar. De twee getallen die eruit komen, zet je in de C++-code in de plaats van 10000 en 3950.

Pythonkalibratie.py24 regelsDownload
# kalibratie.py - een NTC ijken: B en R25 uit metingen met een referentiethermometerimport mathimport numpy as np R_VAST = 10000.0                                   # vaste weerstand (ohm, nominaal)T_ref = [0.1, 10.4, 20.2, 30.0, 40.3, 50.1]         # referentie (graden C)N = [231, 337, 448, 558, 662, 745]                     # ADC-waarden van de NTC-deler R = [R_VAST * (1024 - n) / n for n in N]           # spanningsdeler omgekeerdx = [1 / (t + 273.15) for t in T_ref]              # 1/T in 1/Ky = [math.log(r) for r in R]                       # ln R B, b = np.polyfit(x, y, 1)                         # ln R = B * (1/T) + b is een rechteR25 = math.exp(b + B / 298.15)print(f"geijkt: B = {B:.0f} K, R25 = {R25:.0f} ohm")  def temperatuur(r, r25, b_waarde):    return 1 / (1 / 298.15 + math.log(r / r25) / b_waarde) - 273.15  print(" T_ref    N  R (ohm)  T datasheet  T geijkt")for t, n, r in zip(T_ref, N, R):    print(f"{t:6.1f} {n:4d} {r:8.0f} {temperatuur(r, 10000, 3950):11.2f} {temperatuur(r, R25, B):9.2f}")

Uitvoer (gedraaid bij het bouwen van deze pagina):

geijkt: B = 3913 K, R25 = 10375 ohm
 T_ref    N  R (ohm)  T datasheet  T geijkt
   0.1  231    34329       -0.39      0.09
  10.4  337    20386        9.79     10.41
  20.2  448    12857       19.45     20.21
  30.0  558     8351       29.11     30.01
  40.3  662     5468       39.23     40.29
  50.1  745     3745       48.87     50.09

Let op wat de ijking niet doet: ze meet niet de echte van de NTC. De vaste weerstand wijkt ook af, en die afwijking zit mee in de geijkte . Dat is geen fout, maar het principe van ijken: je stelt de hele meetketen bij, niet één onderdeel. Vervang je de vaste weerstand, dan ijk je opnieuw.

Uitleg · 22.18

Kalibreren: de hele meetketen

18/20

Tussen de temperatuur in het water en het getal op je scherm zitten vijf schakels, elk met een eigen foutbron. Je kan ze apart gaan uitmeten, maar dat is veel werk en je vergeet er altijd één. Kalibreren (ijken) vergelijkt het eindresultaat van de hele keten met een referentie die beter is dan wat je wil meten, en stelt het model bij tot ze overeenkomen. Drie manieren, van eenvoudig naar grondig:

  • Eenpuntsijking: één referentiepunt, en je corrigeert een vaste afwijking (offset). Goed als de fout overal ongeveer even groot is, zoals bij de NTC-module in hoofdstuk 1.
  • Tweepuntsijking: twee punten, voor een rechte (helling en offset), zoals de pH-module in hoofdstuk 15.
  • Model fitten: meerdere punten, en de constanten van het model (hier en , voor de LDR en ) met de kleinste kwadraten bepalen. Trek het model eerst recht: tegen voor de NTC, tegen voor de LDR.

Kies de ijkpunten in het gebied waar je gaat meten (voor het reservoir 10 tot 30 °C, niet 80 °C), en schrijf de datum van de ijking op. Sensoren verouderen, en een ijking heeft een houdbaarheid: bij de pH-module elke twee weken, bij een NTC eerder jaren.

De referentie moet beter zijn

Een ijking is nooit beter dan haar referentie. Een luxmeter-app op een smartphone kan er 20 % naast zitten; voor een drempel 'veel of weinig licht' is dat genoeg, voor een onderzoek naar de groei van sla niet. Een goede vuistregel: de referentie minstens drie keer nauwkeuriger dan wat je nodig hebt.

temperatuurT in het waterreferentie ±0,1 °CNTCR(T), B-modeltolerantie R25, BspanningsdelerU = 5 V · Rv /(Rv + R)tolerantie RvADCN van 0 tot1023stap 4,9 mV, ruisprogrammaN → R → Tmodel, afrondingkalibreren: de hele keten in één keer vergelijken met een referentie
Vijf schakels, vijf foutbronnen. Kalibreren vergelijkt het begin en het einde van de keten in één keer.
Naslag · 22.19

Overzicht: spanningsdeler, sensoren en ADC

19/20
spanningsdeler
symboolbetekeniseenheid
weerstand tussen uitgang en GNDΩ
uitgangsweerstand van een deler
symboolbetekeniseenheid
inwendige weerstand van de deler als bronΩ
ADC van 10 bit
symboolbetekeniseenheid
ADC-waarde, 0 tot 1023–
referentie (Uno: 5 V)V
weerstand uit de ADC (sensor boven)
symboolbetekeniseenheid
vaste weerstand onderΩ
LDR
symboolbetekeniseenheid
verlichtingssterktelx
helling in log-log (GL5528: 0,7)–
NTC (B-model)
symboolbetekeniseenheid
temperatuurK
B-waardeK
onderdeeltypische waardenvaste weerstand
LDR GL55288-20 kΩ bij 10 lx, > 1 MΩ donker, γ = 0,7, hoogstens 100 mW≈ bij de drempel, of
NTC 10 kΩ, , ±4 % per °C10 kΩ (gevoeligst rond 25 °C)
potentiometer1 kΩ tot 100 kΩ; lineair of logaritmischgeen: zelf een deler
ADC Arduino Uno10 bit, 0-1023, 4,88 mV per stap, ingang ±100 MΩ, bron liefst ≤ 10 kΩ—
T (°C)05101520253035404550
R (kΩ)33,625,920,215,812,510,08,046,515,304,353,59
U op A0 (V)1,151,391,661,942,222,502,773,033,273,483,68
ADC-waarde234285339396454512567620669713753
Het geheel · 22.20

Waar de spanningsdeler vandaan komt en waar hij heen gaat

20/20

De spanningsdeler is de eenvoudigste toepassing van Kirchhoff en tegelijk de meest gebruikte schakeling van de elektronica: in elke volumeknop, elke thermostaat, elke batterijmeter. Hij verbindt de leerlijn elektronica met onderzoeken en meten (een sensor is maar zo goed als zijn ijking) en met programmeren (het getal moet een beslissing worden). Wiskundig oefen je hier exponentiële en machtsfuncties, logaritmen en het rechttrekken van een kromme.

In serie verdeelt de spanning zich: het idee achter de deler.

De eerste sensoren en analoge waarden op de microcontroller.

Systematische fouten, resolutie tegenover nauwkeurigheid.

Kalibreren met een rechte, en een kromme rechttrekken.

Het B-model is een exponentiële functie; de LDR lees je op een logaritmische schaal.

Knooppunt- en maaswet, uitgangsweerstand als inwendige weerstand.

Waarom een NTC en een LDR halfgeleiders zijn.

De condensator op een hoogohmige ADC-ingang, en ruis wegfilteren.

Hoe de ADC binnenin werkt: resolutie, bereik en bemonsteren.

Een drempel met hysterese, zodat de lampen niet bij elke wolk schakelen.

De brug van Wheatstone en een buffer die een deler niet belast.

HabitatDe klimaatmodule heeft nu haar lichtsensor: een LDR onder een melkwit kapje met 1,0 kΩ op A1, drempel 5000 lux daglicht (ADC-waarde 519). De NTC van het reservoir zit met 10 kΩ op A0 en is geijkt, en de batterijspanning komt via 100 kΩ / 33 kΩ met 100 nF op een derde ingang. In opdracht 22.10 krijgt de lichtsensor twee drempels, in opdracht 22.13 een plaats, een ijkplan en foutdetectie; in hoofdstuk 25 dimmen de lampen traploos met PWM.
Samenvatting

In het kort

Begrippen

Wat je nu kent

spanningsdeler
Twee weerstanden in serie over een spanning; de spanning op de aftakking is .
LDR (fotoweerstand)
Weerstand van cadmiumsulfide waarvan de weerstand daalt als er meer licht op valt.
NTC (thermistor)
Halfgeleiderweerstand met een negatieve temperatuurcoëfficiënt: warmer geeft een kleinere weerstand.
B-waarde
Constante in het model van een NTC, in kelvin; zegt hoe sterk de weerstand met de temperatuur verandert.
potentiometer
Weerstand met een verschuifbaar contact (de loper): een instelbare spanningsdeler.
ADC
Analoog-digitaalomzetter: zet een spanning om in een getal; op een Uno 10 bit, van 0 tot 1023, met 5 V als referentie.
ratiometrisch meten
De sensor en de ADC gebruiken dezelfde referentiespanning, zodat het getal alleen van de verhouding van de weerstanden afhangt.
uitgangsweerstand
De weerstand die een belasting 'ziet' als ze aan een deler hangt; voor een deler is dat .
kalibreren (ijken)
De aanwijzing van een meetketen vergelijken met een referentie en het model bijstellen tot ze overeenkomen.
Aan de slag in het werkboek17 opdrachten, van oefenen tot uitdagen