Sensor – NTC/PTC – Temperatuur sensor
Hardware
Een NTC-weerstand is een weerstand met een negatieve temperatuurcoëfficiënt. Dit betekent dat de elektrische weerstand afneemt als de temperatuur toeneemt.
De NTC kan gebruikt worden als sensor voor een weerstandsthermometer, waarbij de niet-lineaire karakteristiek gecompenseerd dient te worden voor een voldoende nauwkeurige meting. Het meetbereik is niet bijster groot, gewoonlijk van -40 tot 150 °C, maar voor huis-, tuin- en keukentoepassingen kan het voldoen
De NTC is een halfgeleider-component. Het materiaal is gewoonlijk een metaaloxide, waaraan sporen van metaaloxiden met een andere valentie zijn toegevoegd. Vaak zijn de NTC’s uitgevoerd in een schijfvorm met de twee parallelle aansluitdraden in het vlak van de schijf. Soms is de uitvoering zwaarder, van metaal en met een stukje draadeind eraan om een betrouwbare bevestiging (thermisch contact) op een koelplaat mogelijk te maken
Bron: Wiki
Een PTC/NTC weerstand kan je doormiddel van een spanningsbrug uitlezen.
Steinhart-Hart berekening
T = de temperatuur (in kelvin)
R = de weerstand op T (in ohm)
A, B, and C zijn de Steinhart-Hart coëfficiënten
De coëfficiënten worden vaak door de fabrikant van deze weerstand aangeleverd, heb je deze niet, dan is er een mogelijkheid om deze uit te rekenen.
Steinhart-Hart berekening:
– Internet, http://www.thermistor.com
– Excel sheet: zie onderaan deze pagina
Hoe kom je aan 3 temperaturen en waarden?, pak een multimeter en zet deze op de ohm stand (niet te laag)
1) Temperatuur laag: plaats de weerstand in de koelkast (meestal is deze 7 graden, anders lees de thermostaat af), meet de ohmse waarde.
2) Temperatuur gemiddeld: plaats de weerstand in de huiskamer (meestal is deze 20 graden, anders lees de thermostaat af), meet de ohmse waarde.
3) Temperatuur hoog: houd de weerstand tussen duim en vinger (dit is meestal rond de 34 graden), meet de ohmse waarde.
Pinout
GEEN GEGEVENS
Arduino
Sluit de sensor aan volgens onderstaand overzicht:
-
Script met bibliotheek
Wat heb je nodig?
1) Arduino Thermistor bibliotheek
Ps. Deze bibliotheek is specifiek geschreven voor 10Kohm sensoren
Onderstaand script leest een NTC-3470 sensor uit en geeft het aantal graden weer via de seriële console.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <Thermistor.h> Thermistor temp(0); // Weerstand aangesloten op Analoge ingang 0 void setup() { Serial.begin(9600); // Start de seriele poort op 9600 baud. } void loop() { int temperature = temp.getTemp(); // Lees de weerstand uit Serial.print("Temperatuur: "); Serial.print(temperature); Serial.println("*C"); delay(1000); } |
Meer informatie garagelab.com / hacktronics.com
- Script met Steinhart-Hart berekening
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
int RtempPin = A2; // selecteer de analoge ingang van de PTC/NTC. int RtempGegevens = 0; // variable om gegevens op de slaan. float Rparallel = 10000; // aantal ohms van de weerstand die parallel staat. // coefficienten voor de steinhart-Hart berekening. float coefficientA = 0.001129148; // standaard = 0.001129148 float coefficientB = 0.000234125; // standaard = 0.000234125 float coefficientC = 0.0000000876741; // standaard = 0.0000000876741 void setup() { pinMode(RtempPin, INPUT); // zet pinmode voor ontvangen (input) Serial.begin(9600); } void loop() { RtempGegevens = analogRead(RtempPin); // lees de waarde van de sensor Serial.print("Gemeten waarde: "); Serial.print(RtempGegevens); Serial.print(" ("); Serial.print(int(Thermister(RtempGegevens))); Serial.println(" graden)"); delay(500); // wacht een halve seconde } double Thermister(int RawADC) { // functie met steinhart-Hart berekening double Temp; Temp = log(((1024*Rparallel / RawADC) - Rparallel)); Temp = 1 / (coefficientA + (coefficientB * Temp) + (coefficientC * Temp * Temp * Temp)); int TempKelvin = Temp; int TempCelcius = TempKelvin - 273.15; // converteer Kelvin naar Celcius int TempFarenheit = (TempCelcius * 9.0)/ 5.0 + 32.0; // converteer Celcius naar Fahrenheit return TempCelcius; // of TempKelvin, TempFarenheit } |
Als je nu via de Arduino software de “serial monitor” opent, is dit het resultaat:
Arduino Library
Installatie van Arduino IDE libraries: Arduino info
Deze bibliotheek geeft ondersteuning om NTC weerstanden uit te lezen met behulp van de Steinhart-Hart berekening.
- Arduino library - Thermistor.7z 1,38 kb
Raspberry Pi
Uitlezen op de Raspberry Pi met behulp van de MCP3008 chip.
Sluit de sensor aan zoals aangegeven op onderstaand schema:
Script: NTC uitlezen (steinhart-hart coeficient)
Met onderstaand python script kun je de NTC uitlezen via de MCP3008:
Ps. pas de eventuele coeficienten aan die voor jou situatie gelden, meer info hier.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#!/usr/bin/python import spidev import time import math from time import strftime import string spi = spidev.SpiDev() spi.open(0, 0) def readadc(adcnum): if adcnum > 7 or adcnum < 0: return -1 r = spi.xfer2([1, 8 + adcnum << 4, 0]) adcout = ((r[1] & 3) << 8) + r[2] return adcout def temp_get(adc): value = readadc(adc) #read the adc volts = (value * 3.3) / 1024 #calculate the voltage ohms = ((1/volts)*3300)-1000 #calculate the ohms of the thermististor lnohm = math.log1p(ohms) #take ln(ohms) #a, b, & c values from http://www.thermistor.com/calculators.php #using curve R (-6.2%/C @ 25C) Mil Ratio X a = 0.002197222470870 b = 0.000161097632222 c = 0.000000125008328 #Steinhart Hart Equation # T = 1/(a + b[ln(ohm)] + c[ln(ohm)]^3) t1 = (b*lnohm) # b[ln(ohm)] c2 = c*lnohm # c[ln(ohm)] t2 = math.pow(c2,3) # c[ln(ohm)]^3 temp = 1/(a + t1 + t2) #calculate temperature tempc = temp - 273.15 - 4 #K to C # the -4 is error correction for bad python math print ("%4d/1023 => %5.3f V => %4.1f Ohm => %4.1f K => %4.1f C from adc %d" % (value, volts, ohms, temp, tempc, adc)) return tempc while True: temp_get(0) time.sleep(1) |
Start het script met: sudo python ntc.py , druk op CTRL+C om het script te stoppen!
Dit is de output in de console:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
460/1023 => 1.482 V => 1226.1 Ohm => 299.1 K => 22.0 C from adc 0 459/1023 => 1.479 V => 1230.9 Ohm => 299.1 K => 21.9 C from adc 0 459/1023 => 1.479 V => 1230.9 Ohm => 299.1 K => 21.9 C from adc 0 460/1023 => 1.482 V => 1226.1 Ohm => 299.1 K => 22.0 C from adc 0 458/1023 => 1.476 V => 1235.8 Ohm => 299.0 K => 21.9 C from adc 0 458/1023 => 1.476 V => 1235.8 Ohm => 299.0 K => 21.9 C from adc 0 457/1023 => 1.473 V => 1240.7 Ohm => 299.0 K => 21.8 C from adc 0 456/1023 => 1.470 V => 1245.6 Ohm => 298.9 K => 21.8 C from adc 0 456/1023 => 1.470 V => 1245.6 Ohm => 298.9 K => 21.8 C from adc 0 455/1023 => 1.466 V => 1250.5 Ohm => 298.8 K => 21.7 C from adc 0 456/1023 => 1.470 V => 1245.6 Ohm => 298.9 K => 21.8 C from adc 0 455/1023 => 1.466 V => 1250.5 Ohm => 298.8 K => 21.7 C from adc 0 455/1023 => 1.466 V => 1250.5 Ohm => 298.8 K => 21.7 C from adc 0 454/1023 => 1.463 V => 1255.5 Ohm => 298.8 K => 21.6 C from adc 0 455/1023 => 1.466 V => 1250.5 Ohm => 298.8 K => 21.7 C from adc 0 458/1023 => 1.476 V => 1235.8 Ohm => 299.0 K => 21.9 C from adc 0 474/1023 => 1.528 V => 1160.3 Ohm => 299.9 K => 22.8 C from adc 0 491/1023 => 1.582 V => 1085.5 Ohm => 300.9 K => 23.7 C from adc 0 499/1023 => 1.608 V => 1052.1 Ohm => 301.4 K => 24.2 C from adc 0 514/1023 => 1.656 V => 992.2 Ohm => 302.2 K => 25.1 C from adc 0 520/1023 => 1.676 V => 969.2 Ohm => 302.6 K => 25.4 C from adc 0 535/1023 => 1.724 V => 914.0 Ohm => 303.4 K => 26.3 C from adc 0 538/1023 => 1.734 V => 903.3 Ohm => 303.6 K => 26.4 C from adc 0 547/1023 => 1.763 V => 872.0 Ohm => 304.1 K => 27.0 C from adc 0 552/1023 => 1.779 V => 855.1 Ohm => 304.4 K => 27.3 C from adc 0 |
Bron:
paulschow.com
ESP8266
Aansluiten op de ESP-12 module
Sluit de sensor aan volgens onderstaand schema:
Script: NTC uitlezen (steinhart-hart coeficient)
Wat heb je nodig?
1) ArduinoIDE software
2) ESP8266 ArduinoIDE board/omgeving
3) Arduino MCP3008 bibliotheek
4) Een weerstand 10K ohm (afhankelijk van je NTC waarde)
Met onderstaande script kun je de NTC uitlezen via de MCP3008:
Ps. pas de eventuele coeficienten aan die voor jou situatie gelden, meer info hier.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#include <MCP3008.h> // MCP3008 pin configuratie #define CLOCK_PIN 2 #define MISO_PIN 5 #define MOSI_PIN 4 #define CS_PIN 14 int RtempGegevens = 0; // variable om gegevens op de slaan. float Rparallel = 10000; // aantal ohms van de weerstand die parallel staat. // coefficienten voor de steinhart-Hart berekening. float coefficientA = 0.001129148; // standaard = 0.001129148 float coefficientB = 0.000234125; // standaard = 0.000234125 float coefficientC = 0.0000000876741; // standaard = 0.0000000876741 MCP3008 adc(CLOCK_PIN, MOSI_PIN, MISO_PIN, CS_PIN); // configureer de MCP3008 constructor. void setup() { Serial.begin(9600); // open de seriele poort. } void loop() { RtempGegevens = adc.readADC(0); // lees kanaal 1 van de MCP3008 ADC. Serial.print("Gemeten waarde: "); Serial.print(RtempGegevens); Serial.print(" ("); Serial.print(int(Thermister(RtempGegevens))); Serial.println(" graden)"); delay(500); // wacht een halve seconde } double Thermister(int RawADC) { // functie met steinhart-Hart berekening double Temp; Temp = log(((1024*Rparallel / RawADC) - Rparallel)); Temp = 1 / (coefficientA + (coefficientB * Temp) + (coefficientC * Temp * Temp * Temp)); int TempKelvin = Temp; int TempCelcius = TempKelvin - 273.15; // converteer Kelvin naar Celcius int TempFarenheit = (TempCelcius * 9.0)/ 5.0 + 32.0; // converteer Celcius naar Fahrenheit return TempCelcius; // of TempKelvin, TempFarenheit } |
Afmetingen
GEEN GEGEVENS
Schema
GEEN GEGEVENS
Teardown
GEEN GEGEVENS
Datasheet
Fritzing
GEEN GEGEVENS
Downloads
- steinharthart_coefficients_excel.7z 41,33 kb