Hallo,
ein Freund und Kollege von mir möchte an seinem Versuchsbienenstand die Temperatur und Luftfeuchte in den Bienenkästen protokollieren.
Jetzt hat er 12 Stück DHT22 Sensoren, einen Arduino Mega und Unmengen Kabel zu mir gebracht.
Ich habe statt dem Mega einen UNO R3 von mir verwendet und das Data Logging Shield von Adafruit darauf gepflanzt.
Zum Auslesen der Sensoren verwende ich die Library von Adafruit: GitHub - adafruit/DHT-sensor-library: Arduino library for DHT11, DHT22, etc Temperature & Humidity Sensors
Mit einem modifizierten Beispielprogramm funktioniert das schon sehr schön, ich bekomme auf dem Serial Monitor immer Datum und Zeit und die Messwerte ausgegeben.
Für die Echtzeituhr verwende ich übrigens auch die Library von Adafruit: Downloads | Adafruit Data Logger Shield | Adafruit Learning System
Die ebenfalls unter diesem Link zu findende Library für die SD-Karte möchte ich auch verwenden.
Jetzt zum Problem:
Wir möchten die Daten, so wie sie jetzt auf dem Serial Monitor ausgegeben werden auf die SD-Card schreiben.
Irgendwie blicke ich das aber nicht mit dem dataString und so.
Gibt es vielleicht auch eine einfachere Möglichkeit, anstatt so einen dataString mit allen Werten zu basteln z.B. einfach die Ausgabe des Serial Monitors auf die SD Karte zu schreiben?
Hier mal das bisherige Programm, das wie gesagt nur über den Serial Monitor ausgibt und tadellos funktioniert:
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
#include "DHT.h"
#include <Wire.h>
#include "RTClib.h"
#define DHT2PIN 2 // what pin we're connected to
#define DHT3PIN 3 // what pin we're connected to
#define DHT4PIN 4 // what pin we're connected to
#define DHT5PIN 5 // what pin we're connected to
#define DHT6PIN 6 // what pin we're connected to
#define DHT7PIN 7 // what pin we're connected to
#define DHT8PIN 8 // what pin we're connected to
#define DHT9PIN 9 // what pin we're connected to
#define DHT10PIN 10 // what pin we're connected to
#define DHT11PIN 11 // what pin we're connected to
#define DHT12PIN 12 // what pin we're connected to
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHT2TYPE DHT22 // DHT 22 (AM2302)
#define DHT3TYPE DHT22
#define DHT4TYPE DHT22
#define DHT5TYPE DHT22
#define DHT6TYPE DHT22
#define DHT7TYPE DHT22
#define DHT8TYPE DHT22
#define DHT9TYPE DHT22
#define DHT10TYPE DHT22
#define DHT11TYPE DHT22
#define DHT12TYPE DHT22
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
RTC_DS1307 rtc;
// Initialize DHT sensor for normal 16mhz Arduino
DHT dht2(DHT2PIN, DHT2TYPE);
DHT dht3(DHT3PIN, DHT3TYPE);
DHT dht4(DHT4PIN, DHT4TYPE);
DHT dht5(DHT5PIN, DHT5TYPE);
DHT dht6(DHT6PIN, DHT6TYPE);
DHT dht7(DHT7PIN, DHT7TYPE);
DHT dht8(DHT8PIN, DHT8TYPE);
DHT dht9(DHT9PIN, DHT9TYPE);
DHT dht10(DHT10PIN, DHT10TYPE);
DHT dht11(DHT11PIN, DHT11TYPE);
DHT dht12(DHT12PIN, DHT12TYPE);
// NOTE: For working with a faster chip, like an Arduino Due or Teensy, you
// might need to increase the threshold for cycle counts considered a 1 or 0.
// You can do this by passing a 3rd parameter for this threshold. It's a bit
// of fiddling to find the right value, but in general the faster the CPU the
// higher the value. The default for a 16mhz AVR is a value of 6. For an
// Arduino Due that runs at 84mhz a value of 30 works.
// Example to initialize DHT sensor for Arduino Due:
//DHT dht(DHTPIN, DHTTYPE, 30);
void setup() {
Serial.begin(9600);
#ifdef AVR
Wire.begin();
#else
Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
rtc.begin();
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
Serial.println("DHTxx test!");
dht2.begin();
dht3.begin();
dht4.begin();
dht5.begin();
dht6.begin();
dht7.begin();
dht8.begin();
dht9.begin();
dht10.begin();
dht11.begin();
dht12.begin();
}
}
void loop() {
// Wait a few seconds between measurements.
delay(20000);
DateTime now = rtc.now();
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h2 = dht2.readHumidity();
// Read temperature as Celsius
float t2 = dht2.readTemperature();
float h3 = dht3.readHumidity();
// Read temperature as Celsius
float t3 = dht3.readTemperature();
float h4 = dht4.readHumidity();
// Read temperature as Celsius
float t4 = dht4.readTemperature();
float h5 = dht5.readHumidity();
// Read temperature as Celsius
float t5 = dht5.readTemperature();
float h6 = dht6.readHumidity();
// Read temperature as Celsius
float t6 = dht6.readTemperature();
float h7 = dht7.readHumidity();
// Read temperature as Celsius
float t7 = dht7.readTemperature();
float h8 = dht8.readHumidity();
// Read temperature as Celsius
float t8 = dht8.readTemperature();
float h9 = dht9.readHumidity();
// Read temperature as Celsius
float t9 = dht9.readTemperature();
float h10 = dht10.readHumidity();
// Read temperature as Celsius
float t10 = dht10.readTemperature();
float h11 = dht11.readHumidity();
// Read temperature as Celsius
float t11 = dht11.readTemperature();
float h12 = dht12.readHumidity();
// Read temperature as Celsius
float t12 = dht12.readTemperature();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
// Check if any reads failed and exit early (to try again).
if (isnan(h2) || isnan(t2)) {
Serial.println("Failed to read from DHT sensor 2!");
return;
}
Serial.print("Humidity 2: ");
Serial.print(h2);
Serial.print(" %\t");
Serial.print("Temperature 2: ");
Serial.print(t2);
Serial.println(" *C ");
if (isnan(h3) || isnan(t3)) {
Serial.println("Failed to read from DHT sensor 3!");
return;
}
Serial.print("Humidity 3: ");
Serial.print(h3);
Serial.print(" %\t");
Serial.print("Temperature 3: ");
Serial.print(t3);
Serial.println(" *C ");
if (isnan(h4) || isnan(t4)) {
Serial.println("Failed to read from DHT sensor 4!");
return;
}
Serial.print("Humidity 4: ");
Serial.print(h4);
Serial.print(" %\t");
Serial.print("Temperature 4: ");
Serial.print(t4);
Serial.println(" *C ");
if (isnan(h5) || isnan(t5)) {
Serial.println("Failed to read from DHT sensor 5!");
return;
}
Serial.print("Humidity 5: ");
Serial.print(h5);
Serial.print(" %\t");
Serial.print("Temperature 5: ");
Serial.print(t5);
Serial.println(" *C ");
if (isnan(h6) || isnan(t6)) {
Serial.println("Failed to read from DHT sensor 6!");
return;
}
Serial.print("Humidity 6: ");
Serial.print(h7);
Serial.print(" %\t");
Serial.print("Temperature 7: ");
Serial.print(t7);
Serial.println(" *C ");
if (isnan(h8) || isnan(t8)) {
Serial.println("Failed to read from DHT sensor 8!");
return;
}
Serial.print("Humidity 8: ");
Serial.print(h8);
Serial.print(" %\t");
Serial.print("Temperature 8: ");
Serial.print(t8);
Serial.println(" *C ");
if (isnan(h9) || isnan(t9)) {
Serial.println("Failed to read from DHT sensor 9!");
return;
}
Serial.print("Humidity 9: ");
Serial.print(h9);
Serial.print(" %\t");
Serial.print("Temperature 9: ");
Serial.print(t9);
Serial.println(" *C ");
if (isnan(h10) || isnan(t10)) {
Serial.println("Failed to read from DHT sensor 10!");
return;
}
Serial.print("Humidity 10: ");
Serial.print(h10);
Serial.print(" %\t");
Serial.print("Temperature 10: ");
Serial.print(t10);
Serial.println(" *C ");
if (isnan(h11) || isnan(t11)) {
Serial.println("Failed to read from DHT sensor 11!");
return;
}
Serial.print("Humidity 11: ");
Serial.print(h11);
Serial.print(" %\t");
Serial.print("Temperature 11: ");
Serial.print(t11);
Serial.println(" *C ");
if (isnan(h12) || isnan(t12)) {
Serial.println("Failed to read from DHT sensor 2!");
return;
}
Serial.print("Humidity 12: ");
Serial.print(h12);
Serial.print(" %\t");
Serial.print("Temperature 12: ");
Serial.print(t12);
Serial.println(" *C ");
Serial.println("");
}
Bitte nicht wundern, dass es keinen Sensor 1 gibt, der ist kaputt.
Viele Grüße,
Andy