Salve a tuti,sto creando un Data logger: sto utilizzando :
Arduino UNO
Scheda Ethernet con Slot SD CARD
Sensore temperatura - umidita' DHT 11
Un Modulo DS1307 per la data e l'ora.
A livello circuitale funziona tutto,ho provato anche i vari sketch di prova (per il dht 11,ds1307,e l'sd) e funziona tutto perfettamente.Hocreato cosi' un unico sketch in cui ho unito le varie parti :in pratica dovrebbe leggere i valori del sensore e creare un file TXT sulla sd con i valori di temperatura,umidita' ora e data.Ma non mi crea il file.
Lo sketch viene compilato senza nessun problema.Sto impazzendo,perche' mi sembra che sia tutto apposto!Grazie in anticipo a tutti!Di seguito posto lo sketch in questione:
//Definizione parametri sensore dht
#include "DHT.h"
#define DHTPIN 2 // Qui settiamo il pin del sensore che e' connesso ad arduino
#define DHTTYPE DHT11 // Definisco il tipo si sensore che sto utilizzando,in questo caso DHT 11
//DESCRIZIONE DELLO SCHEMA DI COLLEGAMENTO DEL SENSORE AD ARDUINO
// Connect pin 1 (on the left) of the sensor to +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
DHT dht(DHTPIN, DHTTYPE);
//Definizione parametri DS1307 RTC
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 rtc;
#include <SD.h>
File Dati; // La variabile di tipo FIle che useremo per il Log
const int chipselect = 4; // il pin su cui e' collegato il CS della SD
String Buffer="";// qui ci mettiamo i dati da scrivere per ogni log
byte h = dht.readHumidity();
byte t = dht.readTemperature();
void setup() {
Serial.begin(9600);
//Configuro il sensore dht11
Serial.println("DHTxx test!");
dht.begin();
//Configuro l'orologio di sistema RTC
#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 NON sta funzionando!");
// La seguente istruzione setta data e orario,prelevando i valori dall'orologio del pc
rtc.adjust(DateTime(__DATE__, __TIME__));
}
Serial.print ("\nSto verificando la presenza della scheda...\n");
pinMode(10, OUTPUT); // Fa funzionare la SD Lib
if (!SD.begin(chipselect))
{
Serial.println("SD CARD NON TROVATA");
return;
}
else
{
Serial.println("Scheda inserita e funzionate");
Serial.println();
}
}
void loop() {
Buffer=""; // Si inizializza ad ogni ciclo
DateTime now = rtc.now();
Misura();
Buffer +=(now.day());
Buffer +=('/');
Buffer +=(now.month());
Buffer +=('/');
Buffer +=(now.year());
Buffer +=(' ');
Buffer +=(now.hour());
Buffer +=(':');
Buffer +=(now.minute());
Buffer +=(':');
Buffer +=(now.second());
Buffer +=('\t'); // un tab per separare i campi
Buffer +=("Temperatura:");
Buffer +=(t);
Buffer +=(" *C");
Buffer +=("Umidita':");
Buffer +=(h);
Buffer +=(" %\t");
Dati = SD.open ("datalog.txt", FILE_WRITE); // apriamo il file in scrittura
if (Dati)
{
Dati.println(Buffer); // Scriviamo in un sol colpo i dati sul file
Dati.close(); // chiudiamo e trasferiamo su SD
Serial.print ("Ho scritto\t");
Serial.println(Buffer);
}
else
{
Serial.println("Errore nell'apertura di datalog.txt");
}
delay(10000);// la cadenza di scrittura dei dati
}
void Misura()
{
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
// check if returns are valid, if they are NaN (not a number) then something went wrong!
if (isnan(t) || isnan(h)) {
Serial.println("Failed to read from DHT");
}
else {
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
}
}