TMP36 - Tem­pe­ra­tur messen

Lese­zeit: 4 Minu­ten

Lösung
Seite als PDF

Der Tem­pe­ra­tur­sen­sor TMP36 ist ein ana­lo­ger Sen­sor und er wird an einem ana­lo­gen Pin - in die­sem Fall an A0 - ange­schlos­sen. Er kann Tem­pe­ra­tu­ren zwi­schen -40° und 125° Cel­si­us lesen.

Die Tem­pe­ra­tur soll im ➨Seri­el­len Moni­tor ange­zeigt werden:

So sieht es beim Nähern einer Wär­me­quel­le aus:

Benö­tig­te Bauteile:

  • Tem­pe­ra­tur­sen­sor TMP36
  • Lei­tungs­dräh­te

Baue die Schal­tung auf.
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Im Kopf des Pro­gramms und im set­up-Teil sind nur weni­ge Anga­ben notwendig:

int TEMPERATURSENSOR = A0; 

void setup() 
{
  Serial.begin(9600); 

  // auf serielle Verbindung warten
  while (!Serial) {;}
}

Für die­se Anlei­tung wird ein wenig Mathe­ma­tik benötigt.

Der Ardui­no besitzt einen ana­log-digi­tal-Umwand­ler. Die­ser wan­delt die Betriebs­span­nung des Ardui­nos (5 Volt oder 3,3 Volt) in Zah­len­wer­te zwi­schen 0 und 1023 um. Wird ein Sen­sor am ana­lo­gen Ein­gang ange­schlos­sen, lie­fert ➨ ana­logRead() daher Wer­te zwi­schen 0 und 1023.
Laut Daten­blatt müs­sen für die Berech­nung der Tem­pe­ra­tur ver­schie­de­ne Beson­der­hei­ten berück­sich­tigt werden:

Quel­le: 🔗https://​www​.ana​log​.com/​m​e​d​i​a​/​e​n​/​t​e​c​h​n​i​c​a​l​-​d​o​c​u​m​e​n​t​a​t​i​o​n​/​d​a​t​a​-​s​h​e​e​t​s​/​T​M​P​3​5​_​3​6​_​3​7​.​pdf

  • der ana­lo­ge Ein­gang hat einen Wert von 0 bis 1023
  • der Ardui­no wird mit einer Span­nung von 5 V = 5000 mV betrieben 
  • vom gemes­se­nen Wert müs­sen 0,5 V = 500 mV abge­zo­gen werden 
  • ein Grad Cel­si­us ent­spricht 10 mV 

Jetzt zur Rech­nung im loop-Teil:

void loop()
{
  // Spannung am Eingang A0 messen
  float SensorWert = analogRead(TEMPERATURSENSOR);

  /*
    richtiges Verhältnis zwischen 
    5 V = 5000 mV (Eingangsspannung Arduino)
    und 1023 (maximaler Wert (nach analog-digital Umwandlung) 
    am analogen Pin A0 herstellen
    -> gemessenen Wert mit 5000 malnehmen und dann durch 1023 teilen
  */
  float gemesseneSpannung = SensorWert * 5000 / 1023;
  
  /*
    1 Grad = 10 mV 
    Versatz von 500 mV von der gemessenen Spannung abziehen
    und durch 10 = 1 Grad teilen
  */
  float gemesseneTemperatur = (gemesseneSpannung - 500.0) / 10.0;

  // Ausgabe im Seriellen Monitor
  Serial.print("Temperatur: ");

  // Wert  anzeigen
  Serial.print(gemesseneTemperatur);

  // \u00b0 = °
  Serial.print(" \u00b0");
  Serial.println("C");
  
  // Wartezeit bis zur nächsten Messung
  delay(2000);
}

Lei­der wird das Ergeb­nis mit einem Punkt als Dezi­mal­trenn­zei­chen ange­zeigt. Mit dem Befehl ➨replace kannst du das Pro­blem lösen.
Der geän­der­te loop-Teil:

void loop()
{
  // Spannung am Eingang A0 messen
  float SensorWert = analogRead(TEMPERATURSENSOR);
  /*
    richtiges Verhältnis zwischen 
    5 V = 5000 mV (Eingangsspannung Arduino
    und 1023 (maximaler Wert am anlogen Pin A0)
    herstellen
    -> gemessenen Wert mit 5000 malnehmen und dann durch 1023 teilen
  */
  float gemesseneSpannung = SensorWert * 5000 / 1023;
  
  /*
    1 Grad = 10 mV 
    Versatz von 500 mV von der gemessenen Spannung abziehen
    und durch 10 = 1 Grad teilen
  */
  float gemesseneTemperatur = (gemesseneSpannung - 500.0) / 10.0;

  // Ausgabe im Seriellen Monitor
  Serial.print("Temperatur: ");

  // gemesseneTemperatur von float zu String umwandeln
  String AnzeigeTemperatur = String(gemesseneTemperatur);

  // replace ->  . durch , ersetzen
  AnzeigeTemperatur.replace(".", ",");

  // Temperatur anzeigen
  Serial.print(AnzeigeTemperatur);

  // \u00b0 = °
  Serial.print(" \u00b0");
  Serial.println("C");
  
  // Wartezeit bis zur nächsten Messung
  delay(2000);
}

Neben dem TMP36 kann auch der LM35 die Tem­pe­ra­tur mes­sen. Hier ein Ver­gleich der gemes­se­nen Tem­pe­ra­tu­ren über einen Zeit­raum von eini­gen Sekunden.


Das dazu­ge­hö­ri­ge ➨Pro­gramm


Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 23. Okt 2023 @ 14:54