← Alle Lektionen

Lektion 6: Temperatur messen mit dem TMP36

mittel

Ein analoger Sensor liefert eine Spannung, aus der ihr selbst die Temperatur berechnet — Rohwert -> Volt -> Grad Celsius. Bei Hitze geht eine rote Warn-LED an.

Bauteile: LED (einzeln) Breadboard (Steckbrett) Jumperkabel-Set Widerstand 1 kOhm TMP36 Temperatursensor (analog)

Was ihr macht

Neu in dieser Lektion: Bisher hat der Arduino fertige Werte
bekommen (LED an/aus, LDR-Helligkeit als Zahl). Jetzt rechnet ihr
die physikalische Groesse selbst aus
— vom Rohwert ueber die
Spannung zur Temperatur in Grad Celsius. Genau wie echte Mess-Profis.

So funktioniert der Sensor

Der TMP36 ist ein analoger Temperatursensor. Er liefert eine
Spannung, die mit der Temperatur waechst — und zwar streng linear:

  • Steigung: 10 mV pro Grad Celsius (also 0,01 V/Grad)
  • Offset: 500 mV bei 0 Grad Celsius (also 0,5 V)

Bei 25 Grad C kommen also 0,5 V + 25 * 0,01 V = 0,75 V aus dem
Sensor. Diese Spannung lest ihr am analogen Pin A0 als Rohwert
(0..1023) und rechnet sie dann zurueck in Grad Celsius.

Drei Schritte vom Rohwert zur Temperatur

Was Formel
1 analogRead rohwert = analogRead(A0); -> 0..1023
2 Rohwert -> Spannung in V spannung = rohwert * 5.0 / 1024.0;
3 Spannung -> Temperatur temperatur = (spannung - 0.5) * 100;

Das (spannung - 0.5) zieht den Offset ab, das * 100 ist die Umkehrung
der Steigung (/ 0.01).

Was ihr macht

  1. Schaltung aufbauen (TMP36 hat eine abgeflachte Seite — pruef
    im Datenblatt, welcher Pin was ist!):
  2. TMP36 +Vs an 5V, Vout an A0, GND an GND
  3. Rote LED an Pin 11 gegen GND
  4. Lade den Sketch hoch und oeffne den Seriellen Monitor (9600 Baud).
    Ihr seht drei Werte pro Messung: Rohwert, Spannung in V,
    Temperatur in Grad C.
  5. Pruef die Mathematik nach: Multipliziere den Rohwert von Hand mit
    5/1024 und vergleich mit der ausgegebenen Spannung.
    Stimmt's?
  6. Halt den Daumen auf den Sensor. Wie schnell steigt die Temperatur?
  7. Aendere die Schwelle (schwelle = 25.0):
  8. Auf 30 Grad C: Hand-Erkennung
  9. Auf 18 Grad C: "Heizung an"-Indikator
  10. Vergleicht mit dem Thermometer im Raum. Wenn die Werte stark
    abweichen, koennte der Sensor falsch herum stecken oder eine
    schlechte Verbindung haben.

Frei weiter denken

  • Zweite LED fuer "zu kalt" — z.B. unter 18 Grad C blau
  • Maximum und Minimum der letzten Stunde merken
  • Mehrere Messungen mitteln (5 Messungen, geteilt durch 5) — ruhigerer
    Wert
  • Werte ueber den Seriellen Plotter anzeigen lassen (im Menue der IDE) —
    ihr seht eine Live-Kurve!
  • Display (LCD oder OLED) anschliessen, dann braucht ihr keinen PC mehr

Forscher-Bonus

Im ALLNET-Set ist auch das NTC-Modul B07/B31. Das ist auch ein
analoger Temperatursensor — aber nicht-linear. Schaut euch das
Codebeispiel zum B07 in der Bauteile-Datenbank an: da
steckt eine ganze Material-Gleichung drin (Steinhart-Konstante B).
So sehen Profis das Berechnen.

So sieht der Aufbau aus

Aufbau-Bild folgt
Wokwi-Vorschau ↗

Der Sketch

Lest den Code in Ruhe durch — die Kommentare hinter // sagen euch, was jede Zeile macht.

// L6 Temperatur messen mit TMP36 (analoger Sensor)
// Aus dem Rohwert wird Schritt fuer Schritt die Temperatur in Grad C.

const int sensorPin   = A0;     // TMP36 Vout am analogen Pin A0
const int ledRot      = 11;     // Warn-LED bei Hitze
const float schwelle  = 25.0;   // ab dieser Temperatur Alarm

void setup() {
  Serial.begin(9600);
  pinMode(ledRot, OUTPUT);
  // analogPins muessen NICHT mit pinMode konfiguriert werden — sind
  // automatisch Eingaenge, sobald analogRead aufgerufen wird.
}

void loop() {
  // 1. Rohwert lesen: 0..1023, abhaengig von der Spannung am Sensor
  int rohwert = analogRead(sensorPin);

  // 2. Rohwert in Spannung umrechnen (in Volt)
  //    Der Uno misst von 0 bis 5 V mit 1024 Schritten Aufloesung.
  float spannung = rohwert * 5.0 / 1024.0;

  // 3. Spannung in Temperatur umrechnen (Datenblatt TMP36):
  //    10 mV pro Grad C, Offset 500 mV bei 0 Grad C
  float temperatur = (spannung - 0.5) * 100.0;

  // Werte ausgeben — alle drei zur Kontrolle
  Serial.print("Roh: ");      Serial.print(rohwert);
  Serial.print(" | U = ");    Serial.print(spannung, 3);  // 3 Nachkommastellen
  Serial.print(" V | T = ");  Serial.print(temperatur, 1);
  Serial.println(" Grad C");

  // LED bei Hitze anschalten
  if (temperatur > schwelle) {
    digitalWrite(ledRot, HIGH);
  } else {
    digitalWrite(ledRot, LOW);
  }

  delay(1000);
}
Festgefahren? KI-Tipps Troubleshooting Bauteile-Datenbank
Wokwi-Simulator — wenn euer realer Aufbau nicht laeuft, koennt ihr im Online-Simulator vergleichen. Im Wokwi oeffnen ↗
Hilfe (klick wenn ihr nicht weiterkommt)

Sensor falsch herum? Wenn der TMP36 heiss wird, steckt er falsch — sofort abziehen. Die abgeflachte Seite zeigt dir, wo VCC, Vout und GND sind (Datenblatt anschauen).

Wert springt seltsam? Der TMP36 ist empfindlich. Lange Kabel oder ein nahes Handy koennen das analoge Signal stoeren. Mehrere Werte messen und mitteln macht es ruhiger.

Warum 0,5 V Offset? Damit der Sensor auch negative Temperaturen messen kann, ohne dass die Spannung negativ wird (was der Arduino nicht messen koennte). Bei 0 Grad C kommen 0,5 V raus, bei -10 Grad C waeren es 0,4 V.

Forscher-Bonus: Mit dem NTC-Modul B07 wird die Umrechnung noch interessanter — der Widerstand aendert sich nicht-linear mit der Temperatur. Schau dir das Codebeispiel zum B07 in der Bauteile-Datenbank an.

← L5: Parksensor mit Ultraschall