Buongiorno a tutti,
Dopo aver acquistato una scheda mega2560 con una molteplicità di sensori ho iniziato con la costruzione e progettazione di una stazione meteo.
Data la non disponibilità immediata di tutti i sensori sto lentamente assemblando andando ad arricchire il programma che allego. Esso è collegato ad un lettore su scheda SD sui quali vengono salvati periodicamente (ho impostato di prova 60 secondi) i dati rilevati.
Il sensore finora presente è il DHT11, che so essere non performante, ma mi consente in attesa di qualcosa di meglio di provare lo sketch.
La prima cosa che chiedo è la seguente:
Nel codice ho definito un delay pari a 60 secondi per poter indicare ogni quanto fare la misurazione. Mi confermate che praticamente non passano effettivamente 60 secondi ma qualcosa in più a causa del fatto che ho la parte di scrittura sulla SD che "assorbe" del tempo?
/*Alimentatore di Arduino 7-12V.*/
#include <DS1302.h> /* includo la libreria della scheda CLOCK*/
#include <SPI.h> /* includo la libreria di comunicazione per la SD*/
#include <SD.h> /* includo la libreria della scheda SD*/
#include <DHT.h> /* includo la libreria del sensore di temperatura e umidità*/
#define DHTPIN 8 /* pin 8 dell'arduino a cui andrò a collegare il sensore DHT11*/
#define DHTTYPE DHT11 /* DHT11 è il tipo di sensore che utilizzo per la misura*/
DHT dht(DHTPIN,DHTTYPE);
File myFile;
/* Collegamento Pin RTC:
Pin +5V -> Alimentazione modulo display e RTC
Pin GND -> GND modulo modulo display e RTC
Pin Digital 2 -> Pin CE - RST modulo RTC
Pin Digital 3 -> Pin I/O - DAT modulo RTC
Pin Digital 4 -> Pin CLCK - CLK modulo RTC
*/
DS1302 rtc(2, 3, 4); /* Creazione oggetto RTC (Real Time Clock)*/
void setup()
{
Serial.begin(9600); /* Procedura per controllo corretto funzionamento della scheda SD*/
Serial.print("Inizializzazione Card: ");
if (!SD.begin(53)) //il Pin 4 è collegato a CS
{
Serial.println("FALLITA!");
return;
}
Serial.println("ESEGUITO!");
rtc.halt(false); /* Imposta RTC in run-mode*/
rtc.writeProtect(false); /* Imposta RTC e disabilita la protezione da scrittura*/
rtc.setDOW(WEDNESDAY); /* Imposta il giorno della settimana a SUNDAY*/
rtc.setTime(22, 00, 0); /* Imposta l'ora come 11:32:00 (Formato 24hr)*/
rtc.setDate(16, 1, 2018); /* Imposta la data cone 12 febbraio 2017 */
delay(2000); /* Tempo che lascio al sistema per azzeramento dei sensori evitando dati non sensati all'attacco della basetta.*/
}
void loop() {
int t = dht.readTemperature();
int h = dht.readHumidity();
/* Dati mostrati a seriale per correttezza programma.*/
/*Serial.print("Temperatura:");
Serial.print(t);
Serial.print(",");
Serial.print("Umidità:");
Serial.println(h);*/
delay(60000);
myFile = SD.open("test.txt", FILE_WRITE); /*Apertura/creazione di un file di testo in modalità scrittura.*/
if (myFile) { /*Dichiarazione che va scrivere i file sul .txt se questo è stato aperto correttamente.*/
myFile.print(rtc.getDOWStr()); /*RTC: invia giorno della settimana*/
myFile.print(",");
myFile.print(rtc.getDateStr()); /*RTC: invia data*/
myFile.print(",");
myFile.print(rtc.getTimeStr()); /*RTC: invia ora*/
myFile.print(",");
myFile.print(t);
myFile.print(",");
myFile.println(h);
myFile.close();
}
}
La seconda cosa è invece relativa all'RTC DS1302 presente che fra una rilevazione e l'altra di un inuto perde sempre un secondo. Allego qualche risultato del .txt:
Wednesday,16.01.2018,22:01:02,9,23
Wednesday,16.01.2018,22:02:03,7,23
Wednesday,16.01.2018,22:03:04,7,23
Wednesday,16.01.2018,22:04:04,7,23
Wednesday,16.01.2018,22:05:05,7,23
Wednesday,16.01.2018,22:06:06,7,23
Wednesday,16.01.2018,22:07:06,7,23
Wednesday,16.01.2018,22:08:07,7,23
Il secondo che ogni due/tre misurazioni perdo, è legato alla prima domanda o a qualcosa d'altro che non è correttamente implementato?
Come posso eventualmente risolvere il problema?
Oppure è legato al sensore di bassa precisione?
Grazie
Andrea