Nr.10 Temperatur messen

Sketch Nr.9: Temperaturen messen

3.9.1 Aufgabe: Mit den Temperatursensor TMP36 soll die Temperatur ausgelesen und mit dem serial-monitor angezeigt werden.

Material: Arduino / Breadboard / Kabel / Temperatursensor TMP36 / Externe Stromversorgung

Der Sensor hat drei Anschlüsse. Beim Blick auf die flache Seite des Sensors: links 5V, rechts GND und in der Mitte der Pin für das Temperatursignal. Auf diesem Pin gibt der Sensor eine Spannung zwischen 0 und 2,0 Volt aus. Wobei 0V -50°C entsprechen und der Wert 2,0V entspricht 150°C. Laut Hersteller ist der Sensor zwischen -40°C und 125°C einigermaßen genau (±2°C). Die Spannung dieses Pins muss vom Mikrocontroller-Board ausgelesen und in einen Temperaturwert umgerechnet werden.

– ACHTUNG: Wenn der Sensor falsch angeschlossen wird, brennt er durch!

– Bei dem Aufbau sollte nach Möglichkeit eine externe Stromversorgung verwendet werden, da dies die Sensorgenauigkeit wesentlich verbessert (9V Netzteil oder 9V-Batterie).

 

int TMP36 = A0;

int temperatur = 0;

int temp[10];

int time= 20;


















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







void loop() 
{

temp[0] = map(analogRead(TMP36), 0, 410, -50, 150);

delay(time);

temp[1] = map(analogRead(TMP36), 0, 410, -50, 150);

delay(time);

temp[2] = map(analogRead(TMP36), 0, 410, -50, 150);

delay(time);

temp[3] = map(analogRead(TMP36), 0, 410, -50, 150);

delay(time);

temp[4] = map(analogRead(TMP36), 0, 410, -50, 150);

delay(time);

temp[5] = map(analogRead(TMP36), 0, 410, -50, 150);

delay(time);

temp[6] = map(analogRead(TMP36), 0, 410, -50, 150);

delay(time);

temp[7] = map(analogRead(TMP36), 0, 410, -50, 150);

delay(time);

temp[8] = map(analogRead(TMP36), 0, 410, -50, 150);

delay(time);

temp[9] = map(analogRead(TMP36), 0, 410, -50, 150);

temperatur=(temp[0] temp[1] temp[2] temp[3] temp[4] temp[5]

 temp[6] temp[7] temp[8] temp[9])/10; // Alles in eine Zeile!

Serial.print(temperatur);

Serial.println(" Grad Celsius");

}

Der Sensor soll am analogen Pin A0 angeschlossen werden. Wir nennen den Pin ab jetzt „TMP36“

Unter der Variablen „temperatur“ wird später der Temperaturwert abgespeichert.

Damit man gute Werte erhält, liest man zunächst mehrere Werte aus und bildet dann den Mittelwert. Die eckige Klammer „[10]“ erzeugt hier gleich zehn Variablen mit den Namen „temp[0]“, „temp[2]“, „temp[3]“, … bis … „temp[9]“.  Mit der Schreibweise [10] spart man also nur etwas Platz.

Der Wert für „time“ gibt im Code die zeitlichen Abstände zwischen den einzelnen Messungen vor.

Im Setup beginnen wir die serielle Kommunikation, damit wir uns die Temperatur später auch anzeigen lassen können. Über die serielle Kommunikation sendet das Board die Messwerte an den Computer. In der Arduino-Software kann man unter „Tools“ den „Serial Monitor“ starten um die Messwerte zu sehen.

Der Hauptteil

Ab hier wird zehnmal die Temperatur ausgelesen. Dazwischen ist je eine kleine Pause mit der Dauer „time“ in Millisekunden. Aber was passiert hier genau? Sehen wir uns den Befehl einmal genauer an.

temp[1] = map(analogRead(TMP36), 0, 410, -50, 150);

Der Reihe nach:

temp[1] – ist der Name der ersten Variablen.

„map ( a, b, c, d, e)“ – Dies ist der sogenannte „Map-Befehl“. Hiermit kann man einen eingelesenen Wert (a) bei dem die Werte zwischen (b) und (c) liegen, in einen anderen Zahlenbereich umwandeln, und zwar in den Bereich zwischen (d) und (e).

In unserem Befehl passiert folgendes:

Der Wert des Sensors wird unmittelbar im „Map-Befehl“ ausgelesen mit „analogRead(TMP36)“. Die Messwerte sollten zwischen 0 und 410 liegen. Das entspricht am analogen Port den Werten zwischen 0 V und 2V. Die Spannung gibt der Sensor bei Temperaturen zwischen -50°C und 150°C aus. Diese Werte am analogen Port werden nun durch den „Map-Befehl“ direkt in die °Celsius Werte zwischen -50 und 150 umgewandelt.

Hier werden alle zehn ermittelten Temperaturwerte zusammengerechnet und durch zehn geteilt. Der durchschnittliche Wert wird unter der Variablen „temperatur“ gespeichert.

Nun wird der Wert „temperatur“ über die serielle Kommunikation an den PC gesendet. Nun muss man den seriellen Monitor in der Arduino-Software öffnen um die Temperatur am Sensor abzulesen.

 

3.9.2 Erweiterung des Programms:

Sobald die Temperatur von 30°C erreicht ist, soll ein Warnsignal ertönen (Piepston eines Piezo-Lautsprechers).

 

int TMP36 = A0;

int temperatur = 0;

int temp[10];

int time= 20;

int piezo=5;

void setup() 
{
Serial.begin(9600);
pinMode (piezo, OUTPUT);
}

void loop() {

temp[0] = map(analogRead(TMP36), 0, 410, -50, 150);
delay(time);
temp[1] = map(analogRead(TMP36), 0, 410, -50, 150);
delay(time);
temp[2] = map(analogRead(TMP36), 0, 410, -50, 150);
delay(time);
temp[3] = map(analogRead(TMP36), 0, 410, -50, 150);
delay(time);
temp[4] = map(analogRead(TMP36), 0, 410, -50, 150);
delay(time);
temp[5] = map(analogRead(TMP36), 0, 410, -50, 150);
delay(time);
temp[6] = map(analogRead(TMP36), 0, 410, -50, 150);
delay(time);
temp[7] = map(analogRead(TMP36), 0, 410, -50, 150);
delay(time);
temp[8] = map(analogRead(TMP36), 0, 410, -50, 150);
delay(time);
temp[9] = map(analogRead(TMP36), 0, 410, -50, 150);

temperatur=(temp[0] temp[1] temp[2] temp[3] temp[4] temp[5]

 temp[6] temp[7] temp[8] temp[9])/10; // Alles in eine Zeile!

Serial.print(temperatur);

Serial.println(" Grad Celsius");

if (temperatur>=30)

{

digitalWrite(piezo,HIGH);

}

else

{

digitalWrite(piezo,LOW);

}

}

Das Wort „piezo“ ist jetzt die Zahl 5, also wird an Port 5 der Piezo angeschlossen.

Der Piezo-Lautsprecher an Pin5 soll ein Ausgang sein (Logisch, weil der ja vom Mikrokontroller-Board ja eine Spannung benötigt um zu piepsen.

Es wird eine IF-Bedingung erstellt:

Wenn der Wert für die Temperatur über oder gleich 30 ist, dann…

…fange an zu piepsen.

Und wenn das nicht so ist…

…dann sein leise.

 

Schreibe einen Kommentar