Nachdem ich euch in “Blink” eine kleine Einführung in den Arduino gegeben habe wollte ich mich jetzt mal an etwas “sinnvolleren” versuchen.
Einem Thermometer!
Naja, zumindest so sinvoll wie ein Thermomter ohne Display sein kann…
Mit diesem kleinen Tutorial lernt man wie man einen Analogen Input ausliest, wie man einen Spannungsteiler baut und wie man eine Funktion schreibt.
Viel Stoff also. An die Arbeit!
Wir brauchen:
- Einen Arduino, z.Bsp.: Duemilanove
- Ein Steckbrett (Breadboard)
- Einen NTC Wiederstand mit 4,7 kOhm
- Einen Wiederstand mit 4,7 kOhm
Um ein Thermometer zu bauen, brauchen wir natürlich einen Sensor der die Temperatur misst. Die günstigte Variante ist ein temperaturabhäniger Wiederstand. Diese gibt es in zwei Geschmacksrichtungen: Heißleiter und Kaltleiter. Bei einem Heißleiter sinkt der Wiederstand mit zunehmender Temperatur, bei einem kaltleiter Steigt der Wiederstand wenn es Wärmer wird. Mehr infos findet ihr dazu in der Wikipedia (link).
Nun zum Arduino.
Der Arduino Duemillanove hat 6 analoge Ports. Diese wind mit 0 bis 5 durchnummeriert. Ihr findet Sie auf der Unteren rechten Ecke des Boards wenn der USB Anschluss nach Links zeigt.
Diese Anschlüsse messen die eine Spannung bis zu 5v die an dem Port anliegt und rechen diese In einen Wert zwischen 0 und 1023 um. Über die Funktion analogRead(0); kann man sich nun diesen Wert ausgeben lassen.
Um die Temperatur zu messen benötigen wir den Thermistor. Wie gesagt, bei diesem ändert sich der Wiederstand in Abhängigkeit zu Temperatur. Der Erste Gedanke wäre nun vielleicht einfach den Thermristor zwischen 5v und A0 anzuschließen. Klappt nur leider nicht. NAch dem Ohmschen Gesetzt änder sich durch den Wiederstand nicht die Spannung, sondern nur die Stromstärke.
Wenn wir nun die Spannung messen wollen müssen wir uns mit zwei Wiederständen einen Spannungsteiler aufbauen:
![]()
Die Spannung würde sich nun zwischen den Wiederständen R1 und R2 aufteilen. Und zwar nach dem Verhältniss der Wiederstände zu einander. Wenn nun bei einer Spannung U von 5V R1 und R2 beide 4,7kOhm haben, würde U1 2,5V entsprechen. Und dies bauen wir nun mit dem Thermistor und unserem Wiederstand auf. Dazu verbinden wir 5v und A0 mit dem Thermistor und A0 und GND mit dem 4,7KOhm Wiederstand.
Soweit so gut. Nun ist es Zeit für einen Ersten Test. Dafür wollen wir nur den Wert von analogRead(0) auslesen und auf der seriellen Schnittstelle ausgeben.
Wenn wir dieses Progrämmchen nun auf den Arduino laden sehen wir in der Seriellen Ausgabe Werte zwischen 0 und 1023. Schonn wenn wir einfach den Thermistor zwischen den Fingern festhalten sinkt die Zahl, sobald wir loslassen oder kühlen steigt Sie wieder an.
/*************************************************************************
* Thermometer
* Einfache Ausgabe eines des Wertes eines NTC auf Serial
* Autor: Torsten Dillenburg
*************************************************************************/
#include
float temperatur =0; //Variable zum Zwischenspeichern der Temperatur
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println(analogRead(0));
delay(1000);
}
Nun hilft uns die Zahl ja nicht wirklich weiter. Wir wollen ja eine Temperatur Grad Celsius auslesen. Dafür könnten wir jetzt eine lange Messreihe machen und 1024 Termperaturwerte experimentell ermitteln und dann in eine Tabelle eintragen.
Leichter geht es jedoch mit der “Steinhart-Hart Gleichung” (Link zu englischen Wikipedia).
![]()
T ist hier die Temperatur in Kelvin, R der Wiederstand und A,B und C sind der Steinhard-Hard Koeffizent. Den Koefizent können wir nun aus dem Datenblatt des Termistors entnehmen. Zusammen mit der URI Formel könen wir dann aus der Spannung den Wiederstand erechnen. Zum Glück liegt auf dem Kreislauf ja keine Last, somit können wir uns U sparen. Somit kommen wir mit der Formel
den aktuellen Gesamtwiederstand des Spannungsteilers. Davon müssen wir nun nur den Wiederstand von R2 abziehen und schon haben wir den Wiederstand des Thermristors.
Und aus dem Wiederstand Kommen wir nun auf die Temperatur (in Kelvin!)
/*************************************************************************
* Thermometer
* Einfache Ausgabe eines des Wertes eines NTC auf Serial
* Autor: Torsten Dillenburg
*************************************************************************/
#include <math.h>
float temperatur =0; //Variable zum Zwischenspeichern der Temperatur
void setup()
{
Serial.begin(9600);
}
void loop()
{
temperatur = temp(analogRead(0));
Serial.println(temperatur);
Serial.println(analogRead(0));
delay(1000);
}
float temp(int rawadc)
// Hilfsfunktion zur Umrechnung auf Grad Celsius
{
int r1 = 4700; // Wert des Festen Wiederstandes des sabbungsteiler
int r2 = 4700; // Wiederstand des Thermristors bei 25grad
int b = 3950; // Fixwert aus Datenblatt
float r_akt; // Aktueller Wiederstand
float temp; //Temporäre Variable
float ergebnis; //
float tn = 25; //Basistemperatur in Grad Celsius
// Wiederstand Therm ausrechnen
//Widerstand auf Temperatur umrechnen
tn = tn+273.15; // Basitemperatur auf Kelvin umrechnen
r_akt = ((4.64/(4.64/1023*rawadc))*r1)-r2; //Aktuellen Widerstand ermitteln
temp = b*tn/(b+log10((r_akt/r2))*tn);
temp = temp - 273.15; //Ergebnis in Grad Celsius umwandeln
ergebnis =temp;
return ergebnis;
}
ende