Nr.10 – Temperatur messen mit dem LM35

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

Material: Arduino / Kabel / Temperatursensor LM35 / Schraubklemmen Shield oder Kabel zum anlöten an den Sensor

Der Sensor hat drei Anschlüsse. der rote Kontakt 5V, der schwarze GND und der gelbe ist der Kontakt für das Temperatursignal. An diesem Kontakt gibt der Sensor eine Spannung zwischen 0 und 1,5 Volt aus. Wobei 0V 0°C entsprechen und der Wert 1,5V entspricht 150°C.  Die Spannung dieses Pins muss vom Mikrocontroller-Board ausgelesen und in einen Temperaturwert umgerechnet werden.

– Das besondere an diesem Temperatursensor ist seine wasserdichte Eigenschaft. Somit kann mit dem LM35 die Temperatur von Flüssigkeiten gemessen 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).

Aufbau mit Schraubklemmen Shield:

lm2

 

int LM35 = A0; //Der Sensor soll am analogen Pin A0 angeschlossen werden. Wir nennen den Pin ab jetzt „LM35“

int temperatur = 0;//Unter der Variablen „temperatur“ wird später der Temperaturwert abgespeichert.

int temp[10]; //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.

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




void setup() 
{
Serial.begin(9600); //Im Setup beginnen wir die serielle Kommunikation
}


void loop() 
{

//genauere Erklärung unter dem Code *1

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

delay(time);

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

delay(time);

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

delay(time);

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

delay(time);

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

delay(time);

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

delay(time);

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

delay(time);

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

delay(time);

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

delay(time);

temp[9] = map(analogRead(LM35), 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; 

Serial.print(temperatur);

Serial.println(" Grad Celsius");

}

Genauere Erklärung zum Loop *1:

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(LM35), 0, 307, 0, 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(LM35)“. Die Messwerte sollten zwischen 0 und 307 liegen. Das entspricht am analogen Port den Werten zwischen 0 V und 1,5V. Die Spannung gibt der Sensor bei Temperaturen zwischen 0°C und +150°C aus. Diese Werte am analogen Port werden nun durch den „Map-Befehl“ direkt in die °Celsius Werte zwischen 0 und 150 umgewandelt.

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

Zuletzt 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 LM35 = A0;

int temperatur = 0;

int temp[10];

int time= 20;

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

void setup() 
{
Serial.begin(9600);
pinMode (piezo, OUTPUT); //Der Piezo-Lautsprecher an Pin5 soll ein Ausgang sein (Logisch, weil der ja vom Mikrokontroller-Board ja eine Spannung benötigt um zu piepsen.
}

void loop() {

temp[0] = map(analogRead(LM35), 0, 307, 0, 150);
delay(time);
temp[1] = map(analogRead(LM35), 0, 307, 0, 150);
delay(time);
temp[2] = map(analogRead(LM35), 0, 307, 0, 150);
delay(time);
temp[3] = map(analogRead(LM35), 0, 307, 0, 150);
delay(time);
temp[4] = map(analogRead(LM35), 0, 307, 0, 150);
delay(time);
temp[5] = map(analogRead(LM35), 0, 307, 0, 150);
delay(time);
temp[6] = map(analogRead(LM35), 0, 307, 0, 150);
delay(time);
temp[7] = map(analogRead(LM35), 0, 307, 0, 150);
delay(time);
temp[8] = map(analogRead(LM35), 0, 307, 0, 150);
delay(time);
temp[9] = map(analogRead(LM35), 0, 307, 0, 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) //Es wird eine IF-Bedingung erstellt:Wenn der Wert für die Temperatur über oder gleich 30 ist, dann…

{

digitalWrite(piezo,HIGH);//…fange an zu piepsen.

}

else //Und wenn das nicht so ist…

{

digitalWrite(piezo,LOW); //…dann sein leise.

}

}