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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | #include “SdFat.h” #include “DHT.h” // Bezeichnung der SD-Karte SdFat SD; // Pin des DHT-Sensors int SENSOR_DHT = 8; // Sensortyp festlegen // DHT22 oder DHT11 #define SensorTyp DHT11 // Sensor DHT einen Namen zuweisen DHT dht(SENSOR_DHT, SensorTyp); // Bibliothek für das RTC-Modul #include <RTClib.h> RTC_DS3231 rtc; // Bezeichnung der Textdatei File Temperaturmessung; // Datenpin für das SD-Kartenmodul/Ethernet-Shield int DatenPin = 4; // Datenpin für das Datenlogger-Shield // int DatenPin = 10; String AktuellesDatum; String AktuelleZeit; void setup() { Serial.begin(9600); // auf serielle Verbindung warten while (!Serial) {;} Serial.println(F(“Initialisiere SD-Karte”)); if (!SD.begin(DatenPin)) { Serial.println(F(“Initialisierung fehlgeschlagen!”)); } else Serial.println(F(“Initialisierung abgeschlossen”)); rtc.begin(); /* wenn Datum und Zeit nicht korrekt ⇒ Datum/Zeit setzen Jahr, Monat, Tag, Stunde, Minute, Sekunde rtc.adjust(DateTime(2023, 8, 6, 10, 30, 30)); */ // Sensor DHT starten dht.begin(); } void loop() { DateTime aktuell = rtc.now(); // Daten lesen float Temperatur = dht.readTemperature(); float Luftfeuchtigkeit = dht.readHumidity(); // Funktion aufrufen ZeitAusgeben(aktuell); // in Strings umwandeln, . durch , ersetzen String AnzeigeTemperatur = String(Temperatur); AnzeigeTemperatur.replace(“.”, “,”); String AnzeigeLuftfeuchtigkeit = String(Luftfeuchtigkeit); AnzeigeLuftfeuchtigkeit.replace(“.”, “,”); Serial.print(F(“Temperatur:\t\t”)); Serial.println(AnzeigeTemperatur); Serial.print(F(“Luftfeuchtigkeit in %:\t”)); Serial.println(AnzeigeLuftfeuchtigkeit); /* in Datei schreiben O_CREAT -> Datei erstellen, wenn sie nicht existiert O_WRITE -> in die Datei schreiben O_AT_END -> Startposition zum Schreiben an das Ende der Datei setzen */ if (!Temperaturmessung.open(“Messung.csv”, O_CREAT | O_WRITE | O_AT_END)) { Serial.print(F(“Datei kann nicht ge\u00f6ffnet werden!”)); } // wenn die Datei geöffnet werden konnte … if (Temperaturmessung) { Serial.println(F(“Schreibe Messdaten in die Datei Messung.csv … ”)); Serial.println(F(“———————————–”)); // Überschrift in Datei schreiben // Funktion aufrufen schreibeUeberschrift(); Temperaturmessung.print(AktuellesDatum + “;”); Temperaturmessung.print(AktuelleZeit + “;”); Temperaturmessung.print(AnzeigeTemperatur + “;”); Temperaturmessung.print(AnzeigeLuftfeuchtigkeit); Temperaturmessung.println(); // Schreibfehler abfragen if (!Temperaturmessung.sync() || Temperaturmessung.getWriteError()) { Serial.print(F(“Schreibfehler!”)); } else { // Datei schließen Temperaturmessung.close(); Serial.println(F(“Abgeschlossen.”)); Serial.println(); } } // Zeit bis zur nächsten Messung (eine Minute) delay(60000); } void ZeitAusgeben(DateTime aktuell) { char Datum[] = “DD.MM.YYYY”; AktuellesDatum = aktuell.toString(Datum); char Zeit[] = “Uhrzeit: hh:mm:ss”; AktuelleZeit = aktuell.toString(Zeit); Serial.println(AktuellesDatum + ” ” + AktuelleZeit); } void schreibeUeberschrift() { Temperaturmessung.println(); Temperaturmessung.print(F(“Datum”)); // ; als Trennzeichen für die CSV-Datei Temperaturmessung.print(“;”); Temperaturmessung.print(F(“Zeit”)); Temperaturmessung.print(“;”); Temperaturmessung.print(F(“Temperatur in °C”)); Temperaturmessung.print(“;”); Temperaturmessung.print(F(“Luftfeuchtigkeit in %”)); Temperaturmessung.println(); } |
Letzte Aktualisierung: