Tragbare Wetterstation - Ein Schülerprojekt von Klassenzimmer unter Segeln - AZ-Delivery

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

0,96 Zoll OLED SSD1306 Display I2C 128 x 64 Pixel

1

DHT22 AM2302 Temperatursensor und Luftfeuchtigkeitssensor

1

BMP180 Barometrischer Luftdruck und Temperatur Sensor

alternativ

BMP280 Barometrischer Sensor für Luftdruckmessung

1

Mikrocontroller Board ATmega328

alternativ

Mikrocontroller Board mit ATmega328P, ATmega16U2

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

Sketch Download

//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.

DisplaysFür arduinoProjekte für anfängerSensoren

Lascia un commento

Tutti i commenti vengono moderati prima della pubblicazione