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.
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.
#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");
}
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();
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.