Nr.10 – Temperatur messen mit dem LM35

Inhaltsverzeichnis

Mit den Temperatursensor LM35 soll die Temperatur ausgelesen und mit dem serial-monitor angezeigt werden

Der Sensor hat drei Anschlüsse. Der rote Kontakt 5V, der schwarze GND und der gelbe ist der Kontakt für das Temperatursignal. An diesem Kontakt gibt der Sensor eine Spannung zwischen 0 und 1,5 Volt aus. Wobei 0V 0 °C entsprechen und der Wert 1,5V entspricht 150 °C.  Die Spannung dieses Pins muss vom Mikrocontroller-Board ausgelesen und in einen Temperaturwert umgerechnet werden.
Das Besondere an diesem Temperatursensor ist seine wasserdichte Eigenschaft. Somit kann mit dem LM35 die Temperatur von Flüssigkeiten gemessen werden.

Bei dem Aufbau sollte nach Möglichkeit eine externe Stromversorgung verwendet werden, da dies die Sensorgenauigkeit wesentlich verbessert (9V Netzteil oder 9V-Batterie).

Aufbau mit einem Schraubklemmenshield für UNO R3 Controller

Temperaturmessung von Wasser mit LM35 und Arduino UNO R3

Für diesen Sketch wird der „map“ Befehl benötigt. Dieser Befehl befindet sich in der Zeile: „temperatur= map(analogRead(LM35), 0, 307, 0, 150);“

Anhand der allgemeinen Schreibweise „map (a, b, c, d, e)“ lässt sich die Funktion besser beschreiben. Ein Wert „a“ (beispielsweise ein Messwert) wird in einem bestimmten Zahlenbereich zwischen den zwei Werten (b) und (c) erwartet. Der „map“ Befehl wandelt dann den Wert „a“ in einen anderen Wert um, der dem Zahlenbereich zwischen „d“ und „e“ entspricht.

In unserem Sketch passiert dabei Folgendes:

Der Temperatursensor LM35 gibt an dem gelben Kontakt den Messwert für die Temperatur in Form einer Spannung zwischen 0V und 1,5V aus. Dieser Spannungsbereich entspricht dem messbaren Temperaturbereich von 0 °C bis +150 °C. Am analogen Eingangspin des Arduino Mikrocontrollerboards wird dieser Spannungsbereich mithilfe des Befehls „analogRead(LM35)“ als Zahlenwert zwischen 0 und 307 erkannt. Dieser Wert des Temperatursensors wird zunächst ausgelesen und unter der Variablen „sensorwert“ gespeichert.

Der „map“ Befehl wird nun verwendet, um diesen Zahlenwert zwischen 0 und 307 wieder in einen Temperaturwert zwischen 0 °C und +150 °C umzuwandeln.

temperatur = map(sensorwert, 0, 307, 0, 150);

temperatur = map ( a , b , c , d , e)

a= umzuwandelnde Zahl

b= minimum Messbereich

c= maximum Messbereich

d= minimum Ausgabewert

e= maximum Ausgabewert

Nach der Umwandlung des analogen Messwertes in einen Temperaturwert wird dieser mit dem Befehl „Serial.print(temperatur);“ an den seriellen Monitor gesendet und kann dann am PC abgelesen werden.

Der Programmcode

int LM35= A0; //Der Sensor soll am analogen Pin A0 angeschlossen werden. Wir nennen den Pin ab jetzt "LM35"
int sensorwert;
int temperatur = 0; //Unter der Variablen "temperatur" wird später der Temperaturwert abgespeichert.
int t=500; //Der Wert für „t“ gibt im Code die zeitlichen Abstände zwischen den einzelnen Messungen vor.

void setup() 
{
Serial.begin(9600); //Im Setup beginnt die serielle Kommunikation, damit die Temperatur an den serial monitor übertragen wird. Über die serielle Kommunikation sendet das Board die Messwerte an den Computer. In der Arduino-Software kann man unter „Werkzeuge“ den „Seriellen Monitor“ starten um die Messwerte zu sehen.
}

void loop() 
{
sensorwert=analogRead(LM35); //Auslesen des Sensorwertes.
temperatur= map(sensorwert, 0, 307, 0, 150); //Umwandeln des Sensorwertes mit Hilfe des "map" Befehls.
delay(t); // Nach jeder Messung ist je eine kleine Pause mit der Dauer „t“ in Millisekunden.
Serial.print(temperatur); //Nun wird der Wert „temperatur“ über die serielle Kommunikation an den PC gesendet. Durch öffnen des seriellen Monitors in der Arduino-Software kann die Temperatur abgelesen werden.
Serial.println(" Grad Celsius"); // Im seriellen Monitor wird hinter der Temperatur die Einheit eingeblendet.
}

Nach dem Öffnen des seriellen Monitors sollte das Ergebnis so aussehen:

Temperaturwerte des LM35 im seriellen Monitor der Arduino IDE

Erweiterung des Programmcodes: Warnsignal bei Temperaturüberschreitung

Sobald die Temperatur von 30 °C erreicht ist, soll ein Warnsignal ertönen. Dazu wird ein Piezo-Lautsprecher mit dem „+“ Pol an Pin5 des Arduino Mikrocontrollerboards angeschlossen. Der andere Pin des Lautsprechers wird mit GND verbunden.

int LM35 = A0; 
int sensorwert;
int temperatur = 0;
int t=500;
int piezo=5; //Das Wort „piezo“ steht jetzt für die Zahl 5, also wird an Pin5 der Speaker angeschlossen.

void setup() 
{
Serial.begin(9600);
pinMode (piezo, OUTPUT); //Der Pin für den Piezo-Lautsprecher wird als Ausgang definiert, da hier um zu piepsen eine Spannung benötigt wird.
}

void loop() 
{
sensorwert=analogRead(LM35); 
temperatur= map(sensorwert, 0, 307, 0, 150);
delay(t);
Serial.print(temperatur);
Serial.println(" Grad Celsius");

if (temperatur>=30) //Es wird eine IF-Bedingung erstellt: Wenn der Wert für die Temperatur über oder gleich 30 ist, dann…
{
digitalWrite(piezo,HIGH); //…fange an zu piepsen.
}

else //Und wenn das nicht so ist…
{
digitalWrite(piezo,LOW); //…dann sein leise.
}
}

LM35 – Temperatursensor mit XH2.54 3P Buchse

Der Temperatursensor LM35 mit XH2.54 3P Buchse misst Temperaturen zwischen 0 °C bis 150 °C. Er hat eine Messgenauigkeit von +/- 1,5 °C.

Anwendungsbereiche:

Anschluss an den Arduino

Der Temperatursensor LM35 wird mit XH2.54 3P Buchse ausgeliefert. Mithilfe von männlich/männlichen Leitungsdrähten wird der Sensor mit dem Arduino verbunden. Das gelbe Kabel wird am Pin A0, das Rote an 5V und das Schwarze an GND angeschlossen.

Anschluss an den Arduino

Anzeige der Temperatur im Seriellen Monitor

Das Programm:

Der Arduino hat eine Eingangsspannung von 5 Volt, das entspricht 5000 Millivolt. ana­logRead() liest die Span­nung am analogen Eingang. Ein analog-digital-Umwandler wan­delt die gemessene Spannung in Zah­len­wer­te zwi­schen 0 und 1023 um. Das ergibt eine Anzahl von 1024 Werten.

Durch eine Rechnung muss das richtige Verhältnis zwischen der Eingangsspannung von 5000 Millivolt des Arduinos und dem umgewandelten Spannungswert des analogen Eingangs hergestellt werden.

Dieses Verhältnis wird durch eine Division (Rechenzeichen /) hergestellt:
5000 / 1024
Das Ergebnis muss noch mit dem umgewandelten gemessenen Wert multipliziert (Rechenzeichen *) werden.

Jeweils 10 Millivolt bedeuten 1 Grad Temperaturunterschied, deshalb muss dieser Wert noch durch 10 geteilt werden.

 

// LM35 am analogen Eingang A0
int LM35 = A5;

// an A0 gemessene Spannung
float gemesseneSpannung;

// durch den analog-digital-Umwandler ermittelter Wert
float digitalerWert;

// berechnete Temparatur
float gemesseneTemperatur;

void setup() 
{
  // Seriellen Monitor starten
  Serial.begin(9600);
}

void loop()
{
  // gelesene Spannung am Eingang A0
  gemesseneSpannung = analogRead(LM35);
  
  // richtiges Verhältnis zwischen 5V (= 5000 mV Spannung Arduino)
  // und der maximal möglichen Anzahl von Werten (1024) herstellen
  digitalerWert = gemesseneSpannung * 5000 / 1024;

  // ...und durch 10 dividieren -> Grad Celsius
  gemesseneTemperatur = digitalerWert / 10;

  // Temperatur anzeigen
  Serial.print(gemesseneTemperatur);
  Serial.println(" Grad C");

  // 2 Sekunden Pause bis zur nächsten Messung
  delay(2000);
}

Zahlenformat ändern

Durch eine kleine Ergänzung kann der Punkt in den gemessenen Temperaturen durch ein Komma ersetzt werden:

// LM35 am analogen Eingang A0
int LM35 = A5;

// an A0 gemessene Spannung
float gemesseneSpannung;

// durch den analog-digital-Umwandler ermittelter Wert
float digitalerWert;

// berechnete Temparatur
float gemesseneTemperatur;

void setup() 
{
  // Seriellen Monitor starten
  Serial.begin(9600);
}

void loop()
{
  // gelesene Spannung am Eingang A0
  gemesseneSpannung = analogRead(LM35);
  
  // richtiges Verhältnis zwischen 5V (= 5000 mV Spannung Arduino)
  // und der maximal möglichen Anzahl von Werten (1024) herstellen
  digitalerWert = gemesseneSpannung * 5000 / 1024;

  // ...und durch 10 dividieren -> Grad Celsius
  gemesseneTemperatur = digitalerWert / 10;
  
  // Zahlenwert in Zeichenkette (String) umwandeln
  String AnzeigeTemperatur = String(gemesseneTemperatur);

  // replace: . durch , ersetzen
  AnzeigeTemperatur.replace(".", ",");

  // Temperatur anzeigen
  Serial.print(AnzeigeTemperatur);
  Serial.println(" Grad C");

  // 2 Sekunden Pause bis zur nächsten Messung
  delay(2000);
}

Funduino - Dein Onlineshop für Mikroelektronik

  • Dauerhaft 10% Rabatt für Schüler, Studenten und Lehrkräfte
  • Mehr als 2.000 Artikel sofort verfügbar!
  • Über 8 Jahre Erfahrung mit Arduino, 3D-Druck und co.
NEU