Ikea Besta deel 2.1: Temperatuur meten

Om de temperatuur in de kast te kunnen regelen is het wel handig om eerst te kunnen ‘zien’ hoe warm het daadwerkelijk is. Om dat voor elkaar te krijgen ga ik een NTC thermistor gebruiken. Je ziet er een in de afbeelding boven deze post. NTC… dat klinkt al heel stoer maar het is eigenlijk niet zo spannend. Het woord thermistor is een samentrekking van de woorden “thermal” en “resistor”. Een thermische weerstand dus. Daarbij staat NTC voor Negatief Temperatuur Coefficient. Dat wil zeggen: hoe hoger de temperatuur, des te lager de weerstand. De NTC die ik ga gebruiken is van het type NJ28NA0103H. De datasheet vind je hieronder.

ntc-technisch-datasheet-1

Top. En nu? Want ik zie geen grafiekje met een vertaling van weerstand naar temperatuur. Wat Googlen leerde me dat zo’n grafiekje er ook niet bij hoeft; alles wat ik nodig heb staat op die pagina. Er bestaat namelijk zoiets als een “B parameter equation“. Die ziet er als volgt uit:

\frac{1}{T} = \frac{1}{T_0} + \frac{1}{B}ln(\frac{R}{R_0})

Voor de parameters vinden we de volgende waarden terug in de datasheet:

T_0 = 25^oC = 297.14K\\  B = 4100\\  R_2 = 10k\Omega

Waarbij T uiteraard is uitgedrukt in Kelvin. De resulterende formule voor deze NTC wordt dus:

T = \frac{1}{\frac{1}{297.14} + \frac{1}{4100}ln(\frac{R}{10000})}

Weerstand meten

De volgende uitdaging is natuurlijk hoe je de weerstand bepaalt van een NTC in een schakeling. En dan liefst zo dat de analoge poort van een microcontroller er ook wat mee kan. Om te testen kun je er natuurlijk een multimeter aan hangen maar in de uiteindelijke toepassing is dat wat onpraktisch. ‘tuurlijk, je kunt er camera boven hangen en met behulp van beeldherkenning een waarde aflezen – en dat is nog best een leuk project ook – maar om twee NTC’s zo uit te lezen wordt op zijn minst kostbaar. De uiteindelijke oplossing is vrij elementair; gebruik een spanningsdeler en sluit de uitgangsspanning aan op de analoge input. Zoiets als dit:

NTC_schema_deler

De relatie tussen de uitgangsspanning en de ingangsspanning wordt als volgt omschreven:

V_A = V_{cc} \frac{R_2}{R_1 + R_2}

Die formule kun je trouwens met behulp van de wetten van Ohm en Kirchhoff ook zelf afleiden. Feitelijk bereken je de spanning over R_2.

Normaliter gebruik je deze schakeling om een bepaalde spanning naar een lager niveau te brengen. In dit geval gebruiken we die kennis om de waarde van een van de weerstanden te bepalen. Immers, als we alle andere waarden kennen – en dat doen we – dan blijft er 1 onbekende over in de formule die we daarmee kunnen berekenen.

Dan is het het nog zaak om de formule om te schrijven naar R_1 of R_2:

V_A = V_{cc} \frac{R_2}{R_1 + R_2}

\frac{V_A}{V_{cc}} = \frac{R_2}{R_1 + R_2}

\frac{V_{cc}}{V_A} = \frac{R_1 + R_2}{R_2} = \frac{R_1}{R_2} + 1

\frac{R_1}{R_2} = \frac{V_{cc}}{V_A} - 1

Op dit punt besluit ik om op te lossen voor R_1. Gewoon omdat dat wat beter uitkomt.

R_1 = R_2 (\frac{V_{cc}}{V_A} - 1)

Dat heeft als gevolg dat de NTC in de bovenste tak van de deler komt en de bekende weerstand in de onderste, dus :

R_{ntc} = R (\frac{V_{cc}}{V_A} - 1)

Die bekende weerstand kies ik gelijk aan R0 van de NTC dus op 10k. Zo heb ik de kamertemperatuur in het midden van mijn bandbreedte.

Beide formules kunnen in één worden samengevoegd:

\frac{1}{T} = \frac{1}{T_0} + \frac{1}{B}ln(\frac{R (\frac{V_{cc}}{V_A} - 1)}{R_0})

Aangezien R = R_0:

T = \frac{1}{\frac{1}{T_0} + \frac{1}{B}ln(\frac{V_{cc}}{V_A} - 1)}

Grafisch met V_A als variabele ziet dat er zo uit:

R versus T

Merk daarbij op dat de x-as niet in volt is maar in de ADC waarde die van 0 tot 1023 loopt. Daarnaast heb ik de graden Kelvin opgeschaald naar Celsius. Ik heb ingezoomd op het voor mij interessante gebied; als het vriest of warmer is dan 70 graden ga ik het toch niet oplossen met een paar ventilatortjes…

Omdat een microcontroller niet echt geschikt is om logaritmische formules te berekenen wordt de bovenstaande grafiek vaak geïmplementeerd met een LUT: een lijst met vaste waarden, in het engels een Look Up Table. Het valt mij wel op dat het meest interessante bereik aardig lineair is:

Analog versus Temperature

Mijn idee achter de regelaar is namelijk dat onder de 25 de ventilatoren zeker uit mogen staan. Boven de 40 graden zullen de ventilatoren waarschijnlijk 100% moeten gaan draaien om zo snel mogelijk binnen acceptabele waarden te komen. Als ik dan het verschil tussen het werkelijke verloop (rood) en mijn handmatig gefitte lijn (zwart) vergelijk kom ik op het volgende verschilplaatje uit:

save

Dat is dus helemaal prima: een puntsgewijs verschil van 0.3 graden en een bereik van ongeveer 0.6. Dat is een afwijking waar ik mee kan leven. In plaats van een LUT ga ik dus voor een simpele formule waar x de waarde van de ADC is:

T(x) = 0.091x - 21.5, \quad 460 \leq x \leq 650

Validatie

Uiteindelijk is zo’n theoretische benadering allemaal leuk en aardig,  maar als het in de praktijk niet klopt heb je er nog niets aan! Daarom heb ik wat metingen gedaan met een thermometer. Het bereik van die ‘validatie’  thermometer is 32°C – 43,9°C. Redelijk binnen het bereik van de banaderingsformule. Misschien had je het al geraden: ik gebruik een koortsthermometer.

Resultaten volgen binnenkort.

Recent Posts

Recent Comments

Archives

Categories

Meta

nebula Written by:

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *