Climapse - Mikrocontroller Arduino
Überblick
Überblick
Schlüsselwörter: Datenerfassung, Mikrocontroller
Disziplinen: Physik, Mathematik, IKT
Altersstufe: 12-16 (Diese Einheit ist für fortgeschrittenere Schüler*innen, die verschiedene Sensoren verdrahten und in C++ programmieren können.)
Nach der Konfrontation mit einigen schockierender Daten über die Luftverschmutzung oder extreme Wetterereignisse stellt die Lehrkraft den Schüler*innen den jeweils in der Schule verwendeten Mikrocontroller und einige Sensoren vor, die während der Forschung eingesetzt werden sollen. Die verwendeten Mikrocontroller erfüllen die gleichen Aufgaben wie die von den Wetter- oder Umweltdiensten verwendeten Steuereinheiten, wenn auch auf ausgefeiltere und vollständigere Weise.
Nachdem die Lehrkraft die Controller und Sensoren vorgestellt hat, konzentriert sie sich auf die physikalischen Messungen. Die Lehrkraft erklärt den Schüler*innen, wie Sensoren physikalische Größen messen, wie sie die Daten an den Mikrocontroller übertragen, wie diese Größen in Zahlen umgewandelt werden, wie die Zahlen intern dargestellt und im Gerät verarbeitet werden.
Anschließend wird die Darstellung von Daten in Diagrammen behandelt, wobei die Bedeutung der Darstellung von physikalischen Größen im Zeitverlauf hervorgehoben wird, um die Entwicklung von Parametern und deren Einfluss auf das Wetter und die Umweltverschmutzung zu untersuchen.
Benötigte Teile
- Arduino UNO R3 oder Arduino MKR WiFi 1010
- PC mit integrierter Entwicklungsumgebung Ardiuino.CC IDE
- LM35-Sensor mit Grundkabeln
- weitere Sensoren, die Sie nutzen möchten
Die Bedeutung von Daten
Die Schüler*innen lernen die Bedeutung der Datenerfassung und -speicherung kennen.
Die Lehrkraft wählt eine tägliche, monatliche oder jährliche Reihe von Umweltparametern wie CO2 / NOx / PMxx Konzentrationswerte. Nützliche Online-Tools wie der EO Browser der ESA können genutzt werden, um eine grafische Darstellung dieser Parameter zu erhalten. Eine jährliche Datenreihe könnte zeigen, dass die Umweltverschmutzung im Sommer geringer ist, in der Hauptverkehrszeit höher und so weiter. Die gleiche zeitliche Abhängigkeit könnte für die Niederschläge gefunden werden, die im Herbst und Frühjahr möglicherweise stark und anhaltend sind, während sie im Sommer nur sporadisch aber umso heftiger auftreten und beeindruckende Zahlen zeigen. An diesem Punkt sollten die Schüler*innen die Bedeutung der Datenerfassung und -speicherung verstehen. Sie werden versuchen, in kleinem Maßstab nachzubilden, was internationale Dienste wie Copernicus für die wissenschaftliche Gemeinschaft leisten.
Die Lehrkraft betont auch die Bedeutung einer kontinuierlichen Datenerfassung, die nicht unterbrochen wird, um eine vollständige Darstellung des Datenverlaufs zu gewährleisten.
Das Steuergerät
Jetzt sind die Schüler*innen bereit, mit ihrer Hauptaufgabe zu beginnen: Sie werden einen kleineren Nachbau einer meteorologischen/umwelttechnischen Messstation zusammenbauen. Wir haben den Mikrocontroller Arduino UNO R3 für den Unterricht verwendet, mit Sensoren für Temperatur, Luftdruck und CO2. Es gibt eine Fülle von Mikrocontrollern und Sensoren, die Sie für Ihren Unterricht verwenden können; sie sind leicht zu finden und kostengünstig.
Auf der Webseite Arduino.cc finden Sie alles, was Sie brauchen, um mit der Programmierung des Arduino-Boards zu beginnen. Viele Beispiele und Skeletons werden direkt in der IDE von Arduino bereitgestellt. Die IDE ist die Software, die Sie installieren müssen, um den C++-Code zu schreiben, ihn zusammen mit den Daten auf die physische Arduino-Einheit herunterzuladen und sie zu verwenden. Sie finden die IDE auf der Webseite Arduino.cc.
Wenn Sie ein neues Arduino-C++-Programm starten, wird das Grundgerüst des Codes sofort von der IDE bereitgestellt: ein „Setup"-Abschnitt und ein „Loop"-Abschnitt. Das Setup wird nur einmal beim Einschalten des Systems ausgeführt und dient zum Einrichten der Geräte und Sensoren, die Sie verwenden. Die Schleife ist, wie Sie sich vielleicht vorstellen können, die Garantie dafür, dass der Arduino kontinuierlich die Datenerfassung durchführt, die Sie an einem bestimmten Tag benötigen, wenn die Stromzufuhr gesichert ist. Sie können sich auf die kontinuierliche Ausführung des Befehlscodes innerhalb der geschweiften Klammern (die die Schleife umfassen) verlassen.
void setup() {
// Geben Sie hier Ihren Setup-Code ein, der einmal ausgeführt werden soll:
}
void loop() {
// Hier geben Sie Ihren Datenerfassungscode ein, der wiederholt ausgeführt werden soll:
}
Nun ist es an der Zeit, einen Sensor an Ihren Mikrocontroller anzuschließen. Wir nutzen hier den sehr bekannten LM35-Temperatursensor als Beispiel. Er misst die Außentemperatur und überträgt einen Spannungswert über einen analogen Eingangspin an den Arduino: Sie finden die analogen Eingangspins mit der Bezeichnung A0...A5 in der unteren linken Ecke (siehe Bild ). Wir haben A0 für den Anschluss des Sensors gewählt. In den folgenden Bildern sehen Sie das einfache Anschlussschema.
Der Sensor könnte anders aussehen als der, den Sie haben, aber keine Sorge: Sie bekommen immer 3 Drähte, die Sie an das Arduino-Board anschließen können.
Danach müssen Sie nur noch den Code mit der von Ihnen installierten Arduino IDE schreiben: Sie können den folgenden Code kopieren und einfügen:
void setup()
{ Serial.begin(9600);//Baudrate auf 9600 bps einstellen
pinMode(LED_BUILTIN, OUTPUT);
}
unsigned int intdelay=1000; wait 1000 ms
void loop()
{
uint16_t val;
doppeltes dat;
digitalWrite(LED_BUILTIN, HIGH); // schaltet die LED ein (HIGH ist der Spannungspegel)
val=analogRead(A0);//Anschluss von LM35 an Analog 0
dat = (double) val * (5/10.24); // Vref an UNO 5,0 V
Serial.print("Temp:"); //Anzeige der Temperatur auf dem seriellen Monitor
Serial.print(dat);
Serial.println("°C");
delay(intdelay); // eine Sekunde lang warten
digitalWrite(LED_BUILTIN, LOW); // schaltet die LED aus, indem die Spannung auf LOW gesetzt wird
}
Jetzt konzentrieren wir uns auf die rot markierte Anweisung:
Das bedeutet, dass der Arduino für jede beliebige Schleife den vom Sensor am Analogeingang A0 eingegebenen Wert liest und den gelesenen Wert in der Variablen „val“ speichert, wo er für Sie verfügbar ist. Es wird eine Zahl zwischen 0 und 1023 sein. Wie kommt es, dass eine Temperatur in diese scheinbar seltsame Zahl umgewandelt wurde? Um diese Frage zu beantworten, müssen wir uns ansehen, was bei der Temperaturmessung geschieht.
Magische Zahlen
Moderne Sensoren liefern in der Regel eine physikalische Größe über eine indirekte Messung: Oft wird eine physikalische Größe durch eine Änderung der elektrischen Eigenschaften gemessen. Eine Änderung der Leitfähigkeit, des Widerstands oder anderer elektrischer Eigenschaften führt in der Regel zu einer anderen Spannung, die an den Analogpins des Arduino anliegt. Aus diesem Grund liefert Ihr Sensor über A0 eine Spannung zwischen 0 und 5 V, der Skala, die der Arduino messen kann. Direkt danach wandelt der rot hervorgehobene Befehl „analogRead (A0)“ den Eingangsspannungsbereich, 0 bis 5 Volt, in einen numerischen Wert zwischen 0 und 1023 um. Dies geschieht durch eine Schaltung innerhalb des Mikrocontrollers, die als Analog-Digital-Wandler (AD-Wandler) bezeichnet wird. Die gelesene Spannung wird vom AD-Wandler in eine Zahl umgewandelt, die mit 10 Bits dargestellt werden kann. Nachfolgend einige numerische Beispiele.
Die Zahl 0
Position |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Digitaler Wert |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Die Zahl 28+28+28+28=256+32+4+1=293
Position |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Digitaler Wert |
|
1 |
|
|
1 |
|
|
1 |
|
1 |
Die Zahl 1023 = 210-1
Position |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Digitaler Wert |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Jetzt sind Sie fast am Ziel. Sie müssen die Zahl nur noch in einen einheitlichen Temperaturwert umwandeln.
Wenn Sie einen Sensor kaufen, erhalten Sie in der Regel ein Handbuch (Datenblatt). Im Datenblatt des LM_35 erfahren Sie, dass die Auflösung des lm_35 10 mV/°C beträgt, was bedeutet, dass Sie für jede Abweichung von 10 Millivolt im Eingangssignal eine Abweichung von 1 °C erhalten. Da das Eingangssignal eine Zahl von 0-1023 ist, müssen Sie nur 5 V/1024=0,00488 V pro I N Einheit berechnen, d.h. 4,88 mV pro Einheit, die durch einen einzigen Schritt verursachte Veränderung. Diese Auflösung bedeutet, dass die Genauigkeit des Sensors 0,5 °C beträgt. Das ist nicht viel, aber für unsere Anwendung reicht es aus. Um ein Beispiel zu geben, wenn wir die 50 Einheiten als Eingangssignal haben, folgt daraus ein Temperaturwert von 50 x 4,88 mV=244 mV. Bei 10 mV/°C bedeutet dies 244/10=24,4 °C. Ganz einfach! Das sollte den Befehl erklären
dat = (double) val * (5/10.24); // Vref an UNO 5,0 V
(wobei 5/10,24 = 0,488 °C pro digitalem Schritt sind) mit dem Sie in dat
die gewünschte Temperatur (in Celsius) erhalten sollten. Jetzt können Sie Ihren Wert verwenden: Sie können ihn auf dem Board speichern oder über den seriellen Monitor senden.
Feineinstellung des Arduino
Die Anweisung delay(nnn)
weist den Arduino an, für „nnn“ Millisekunden zu warten, ohne etwas zu tun. Es gibt Daten, die jede Stunde erfasst werden müssen, andere Daten einmal pro Tag, wieder andere mit einer höheren Frequenz. Sie können diesen Befehl verwenden, um die Aktualisierung der Datenerfassung fein abzustimmen, indem Sie innere Schleifen in der Hauptschleife bilden, die nur für Vielfache der kürzeren Verzögerung aktiv sind. Siehe unser Beispiel. Um sicherzugehen, dass die Schüler*innen die Bedeutung der Aktualisierungsfrequenz richtig verstanden haben, lassen Sie sie ihre eigene Strategie für die Aktualisierungsfrequenz entwickeln.
Die Daten aus dem Arduino ziehen
Jetzt haben Sie die Zahlen, und Sie sind bereit, sie aus dem Arduino zu ziehen und grafisch darzustellen.
Der einfachste und schnellste Weg, um an Ihre Daten zu kommen, ist, sie auf einer SD-Karte zu speichern. Sie können eine SD-Karte in den Arduino einstecken. Eine SD-Karte wird vom Mikrocontroller weitgehend als Datei betrachtet und auch so behandelt. Sie müssen sie definieren, öffnen, beschreiben und schließen, bevor Sie die Anwendung beenden. Wenn Sie nicht wissen, wie man eine Datei benutzt, finden Sie auf der Arduino-Webseite eine komplette, gebrauchsfertige Bibliothek (gebrauchsfertige Befehle, die direkt in Ihrem Anwendungscode verfügbar sind) mit einer Anleitung, wie man sie benutzt.
Beispielcode
Sie können das folgende Beispiel kopieren und in den Arduino IDE-Editor einfügen oder es in der Arduino Project Hub cloud finden.
/*
Climapse Science on Stage
Beispiel für atmosphärische Parameter, die über den Sensor gelesen werden
Liest die Temperatur am Analogeingang A0, druckt das Ergebnis auf dem seriellen Monitor
Ausgabe eines Lichtalarms mit roter LED, wenn die Temperatur über 30 °C liegt
Dieser Beispielcode ist öffentlich zugänglich.
*/
void setup()
{
Serial.begin(9600);//Baudrate auf 9600 bps für serielle Überwachungsdaten einstellen TXRX
pinMode(LED_BUILTIN, OUTPUT); // Eingebaute LED auch digitaler Ausgang #13
pinMode(7, OUTPUT); // Pin 7 wird als digitaler Ausgang verwendet, um eine sichtbare Warnung über die LED auszugeben
}
void loop()
{
uint16_t val;
double dat;
digitalWrite(LED_BUILTIN, HIGH); // eingebaute LED wird als Schleifenblinker verwendet
val=analogRead(A0);// Stellen Sie sicher, dass der LM35-Sensor an Analog 0 angeschlossen ist.
dat = (double) val * (5/10.24); // Umrechnung in Grad Celsius
Serial.print("Temperature : "); //Anzeige der Temperatur auf dem seriellen Monitor
Serial.print(dat);
Serial.println("C");
if (dat > 30.0)
{
digitalWrite(7, HIGH); // LED an
}
else
{
digitalWrite(7, LOW); // LED aus
}
delay(300);
digitalWrite(LED_BUILTIN, LOW); // um anzuzeigen, dass die Schleife regelmäßig läuft
delay(200);
}
Sensormultiplikation
Sobald Sie einen Sensor angeschlossen haben, der dem Arduino ein analoges Signal liefert, können Sie viele andere Sensoren anschließen, um andere physikalische Größen zu erhalten. Das Funktionsprinzip ist sehr ähnlich: Sie erhalten ein analoges Signal, das in einen numerischen 10-Bit-Wert umgewandelt wird. Anschließend verwenden Sie das Datenblatt, um die Sensorauflösung und die Abtastgenauigkeit zu ermitteln. Sagen Sie den Schüler*innen, dass sie die gleiche Aufgabe mit einem Luftdrucksensor und einem Luftqualitätssensor lösen sollen. Schon ist Ihre Anwendung an einem Ort Ihrer Wahl einsatzbereit, wo Sie es für sinnvoll erachten, Daten zu physikalischen Größen zu gewinnen.
Zusätzliche Aktivität
Das Arduino MKR WiFi 1010 ist ein Board der Arduino-Familie mit „Grove“-Anschlüssen und bietet eine integrierte WLAN-Verbindungsfunktion.
Er kann mit seinem Connector Shield, dem Arduino MKR Connector Carrier, verwendet werden, um das Anschließen der Sensoren zu erleichtern („Grove“ – Anschluss).
Wenn sich die Schüler*innen im Umgang mit dem Arduino-Board und seinen Sensoren sicherer fühlen, können Sie dieses Programm mit Sensoren für Temperatur, Feuchtigkeit, Luftdruck und Feinstaub ausprobieren.
Wir haben diese Anwendung mit einigen Geräten in unserer Schule installiert.
Die Anwendung sendet Daten an einen Server innerhalb des lokalen WLAN-Netzwerks. Sie benötigen Bibliotheken, die in die Arduino-IDE eingebunden werden müssen, aber das Einbinden von Bibliotheken ist sehr einfach.
Alle Details zu diesem Projekt sind im Arduino Project Hub zu erreichen.
www.sentinel-hub.com/explore/eobrowser/
Für Informationen zum Gebrauch des EO-Browsers siehe Online Monitoring Tools: EduMed and EO BrowserTemperature monitoring example on the Arduino Project Hub
Ressource in EnglischAtmospheric monitoring project on the Arduino Project Hub
Ressource in Englisch
Autor*innen von Climapse - Mikrocontroller Arduino: Johannes Almer (DE), Marco Nicolini (IT), Teresita Gravina (IT)
Diese Seite teilen