
Ziel des Projekts
Das Programm liest Temperatur und Luftfeuchtigkeit, berechnet nach jeweils fünf Messungen einen Durchschnittswert für die Temperatur und zeigt diesen Wert ausführlich im Seriellen Monitor und in einer Kurzfassung auf einem OLED an.
So sieht es aus: (Messung an unterschiedlichen Tagen)

Benötigte Bauteile
- ⇒DHT11/DHT22
- ⇒OLED-Display 0,96 Zoll/1,3 Zoll
- Leitungsdrähte
Der Schaltplan
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Benötigte Bibliotheken


Das Programm
Binde die benötigten Bibliotheken ein und definiere die Variablen.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include "DHT.h" #include "SSD1306Ascii.h" #include "SSD1306AsciiWire.h" // Name des OLED festlegen (oled) SSD1306AsciiWire oled; // Adresse I2C #define I2C_ADDRESS 0x3C // Pin des DHT-Sensors int SENSOR_DHT = 9; // Sensortyp festlegen // DHT22 oder DHT11 #define SensorTyp DHT22 // Sensor DHT einen Namen zuweisen DHT dht(SENSOR_DHT, SensorTyp); int AnzahlMessungen = 0; // Array für die Anzahl der Messungen float Messung[5]; // Variable für die Berechnung der Durchschnittstemperatur float Durchschnitt; // Länge des Arrays Messung int Anzahl = sizeof(Messung) / sizeof(Messung[0]); |
Der setup-Teil:
Im loop-Teil zwei Funktionen aufgerufen. Die Funktion DurchschnittBerechnen berechnet den Durchschnitt der letzten Messungen. Die Anzahl wird durch die im Kopf definierte Größe des Arrays Messung festgelegt. Als Variable werden ihr das Array Messung und die Größe des Arrays Messung übergeben.
Die Funktion PunktErsetzen ersetzt in den gemessenen Werten den Punkt durch ein Komma.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
float DurchschnittBerechnen(float Messung[], int Anzahl) { float Durchschnitt = 0; for (int i = 0; i < Anzahl; i++) { Durchschnitt = Durchschnitt + Messung[i]; // Funktion PunktErsetzen -> , durch . ersetzen String AnzeigeDurchschnitt = PunktErsetzen(String(Messung[i])); // aktuelle Messung anzeigen Serial.println("Messung " + String(i + 1) + ": " + AnzeigeDurchschnitt); } // Durchschnitt berechnen Durchschnitt = Durchschnitt / Anzahl; return Durchschnitt; } String PunktErsetzen(String ErsatzString) { ErsatzString.replace(".", ","); return ErsatzString; } |
Der loop-Teil:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
void loop() { float Temperatur; float Luftfeuchtigkeit; // Daten lesen Temperatur = dht.readTemperature(); Luftfeuchtigkeit = dht.readHumidity(); Serial.println("Messung: " + String(AnzahlMessungen + 1)); // . durch , ersetzen String AnzeigeTemperatur = PunktErsetzen(String(Temperatur)); String AnzeigeLuftfeuchtigkeit = PunktErsetzen(String(Luftfeuchtigkeit)); // Ausgabe im Seriellen Monitor mit Tabstopps formatieren Serial.print("Temperatur: \t\t"); Serial.println(AnzeigeTemperatur + " °C"); Serial.print("Luftfeuchtigkeit: \t"); Serial.println(AnzeigeLuftfeuchtigkeit + " %"); Serial.println("---------------------------------------"); // Ausgabe auf dem OLED oled.setCursor(0, 0); oled.print("Temperatur: "); oled.print(AnzeigeTemperatur + " Grad"); oled.println(); oled.print("Feuchtigkeit: "); oled.println(AnzeigeLuftfeuchtigkeit + " %"); // aktuelle Temperatur in das Array Messung schreiben Messung[AnzahlMessungen] = Temperatur; AnzahlMessungen ++; // wenn jeweils Anzahl Messungen erfolgt sind // AnzahlMessungen lässt sich ohne Rest durch Anzahl teilen if (AnzahlMessungen % Anzahl == 0) { /* Durchschnitt berechnen der Funktion DurchschnittBerechnen wird das Array Messung und die Länge des Arrays Messung (Anzahl übergeben */ Durchschnitt = DurchschnittBerechnen(Messung, Anzahl); // . durch , ersetzen String AnzeigeDurchschnitt = PunktErsetzen(String(Durchschnitt)); // Ausgabe der Durchschnittstemperatur Serieller Monitor Serial.print("Durchschnitt der letzten " + String(Anzahl)); Serial.println(" Messungen: " + AnzeigeDurchschnitt + " °C"); Serial.println("---------------------------------------"); // Ausgabe der Durchschnittstemperatur OLED oled.println("------------------------------"); oled.print("Durchschnitt: " + AnzeigeDurchschnitt + " Grad"); AnzahlMessungen = 0; } // mindestens 2 Sekunden Pause delay(2000); } |
Ähnliche Projekte
- Messwerte BME280 anzeigen
- Messwerte des DHT-Sensors und Zeit auf TFT anzeigen
- Messwerte DHT-Sensor auf SD-Karte im CSV-Format speichern
- Messwerte DHT-Sensor mit Bluetooth-Modul an Smartphone übermitteln und auf SD-Karte speichern
- Wetterstation mit DHT-Sensor und Ethernet-Shield
- Messwerte DHT auf einem LCD anzeigen
- Wetterstation mit DHT-Sensor und Arduino WiFi Anzeige im Webbrowser
- Messwerte DHT-Sensor auf Waveshare 1,54 Zoll E-Ink anzeigen
- Klimaanlage mit 12V-Lüfter und Transistor
- Messwerte des BME680-Sensors auf LCD und im Webbrowser anzeigen
letzte Aktualisierung:

