Arduinotutorials, -experimente und -projekte in den Naturwissenschaften
Die hier veröffentlichen Anleitungen (Tutorials) gehen von den einfachsten Grundlagen der Elektronik und des Aubaus von Experimentierschaltungen über einfache Programmierung bis hin zu komplexeren Programmen. Die Teile bauen beim Verständnis der Komponenten im Prinzip aufeinenader auf, sind aber in sich selbst abgeschlossen.
Grundlagen
1. Das Steckbrett (Breadboard)
2. Steckbrett: Schaltplan und Steckbrett-Aufbau
4. Arduino-Projekt: Blinkschaltung
Projekte und Experimente
5. Arduino-Projekt: Temperaturmessung mit analogem Temperatursensor
6. Experiment Verdunstungskälte
8. Arduino-Projekt: Glättung von Messreihen
9. Arduino-Projekt: Helligkeitsmessung mit Fotowiderstand
10. Arduino-Projekt: Temperaturmessung mit digitalem IC DS18B20
11. Arduino-Projekt: CO2-Messung mit dem Sensor MHZ19B
12. Arduino-Projekt: Luftdruck mit BMP280-Sensor messen
Link zu dieser Seite:
5. Arduino-Projekt: Temperaturmessung mit analogem Temperatursensor
Der Sensor
Für dieses Projekt wird der dem Arduino-Kit beiligende Temperatursensor oder ein ähnlicher verwendet:
TMP36 - 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:
Bei 25° C sind das 750 mV. Der Sensor liefert 10mV/1°C und hat einen Temperaturbereich von -40° C bis +125° C:
Das bedeutet, dass 0° C ein Spannungswert von 750mV - 25 * 10mV = 500mV anliegen.
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:
Und so kann der Aufbau mit dem Steckbrett aussehen:
So könnte der Aufbau in echt aussehen:
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:
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)