Bereits im September 2021 wurden wir von dem Projekt "Klassenzimmer unter Segeln" (KUS) kontaktiert und gefragt, ob wir mit unseren Produkten unterstützen wollen. Bei KUS handelt es sich um ein Bildungsprojekt der Friedrich-Alexander-Universität Erlangen-Nürnberg, das es Schülern ermöglicht, mehrere Monate auf einem Segelschiff zu verbringen. Dabei wird der Schulunterricht an Bord weitergeführt und die Schüler haben gleichzeitig die Möglichkeit, Ihre Persönlichkeit weiterzuentwickeln und fremde Kulturen kennen zu lernen.
Wir waren gerne bereit, für den technisch-naturwissenschaftlichen Unterricht Produkte zu spenden und den Schülern die Möglichkeit zu geben, auf hoher See eine Wetterstation zu bauen.
Nachfolgende Projektbeschreibung haben wir freundlicherweise von KUS zur Veröffentlichung erhalten. Mögliche Fehler in der Projektbeschreibung bitten wir bei diesem Gastbeitrag zu entschuldigen.
Wir wünschen viel Freude beim Nachbauen!
Nutzen
Diese Tragbare Wetterstation ist in der Lage, die wichtigsten Wetterinformationen (Temperatur, Luftdruck und Luftfeuchtigkeit) aufzuzeichnen und zeitnah über das Display zu präsentieren.
Funktionsweise
Die Station ruft die Wetterinformationen von ihren Sensoren ab (einem Temperatur-/Drucksensor und einem Luftfeuchtigkeitssensor). Das Mikrocontroller Board verarbeitet die Information dann und schickt die grafisch aufbereiteten Daten an das Display, welches diese anzeigt.
Benötigte Bauteile
1 |
|
1 |
|
1 |
BMP180 Barometrischer Luftdruck und Temperatur Sensor alternativ |
1 |
Mikrocontroller Board ATmega328 alternativ |
1 |
Optional: Breadboard Kit |
Schaltplan
Benötigte Bibliotheken (Libraries)
DHT.h |
Bibliotheksverwaltung |
DHT22 Luftfeuchtigkeit-Sensor |
SPI.h |
In Arduino IDE integriert |
BUS System |
Wire.h |
In Arduino IDE integriert |
BUS System |
Adafruit_GFX.h |
Bibliotheksverwaltung |
Adafruit Basis-Library |
Adafruit_SSD1306.h |
Bibliotheksverwaltung |
OLED-Display |
Adafruit_BMP085.h |
Bibliotheksverwaltung |
BMP180 Luftdruck/Temperatur-Sensor |
Quellcode
//Bibliotheken abrufen #include "DHT.h" #include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <Adafruit_BMP085.h> //Sensor-Pin des Feuchtigkeitssensors festlegen #define DHTPIN 6 //Sensortyp des Feuchtigkeitssensors festlegen #define DHTTYPE DHT22 //Displaygröße festlegen: Breite von 128 Pixeln / Höhe von 64 Pixeln #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 //Reset festlegen (muss festgelegt werden, wird in unserem Projekt jedoch nicht verwendet) #define OLED_RESET 4 //Display initialisieren Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); //Luftdruck-/Temperatursensor initialisieren Adafruit_BMP085 bmp; //Der Luftfeuchtigkeit-/Temperatursensor wird initialisiert DHT dht(DHTPIN, DHTTYPE); //Das Programm wird vorbereitet void setup() { //Die serielle Kommunikation wird begonnen Serial.begin(9600); //Das BUS-System wird initialisiert Wire.begin (); //Der Luftfeuchtigkeit-/Temperatursensor wird gestartet dht.begin(); //Überprüfung der Funktionstüchtigkeit Drucksensors if (!bmp.begin()) { Serial.println("Could not find a valid BMP085 sensor, check wiring!"); while (1) {} } //Überprüfung der Funktionstüchtigkeit des Luftfeuchtigkeit-/Temperatursensors Serial.println(F("DHTxx test!")); //Funktionstest des Displays if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); } //Display zurücksetzen display.clearDisplay(); //Textfarbe des Displays festlegen display.setTextColor(WHITE); } //Programmschleife starten void loop() { //Verzögerung zur Entlastung des Arduino-Boards delay(2000); //Luftfeuchte und Temperatur messen und Variablen für diese festlegen float h = dht.readHumidity(); float t = dht.readTemperature(); //Fehlermeldung bei fehlerhaftem Lesen if (isnan(h) || isnan(t)) { Serial.println(F("Failed to read from DHT sensor!")); return; } display.clearDisplay(); //Display zurücksetzen display.setCursor(0,0); //Cursorposition festlegen //Display mit Text und Werten füllen display.setTextSize(1); //Textgröße festlegen display.println(F("Luftfeuchtigkeit: ")); display.setTextSize(2); display.print(h); display.println(("%")); display.setTextSize(1); display.print(F("Temperatur: ")); display.setTextSize(2); display.print(t); display.println(("C ")); display.setTextSize(1); display.print(F("Pressure = ")); display.setTextSize(2); display.print(bmp.readPressure()/100-4); // Luftdruck abrufen und mit Korrekturfaktor versehen display.println(" mbar"); display.display(); //Auf dem Display ausführen }
Fazit
Wir fanden heraus, dass es wichtig ist, den Steckplan mehrmals gewissenhaft auf seine Korrektheit und Funktionsweise zu überprüfen. Weiterhin ist es empfehlenswert, den Drucksensor anhand einer unabhängigen Station mit einem Korrekturfaktor zu kalibrieren, um genaueste Messergebnisse gewährleisten zu können. Trotz der zahlreichen verwendeten Bibliotheken erwies sich die Interkompatibilitätsfähigkeit dieser als herausragend.
Wir als Klassenzimmer-unter-Segeln-Jahrgang 2021/2022, hatten sehr viel Spaß bei der Erstellung dieses Programmes und wünschen Ihnen viel Spaß bei der Verwendung unserer Wetterstation.
Für den mobilen Einsatz wird meist eine Spannungsversorgung mit Akkus oder Batterien benötigt. Wie man so etwas umsetzen kann, zeigen wir u.a. in der Blogreihe Der sprechende Farbdetektor mit DFPlayer und TCS3200.