LM35 Temperatursensor

Temperatur Module

Der LM35 ist ein analoger Temperatursensor, der in vielen Arduino Kits zu finden ist. Finden wir heraus, wie man ihn benutzt.

LM35 Temperatursensor

Der LM35 ist ein werksseitig kalibrierter Halbleiter-Temperatursensor, der von Texas Instruments hergestellt wird. Er macht sich für die Temperaturmessung die Tatsache zunutze, dass die Durchlassspannung eines Halbleiterübergangs wie in Dioden und Transistoren temperaturabhängig ist. Da für das Sensorelement keine speziellen Materialien benötigt werden, die in den Chip integriert werden müssen, ist diese Art von Temperatursensoren einfach zu integrieren und billiger in der Herstellung. Anders als der DS18B20, der ebenfalls ein Halbleiter-Temperatursensor ist, hat der LM35 jedoch einen analogen statt einen digitalen Ausgang. Er signalisiert die Temperatur in Grad Celsius über die Ausgangsspannung am Vout Pin.

Für den LM35DZ, den wir hier verwenden werden, entspricht eine Ausgangsspannung von 0 V einer Temperatur von 0° C. Die Ausgangsspannung steigt um 10 mV/°C. Der Sensor ist dabei speziell für eine Temperaturausgabe in Grad Celsius ausgelegt. Der LM35DZ kann Temperaturen bis zu 100 °C messen, was einer Ausgangsspannung von 1 V entspricht. Um die aktuelle Temperatur zu erhalten, müssen wir die Ausgangsspannung des Sensors mit einem der analogen Eingänge des Arduinos messen. Lass uns anschauen, wie das funktioniert!

Anschließen des Sensors

Das Anschließen des Sensors ist keine große Sache. Mit der flachen Seite nach oben ist der erste Pin für die Versorgungsspannung, der zweite ist der analoge Ausgang und der dritte ist der Massepin. Schließe den Sensor einfach wie im Bild unten gezeigt an, dabei muss der analoge Ausgang mit A0 und der Pin für die Versorgungsspannung mit dem 5V Pin des Arduinos verbunden werden:

Anschließen des LM35

Schreiben des Codes

Lass uns einen Blick auf den Code werfen:

void setup() {
  // Initialize serial communication
  Serial.begin(9600);
}

void loop() {
  // ADC reading to voltage
  float voltage = analogRead(A0) * 5.0 / 1024.0;

  // Temperature: 10 mV/°C
  float temperature = voltage / 0.01;

  // Output to serial monitor
  Serial.print("Temperature (°C): ");
  Serial.println(temperature);
  delay(500);
}

Das Programm misst mittels der Funktion analogRead die Spannung an A0. Der Analog-Digital-Wandler (ADC) des Arduino wandelt die analoge Spannung in eine Zahl zwischen 0 und 1023 um. Ein Wert von 1024 entspräche der Referenzspannung des ADCs. Dies ist standardmäßig die 5 V Versorgungsspannung des Arduinos. Zur Umrechnung in eine Spannung können wir die folgende Formel verwenden:

\(U_{A0} = {U_{Ref} \cdot analogRead(A0) \over 1024}\)

Genau das wird auch im Code gemacht. Danach kann die Spannung einfach in eine Temperatur umgerechnet werden. Da 10 mV genau 1 °C entsprechen, dividieren wir einfach durch 10 mV/°C und erhalten so die Temperatur in Grad Celsius. Das ist auch schon alles.

Nach dem Download des Programms auf den Arduino wird die Temperatur alle 500 ms im seriellen Monitor angezeigt:

Temperaturwerte im seriellen Monitor

Verbesserung der Messgenauigkeit

Der LM35 hat typischerweise eine Genauigkeit von ± 0,6 °C bei 25 °C. Das können wir auch nicht ändern. Wir können jedoch die Genauigkeit der vom Arduino Uno durchgeführten ADC-Messungen verbessern. Die Ausgangsspannung des Sensors liegt zwischen 0 V und 1 V, während der Arduino Uno uns einen Spannungswert zwischen 0 V und 5 V in 1024 Schritten liefert. Das bedeutet, dass uns nur 204 Schritte zwischen 0 V und 1 V zur Verfügung stehen, was einer Auflösung von 4,9 mV oder etwa 0,5 °C entspricht. Das ist nicht gerade berauschend, aber ausreichend, da dies in etwa der Genauigkeit des Sensors entspricht. Ein häufiges Problem bei der Messung analoger Spannungen mit dem Arduino Uno ist jedoch, dass die Versorgungsspannung nicht exakt 5 V beträgt. Dies gilt insbesondere, wenn der Arduino über USB versorgt wird und führt zu ungenauen Messungen, da die Versorgungsspannung zugleich als Referenzspannung für den ADC dient.

Beim Arduino Uno steht uns eine Alternative zur Verfügung, die für unseren Anwendungsfall besser geeignet ist. Er besitzt eine interne 1,1 V Spannungsreferenz, die unabhängig von der Versorgungsspannung ist. Wir können sie durch den Aufruf von analogReference(INTERNAL) in der setup-Prozedur aktivieren. Sobald diese Spannungsreferenz aktiviert ist, misst der ADC eine Spannung zwischen 0 V und 1,1 V anstelle von 5 V. Der Messwert wird immer noch durch eine Zahl zwischen 0 und 1023 dargestellt. Jedoch entspricht der hypothetische Wert von 1024 nun 1,1 V statt 5 V. Bei Verwendung der internen Spannungsreferenz ist eine Versorgungsspannung von exakt 5 V nicht mehr entscheidend für eine genaue Messung. Außerdem erhöht sich die Auflösung, da der Messbereich des ADCs (0 V - 1,1 V) nun deutlich besser mit dem Ausgangsspannungsbereich des Sensors (0 V - 1 V) übereinstimmt.

Mit dieser Änderung sieht der Code nun folgendermaßen aus:

void setup() {
  // Initialize serial communication
  Serial.begin(9600);

  // Use 1.1 V reference for ADC measurements
  analogReference(INTERNAL);
}

void loop() {
  // ADC reading to voltage
  float voltage = analogRead(A0) * 1.1 / 1024.0;

  // Temperature: 10 mV/°C
  float temperature = voltage / 0.01;

  // Output to serial monitor
  Serial.print("Temperature (°C): ");
  Serial.println(temperature);
  delay(500);
}

Fazit

In diesem Tutorial haben wir gesehen, wie einfach es ist, den LM35 zu verwenden. Wir brauchen keine Kalibrierung oder komplexe Formeln wie bei NTCs, und wir brauchen auch keine Bibliothek, um mit einem digitalen Sensor über einen Bus wie OneWire oder I2C zu kommunizieren. Ein einziger analoger Pin und eine einfache Spannungsmessung reichen aus, um die Temperatur zu ermitteln.

Vorheriger Beitrag Nächster Beitrag