Temperaturmessung mit Thermistoren am Multi Function Shield

Das Multi Function Shield, das ich ja bereits vorgestellt habe und das mittlerweile ja auch um einen Drehgeber erweitert wurde, bietet mit der Möglichkeit zur einfachen Anzeige von Daten auf seinem 4-fach-7-Segment-Display und den freien Anschlusspins eine gute Grundlage, Sensoren ausprobieren.

In meiner 37-in-one-Sensoren-Bulk-Sammlung finden sich auch zwei Module mit kleinen schwarzen "Popeln" an Anschlussleitungen. Natürlich fehlten wieder die Modulbezeichnungen, aber die konnte ich noch ausmachen, da ich gleich erkannte, dass es sich bei den "Popeln" um Thermistoren handelt.

Hardware: Thermistoren-Module


Die im Foto abgebildeten Thermistor-Module sind links das KY-013 und das zweite von links das KY-028. Rechts daneben ein einzelner Thermistor, wie er auch auf den Modulen verbaut ist und ganz rechts ein Thermistor anderer Bauart, ein grüner TTC 123, zu dem es auch Datenblätter zu finden gibt, der aber teurer und schwieriger zu beschaffen ist.

Auf den Modulen befindet sich außer dem Thermistor auch noch ein Widerstand, um so ein Spannungsteilungsschaltung mit zwei Widerständen (hier am Beispiel eines Fotowiderstands erläutert) zu realisieren. Der verlötete Widerstand ist dabei der feste und der Thermistor der (je nach Temperatur) variable, was eine temperaturabhängige Spannung am Analogeingang des Arduino ergibt, die wir messen und auswerten können.

Das große Modul verfügt, wie so viele Module dieses Sets, wieder über einen LM393-Komparator und ein Poti (blau). Mit dem Poti kann der Vergleichswiderstand eingestellt werden, den der analoge Ausgang an A0 erreichen muss, um den Digitalausgang D0 durchzuschalten. Der LM393 vergleicht dabei ständig die Widerstände von Poti und Thermistor und schaltet entsprechend. So kann man z. B. ab einer bestimmten Temperatur einen Lüfter einschalten, größere natürlich über ein nachgeschaltetes Relais mit eigener Versorgungsspannung.

Für unsere Temperaturmessung mit Anzeige auf dem 7-Segment-Display des Multi Function Shields reicht allerdings das kleine Modul oder auch ein einzelner Thermistor und ein Widerstand auf deinem Breadboard.

Thermistoren und wie man die ausgelesenen Werte zu einer Temperatur umrechnet, habe ich schon im Zusammenhang mit dem Raspberry Pi vorgestellt.

Die dort beschriebene Formel für Heißleiter gilt auch für den Einsatz am Arduino t = 1/ (1/tn + 1/b*log(rt/rn)) gradC = t-273.15 wobei gilt:
Leider gibt es kein Datenblatt zu den Thermistoren Marke "schwarzer Popel", der wir die Materialkonstante b entnehmen könnten und so müssen wir b selbst ermitteln. Am besten geht das, indem wir Für meinen Thermistor hat sich eine Materialkonstante von 1700 bewährt. Für ein wenig Feintuning kann man diese Zahl im Code noch verändern. Thermistoren unterliegen immer einer gewissen Abweichung. Keiner gleicht exakt dem Anderen.

Die drei Anschlüsse des KY-013-Moduls (von oben nach unten, Vorderseite oben, Pins rechts) sind : Diese schließen wir an die untere Reihe der 4x3-Headermatrix auf dem MFS an, GND an GND, +5V an +5V und Data an A5.

Dann noch das unterstehenden Programm auf den Arduino laden und wir können schon mit dem Temperaturmessen loslegen:



Und das zugehörige Programm ist folgendes:

Source-Code

//////////////////////////////////////////////////////// // (C) 2019 by Oliver Kuhlemann // // Bei Verwendung freue ich mich über Namensnennung, // // Quellenangabe und Verlinkung // // Quelle: http://cool-web.de/arduino/ // //////////////////////////////////////////////////////// #include <TimerOne.h> // für Timings und Interrupts #include <MultiFuncShield.h> // API für das Multi Function Shield #define PinData A5 // wo ist Analog Out angeschlossen? void setup() { Timer1.initialize(); MFS.initialize(&Timer1); // initialize multi-function shield library pinMode (PinData, INPUT); //Serial.begin (115200); } void loop() { MFS.beep(1, 5, 2); // bereit float rt; float rn = 511.; // Nennwiderstand bei 25°C float tn = 298.15; // Nenntemperatur (meist 25 °C, das heißt 298.15 K) float b=1700.; // Materialkonstante aus Datenblatt. Sie liegt etwa zwischen 1000 und 5000 K // für die kleinen schwarzen Popel auf dem KY-013 ca. 1700 float t; // Temperatur in Kelvin float gradC; // Temperatur in Grad Celsius while (1) { rt=analogRead(PinData); t=1/(1/tn+1/b*log(rt/rn)); gradC=t-273.15; MFS.write (gradC); delay(500); } }