Skip to Content

LM35 analoger Temperatursensor mit Arduino Tutorial

LM35 analoger Temperatursensor mit Arduino Tutorial

In diesem Tutorial lernst du, wie man einen LM35 analogen Temperatursensor mit Arduino verwendet. Ich habe einen Schaltplan und Beispielcodes beigefügt, um dir den Einstieg zu erleichtern!

Im ersten Teil dieses Artikels findest du die Spezifikationen und das Pinout des LM35. Anschließend schauen wir uns an, wie man den Sensor mit dem Arduino verbindet.

Das erste Codebeispiel kann verwendet werden, um Temperaturmessungen vom Sensor zu nehmen und die Ergebnisse im Serial Monitor anzuzeigen. Im zweiten Beispiel zeige ich dir, wie du die eingebaute 1,1 V Referenzspannung des Arduino nutzt, um genauere Messwerte zu erhalten. Zum Schluss sehen wir uns an, wie man die Temperatur auf einem I2C LCD anzeigen kann, um ein eigenständiges Thermometer zu erstellen.

Materialien

Hardware-Komponenten

LM35 analog temperature sensor (TO-92)× 1Amazon
Arduino Uno× 1Amazon
Breadboard× 1Amazon
Jumper wires~ 10Amazon
16×2 character I2C LCD× 1Amazon
USB cable type A/B× 1Amazon

Software

Arduino IDEArduino IDE

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Über den LM35

Der LM35 ist ein kostengünstiger, präziser Celsius-Temperatursensor von Texas Instruments. Er liefert eine Ausgangsspannung, die linear proportional zur Celsius-Temperatur ist und ist daher sehr einfach mit dem Arduino zu verwenden.

Der Sensor benötigt keine externe Kalibrierung oder Justierung, um Genauigkeiten von ±0,5°C bei Raumtemperatur und ±1°C im Temperaturbereich von −50°C bis +155°C zu erreichen.

Ein Nachteil des Sensors ist, dass er eine negative Vorspannung benötigt, um negative Temperaturen zu messen. Wenn das für dein Projekt nötig ist, empfehle ich stattdessen den DS18B20 oder TMP36. Der TMP36 von Analog Devices ist dem LM35 sehr ähnlich und kann Temperaturen von -40°C bis 125°C ohne externe Bauteile messen.

Ein spezielles Tutorial für den TMP36 und DS18B20 findest du hier:

Der Ausgangs-Skalierungsfaktor des LM35 beträgt 10 mV/°C und er liefert bei 25°C eine Ausgangsspannung von 250 mV (siehe Abbildung unten).

LM35 output voltage in mV versus temperature
LM35 Ausgangsspannung in mV im Vergleich zur Temperatur

Beachte, dass der Sensor in einem Spannungsbereich von 4 bis 30 V arbeitet und die Ausgangsspannung unabhängig von der Versorgungsspannung ist.

Der LM35 ist Teil einer Serie von analogen Temperatursensoren, die von Texas Instruments verkauft werden. Weitere Mitglieder der Serie sind:

  • LM335 – Ausgangsspannung direkt proportional zur absoluten Temperatur bei 10 mV/°K.
  • LM34 – Ausgangsspannung linear proportional zur Fahrenheit-Temperatur bei 10 mV/°F.

LM35 Pinbelegung

Der LM35 ist in 4 verschiedenen Gehäusen erhältlich, aber der am häufigsten verwendete Typ ist das 3-Pin TO-92 Transistorgehäuse.

TO-92 Gehäuse

Die Pinbelegung des Sensors ist wie folgt:

LM35 analog temperature sensor pinout

Beachte, dass Pin 1 (+VS) der linke Pin ist, wenn die flache Seite des Sensors (mit dem aufgedruckten Text) zu dir zeigt.

NamePinBeschreibung
+VS1Positiver Versorgungspin (4 – 30 V)
VOUT2Analoger Ausgang des Temperatursensors
GND3Masse-Pin des Geräts, mit dem Minuspol der Stromversorgung verbinden

Die Spezifikationen des LM35 findest du in der folgenden Tabelle.

LM35 analoge Temperatursensor-Spezifikationen

Versorgungsspannung4 V bis 30 V
Betriebsstrom60 µA
Temperaturbereich-55°C bis +155°C
Garantierte Genauigkeit±0,5°C bei +25°C
±1°C von -55°C bis +150°C
Ausgangs-Skalierungsfaktor10 mV/°C
Ausgangsspannung bei 25°C250 mV
Selbsterwärmung<0,1°C in ruhender Luft
Gehäuse3-Pin TO-92
HerstellerTexas Instruments
KostenCheck price

Weitere Informationen findest du auch im Datenblatt hier:

Verdrahtung – LM35 analogen Temperatursensor mit Arduino verbinden

Das Verbinden eines LM35 mit dem Arduino ist sehr einfach, da du nur 3 Pins verbinden musst. Beginne damit, den +VS Pin mit dem 5 V Ausgang des Arduino und den GND Pin mit Masse zu verbinden.

Als nächstes verbinde den mittleren Pin (VOUT) mit einem der analogen Eingänge des Arduino. In diesem Fall habe ich den analogen Eingang A0 verwendet.

LM35 analog temperature sensor with Arduino Uno wiring diagram
LM35 analogen Temperatursensor mit Arduino Uno Verdrahtungsdiagramm

Die Verbindungen sind auch in der folgenden Tabelle angegeben:

LM35 analogen Temperatursensor Verbindungen

LM35Arduino
Pin 1 (+VS)5 V
Pin 2 (VOUT)Pin A0
PIN 3 (GND)GND

Umwandlung der LM35 Ausgangsspannung in Temperatur

Um die Ausgangsspannung des Sensors in die Temperatur in Grad Celsius umzuwandeln, kannst du folgende Formel verwenden:

Temperatur (°C) = VOUT / 10

mit VOUT in Millivolt (mV). Wenn also der Ausgang des Sensors 750 mV beträgt, ist die Temperatur 75°C.

Wie du im obigen Schaltplan sehen kannst, ist der Ausgang des LM35 mit einem der analogen Eingänge des Arduino verbunden. Der Wert dieses analogen Eingangs kann mit der Funktion analogRead() gelesen werden. Diese Funktion gibt jedoch nicht direkt die Ausgangsspannung des Sensors zurück.

Arduino-Boards enthalten einen mehrkanaligen 10-Bit Analog-Digital-Wandler (ADC), der Eingangsspannungen zwischen 0 und der Betriebsspannung (5 V oder 3,3 V) in Ganzzahlen zwischen 0 und 1023 umwandelt. Bei einem Arduino Uno entspricht das einer Auflösung von 5 Volt / 1024 Einheiten oder 0,0049 Volt (4,9 mV) pro Einheit.

Wenn du also analogRead() verwendest, um die Spannung an einem der analogen Eingänge des Arduino zu lesen, erhältst du einen Wert zwischen 0 und 1023.

Um diesen Wert wieder in die Ausgangsspannung des Sensors umzuwandeln, kannst du folgende Formel verwenden:

VOUT = Wert vom ADC * (Vref / 1024)

Diese Formeln verwenden wir in den folgenden Codebeispielen.

LM35 analogen Temperatursensor mit Arduino Beispielcode

Mit dem folgenden Beispielcode kannst du die Temperatur von einem LM35 Sensor auslesen und im Serial Monitor anzeigen.

/* LM35 analog temperature sensor with Arduino example code. More info: https://www.makerguides.com */

// Define to which pin of the Arduino the output of the LM35 is connected:
#define sensorPin A0

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
}

void loop() {
  // Get a reading from the temperature sensor:
  int reading = analogRead(sensorPin);

  // Convert the reading into voltage:
  float voltage = reading * (5000 / 1024.0);

  // Convert the voltage into the temperature in degree Celsius:
  float temperature = voltage / 10;

  // Print the temperature in the Serial Monitor:
  Serial.print(temperature);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.println("C");

  delay(1000); // wait a second between readings
}

Du solltest folgende Ausgabe im Serial Monitor sehen:

Serial Monitor Ausgabe

Stelle sicher, dass die Baudrate des Serial Monitors ebenfalls auf 9600 eingestellt ist.

Wie der Code funktioniert

Zuerst habe ich definiert, an welchen Pin des Arduino der VOUT Pin des Sensors angeschlossen ist. In diesem Fall haben wir den analogen Pin A0 verwendet. Die Anweisung #define kann verwendet werden, um einem konstanten Wert einen Namen zu geben. Der Compiler ersetzt alle Verweise auf diese Konstante durch den definierten Wert, wenn das Programm kompiliert wird. Also überall, wo du sensorPinnennst, ersetzt der Compiler es beim Kompilieren durch A0.

// Define to which pin of the Arduino the output of the LM35 is connected:
#define sensorPin A0

Im Setup-Teil des Codes starten wir die serielle Kommunikation mit einer Baudrate von 9600.

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
}

Im Loop-Teil des Codes beginnen wir damit, eine Messung vom Sensor mit der Funktion analogRead(pin)zu nehmen.

  // Get a reading from the temperature sensor:
  int reading = analogRead(sensorPin);

Anschließend verwenden wir die Formeln, die ich zuvor im Artikel erwähnt habe, um die Messung in Spannung und dann in Temperatur umzuwandeln.

  // Convert the reading into voltage:
  float voltage = reading * (5000 / 1024.0);

  // Convert the voltage into the temperature in degree Celsius:
  float temperature = voltage / 10;

Zum Schluss werden die Ergebnisse im Serial Monitor ausgegeben:

  // Print the temperature in the Serial Monitor:
  Serial.print(temperature);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.println("C");

Verbessere die Genauigkeit der Messwerte

Da wir die Standard-Referenzspannung des Arduino für den analogen Eingang verwendet haben (also den Wert, der als Obergrenze des Eingangsbereichs dient), beträgt die maximale Auflösung des ADC 5000/1024 = 4,88 mV oder 0,49°C.

Wenn wir eine höhere Genauigkeit wollen, können wir stattdessen die eingebaute 1,1 V Referenz des Arduino verwenden. Diese Referenzspannung kann mit der Funktion analogReference() geändert werden.

Mit 1,1 V als Referenzspannung erhalten wir eine Auflösung von 1100/1024 = 1,07 mV oder 0,11°C. Beachte, dass dies den messbaren Temperaturbereich auf 0 bis 110 Grad Celsius begrenzt.

Ich habe die Zeilen, die du im Code hinzufügen/ändern musst, unten hervorgehoben:

/* LM35 analog temperature sensor with Arduino example code. More info: https://www.makerguides.com */

// Define to which pin of the Arduino the output of the LM35 is connected:
#define sensorPin A0

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);

  // Set the reference voltage for analog input to the built-in 1.1 V reference:
  analogReference(INTERNAL);
}

void loop() {
  // Get a reading from the temperature sensor:
  int reading = analogRead(sensorPin);

  // Convert the reading into voltage:
  float voltage = reading * (1100 / 1024.0);

  // Convert the voltage into the temperature in degree Celsius:
  float temperature = voltage / 10;

  // Print the temperature in the Serial Monitor:
  Serial.print(temperature);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.println("C");

  delay(1000); // wait a second between readings
}
Beachte die kleineren Schritte zwischen den Messwerten

LM35 mit I2C LCD und Arduino Beispielcode

Wenn du ein eigenständiges Thermometer bauen möchtest, das keinen Computer benötigt, ist es praktisch zu wissen, wie man die Temperaturwerte auf einem LCD-Display anzeigt.

Mit dem Beispielcode unten kannst du die Temperaturwerte auf einem 16×2 character I2C LCD anzeigen.

Das Anschließen des I2C LCD ist ziemlich einfach, wie du im Schaltplan unten sehen kannst. Für mehr Informationen kannst du mein ausführliches Tutorial zu How to control a character I2C LCD with Arduinoansehen. Wenn du stattdessen ein Standard-LCD ohne I2C verwenden möchtest, schau dir How to use a 16×2 character LCD with Arduino an.

LM35 analog temperature sensor with 16x2 character I2C LCD and Arduino wiring diagram.
LM35 analogen Temperatursensor mit 16×2 Zeichen I2C LCD und Arduino Verdrahtungsdiagramm.

Die Verbindungen sind auch in der folgenden Tabelle angegeben:

I2C LCD Verbindungen

I2C Zeichen LCDArduino
GNDGND
VCC5 V
SDAA4
SCLA5

Beachte, dass der LM35 Temperatursensor wie zuvor angeschlossen ist.

Installation der benötigten Arduino-Bibliotheken

Um ein I2C LCD zu verwenden, musst du die LiquidCrystal_I2C Arduino-Bibliothek installieren.

Um diese Bibliothek zu installieren, gehe im Arduino IDE zu Tools > Manage Libraries (Strg + Shift + I unter Windows). Der Library Manager öffnet sich und aktualisiert die Liste der installierten Bibliotheken.

Installing an Arduino library step 1 open Library Manager
Library Manager

Suche nun nach „liquidcrystal_i2c“ und suche die Bibliothek von Frank de Brabander. Wähle die neueste Version aus und klicke dann auf Installieren.

Installation der LiquidCrystal_I2C Arduino-Bibliothek

LM35 mit I2C LCD Beispielcode

/* LM35 analog temperature sensor with I2C LCD and Arduino example code. 
   https://www.makerguides.com */

// Include the required Arduino libraries:
#include "LiquidCrystal_I2C.h"

// Create a new instance of the LiquidCrystal_I2C class:
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Degree symbol:
byte Degree[] = {
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000
};

// Define to which pin of the Arduino the output of the LM35 is connected:
#define sensorPin A0

void setup() {
  // Start the LCD and turn on the backlight:
  lcd.init();
  lcd.backlight();

  // Create a custom character:
  lcd.createChar(0, Degree);
}

void loop() {
  // Get a reading from the temperature sensor:
  int reading = analogRead(sensorPin);

  // Convert the reading into voltage:
  float voltage = reading * (5000 / 1024.0);

  // Convert the voltage into the temperature in degree Celsius:
  float temperature = voltage / 10;

  // Print the temperature on the LCD;
  lcd.setCursor(0, 0);
  lcd.print("Temperature:");
  lcd.setCursor(0, 1);
  lcd.print(temperature);
  lcd.write(0); // print the custom character
  lcd.print("C");

  delay(1000); // wait a second between readings
}

Du solltest folgende Ausgabe auf dem LCD sehen:

DS18B20-16x2-I2C-LCD-output
LCD Ausgabe

Fazit

In diesem Tutorial habe ich dir gezeigt, wie du einen LM35 analogen Temperatursensor mit Arduino verwendest. Wenn du mehr über andere Temperatursensoren erfahren möchtest, schau dir die untenstehenden Artikel an.

Wenn du Fragen, Vorschläge hast oder denkst, dass in diesem Tutorial etwas fehlt, hinterlasse bitte einen Kommentar unten.