Luftfeuchtigkeit messen

joel3d:
Es währe nett wenn einer von euch vielleicht mal nach einem Fehler suchen könnte.

Joel3D

Hallo,

in Deinem Sketch is was mit Anaogeingang drin das gehört da nicht rein.

Nimm dir doch erst mal ein Beispiel "DHTtester" aus der Lib für den DHT11,22 und brige das zum laufen. Dann weist Du schon mal ob der Sensor klappt. Da werden die Messwerte in Variablen gespeichert die Du dann weiter verarbeiten kannst. Wenn das dann klappt und Dir beide Messwerte auf dem Monitor angezeigt werden, erweiterst Du das um den SD Kartenleser und schrreibst die Werte in Deine Datei.

Heinz

raznz_snasna:
Das Thema kommt mir ja gerade recht.
.....
Mein Haupt-Anliegen ist aber erstmal, bekomme ich 2 identische Geräte per I2C angesprochen oder soll ich lieber einen DHT22 und einen SHTC3 pro "Messstelle" nutzen.

Mach bitte mit deiner Frage einen neuen, eigenen Thread auf.
Nur so kann man über dein Problem losgelöst und besser diskutieren.

Es währe nett wenn einer von euch vielleicht mal nach einem Fehler suchen könnte.

Wenn ich den Fehler suchen würde, sähe ich mir zuerst mal die zugehörigen Testausgaben auf Serial an.

Fang doch erstmal einfach an

#include "DHT.h" //DHT Bibliothek laden

#define DHTPIN 2 //Der Sensor wird an PIN 2 angeschlossen    

#define DHTTYPE DHT11    // Es handelt sich um den DHT11 Sensor

DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit „dht“ angesprochen

void setup() {
  Serial.begin(9600); //Serielle Verbindung starten

  dht.begin(); //DHT11 Sensor starten
}

void loop() {
  
  delay(2000); //Zwei Sekunden Vorlaufzeit bis zur Messung (der Sensor ist etwas träge)

  
  float Luftfeuchtigkeit = dht.readHumidity(); //die Luftfeuchtigkeit auslesen und unter „Luftfeutchtigkeit“ speichern
  
  float Temperatur = dht.readTemperature();//die Temperatur auslesen und unter „Temperatur“ speichern
  
  Serial.print("Luftfeuchtigkeit: "); //Im seriellen Monitor den Text und 
  Serial.print(Luftfeuchtigkeit); //die zugehörigen Werte anzeigen
  Serial.println(" %");
  Serial.print("Temperatur: ");
  Serial.print(Temperatur);
  Serial.println(" Grad Celsius");

}

Vielen Dank aber bist du sicher das der den Wert auf der SD-Karte speichert?
sieht mir eher nach serial monitor aus.

Joel3D

Tut er nicht, aber das ist erst der nächste Schritt.
Erst mal sicher stellen, dass die Messung funktioniert.

Gruß Tommy

Hallo,

hast Du das schon ausprobiert? Das Schreiben auf SD bekommst Du sicher selber hin. Wo es Beispiele gibt wurde schon mehrfach geschrieben. Sorry ich bekomme immer mehr den Eindruck das Du gar nicht willst. Darum bin ich jetzt hier raus.

das kannst Du sicher noch selbst dahinter hängen zum speichern

 File dataFile = SD.open("datalog.txt", FILE_WRITE);

  // if the file is available, write to it:
  if (dataFile) {
    dataFile.print(Temperatur);dataFile.print(";")
    dataFile.println(Luftfeuchte);
    dataFile.close();

Heinz

Vielen Dank,
der Seriel-Monitor funkktioniert.
ich werde mich dann mal mit dem Aufscheiben befassen.

Joel3D

Vielen Dank an alle die mir einen konstruktiven Tipp gesagt haben.
Das Gerät funktioniert jetzt mit folgendem Code.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); 
#include <SD.h>      //SD Library hinzufügen
#include "DHT.h"      //DHT Library hinzufügen
#define DHTPIN 2      //Pin an dem der DHT angeschlossen ist festlegen
#define DHTTYPE DHT11   //DHT Typ festlegen: Hier DHT11
#define TEMPERATURE 1   
#define HUMIDITY 0     
int feuchte;
int temperatur;
DHT dht(DHTPIN, DHTTYPE); //Sensor initializieren
const int chipSelect = 4; //Chip Pin für die SD Karte(bei UNO 4,bei MEGA 53)
void setup() {
  lcd.init(); //Im Setup wird der LCD gestartet 
lcd.backlight(); //Hintergrundbeleuchtung einschalten (lcd.noBacklight(); schaltet die Beleuchtung aus). 
  pinMode (8, OUTPUT);
  if (startSDCard() == true) // Durch den Rückgriff auf den Programmblock "startSDCard" wird die SD-Karte geprüft. Wenn die SD Karte gelesen werden kann dann soll die onboard-LED an Pin13 zweimal blinken
  { 
  digitalWrite(13, HIGH); //an
  delay(500);
  digitalWrite(13, LOW); //aus
  delay(500);
  digitalWrite(13, HIGH); //an
  delay(500);
  digitalWrite(13, LOW); //aus
  delay(500);
  }
  
  Serial.begin(9600); //Serielle Verbindung starten
  dht.begin();       //DHT Sensor starten
  
}
void loop()
{feuchte = dht.readHumidity(); //Feuchtigkeit auslesen
  temperatur = dht.readTemperature(); //Temperatur auslesen
 lcd.setCursor(0, 0); //Hier wird die Position des ersten Zeichens festgelegt. In diesem Fall bedeutet (0,0) das erste Zeichen in der ersten Zeile. 
lcd.print(feuchte); 
 lcd.setCursor(3, 0); //Hier wird die Position des ersten Zeichens festgelegt. In diesem Fall bedeutet (0,0) das erste Zeichen in der ersten Zeile. 
lcd.print("% Luftfeuchte"); 
lcd.setCursor(0, 1); // In diesem Fall bedeutet (0,1) das erste Zeichen in der zweiten Zeile. 
lcd.print(temperatur); 
lcd.setCursor(3, 1); // In diesem Fall bedeutet (0,1) das erste Zeichen in der zweiten Zeile. 
lcd.print("Grad Celsius"); 
  digitalWrite(8, feuchte >= 60);
  File dataFile = SD.open("werte.csv", FILE_WRITE); //Excel Datei mit dem Namen „werte“ auf der SD-Karte anlegen  
  feuchte = dht.readHumidity(); //Feuchtigkeit auslesen
  temperatur = dht.readTemperature(); //Temperatur auslesen
  
  dataFile.print(feuchte); //Feuchtigkeit in die Excel Datei eintragen
  dataFile.print(";"); // Es wird ein Semikolon in die CSV-Datei gespeichert, daduch lassen sich die Werte später als Tabelle getrennt darstellen.
  dataFile.println(temperatur); //Temperatur in die Excel Datei eintragen. Durch den Befehl mit der Endung „ln“ („LN“ in Kleinbuchstaben) wird ein Zeilenumsprung in der Wertetabelle erzeugt.
  dataFile.close(); // Die Datei wird vorrübergehend geschlossen.
  delay(1000);
   Serial.print("Luftfeuchtigkeit: "); //Im seriellen Monitor den Text und 
  Serial.print(feuchte); //die Dazugehörigen Werte anzeigen
  Serial.println(" %");
  Serial.print("Temperatur: ");
  Serial.print(temperatur);
  Serial.println(" Grad Celsius");
}
 
  
boolean startSDCard() {
  boolean result = false;
  pinMode(4, OUTPUT); // 4 bei UNO, bei MEGA in 53 ändern
  if (!SD.begin(chipSelect)) { //Überprüfen ob die SD Karte gelesen werden kann
    result = false;
  } 
  else {  // Wenn ja Datei wie im Loop anlegen
      File dataFile = SD.open("datalog.csv", FILE_WRITE);
    if (dataFile) {
      dataFile.close();
      result = true;
    }
  }  
  return result;
}
float readSensor( int thisValue) {
  float result;
  if (thisValue == TEMPERATURE) {
    result = dht.readTemperature(); //Sensorwert auslesen und unter Temperature              speichern
  } 
  else if (thisValue == HUMIDITY)  //Sensorwert auslesen und unter Humidity                   speichern
 { 
 result = dht.readHumidity();   
  }
  if (isnan(result))  // Die Library des DHT Sensors sendet beim Verlust des Signals vom DHT11 den Befehl „isnan“. Die passiert bspw. wenn das Kabel der Datenleitung zum Sensor den Kontakt verliert. In dem Fall soll als „Messwert“ die Zahl -273 angezeigt und gespeichert werden. Da dies der tiefste zu erreichende Punkt ist, dürfte jedem klar sein, dass mit den Werten etwas nicht stimmt, und dass der Aufbau überprüft werden muss.
 {
     result = -273.0; 
  }
  return result;
}

Wenn man nun den Sensor anhaucht, steigt die Luftfeuchtigkeit hoch genug, dass die LED Angeht.
Es hat riesig Spass gemacht. Vielen Dank an die Community.
Als nächstes drucke ich dann für das Gerät ein Gehäuse.

Joel3D

Hm, nicht viel (kein) Inhalt.

Gruß Tommy