Ziel des Projekts
Der Sensor TMP36 misst die Temperatur und zeigt sie im ⇒Seriellen Monitor an.

Die Hardware

Der Temperatursensor TMP36 ist ein analoger Sensor und er wird an einem analogen Pin – in diesem Fall an A0 des UNO R3 – angeschlossen. Er kann Temperaturen zwischen -40° und 125° Celsius messen.
Der Schaltplan
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Das Programm
Im Kopf des Programms und im setup-Teil sind nur wenige Angaben notwendig:
|
1 2 3 4 5 6 7 8 9 |
int TEMPERATURSENSOR = A0; void setup() { Serial.begin(9600); // auf serielle Verbindung warten while (!Serial) {;} } |
Für diese Anleitung wird ein wenig Mathematik benötigt.
Der Arduino besitzt einen analog-digital-Umwandler. Dieser wandelt die Betriebsspannung des Arduinos (5 Volt oder 3,3 Volt) in Zahlenwerte zwischen 0 und 1023 um. Wird ein Sensor am analogen Eingang angeschlossen, liefert ⇒ analogRead() daher Werte zwischen 0 und 1023.
Laut Datenblatt müssen für die Berechnung der Temperatur verschiedene Besonderheiten berücksichtigt werden:

Quelle: 🔗https://www.analog.com/media/en/technical-documentation/data-sheets/TMP35_36_37.pdf
- der analoge Eingang hat einen Wert von 0 bis 1023
- der Arduino wird mit einer Spannung von 5 V = 5000 mV betrieben
- vom gemessenen Wert müssen 0,5 V = 500 mV abgezogen werden
- ein Grad Celsius entspricht 10 mV
Jetzt zur Rechnung im loop-Teil:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
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); } |
Leider wird das Ergebnis mit einem Punkt als Dezimaltrennzeichen angezeigt. Mit dem Befehl ⇒replace kannst du das Problem lösen.
Der geänderte loop-Teil:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
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); } |
letzte Aktualisierung: