Hallo!
ich bin momentan dabei mir ein Datenlogger für meine Heizung zu basteln. Da ich neu in der Arduinowelt bin wäre es schön wenn mir einer bei meinem Problem helfen könnte.
Mein Datenlogger besteht aus einem Arduino UNO, 5 DS18B20 Sensoren und einem Adafruit Data Logger Shield.
Meine Sketche (Temperatur auslesen und Daten loggen mit RTC) funktionieren auch schon im Einzelnen nur weiß ich noch nicht wie ich sie richtig zusammenfügen kann, dass er mir auf der SD-Karte einen Temperaturwert mit Datum und Uhrzeit zuordnet.
Hier mein Code für die 5 DS18B20 Sensoren:
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS); // Einrichten des OneWire Bus um die Daten der Temperaturfühler abzurufen
DallasTemperature sensors(&oneWire); // Bindung der Sensoren an den OneWire Bus
DeviceAddress tempDeviceAddress; // Verzeichniss zum Speichern von Sensor Adressen
int numberOfDevices; // Anzahl der gefundenen Sensoren
void setup(void)
{
Serial.begin(9600);
Serial.println("Abfrage mehrerer Dallas Temperatur Sensoren");
Serial.println("-------------------------------------------");
// Suche der Sensoren
Serial.println("Suche Temperatur Sensoren...");
sensors.begin();
numberOfDevices = sensors.getDeviceCount();
Serial.print("Habe ");
Serial.print(numberOfDevices, DEC);
Serial.println(" Sensoren gefunden.");
}
void loop(void)
{
// Aufruf der Funktion sensors.requestTemperatures()
// Dadurch werden alle werte abgefragt.
Serial.print("Abfrage der Temperatur... ");
sensors.requestTemperatures();
Serial.println("DONE");
// Ausgabe der Daten für jeden Sensor
for(int i=0 ;i<numberOfDevices; i++) {
float tempC = sensors.getTempCByIndex(i);
Serial.print("Sensor ");
Serial.print(i, DEC);
Serial.print(" hat grad Celsius: ");
Serial.println(tempC);
}
delay(5000);
}
Und mein Code zum Loggen mit Uhrzeit:
#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include "RTClib.h"
const int chipSelect = 10; //10 is default by shield, but normally on Pin 4
int interval = 5; //Log to SD Card every 5 seconds
long timer;
String timestring;
String mvalue;
RTC_DS1307 rtc;
void setup() {
Serial.begin(9600);
delay(3000);
Serial.println("Initializing SD card...");
if (!SD.begin(chipSelect)) {
Serial.println("SD Card error");
return;
}
Serial.println("card initialized");
if (! rtc.begin()) {
Serial.println("No RTC found");
} else {
Serial.println("RTC clock found");
}
if (! rtc.isrunning()) {
Serial.println("RTC is not configured");
}
}
void loop() {
if ((timer + interval * 1000) < millis()) {
timer = millis();
get_logvalue(); //Get your value
get_time(); //Get time from RTC
write_data(); //Write value and Time to SD
}
}
void get_logvalue() {
mvalue = "My Value"; //mvalue is your log parameter eg. Temperature
}
void get_time(){ //Read Time from RTC
DateTime now = rtc.now();
timestring = now.day();
timestring += "-";
timestring += now.month();
timestring += "-";
timestring += now.year();
timestring += " ";
timestring += now.hour();
timestring += ":";
timestring += now.minute();
timestring += ":";
timestring += now.second();
Serial.println(timestring);
}
void write_data() { //Write to SD card
String dataString = mvalue + "," + timestring;
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
Serial.println(dataString);
}
else {
Serial.println("error writing datalog.txt");
}
}
Über Lösungen, Beispiele oder Tipps wäre ich sehr dankbar!