PitClimaDataLogger - datalogger del Pit

PitClimaDataLogger è un datalogger che consente la registrazione dei dati climatici ambientali interni agli ambienti abitati.

Il PCDL consente la registrazione di temperatura e umidità fino a un massimo di circa 5o giorni consecutivi.

La registrazione dei dati avviene direttamente sulla scheda SD. I dati vengono successivamente rielaborati tramite un foglio di calcolo elettronico e diagrammati in un grafico.

La conoscenza della temperatura e dell'umidità relativa all'interno degli ambienti consente di gestire in maniera ottimale i dati climatici al fine di garantire il benessere all'interno dell'ambiente. Come annunciato è stata creata una apposita scheda da montare su arduino uno (qui è stato utilizzato quello autocostruito). Sulla scheda è montata una scheda SD e un sensore di temperatura DHT22. Nelle prove per il controllo seriale è stato utilizzata la scheda PitBTHC05.

 

Al posto dello scield per l'utilizzo della scheda SD si può utilizzare una scheda auto costruita con gli stessi pin e sostanzialmente le stesse dimensioni si veda allo scopo il PitSdCard.

 

PitClimaDataLogger: e il pianeta muffe

Un particolare ambito di applicazione del PCDL è quello relativo all'analisi climatica degli ambienti al fine di definerne la corretta gestione e evitare o limitare la formazione e il proliferare delle muffe.

Per una corretta gestione dei locali è utile rispettare alcune semplici regole, in particolare bisogna garantire la corretta combinazione di umidità e temperatura per evitare di incorrere nelle situazioni di condensa che possono poi portare alle muffe.

prova

Dal punto di vista tecnico la formazione di muffe spiegazione nell'analisi del comportamento dell'aria umida che è riassunto dal diagramma psicosometrico (o di Mollier). Il diagramma da indicazioni relativamente alle tecniche per eviare o ridurre la quantità di muffe. In particolare la regola consiste ne cercare di mantenere temperature costanti nel tempo e negli ambienti della casa. La temperatura dovrebbe assestarsi tra i 18 ed i 20°C e bisognerebbe cercare di limitare la generazione di elevate quantità di vapore. E' buona norma arieggare i locali dopo aver fatto la doccia e bisognerebbe evitare di asciugare panni in casa.

Durante il periodo invernale va sempre garantita la ventilazione dei locali ed è preferibile arieggiare tutta la casa spalancando le finestre, per un breve periodo di tempo (4-5 minuti) e alcune volte al giorno in modo da consentire la ventilazione ma evitare un'eccessivo abbassamento delle temperature delle pareti. Anche le finestre a ribalta vanno lasciate aperte per brevi periodi di tempo e più voltre durante la giornata al fine di evitare che l'abbassamento eccessivo delle pareti produca effetti localizzati di condensa attorno alle finestre stesse. Nell'articolo allegato sono riportate alcune semplici istruzioni a cura dell'ITEA di Trento.

 

 

ozio_gallery_jgallery

 

Foratura PCB

 

 

Cosa serve:

Download:


Codice sorgente:


/*
ZappocoJ - ZappocoS - PitClimaDataLogger00  26/01/2015
                 PitClimaDataLogger01  20/04/2015
PitClimaDataLogger00 --> Stazione Climatica - Termo Igrometro Data Logger del PIT 
PitClimaDataLogger01 --> Modifica per utilizzao libreria DHT-sensor-library (più stabile della DHT22)
//----------------------------------------------------------------------------------------
Settaggi:
Status:
1) Error   --> no card present
2) Error   --> sensore di temperatura
3) running --> registrazione in corso
//----------------------------------------------------------------------------------------
 DHT22 ---- Connection
 pin 1 VCC-5v
 pin 2 dati --> digital pin 7 
 pin 3 none
 pin 4 GND-GND
----------------------------------------------------
 SD card datalogger
 This example shows how to log data from three analog sensors 
 to an SD card using the SD library.
 The circuit:
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK  - pin 13
 ** CS   - pin 10
 created  24 Nov 2010
 modified 9 Apr 2012
 by Tom Igoe
*/
//----------------------------------------------------------------------------------------
// librerie sensore di temperatura e umidità DHT22
//----------------------------------------------------------------------------------------
#include "DHT.h"
#define DHTPIN 7        // Numero del pin connesso
#define DHTTYPE DHT22   // DHT 22  (AM2302)
// Initialize DHT sensor for normal 16mhz Arduino
DHT dht(DHTPIN, DHTTYPE);
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
// librerie SD card
//----------------------------------------------------------------------------------------
#include <SD.h>
#include <SPI.h>
File dataFile;
// On the Ethernet Shield, CS is pin 4. Note that even if it's not
// used as the CS pin, the hardware CS pin (10 on most Arduino boards,
// 53 on the Mega) must be left as an output or the SD library
// functions will not work.
const int chipSelect = 10;
unsigned long TimeDelay = 3000;        // setta a 3 minuti il tempo di delay tra le letture
unsigned long TimeStart = 0;             // tempo di partenza 
unsigned long TimeUltima = 0;            // tempo ultima lettura
unsigned long TimeAdesso = 0;            // tempo della lettura
long TimeDelta  = 0;                     // differenza
unsigned long tempo;
unsigned long Counter = 0;               // contatore delle letture
int ledPin = 6;
int flagSts = 0;
int stsDelay = 1000;
float Temperatura;
float Umidita;
//----------------------------------------------------------------------------------------
//  Settaggio flag per stampa su seriale di dati per debug
//----------------------------------------------------------------------------------------
void setup(){
      Serial.begin(9600);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for Leonardo only
      }
      Serial.println("---------------------------");
      Serial.println("PitClimaDataLogger V1.0b - by Zappoco");
      Serial.println("---------------------------");
      Serial.print("Initializing SD card ...");
      pinMode(chipSelect, OUTPUT);
      // see if the card is present and can be initialized:
      if (!SD.begin(chipSelect)) {
        Serial.println("Card failed, or not present");
        // don't do anything more:
        flagSts = 1;
        return;
      }
      Serial.println("card initialized.");
      Serial.println("---------------------------");
      Serial.println("Start lettura dati sensore ...");
      /* 
      Serial.println("---------------------------");
      Serial.println("Inizializzazione sensore");
      TemperatureSensorRead ();
      Serial.println("---------------------------");
      delay (3000);
      */
      TimeStart  = millis();
      TimeAdesso = TimeStart;
      TimeUltima = TimeStart;
      Serial.println("---------------------------");
      Serial.println("Tempi iniziali");
      Serial.println("---------------------------");
      Serial.print("TimeDelay ");
      Serial.println(TimeDelay);
      Serial.print("TimeStart ");
      Serial.println(TimeStart);
      Serial.print("TimeUltima ");
      Serial.println(TimeUltima);
      Serial.print("TimeAdesso ");
      Serial.println(TimeAdesso);
      Serial.print("TimeDelta ");
      Serial.println(TimeDelta);
      Serial.println("---------------------------");
      Serial.println("Fine Tempi iniziali");
      Serial.println("---------------------------");
      Serial.println("");
      Serial.print("N.");
      Serial.print(" ; ");
      Serial.print("Tempo [ore]");
      Serial.print(" ; ");
      Serial.print("Temperatura [gC]");
      Serial.print(" ; ");
      Serial.print("Umidita [%]");
      Serial.print(" ; ");
      Serial.println("Indice di calore [gF]");
      dataFile = SD.open("datalog.txt", FILE_WRITE);
      // if the file is available, write to it:
      if (dataFile) {
           dataFile.println("----------------------------------------------");
           dataFile.println("PitClimaDataLogger V1.0b - by Zappoco");
           dataFile.println("----------------------------------------------");
           dataFile.println("-------- Inizializzazione terminata ----------");
           dataFile.println("-------- sostituire   .   con   ,   ----------");
           dataFile.println("----------------------------------------------");
           dataFile.println("");
           dataFile.print("N.");
           dataFile.print(" ; ");
           dataFile.print("Tempo [ore]");
           dataFile.print(" ; ");
           dataFile.print("Temperatura [gC]");
           dataFile.print(" ; ");
           dataFile.print("Umidita [%]");
           dataFile.print(" ; ");
           dataFile.println("Indice di calore [gF]");
           dataFile.close();
           dataFile.close();
      }  
      //inizializzazione del sensonre di temperatura umidità
      dht.begin();
      delay (2000);
}
void loop() {
    switch(flagSts)
    {
    // - riga 1
    case 1:
       Serial.println(" Error - SD Card");
       digitalWrite(ledPin, HIGH);
       delay(200);               
       digitalWrite(ledPin, LOW); 
       delay(200);               
       break;   
    case 2:
       Serial.println(" Error - Temperature Sensor");
       digitalWrite(ledPin, HIGH);
       delay(400);               
       digitalWrite(ledPin, LOW); 
       delay(400);               
       break; 
    default: 
       break;    
  }// End Case
  TimeAdesso = millis();
  TimeDelta = TimeAdesso - TimeUltima - TimeDelay;
      /*
      Serial.print("TimeDelay ");
      Serial.println(TimeDelay);
      Serial.print("TimeStart ");
      Serial.println(TimeStart);
      Serial.print("TimeUltima ");
      Serial.println(TimeUltima);
      Serial.print("TimeAdesso ");
      Serial.println(TimeAdesso);
      Serial.print("TimeDelta ");
      Serial.println(TimeDelta);
      Serial.println("---------------------------");
      Serial.println("Fine Tempi");
      Serial.println("---------------------------");
      */
  if (TimeDelta >= 0) {  
     TimeUltima = millis();
     Counter = Counter +1;
     TemperatureSensorRead ();
  }
}
//--------------------------------------------------------------------------------------------------------------
// Questa funzione legge lo stato del sensore
// di temperatura/umidita DHT022
//--------------------------------------------------------------------------------------------------------------
void TemperatureSensorRead (){
  float Umidita = dht.readHumidity();
  // Read temperature as Celsius
  float Temperatura = dht.readTemperature();
  // Read temperature as Fahrenheit
  float TemperaturaF = dht.readTemperature(true);
  // Check if any reads failed and exit early (to try again).
  if (isnan(Umidita) || isnan(Temperatura) || isnan(TemperaturaF)) {
    Serial.println("Failed to read from DHT sensor!");
    flagSts = 2;
    return;
  }
  tempo =(TimeAdesso-TimeStart);
  // L'indice di Calore o Heat Index (HI)
  // Compute heat index
  // Must send in temp in Fahrenheit!
  float hi = dht.computeHeatIndex(TemperaturaF, Umidita);
  Serial.print(Counter -1);
  Serial.print(" ; ");
  Serial.print(tempo - TimeDelay);
  Serial.print(" ; ");
  Serial.print(Temperatura);
  Serial.print(" ; ");
  Serial.print(Umidita);
  Serial.print(" ; ");
  Serial.println(hi);
  /*
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("Heat index: ");
  Serial.print(hi);
  Serial.println(" *F");  
  */
        // open the file. note that only one file can be open at a time,
        // so you have to close this one before opening another.
        dataFile = SD.open("datalog.txt", FILE_WRITE);
        // if the file is available, write to it:
        if (dataFile) {
          //dataFile.println(buf);
           //dataFile.print("Got Data ");
           dataFile.print(Counter - 1);
           dataFile.print(" ; ");
           dataFile.print(tempo - TimeDelay);
           dataFile.print(" ; ");
           dataFile.print(Temperatura);
           dataFile.print(" ; ");
           dataFile.print(Umidita);
           dataFile.print(" ; ");
           dataFile.println(hi);
           dataFile.close();
          // print to the serial port too:
          //Serial.println(dataString);
        }  
        // if the file isn't open, pop up an error:
        else {
          Serial.println("error opening datalog.txt");
        }   
}

 

ZappocoS - gennaio - aprile 2015