Unendo due progetti che puoi leggere su questo blog Datalogging con arduino e sensore DHT11 puoi realizzare il progetto: Datalogger arduino temperaura e umidità.
Dal nome del progetto “Datalogger arduino temperaura umidità” hai già capito l’obiettivo che puoi raggingere: realizzare un sistema di monitoraggio della temperatura e dell’umidità dell’ambiente in cui lo posizioni.
Come funziona il Datalogger arduino temperatura umidità ?
Il principio di funzionamento è semplice ogni 10 minuti ( 600000 millisecondi = 600 secondi ) rilevi la temperatura e l’umidità attraverso la sonda DHT11 e scrivi in un file di log ( dati.log ) la stringa:
data ora umidità temperatura
il file dati.log lo memorizzi su di una SD Card formattata FAT16 o FAT32 inserita nella SD Card Shield.
Cosa ti serve per realizzare il progetto
L’elenco del materiale è:
- n.1 arduino uno
- n.1 RTC Shield
- n.1 SD Card Shield
- n.1 sonda DHT11 con relativo cavetto di connessione
- n.1 Memory card SD da 2Gb max
- n.3 cavetti per breadboard
tutto il materiale puoi acquistarlo in arduino datalogger kit disponibile sul sito robot-domestici.it
Lo sketch del datalogger arduino
Lo sketch lo puoi realizzare partendo dai due precedentemente presentati per cui commenterò solo le differenze ottenute unendo i due sketch precedenti:
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib #include <Wire.h> #include "RTClib.h" #include <SD.h> #include <dht11.h> #define CS 10 #define DHT11_PIN 4 RTC_DS1307 RTC; dht11 DHT; char buffer[50]; File myFile; void setup () { Serial.begin(57600); Serial.print("Initializing SD card..."); pinMode(CS, OUTPUT); if (!SD.begin(CS)) { Serial.println("initialization failed!"); return; } Serial.println("initialization done."); Wire.begin(); RTC.begin(); RTC.sqw(0); //0 Led off - 1 Freq 1Hz - 2 Freq 4096kHz - 3 Freq 8192kHz - 4 Freq 32768kHz if (! RTC.isrunning()) { Serial.println("RTC is NOT running!"); // following line sets the RTC to the date & time this sketch was compiled RTC.adjust(DateTime(__DATE__, __TIME__)); } } void loop () { DateTime now = RTC.now(); // – --------------------------------------------------------------------- int chk; chk = DHT.read(DHT11_PIN); // READ DATA int data = 0; // RETUTRNCODE switch (chk){ case DHTLIB_OK: data = 0; break; case DHTLIB_ERROR_CHECKSUM: data = 997; // CHECK SUM ERROR break; case DHTLIB_ERROR_TIMEOUT: data = 998; // TIMEOUT ERROR break; default: data = 999; // UNKNOWN ERROR break; } // – --------------------------------------------------------------------- sprintf(buffer, "%02d/%02d/%d %02d:%02d:%02d %d %d", now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second(), DHT.humidity, DHT.temperature, data ); Serial.println( buffer ); myFile = SD.open("dati.log", FILE_WRITE); if (myFile) { myFile.println(buffer); myFile.close(); } else { Serial.println("error opening data.log"); } delay(600000); }
come avrai già intuito la prima differenza risiede nell’inclusione di tutte le librerie necessarie a gestire RTC,SD Card e DHT11:
#include <Wire.h> #include "RTClib.h" #include <SD.h> #include <dht11.h>
alle prime tre librerie presenti nel progetto data logging arduino devi aggiungere la libreria del DHT11, ultima riga.
le linee 08-09: definisci due costanti CS e DHT11_PIN la prima definisce il pin di CABLE SELECT per la gestione della SD Card shield, mentre il secondo il pin a cui hai collegato il pin output della sonda DHT11, nell’esempio io l’ho collegata al pin 4 di Arduino:
linee 11-13: definisci l’istanza dell’oggetto RTC, del DHT e ilo buffer di 50 caratteri in cui memorizzi i valori letti dai primi due: RTC ( data e ora = 19 caratteri ) e DHT11 ( temperatura e umidità = 6 caratteri );
linee 17-37: non ci sono variazioni;
All’interno della funzione loop() la prima modifica riguarda le linee 42-61:
// – --------------------------------------------------------------------- int chk; chk = DHT.read(DHT11_PIN); // READ DATA int data = 0; // RETUTRNCODE switch (chk){ case DHTLIB_OK: data = 0; break; case DHTLIB_ERROR_CHECKSUM: data = 997; // CHECK SUM ERROR break; case DHTLIB_ERROR_TIMEOUT: data = 998; // TIMEOUT ERROR break; default: data = 999; // UNKNOWN ERROR break; } // – ---------------------------------------------------------------------
in cui la linea 44: leggi i dati dal sensore, usando il metodo read() dell’istanza DHT indichi alla sonda di leggere i valori per il datalogger arduino temperatura umidità;
linee 46-59: verifichi il return code dell’interrogazione eseguita alla linea 44 in modo da scrivere nel log eventuali anomalie di comunicazione con la sonda;
linea 63: componi la riga di log da scrivere sulla SD Card e memorizzala nel buffer, la linea è composta come:
gg/mm/aaaa hh:mm:ss uu tt
in cui uu è il valore dell’umidità rilevata e tt il valore di temperatura rilevata;
le linee restanti servono a scrivere nel dile di log il file dati.log.
Ho attivato ieri il mio datalogger arduino umidità temperatura dalle 9:45 alle 17:45 circa lasciando che acquisisse i dati dell’ambiente, casa, ecco il risultato del file alle 17:45:
15/12/2013 09:45:38 43 16 15/12/2013 09:48:16 43 16 15/12/2013 09:48:20 44 14 15/12/2013 09:48:33 45 15 15/12/2013 09:48:39 45 15 15/12/2013 09:58:38 45 15 15/12/2013 10:08:37 45 19 15/12/2013 10:18:36 45 19 15/12/2013 10:28:35 45 19 15/12/2013 10:38:33 44 19 15/12/2013 10:48:32 45 19 15/12/2013 10:58:31 46 18 15/12/2013 11:08:30 44 19 15/12/2013 11:18:29 46 18 15/12/2013 11:28:28 46 18 15/12/2013 11:38:26 45 18 15/12/2013 11:48:25 46 18 15/12/2013 11:58:24 45 18 15/12/2013 12:08:23 45 18 15/12/2013 12:18:22 46 18 15/12/2013 12:28:20 45 18 15/12/2013 12:38:19 45 19 15/12/2013 12:48:18 45 19 15/12/2013 12:58:17 45 19 15/12/2013 13:08:16 44 19 15/12/2013 13:18:15 45 19 15/12/2013 13:28:13 45 18 15/12/2013 13:38:12 46 18 15/12/2013 13:48:11 45 18 15/12/2013 13:58:10 46 18 15/12/2013 14:08:09 45 18 15/12/2013 14:18:07 45 18 15/12/2013 14:28:06 45 18 15/12/2013 14:38:05 45 19 15/12/2013 14:48:04 45 19 15/12/2013 14:58:03 45 19 15/12/2013 15:08:02 45 19 15/12/2013 15:18:00 46 18 15/12/2013 15:27:59 46 18 15/12/2013 15:37:58 46 18 15/12/2013 15:47:57 46 18 15/12/2013 15:57:56 46 18 15/12/2013 16:07:54 45 18 15/12/2013 16:17:53 46 18 15/12/2013 16:27:52 45 19 15/12/2013 16:37:51 45 19 15/12/2013 16:47:50 45 19 15/12/2013 16:57:49 44 19 15/12/2013 17:07:47 45 18 15/12/2013 17:17:46 44 19 15/12/2013 17:27:45 46 18 15/12/2013 17:37:44 45 18 15/12/2013 17:47:43 45 18
ho importato il file in un foglio di calcolo e generato un grafico sull’andamento della temperatura:
ed un grafico sull’andamento dell’umidità rilevate:
Buon monitoraggio domotico !!!
Prima di inserire un commento, per favore, leggi il regolamento
64 pings
Skip to comment form
[…] progetto presentato lunedì scorso ti ha permesso di monitorare i temperatura ed umidità, se ci aggiungi una Keypad […]
[…] humidity temperatura suolo ho deciso di utilizzare i componenti utilizzati dal progetto Datalogger Arduino temperatura umidità che sfrutta il datalogger della adafruit già dotato di SD Card shield e RTC […]