// Librarie // Grove Barometer Sensor BMP280 (Seeed Studio) // Grove Temperature And Humidity Sensor (Seeed Studio) // DHT11 Sensor Library (Adafruit) // Grove Temperature and Humidity Sensor (Seeeed Studio) #include #include "Seeed_BMP280.h" #include "rgb_lcd.h" #include #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); BMP280 bmp280; rgb_lcd lcd; float vorigeDruk = 0; unsigned long vorigeTijd = 0; int schermModus = 0; // --- CORRECTIE EN STABILITEIT --- const float DRUK_CORRECTIE = 0.0; const float HOOGTE_CORRECTIE = 0.0; const float TENDENS_DREMPEL = 0.2; float gemiddeldeDruk = 0; float gemiddeldeHoogte = 0; // Extra filter voor hoogte // ------------------------------ void setup() { Serial.begin(9600); lcd.begin(16, 2); dht.begin(); if (!bmp280.init()) { lcd.setRGB(255, 0, 0); lcd.print("BMP280 Error!"); while(1); } // Startwaarden bepalen float drukPa = bmp280.getPressure(); gemiddeldeDruk = (drukPa / 100.0) - DRUK_CORRECTIE; gemiddeldeHoogte = bmp280.calcAltitude(drukPa) + HOOGTE_CORRECTIE; vorigeDruk = gemiddeldeDruk; lcd.setRGB(0, 200, 255); } void loop() { unsigned long huidigeTijd = millis(); // --- FILTERING --- float drukPa = bmp280.getPressure(); float rauweDruk = (drukPa / 100.0) - DRUK_CORRECTIE; // Druk filter (10% nieuw, 90% oud) gemiddeldeDruk = (gemiddeldeDruk * 0.9) + (rauweDruk * 0.1); // Hoogte filter - extra streng (2% nieuw, 98% oud) voor maximale rust float rauweHoogte = bmp280.calcAltitude(drukPa) + HOOGTE_CORRECTIE; gemiddeldeHoogte = (gemiddeldeHoogte * 0.98) + (rauweHoogte * 0.02); float temperatuur = bmp280.getTemperature(); float vochtigheid = dht.readHumidity(); // Wissel elke 5 seconden tussen de schermen if (huidigeTijd - vorigeTijd >= 5000) { vorigeTijd = huidigeTijd; if (schermModus == 3) { vorigeDruk = gemiddeldeDruk; } schermModus++; if (schermModus > 3) schermModus = 0; lcd.clear(); } // Scherm weergave switch (schermModus) { case 0: // Klimaat lcd.setCursor(0, 0); lcd.print("Temperatuur:"); lcd.setCursor(0, 1); lcd.print(temperatuur, 1); lcd.print(" C / "); lcd.print(vochtigheid, 0); lcd.print("%"); break; case 1: // Luchtdruk lcd.setCursor(0, 0); lcd.print("Luchtdruk:"); lcd.setCursor(0, 1); lcd.print(gemiddeldeDruk, 1); lcd.print(" hPa "); break; case 2: // Hoogte (Nu extra stabiel) lcd.setCursor(0, 0); lcd.print("Hoogte meting:"); lcd.setCursor(0, 1); lcd.print(gemiddeldeHoogte, 1); lcd.print(" meter "); break; case 3: // Tendens lcd.setCursor(0, 0); lcd.print("Druk tendens:"); lcd.setCursor(0, 1); if (gemiddeldeDruk > vorigeDruk + TENDENS_DREMPEL) { lcd.print("STIJGEND "); lcd.setRGB(0, 255, 0); } else if (gemiddeldeDruk < vorigeDruk - TENDENS_DREMPEL) { lcd.print("DALEND "); lcd.setRGB(255, 0, 0); } else { lcd.print("STABIEL "); lcd.setRGB(0, 200, 255); } break; } delay(100); }