Område 4 · lektion 19
Motståndsgivare
De enklaste givarna som finns gör en enda sak: de ändrar sitt motstånd när omvärlden ändrar sig. En LDR gör det när ljuset ändras, en NTC när temperaturen gör det. De har inga anslutningar för matning, inget protokoll och inget datablad du måste förstå för att komma igång. Priset är att de inte lämnar någonting kortet kan läsa förrän du satt dem i spänningsdelaren från förra guiden.
Mål
- Du kan förklara åt vilket håll en LDR och en NTC ändrar sitt motstånd, och mäta upp din egen givares ytterlägen med multimetern.
- Du kan koppla en motståndsgivare som spänningsdelare åt båda hållen, och välja hållet efter vilket håll du vill att råvärdet ska gå.
- Du kan välja det fasta motståndet så att givaren utnyttjar en så stor del av de 1024 stegen som möjligt.
- Du kan säga varför NTC:ns kurva inte är en rät linje, och varför det inte hindrar dig från att mäta med den.
Genomgång
LDR: motståndet faller när ljuset stiger
En LDR – light dependent resistor, ljusberoende motstånd – är en platta av ett halvledande material med två anslutningar. Ljus som träffar plattan slår loss laddningsbärare i materialet, och fler laddningsbärare betyder att strömmen går lättare fram. Mer ljus ger lägre resistans.
Siffrorna varierar enormt mellan exemplar En LDR i mörker ligger någonstans mellan ett par hundra kΩ och långt över en MΩ. I ett upplyst rum ligger den i storleksordningen några kΩ, och i direkt solljus kan den gå ned mot ett par hundra Ω. Det här är riktvärden och ingenting annat. Två LDR:er ur samma påse kan skilja sig med en faktor två, och två olika typnummer med mycket mer. Skriv aldrig in ett tal ur den här guiden i din kod. Mät din egen givare – det tar en minut och det är ändå det första steget i kalibreringen.
NTC: motståndet faller när temperaturen stiger
En NTC – negativ temperaturkoefficient – är en termistor vars resistans sjunker när den blir varmare. Mekanismen liknar LDR:ns: värme är rörelse, rörelsen frigör laddningsbärare i halvledaren, och fler laddningsbärare ger lägre resistans. Skillnaden mot ett vanligt metallmotstånd är riktningen. I en metall stiger resistansen med temperaturen; i en halvledare faller den, och den faller mycket mer.
Termistorer märks med sin resistans vid 25 °C. Den vanligaste i skolkit är 10 kΩ vid 25 °C. Här är en tabell för en sådan, räknad ur ett datablad för en typ med B-värde omkring 3950. Din egen kan skilja sig med några procent – tabellen är till för att visa formen, inte för att skrivas av.
| Temperatur | Resistans | Ändring per föregående 10 °C |
|---|---|---|
| 0 °C | 33,6 kΩ | – |
| 10 °C | 20,2 kΩ | −13,4 kΩ |
| 20 °C | 12,5 kΩ | −7,7 kΩ |
| 25 °C | 10,0 kΩ | – |
| 30 °C | 8,04 kΩ | −4,5 kΩ |
| 40 °C | 5,30 kΩ | −2,7 kΩ |
| 50 °C | 3,59 kΩ | −1,7 kΩ |
Titta i den sista kolumnen. Tio grader kostar
12,5 − 8,04 = 4,5 kΩ mellan 20 och 30 °C
men bara
5,30 − 3,59 = 1,71 kΩ mellan 40 och 50 °C
alltså
4,5 / 1,71 = 2,6 gånger mindre
för samma tio grader. Det är vad det betyder att kurvan inte är en rät linje. En rät linje hade gett samma ändring överallt. Orsaken är att antalet laddningsbärare i en halvledare växer ungefär exponentiellt med temperaturen, inte proportionellt mot den.
Den fullständiga beskrivningen av en termistor heter Steinhart–Harts ekvation och ligger utanför den här kursen. Du behöver den inte. Två hanterbara vägar finns i stället, och båda används på riktigt:
- Kalibrera i två punkter inom det område du faktiskt ska mäta i. En rät linje mellan två punkter som ligger nära varandra är en mycket god beskrivning av en kurva emellan dem. Det är nästa guides ämne.
- Använd databladets tabell och slå upp. Ett program kan göra det med en array och en loop, vilket också hör till nästa guide.
Att koppla givaren som spänningsdelare
Givaren är hälften av delaren; den andra hälften är ett fast motstånd du väljer. Vilken av de två halvorna som sitter överst avgör åt vilket håll råvärdet går.
- Rf är det fasta motståndet du väljer. Rg är givaren, ritad med en pil tvärs igenom för att visa att den ändrar sig. Det är standardsymbolen för ett variabelt motstånd.
- I schema A mäter A0 spänningen över givaren:
Uut = 5 · Rg / (Rf + Rg). Faller Rg – mer ljus, högre temperatur – faller Uut, och råvärdet sjunker. - I schema B mäter A0 i stället spänningen över det
fasta motståndet:
Uut = 5 · Rf / (Rg + Rf). Faller Rg stiger Uut, och råvärdet ökar. - Båda är rätt. Ingen av dem mäter bättre än den andra. Välj den som gör att talet går åt det håll du tycker är naturligt att läsa – mer ljus, större tal – så slipper du en vändning i koden som du senare glömmer bort.
Att välja det fasta motståndet
Här finns ett riktigt val att göra, och det finns ett rätt svar. Anta att du mätt din LDR med multimetern och fått
| Läge | Uppmätt resistans |
|---|---|
| Skrivbordslampan rakt på | 1,2 kΩ |
| Handen över givaren | 90 kΩ |
Tumregeln är att välja det fasta motståndet som geometriska medelvärdet av givarens två ytterlägen, alltså roten ur produkten:
Rf = √(1 200 · 90 000) = √108 000 000 = 10 392 Ω ≈ 10 kΩ
Varför just det? Räkna igenom tre val i schema A och jämför hur stor del
av skalan givaren hinner utnyttja. Med Rf = 10 kΩ:
ljust: Uut = 5 · 1 200 / 11 200 = 0,54 V → rå = 0,54 · 1023 / 5 = 110
mörkt: Uut = 5 · 90 000 / 100 000 = 4,50 V → rå = 4,50 · 1023 / 5 = 921
spann = 921 − 110 = 811 steg av 1023, alltså 79 %
Med ett för litet fast motstånd, Rf = 1 kΩ:
ljust: 5 · 1 200 / 2 200 = 2,73 V → rå = 558
mörkt: 5 · 90 000 / 91 000 = 4,95 V → rå = 1 012
spann = 1 012 − 558 = 454 steg, alltså 44 %
Med ett för stort, Rf = 100 kΩ:
ljust: 5 · 1 200 / 101 200 = 0,059 V → rå = 12
mörkt: 5 · 90 000 / 190 000 = 2,37 V → rå = 485
spann = 485 − 12 = 473 steg, alltså 46 %
Det geometriska medelvärdet ger nästan dubbelt så stort spann som de båda andra. Ett större spann betyder att varje grad, eller varje steg i ljus, motsvarar fler råvärdessteg – alltså finare upplösning i den storhet du faktiskt bryr dig om. Att just roten ur produkten är det bästa valet går att visa med derivering; de tre räknade fallen ovan räcker som skäl att lita på regeln.
Marginalen på 10 kΩ igen
Kontrollera också att valet inte gör källan för trög för omvandlaren, som
i förra guiden. I
det mörka läget är Rf och Rg parallellt 10 000 · 90 000 / 100 000 =
9 000 Ω, alltså precis på databladets rekommenderade gräns. Det går
bra, men gå inte högre. Ett par tiondels sekunders väntan mellan
avläsningarna hjälper också, och den har du gratis om du ändå läser fyra
gånger i sekunden.
Mäta och tolka råvärdet
Ordningen som gör att du slipper felsöka i blindo:
- Mät givaren ensam med multimetern, i minst två lägen, innan den sitter i en krets. Skriv ned båda talen med enhet. Det är givarens datablad, framtaget av dig, och det är giltigt för just din givare.
- Välj Rf ur de två talen och räkna ut det väntade råvärdet i båda lägena, som ovan.
- Bygg kretsen och läs råvärdet i samma två lägen. Jämför med det du räknade fram.
- Tolka avvikelsen. Några tiotal steg fel är normalt – motståndets tolerans är kanske 1 %, givarens mycket mer, och matningen är inte 5,000 V. Hundratals steg fel, eller ett råvärde som står stilla, är däremot ett kopplingsfel.
Ett litet program som räcker för hela det här steget:
const int GIVARE_PIN = A0;
const unsigned long UTSKRIFTSINTERVALL = 250; // ms mellan raderna
unsigned long forraUtskriften = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
unsigned long nu = millis();
if (nu - forraUtskriften >= UTSKRIFTSINTERVALL) {
forraUtskriften = nu;
int ravarde = analogRead(GIVARE_PIN);
float spanning = ravarde * 5.0 / 1023.0;
Serial.print(ravarde);
Serial.print(" ");
Serial.print(spanning, 2); // tva decimaler racker
Serial.println(" V");
}
}
Två detaljer är värda att stanna vid. 5.0 och
1023.0 skrivs med decimalpunkt, annars räknar C++ hela
uttrycket i heltal och du får 2 där du väntade 2,50 – samma fälla som
kommer tillbaka med full kraft i nästa guide. Och utskriften sker fyra
gånger i sekunden med tidsstämpelmönstret, inte varje varv: en rad per
loopvarv skulle vara tusentals rader i sekunden, och serieporten hinner
inte med.
Givaren mäter sig själv, inte världen En NTC visar sin egen temperatur, inte rummets. Sitter den intryckt mot ditt finger mäter den fingret. Går det ström genom den värmer den upp sig själv – med 10 kΩ över 5 V blir strömmen genom delaren ungefär 0,25 mA och effekten i givaren under en milliwatt, vilket är försumbart, men med hundra gånger mindre motstånd hade det inte varit det. Samma sak gäller LDR:n: den mäter ljuset som träffar just den, inklusive skrivbordslampans reflex i ditt kopplingsdäck.
I industrin och i vardagen
I industrin: temperaturen i en processanläggning mäts nästan alltid med ett Pt100 – en tunn platinatråd med resistansen 100,00 Ω vid 0 °C. Platina är en metall, så resistansen stiger med temperaturen, tvärtemot din NTC, och den gör det nästan rakt: vid 100 °C är motståndet 138,51 Ω, alltså i medeltal
(138,51 − 100) / 100 = 0,385 Ω per grad
Jämför känsligheten relativt givarens eget värde. Pt100:
0,385 / 100 = 0,385 % per grad
NTC:n ur tabellen ovan går från 10,00 kΩ vid 25 °C till 9,57 kΩ vid 26 °C:
(10 000 − 9 570) / 10 000 = 4,3 % per grad
alltså
4,3 / 0,385 = 11 gånger känsligare
Ändå väljer industrin platinan. Skälet är att en Pt100 är utbytbar: alla Pt100 följer samma standardkurva, så en trasig givare kan bytas mot en ny utan att någonting kalibreras om, och mätningen är spårbar till en internationell temperaturskala. En NTC är känsligare och mycket billigare, men två exemplar är inte utbytbara mot varandra utan ny kalibrering. Det är exakt den avvägningen du gör i ditt eget bygge, med den skillnaden att du bara har ett exemplar.
I vardagen: mobilen dimmar sin skärm efter ljuset i rummet. Belysningsstyrkan den ska klara sträcker sig från månsken, ungefär 0,1 lux, till direkt solljus, uppemot 100 000 lux – ett område på
100 000 / 0,1 = 1 000 000 gånger
En miljon till ett. Det finns ingen linjär skala med 1024 steg som rymmer det: ett steg hade behövt vara en tiondels lux i mörker, och då tar talen slut redan vid hundra lux. En LDR löser det av sig själv, eftersom dess resistans faller hopträngt med ljuset – en tiodubbling av belysningen ger ungefär samma faktor i resistansändring var på skalan man än befinner sig. Ett enormt område ryms därmed i få steg, precis som ögat klarar både skymning och solsken.
Mobilens givare är däremot ingen LDR utan en fotodiod, och en fotodiod svarar rakt proportionellt mot ljuset. Hopträngningen måste därför byggas in någon annanstans: kretsen skiftar mellan flera förstärkningslägen, ungefär som att byta mätområde på en multimeter. Anledningen att LDR:n inte används är dessutom en helt annan – den vanliga typen innehåller kadmium och får inte sitta i konsumentprodukter inom EU. I skolkit och i äldre utrustning lever den vidare.
Prova själv
- Mät din LDR med multimetern i tre lägen: lampa rakt på, vanligt rumsljus, handen över. Skriv upp alla tre med enhet. Gör samma sak med NTC:n: rumstemperatur, mellan fingrarna, mot något kallt.
- Räkna ut det geometriska medelvärdet av dina två ytterlägen och välj det närmaste motståndet du har i sortimentet. Skriv ned vilket du valde och varför.
- Bygg schema A med din LDR och skriv ut råvärdet fyra gånger i sekunden med programmet ovan. Notera talet i dina tre ljuslägen.
- Koppla om till schema B. Förutsäg först vad som händer med talen, och kontrollera sedan. Talen ska nu gå åt motsatt håll och ligga ungefär symmetriskt kring mitten jämfört med förra mätningen.
- Byt Rf mot ett tio gånger större motstånd. Mät ytterlägena igen och räkna ut hur många steg spannet krympte. Jämför med räkneexemplen ovan.
- Håll NTC:n mellan tumme och pekfinger i en halv minut och titta på råvärdet under tiden. Släpp och titta igen. Hur lång tid tar det innan talet är tillbaka? Den tiden är givarens tröghet, och den är en egenskap hos ditt bygge som du ska kunna nämna i dokumentationen.
Kontrollfrågor
Åt vilket håll går en LDR:s resistans när det blir mörkare, och åt vilket håll går en NTC:s när det blir kallare?
Båda uppåt. Mindre ljus och lägre temperatur betyder färre fria laddningsbärare i halvledaren, alltså högre resistans. Det är samma mekanism i två förklädnader.
Din NTC sitter underst i delaren, mot jord, med ett fast motstånd överst. Rummet blir varmare. Går råvärdet upp eller ned?
Ned. Varmare ger lägre resistans i NTC:n, alltså en mindre andel av resistansen och därmed en mindre andel av spänningen över den. Det är schema A i figuren ovan.
Din givare mäter mellan 2 kΩ och 50 kΩ. Vilket fast motstånd väljer du?
√(2 000 · 50 000) = √100 000 000 = 10 000 Ω, alltså
10 kΩ. Att den kvadratroten går jämnt ut är en tillfällighet – hade
ytterlägena varit 2 kΩ och 60 kΩ hade svaret blivit
√120 000 000 = 10 954 Ω, och då väljer du det
närmaste sortimentet har, till exempel 10 kΩ eller 12 kΩ.
Varför är NTC:ns kurva inte en rät linje, och gör det något?
Antalet fria laddningsbärare i halvledaren växer ungefär exponentiellt med temperaturen, inte proportionellt. Följden syns i tabellen: tio grader kostar 4,5 kΩ kring 25 °C men bara 1,7 kΩ kring 45 °C. Det gör inget så länge du kalibrerar inom det område du ska mäta i – en kurva är nästan rak om man bara tittar på en kort bit av den.
Du har kopplat LDR:n mellan 5 V och A0, utan något mer. Vad läser du?
Ett tal nära 1023, oavsett ljus. Utan ett motstånd ned till jord finns ingen delning – pinnen dras bara mot 5 V. Delaren behöver båda halvorna, och den halvan är den som glöms bort oftast.
Varför lämnar en motståndsgivare ingen signal i sig själv?
Därför att resistans inte är någonting som går att mäta genom att titta på en ledning. Det som finns att mäta på en pinne är en spänning, och spänning uppstår först när en ström går genom motståndet. Delaren gör precis det: den skickar en känd, liten ström genom givaren och gör resistansändringen till en spänningsändring.
Vanliga fel
- Ett tal ur en guide skrivs in i koden. "LDR:n är 10 kΩ i mörker" gäller någon annans givare. Ditt program ska bygga på tal du mätt upp själv, annars är kalibreringen en gissning i finare kläder.
- Råvärdet står nära 1023 hela tiden. Det fasta motståndet ned till jord saknas, eller sitter i fel hål. Följ ledningen från A0 hela vägen till GND.
- Råvärdet ändrar sig bara några steg. Det fasta motståndet är fel valt – oftast alldeles för litet eller för stort mot givarens område. Mät givarens ytterlägen och räkna om det geometriska medelvärdet.
- Spänningen räknas ut med heltal.
ravarde * 5 / 1023ger 0, 1, 2, 3 eller 4 och ingenting däremellan, eftersom alla tre talen är heltal. Skriv5.0och1023.0. - NTC:n mäter din hand. Den sitter fastklämd, eller alldeles intill spänningsregulatorn på kortet, som blir varm. En givare mäter sin egen omgivning och ingenting annat.
- LDR:n mäter kortets egen lysdiod. Den inbyggda lysdioden på pinne 13, eller en indikator du själv satt dit, kan lysa rakt in i givaren. Symtomet är ett råvärde som ändrar sig i takt med att något blinkar.
- Givaren sitter i A0 men koden läser A1. De sex analoga pinnarna ligger tätt och är lätta att förväxla. Kontrollera den raden innan du misstänker något annat.
Vidare
Kapitlet Typer och variabler i språkreferensen hör till den här guiden, särskilt avsnittet om varför heltalsräkning kapar decimalerna. Det felet dyker upp igen i nästa guide, i en form som är svårare att upptäcka.
Nästa guide är Kalibrering. Nu när du har ett råvärde som rör sig åt rätt håll ska det bli ett tal med en enhet – och där öppnar också loopen, arrayen och den första egna funktionen.