Thermometer mit Arduino

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

  • Jane D.

    Ich denke, das Hilft mir bei meinem Projekt für die Uni weiter :) Weiter so mit dem Blog! 

  • Komstantin-schoensee

    Was muss man noch tun das die Werte getwittert werden und das ganze sollte noch über Funk so 30 Meter funktioniren

    Würde mich über Anregungen freuen

    • Anonymous

      Das kommt drauf an.
      Man kann das über ein Ethernet shield und einem Dienst wie “Supertweet” lösen. Wenn es per funk gehen soll kann man dann Entweder ein Wifi Shield einbauen oder eine Ethernet Wlan Bridge nehmen oder das ganze mittels eines zweiten Arduino und xbee’s machen.
      Sowas ähnliches habe ich mal mit einem mbed und pachube gemacht: xbeeTest http://mbed.org/users/Torsten/notebook/xbeetest/

  • ButterAufBrot

    Erst einmal vielen Dank für die Anleitung, leider hab ich eine Frage:

    Ich habe mir bei Conrad einen 4,7 kOhm Wiederstand gekauft und einen 4,7kOhm Heißleiter. Nun habe ich, wie du ja auch in deiner Anleitung schreibst 5V über den Heißleiter mit meinem AnalogInput-pin verbunden und diesen Pin dann über den 4,7kOhm Wiederstand mit dem Gnd. Sobald ich das ganze jedoch an den PC anschließe wird der normale Wieederstand extrem heiß und die (zum Glück) vorgeschaltete Sicherung ebenfalls. Die Folge scheint eine Art Kurzschluss zu sein. Warum?? Anbei ein Foto meines Heißleiters, ich bedanke mich jetzt schon für die hoffentlich kommende Hilfe.

  • Moko

    Widerstand mit “ie” tut weh beim lesen ;)

  • Totto

    Hallo…
    wozu benutzt du in der Formel r_akt den Wert 4,64…bzw. wo kommt diese Zahl her?