Datalogger Arduino temperatura umidità

Unendo due progetti che puoi leggere su questo blog Datalogging con arduino e sensore DHT11 puoi realizzare il progetto: Datalogger arduino temperaura e umidità.

Datalogger arduino temperatura umidità humidity

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:

Datalogger Arduino temperatura humidity collegamenti

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:

Datalogger Arduino temperaturaed un grafico sull’andamento dell’umidità rilevate:

Datalogger Arduino umiditaBuon monitoraggio domotico !!!

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/datalogger-arduino-temperatura-umidita.html

64 pings

Skip to comment form

  1. […] progetto presentato lunedì scorso ti ha permesso di monitorare i temperatura ed umidità, se ci aggiungi una Keypad […]

  2. […] 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 […]

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.