Data Logger Ambientale

Tesine 2015-18

Scritto da Catasta Marino - Incoronato Mattia

Catasta Marino - Incoronato Mattia - Classe 5A-IPAI -  Esame di Stato: 2016-2017
Data Logger Ambientale
Applicazione con Arduino e sensori ambientali

HARDWARE:
Il progetto è un applicazione con Arduino capace di rilevare tramite diversi sensori temperatura, umidità e raggi UV. Attraverso dei calcoli viene inoltre rilevato l'indice di calore e la temperatura di rugiada; tutti i dati vengono poi mostrati su un display e memorizzati su una scheda SD.

In Fig. 1 è riportato lo schema elettrico del sistema.

Datalogger ambientale schema assemblaggio

Lo schema è costituito dalle seguenti parti/moduli:

a) Arduino Uno (Sistema di sviluppo programmabile)
b) Modulo sensore UV
c) Modulo RTC con pulsante di SET
d) Modulo DHT22
e) Modulo MICROSD

PRESENTAZIONE DATALOGGER

Il datalogger oppure data logger è un dispositivo elettronico digitale programmabile in grado di registrare dati provenienti da sensori (Temperatura, umidità, pressione, ecc) su supporti non volatili (Esempio memorie SD Card). Uno dei principali vantaggi di usare dei registratori di dati è la possibilità di memorizzare dati in modo automatico su base giornaliera dati campionati nel tempo. Una volta attivati, i registratori di dati possono essere sistemati nel luogo opportuno e lasciati incustoditi a registrare per tutta la durata dell'acquisizione dei dati. Ciò permette un'accurata mappatura delle condizioni ambientali che vengono monitorate come ad esempio parametri esterni meteorologici.

Il sistema, tramite software memorizzato nella memoria programma del microcontrollore:

  1. Legge la Data e l'Ora sul modulo RTC DS 1307;
  2. legge la Temperatura e l'Umidità sul modulo DHT22 e, tramite un algoritmo, calcola la Temperatura di Rugiada;
  3. legge il valore di tensione analogica sul piedino Aout del Modulo UV e la trasforma nell'indice UV (0 ÷11);
  4. visualizza in tempo reale i dati sul display LCD;
  5.  Ogni 30 secondi registra i dati (Data, Ora, Temperatura, Umidità, Temperatura di Rugiada, Indice UV) sulla microSD. Durante la fase di registrazione sul display compare il simbolo "R".
  6. terminata la registrazione ripete il ciclo dal punto 1.                                       

a)ARDUINO UNO-SISTEMA DI SVILUPPO PROGRAMMABILE                   

A000066 Arduino Uno TH 2tri

                                                                                     

ita Arduino è un sistema open source che permette la prototipazione rapida e l'apprendimento veloce dei principi fondamentali dell'elettronica e della programmazione. È composto da una scheda hardware per l'assemblaggio del prototipo. Questa si basa su un circuito stampato che integra un microcontrollore con pin connessi alle porte I/O, un regolatore di tensione e un'interfaccia USB che permette la comunicazione con il computer. A questo hardware viene affiancato un ambiente di sviluppo integrato (IDE) multipiattaforma (Linux, Apple Macintosh e Windows). Questo software permette di scrivere programmi (sketch ) con un linguaggio semplice e intuitivo derivato da C/C++ chiamato Wiring (cablare, collegare con cavi). In commercio esistono diversi modelli, in tabella sono riportate le specipiche tecniche di Arduino Uno.

 

 ingl  Arduino is an open source system that allows rapid prototyping and fast learning of the fundamentals of electronics and programming. It consists of a hardware board for assembling the prototype. This is based on a circuit board that integrates a microcontroller with pins connected to the I / O ports, a voltage regulator, and a USB interface that allows communication with the computer. This hardware is complemented by a multi-platform integrated development environment (IDE) (Linux, Apple Macintosh, and Windows). This software allows you to write sketches with a simple and intuitive language derived from C / C ++ called Wiring (cabling, wiring).

 

arduino uno

 

b)MODULO SENSORE UV

Il Modulo Sensore UV basato sul diodo GUVA-S12SD consente di misurare la radiazione ultravioletta nel range 200nm-370nm (nanometri).Nota: Le radiazioni UV coprono quella porzione dello spettro elettromagnetico con una lunghezza d’onda () compresa tra 100 e 400 nanometri (nm) e si dividono in tre categorie: UVC (100-280 nm)  UVB (280-315 nm)   UVA (315-400 nm).

Immagine 3 Livello 1

 

In Fig 3 è riportato lo schema elettrico suddiviso in quattro parti.

3a) Diodo GUVA-S12SD e circuito di condizionamento con l'amplificatore operazionale SGM8521.
3b) Amplificatore a guadagno regolabile con l'amplificatore operazionale LM358
3c) Diodo Power Led L2
3d) Connettore H1 (Vcc, GND, Aout)

 

schema 3

Il modulo fornisce un'uscita analogica proporzionale all'intensità UV misurata (mW/cm2) compatibile con l'indice internazionale UV= 0 ÷11.
                                                                            Aout=0V ÷1,17V Indice UV= 0 ÷11

In Fig 4 e riportato il grafico tensione di uscita in funzione dell'indice UV.

tensione di uscita UV  

 Dal grafico si nota che la risposta non è perfettamente lineare. Il segnale analogico viene  inviato all'ingresso A0 (Ch0 del Conv. A/D a 10 bit interno) e convertito in digitale. Nella  tabella 2 sono riportatii valori in funzione dell'indice UV con i rispettivi colori che indicano il  livello di pericolosità.

 

 

 

 

 

 

 

tabella Indice Uv     

formula A D

c)MODULO RTC

Un RTC (Real-Time Clock, orologio in tempo reale, è un dispositivo con funzione di orologio, solitamente costituito da un processore a circuito integrato specializzato per questa funzione, il quale conteggia il tempo reale (anno, mese, giorno, ore, minuti e secondi) anche quando l'utilizzatore viene spento. Viene usato in molti tipi di computer ed è presente in tutti i PC. Per poter mantenere il conteggio del tempo anche a circuito non alimentato, i real-time clock hanno un oscillatore al quarzo a loro dedicato e sono alimentati da una speciale batteria autonoma rispetto all'alimentazione principale; in alcuni tipi anche il quarzo è installato all'interno del package. Al contrario, i clock che non sono real-time non funzionano quando il dispositivo è spento. Gli RTC furono introdotti nei computer agli inizi degli anni ottanta: uno dei primi ad integrare un orologio in tempo reale fu l'Apple III. Gli orologi in tempo reale erano facilmente individuabili sulle schede madri dei vecchi PC grazie alla batteria tampone che avevano vicino e a dei disegni che indicavano la funzione del chip. Nei computer più recenti gli RTC sono integrati direttamente nel chipset del sistema. Gli RTC non devono essere confusi con il real-time o il clock della CPU.

RTC DS 1307 CON INTERFACCIA I2C 

    Schermata 2017 03 08 alle 21.00.34Il modulo si basa sull'integrato DS1307 I2C RTC è dotato di EEPROM con 32kbyte memoria. Il modello in esame integra il circuito per l’istallazione del sensore di temperatura DS18B20. È presente una batteria tampone ricaricabile LIR2032 al litio che consente di alimentare il dispositivo e garantisce un funzionamento a lungo termine anche quando è disconnesso da Arduino. Il circuito risulta essere così totalmente indipendente: incrementa l’ora senza aver bisogno di un microcontrollore e con la batteria completamente carica è in grado di funzionare per 1 anno intero quando il sensore di temperatura risulta spento oppure non presente. Sotto è riportato lo schema elettrico del modulo. L'orario e il calendario sono salvati nei registri in formato BCD. In questo formato ogni cifra di un numero è rappresentata con un codice binario a quattro bit, il cui valore è compreso tra 0000 (0) e 1001 (9). Ad esempio il numero 127 in formato BCD viene registrato in questo modo: 0001 0010 0111.Sebbene il BCD comporti un notevole spreco di bit (circa 1/6 di memoria inutilizzata in packed BCD), in alcuni casi è preferibile perché ha una diretta corrispondenza con il codice ASCII. 

 

 

schema elettrico I2C

 

Il codice BCD è molto usato in elettronica, specialmente in circuiti digitali privi di microprocessore, perché facilita la visualizzazione di lunghe cifre su display a sette segmenti dove ad ogni display fisico corrisponde esattamente una cifra. Esistono appositi circuiti integrati che effettuano la conversione da BCD nella corrispondente sequenza di accensione dei segmenti. Anche l'esecuzione di semplici calcoli aritmetici è più semplice da effettuarsi su cifre BCD per circuiti logici combinatori.
In Fig. 4 la tabella degli indirizzi dei registri interni dell’RTC.

 

tabella indirizzi

 

I registri dell'RTC vanno dall'indirizzo 00h a 07h.

I registri utilizzabili come RAM vanno da 08h a 3Fh.

- Il Bit 7 del registro dei secondi (00h) è il bit di halt (CH) dell'orologio. Quando questo bit è posto a 1 l'oscillatore è spento mentre se posto a 0 l'oscillatore viene riattivato.

- I valori che corrispondono al giorno della settimana vengono definiti dall'utente (solitamente 1 = domenica, 2 Lunedì etc.). Allo scadere della mezzanotte questi vengono incrementati di uno (se vale 7 viene riportato a 1).
- Il Bit 6 del registro delle ore (02h) indica se l'orario è definito con modalità 12-ore (quando vale 1) oppure 24-ore (se vale 0). Nel caso si utilizzi la modalità a 12 ore il bit 5 (bit AM/PM) viene posto a 1 se è PM, 0 se è AM. Nel caso sia abilitata la modalità 24-ore il 5 bit è usato per la codifica delle decine delle ore. Se si cambia da 12 a 24 ore l'orario deve essere resettato.

- il registro di controllo (08h) è utilizzato per pilotare l'uscita SQ (che è un'onda quadra). Infatti il nostro modulo RTC ha la possibilità di generare un onda quadra di 1Hz, 4096KHz, 8192KHz, 32768KHz. Tramite software viene programmato il registro per generare un’onda quadra ad 1 Hz. Il segnale viene utilizzato per il lampeggio di un LED verde (Fig. 1)

Sul Datasheet sono riportati tutti i dettagli per la configurazione dei registri.

Il modulo utilizza i pin analogici Arduino A5 (SCL) e A4 (SDA)  per la comunicazione seriale "I2C" (impostazione predefinita per la libreria <wire.h>). 
Il DS1307 supporta il protocollo I2C. Un dispositivo che invia i dati sul bus è definito trasmettitore mentre quella che li legge ricevitore. Il dispositivo che controlla gli altri, detti slave, è detto master e deve generare il segnale di clock, controllare l'accesso al bus e generare le condizioni di START e STOP.
Il DS1307 opera come slave sul bus I2C ed è allocato all’indirizzo 0x68 (Nel linguaccia C si usa il suffisso 0x per indicare un numero esadecimale).

 

PULSANTE SET RTC
La pressione del pulsante permette di impostare nell'RTC la Data e l'Ora del PC (Il PC deve essere collegato ad Arduino tramite Porta USB).
Il pulsante (Fig. 3) è collegato tra il pin 8 e GND, il pin deve essere abilitato tramite software come input con resistenza di PullUp.

Pulsante SET RTC  


 

     SeRTC=OFF (pulsante aperto) il pin 8 si trova a livello alto (5V), il software ignora lo stato del pulsante.

    SetRTC=ON (pulsante chiuso) il pin 8 si trova a livello basso (GND), il software memorizza la Data e l'Ora del PC (Collegato tramite USB) nella memoria dell' RTC .

 

 

d )MODULO TEMPERATURA UMIDITA' DHT22

Risultati immagini per am2302

Il modulo utilizza il sensore DHT22, sensore di temperatura e umidità con uscita dei dati in formato digitale. Esso rileva i valori di umidità e temperatura e, attraverso un microcontrollore ad 8 bit in esso racchiuso, li trasforma in segnali digitali. Si tratta di quindi di un componente evoluto, composto da un sensore di umidità di tipo resistivo, un sensore di temperatura di tipo NTC (Negative Temperature Coefficient – un sensore analogico che diminuisce l’impedenza di una resistenza all’aumentare della temperatura) e da un microcontrollore. Legge valori di umidità relativa compresi tra 0 e 99.9% e temperature da -40 a 80 °C.
Questo sensore, su sollecitazione di Arduino, trasmette sul pin DOUT (Uscita digitale) un treno di quaranta bit:

  • 8 bit per indicare la parte intera del valore di umidità
  • 8 bit per indicare la parte decimale dell’umidità 
  • 8 bit per indicare la parte intera della temperatura
  • 8 bit per indicare la parte decimale della temperatura
  • 8 bit per indicare il numero di controllo (per validare il valore dei precedenti 32 bit)

In fig. 3 è riportato lo schema elettrico del modulo.SCHEMA ELETTRICO DHT11

 

La gestione del segnale è a carico di una libreria (dht22.h) che deve essere scaricata ed installata prima della compilazione del programma.

Temperatura di rugiada: Con punto di rugiada o temperatura di rugiada ("dew point") si intende la temperatura alla quale, a pressione costante, l'aria (o, più precisamente, la miscela aria-vapore) diventa satura di vapore acqueo. In meteorologia in particolare, indica a che temperatura deve essere portata l'aria per farla condensare in rugiada, senza alcun cambiamento di pressione. Se il punto di rugiada cade sotto 0 °C, esso viene chiamato anche punto di brina. In estate essa ci fornisce un'idea immediata della sensazione di calore sul nostro organismo: temperature di rugiada superiori ai 17°C sono sintomo di una debole afa, quando invece superano i 21°C, l'afa comincia a diventare fastidiosa. Inoltre il dew point da una rappresentazione anche di quello che è il "carburante" disponibile per lo sviluppo di temporali, più il dew point è elevato più gli eventuali fenomeni temporaleschi potranno essere intensi. Nel programma il calcolo viene effettuato dalla funzione dewPoint, all’interno l’algoritmo che determina il valore della temperatura di rugiada in base al valore della temperatura e dell’umidità.

 

e)MODULO MICROSD

Il modulo MicroSD, tramite l'interfaccia SPI del microcontrollore, consente la lettura e scrittura dei files su una MicroSD. Per la gestione del modulo occorre la libreria SD.h, richiamabile con il comando #include <SD.h>, compresa nell'IDE di Arduino.

Il modulo può essere utilizzato in diversi modi e con diverse funzioni per la gestione dei files sulla scheda microSD.
-Leggere e scrivere un file, controllare se un file esiste;
-Creare un file di testo, eliminare un file, compilare una lista di tutti i file.
In fig.4 e 5 è riportato il modulo e lo schema elettrico.

 

                     SD 1

 

GLI ELEMENTI PRINICIPALI SONO:
1) Regolatore di tensione 3,3V   (AMS1117)    (Input=Vcc - Output=3,3V);
2) Traslatore di livello 3,3V -5V   (74HC125MCT);
3) Alloggiamento per la MicroSD;
4) Connettore J2 per la connessione alla scheda Arduino.

COME FUNZIONA LA SCHEDA SD:
La scheda SD è un dispositivo di memoria di massa estremamente versatile che trova spazio all'interno di molti dispositivi di utilizzo quotidiano. L'idea alla base delle schede SD è quella di creare dei dispositivi di archiviazione di massa di ridotte dimensioni e che, allo stesso tempo, siano in grado di fornire capacià di memorizzazione elevate. La SD Association ha stabilito dei requisiti minimi che le schede Secure Digital devono rispettare se vogliono rientrare in una delle sei classi esistenti: Classe 2 (velocità minima di scrittura/lettura di 2 megabyte al secondo); Classe 4 (velocità minima di scrittura/lettura di 4 megabyte al secondo); Classe 6 (velocità minima di scrittura/lettura di 6 megabyte al secondo); Classe 10 (velocità minima di scrittura/lettura di 10 megabyte al secondo); UHS Speed Class 1 (acronimo UHS-1, con velocità minima di scrittura/lettura di 10 megabyte al secondo); UHS Speed Class 3 (acronimo UHS-3, con velocità minima di scrittura/lettura di 30 megabyte al secondo). Una scheda SD è un supporto di memoria di massa a stato solido. Ciò vuol dire che, come le RAM o i dischi rigidi SSD, non ha parti in movimento al suo interno, favorendone così resistenza e aspettativa di vita. le schede SD fanno uso di memorie NAND Flash, che archivia dati caricando elettricamente (o scaricando) le varie celle di memoria presenti al suo interno. Particolarmente veloci, le NAND Flash appartengono alla famiglia delle memorie EEPROM (acronimo di Electronically Erasable Programmable Read Only Memory, "memoria di sola lettura programmabile e cancellabile elettronicamente").

SOFTWARE:
L'applicazione è stata sviluppata con il software ufficiale di Arduino. Ecco un'estratto del programma creato per il progetto: 

Data Logger Ambientale
   Data - Ora - Temperatura - Umidità - Indice di calore
   Temperatura di rugiada - Indice Raggi Ultravioletti
1. Visualizza in tempo reale su un display 20x4 i dati acquisiti
2. Registra ogni 30 secondi i dati acquisiti su una MicroSd.
--- Catasta Marino - Incoronato Mattia - Esame di Stato A.S.2016-2017 - CL:5AIPAI
--- Applicazione con Arduino e sensori ambientali
*/
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
#include <SD.h>
#include <DHT.h>
.
.
.
void setup ()
{
  dht.begin();
  pinMode (pulsanteset, INPUT_PULLUP);
  pinMode (ledrec, OUTPUT);
  Wire.begin();
  RTC.begin();
  
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.write(7);
Wire.write(B10010000); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave
Wire.endTransmission();
  lcd.init();                       
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(0,0);
.
.
.
void loop () 
{
 tr2=millis()-tr1;  
  boolean set = digitalRead (pulsanteset);
 if (set == LOW)
 {
 RTC.adjust(DateTime(__DATE__, __TIME__)); // Imposta Data e Ora del Computer
 }
  DateTime now = RTC.now();  // Legge i dati dal modulo RTC DS1307
  sprintf(data, "%02d-%02d-%d", now.day(),now.month(), now.year());    // Composizione stringa data
  sprintf(ora,  "%02d:%02d:%02d", now.hour(), now.minute(), now.second());  // Composizione stringa ora
  
  float h = dht.readHumidity();// Lettura Umidità
  float t = dht.readTemperature();// Lettura Temperatura
  float tr=dewPoint(dht.readTemperature(), dht.readHumidity()); // Calcolo temperatura di rugiada
  float hic = dht.computeHeatIndex(t, h, false);// Calcolo Indice di Calore
  int vuv=analogRead(A0);
  for (byte x=0;x<12;x++)
  {
    if (vuv>=uv[x] && vuv<uv[x+1]){iuv=x;}
  }
  if (iuv>=0 && iuv<=2) {B="Basso     ";}
  if (iuv>2 && iuv<=5)  {B="Moderato  ";}
  if (iuv>5 && iuv<=7)  {B="Alto      ";}
  if (iuv>7 && iuv<=10) {B="Molto Alto";}
  if (iuv>10)           {B="Estremo   ";}
   // Visualizza i dati acquisiti ed elaborati sul display LCD 20x4  
.
.
.

 

Ecco un'estratto dei dati raccolti durante il test del circuito:

Data            Ora        Ta(°C) U(%) Tr(°C) Ic(°C) Uv Livello UV
------------------------------------------------------------------------
07-06-2017 13:00:19 28.30 57.00 18.99 29.54 3 Moderato
07-06-2017 13:00:52 28.50 56.70 19.09 29.79 9 Molto Alto
07-06-2017 13:01:25 28.70 56.30 19.16 30.04 1 Basso
07-06-2017 13:01:57 28.20 56.70 18.81 29.37 1 Basso
07-06-2017 13:02:30 27.80 56.80 18.46 28.84 9 Molto Alto
07-06-2017 13:03:03 28.10 56.50 18.66 29.21 0 Basso
07-06-2017 13:03:36 28.20 57.60 19.06 29.47 0 Basso
07-06-2017 13:04:08 28.10 57.90 19.05 29.36 0 Basso
07-06-2017 13:04:41 28.10 57.80 19.02 29.35 0 Basso
07-06-2017 13:05:14 28.10 57.80 19.02 29.35 0 Basso
07-06-2017 13:05:47 28.00 57.80 18.93 29.21 0 Basso
07-06-2017 13:06:19 27.90 57.50 18.75 29.04 0 Basso
07-06-2017 13:06:52 27.90 57.20 18.67 29.01 0 Basso
07-06-2017 13:07:25 27.90 57.20 18.67 29.01 5 Moderato


Come è possibile vedere, il programma ha creato una tabella contenente tutti i valori rilevati, Il file con tutti i dati è stato poi salvato automaticamente sulla scheda SD.

In allegato la tabella completa con tutti i valori rilevati.

BIBLIOGRAFIA:

-appunti scolastici;
-Wikipedia;

-Arduino.cc.

 

 

 

 

 

 

 

 

Allegati:
Scarica questo file (AM2302.pdf)AM2302.pdf[Data sheet DHT22]406 kB
Scarica questo file (DataSheet_SGM8521-Shengbang Microelectronics.pdf)DataSheet SGM8521[ ]693 kB
Scarica questo file (Datasheet_UV_GUVA-S12SD.pdf)Datasheet_UV_GUVA-S12SD[ ]318 kB
Scarica questo file (Globa_Solar_UV_IDEX.pdf)Global Solar UV-Index[ ]606 kB
Scarica questo file (RK-10290_410.pdf)RK-10290_410.pdf[Data sheet display]1200 kB
Scarica questo file (Tabella dati.txt)Tabella dati.txt[ ]3 kB