5. Arduino-Projekt: Temperaturmessung mit analogem Temperatursensor (2/2)

Der Sensor

Für dieses Projekt wird der dem Arduino-Kit beiligende Temperatursensor oder ein ähnlicher verwendet:

IMG_20191206_072324TMP36 - Temperatursensor

Der Sensor kann laut Datenblatt mit einer Spannung bis 7V betrieben werden und liefert am Ausgang eine Spannung von 100 mV bis 2000 mV:

tmp36datasheet

Bei 25° C sind das 750 mV. Der Sensor liefert 10mV/1°C und hat einen Temperaturbereich von -40° C bis +125° C:

tmp36datasheet2

Das bedeutet, dass 0° C ein Spannungswert von 750mV - 25 * 10mV = 500mV anliegen.

tmp36datasheet1
Pin-Out des TMP36

Die Hardware

Der Anschluss des Temperatursensor TMP36 gestaltet sich sehr einfach, es wird der Ausgang des Sensors mit dem analogen Eingang A0 des Arduino verbunden:

tmp36schaltung

Und so kann der Aufbau mit dem Steckbrett aussehen:

tmp36aufbau

So könnte der Aufbau in echt aussehen:

IMG_20191206_090335

Programmierung

/**
 * Temperaturmessung mit TMP36
 */

// Pinbezeichnung des analogen Messeingang

const byte sensor = A0;


// In der setup()-Funktion wird die serielle
// Schnittstell zum Anzeigen der Werte initialisiert
// und der Pin "sensor" auf INPUT geschaltet (braucht es
// eigentlich nicht, denn nach dem Reset sind alle
// Pins auf INPUT.

void setup() {

  Serial.begin(9600);

  pinMode(sensor,INPUT);
  
}

// Im loop() wird die Spannung am Pin "sensor" gemessen
// und in eine Tempteraturangabe in °C umgerechnet und
// über die serielle Anzeige (USB-Kabel übernimmt diese
// Funktion) ausgegeben.

void loop() {

  // sensorValue enthält den Rohwert der gemessenen
  // Spannung. Der Arduino kann in der Standard-
  // konfiguration Spannungen mit einer Auflösung
  // von 10 Bit lesen. Damit lassen sich Werte von
  // 0 - 1023, also 1024 Werte abbilden.
  // Als Referenzspannung wird in der
  // Standardkonfiguration dabei die Betriebsspannung
  // von 5V verwendet. Man erhält also Rohwerte 
  // zwischen 0 (0V) und 1024 (5V).
  
  int sensorValue = analogRead(sensor);

  // Umrechnung des Rohwertes in Volt (s. oben)

  float volt = (sensorValue / 1024.0) * 5.0;

  // Umrechnung der Spannung in Temperatur. Die
  // verwendeten Werte ergeben sich aus dem Datenblatt
  // des Sensors.

  float temperature = (volt - 0.5) * 100;

  // Ausgabe der Werte über die serielle Schnittstelle

  Serial.print("Grad Celsius: ");
  Serial.println(temperature);

  // und etwas warten für die nächste Messung

  delay(1000);

}

Was ist neu?

  Serial.begin(9600);

Der Arduino bietet die Möglichkeit Werte und Texte über das USB-Kabel, das im Betrieb als serielle Datenverbindung zum PC fungiert, auszugeben. Die Werte werden mit dem "seriellen Monitor" angezeigt, der über das Symbol oben rechts in der Arduino-IDE geöffnet wird:

arduino_seriellermonitor

Serial : stellt den Bezug zu einer Klasse (oder einem Objekt) mit dem Namen "Serial" her, das fest in Arduino eingebaut ist. Die Klasse "Serial" besitzt eine Funktion "begin()".
Serial.begin() : ruft diese Funktion auf. Der Punkt (.) trennt den Klassen- vom Funktionsnamen.
9600 : gibt die sogenannte Baud-Rate an, das ist die Übertragungsgeschweindigkeit in Bits/s an. Der in der Serial.begin()-Funktion angegebene Wert muss mit den Einstellungen des seriellen Monitors oder des seriellen Plotters übereinstimmen.

 int sensorValue = analogRead(sensor);

analogRead() : die Pins A0 bis A5 können Analoge Spannungswerte mit Hilfe dieser Funktion einlesen, standardmäßig in 10-Bit-Auflösung (0-1023)
int sensorValue : eine Variable vom Typ "integer" (ganzzahlig), die Werte von -32,768 to 32,767 erfassen (ein byte-Typ wäre hier zu klein gewählt)

float volt = (sensorValue / 1024.0) * 5.0;

float volt : definiert eine Varibale mit Namen "volt" vom Typ "float", hier können sogenannte Fließkommazahlen abgespeichert werden, das sind sehr große und sehr kleine Zahlen, auch mit Nachkommastellen
1024.0 und 5.0 : der Punkt ist ein (angelsächsisches) Komma und wird hier angegeben, damit der Compiler, der den Arduino-Sketch in Maschinensprache übersetzt, gezwungen wird, das Ergebnis mit Nachkommastellen zu berechnen (da sensorValue ja eine Ganzzahl ist)

  Serial.print("Grad Celsius: ");
  Serial.println(temperature);

Serial.print : gibt die Zeichenkette "Grad Celsius: " über die serielle Verbindung am PC aus. Die Anführungszeichen markieren eine Zeichenkette, sonst würde der Compiler davon ausgehen, das "Grad" oder "Celsius" Variablen sind
Serial.println : dasselbe wie Serial.print, hängt aber zusätzlich einen Zeilenumbruch (ln) an, so dass die nächste Ausgabe in eine neue Zeile geschrieben wird. Hier wird der Inhalt der Variable "temperature" ausgegeben

Kniffliges

1. Den Aufbau und das Programm so erweitern, das bei jeder Messwertausgabe ein Led kurz blinkt.

2. Die Werte über den seriellen Plotter unter "Werkzeuge" im Arduino-Menu plotten lassen.

 

Screenshots wurden mit Fritzing erstellt, falls nicht anders angegeben (https://fritzing.org)

Angerer Harald - Freitag, 6. Dezember 2019

Kategorien: Arduino Tutorials

Kommentieren Sie diesen Beitrag

Ihr Kommentar

Captcha