apri qui il PDF - Marco Lo Giudice

Transcript

apri qui il PDF - Marco Lo Giudice
REALIZZAZIONE DI UNA
STAZIONE
METEOROLOGICA CON
ARDUINO
20/06/2016
Marco Lo Giudice
Utilizzando Arduino, una scheda elettronica di piccole dimensioni,
è possibile costruire una stazione meteorologica che registra
temperatura, umidità e pressione atmosferica. Arduino è in grado,
tramite una connessione Wi-Fi, di archiviare i dati raccolti in un
database, diventando così un datalogger. Analizzando tali dati è
possibile elaborare delle previsioni del tempo.
REALIZZAZIONE DI UNA STAZIONE METEOROLOGICA CON ARDUINO
REALIZZAZIONE DI UNA
STAZIONE METEOROLOGICA
CON ARDUINO
M A RC O LO G I U DI C E
STAZIONE METEOROLOGICA - COSTRUZIONE
La stazione meteorologica è stata creata a partire da Arduino, una scheda elettronica utile per ottenere
velocemente prototipi. A tale scheda è possibile collegare una notevole quantità di accessori, tra cui i sensori.
Per realizzare la Stazione meteo sono necessari i sensori di temperatura/umidità e di pressione atmosferica.
È necessaria inoltre un’ulteriore scheda, la Wi-Fi shield che, collegata ad Arduino, permette a quest’ultimo
di archiviare i dati in un database online.
Nel dettaglio la Stazione meteorologica è composta da: scheda
Arduino Uno R3, sensore di temperatura e umidità DTH 11,
sensore di pressione GY-65, Wi-Fi shield.
Il sensore di temperatura e umidità presenta le seguenti
specifiche tecniche: campo di misura umidità: 20% ~ 95%,
Errore di misura umidità: +/- 5%, gamma misurazione
temperatura: 0°C ~ 50°C, errore di misura di
temperatura: +/- 2°C. Il sensore si collega ad Arduino tramite 3
cavi: il PIN 1 (VCC) serve per l’alimentazione del sensore stesso
e viene collegato al pin 5V di Arduino; il PIN 2 (Data) è il segnale digitale, dove cui passano i valori della
temperatura appena registrati; il PIN 3 (GND) è la massa.
FIGURA 1 ARDUINO UNO
Il sensore di pressione ha un range di misura tra 300 e 1100hPa ed una precisione assoluta fino a 0.03hPa.
Questo sensore, come quello di temperatura/umidità, ha i PIN VCC e GND per l’alimentazione e la massa
e presenta due ulteriori PIN: SDA e SCL. Il primo è destinato al transito dei dati, come nel sensore di
temperatura e umidità, il secondo è il clock, ossia la frequenza di funzionamento del sensore.
La stazione viene alimentata da un alimentatore che può essere collegato ad una qualsiasi presa di corrente.
L’alimentatore deve fornire un voltaggio tra i 7 e i 12 Volt.
L’insieme di tutti i componenti viene riposto in un case in legno, che permette di proteggerlo anche in ambienti
esterni. Il case deve essere comunque ben areato, in modo da permettere ai sensori di registrare la
temperatura esatta.
STAZIONE METEOROLOGICA – PROGRAMMAZIONE
Una volta assemblata, la stazione deve essere programmata per svolgere il proprio lavoro con l’IDE Arduino,
in C++. Nel codice di programmazione, è necessario dichiarare la presenza dei sensori di
Pag. 1
REALIZZAZIONE DI UNA STAZIONE METEOROLOGICA CON ARDUINO
temperatura/umidità e pressione; inserire le credenziali di accesso per la connessione Wi-Fi e connettersi;
prelevare i dati dai sensori e inserirli nel database online.
Il codice sorgente di Arduino è quindi suddivisibile in varie parti, ognuna delle quali svolge un ruolo specifico.
La prima parte è quella della dichiarazione delle librerie (file necessari al funzionamento dei vari sensori e
schede, come la Wi-Fi shield). Successivamente vanno create le variabili che contengono il nome della rete
Wi-Fi alla quale Arduino deve connettersi e la relativa password di accesso. È necessario creare altre tre
variabili, per memorizzare i dati ambientali, quindi la temperatura, l’umidità e la pressione. Dopo queste
due parti di codice sorgente, si entra nella sezione della funzione setup(). All’interno della funzione, sono
contenute tutte le istruzioni che la stazione deve compiere al momento dell’accensione, quindi una volta sola.
Una volta avviata, la stazione deve controllare la presenza dei vari sensori e della Wi-Fi shield. In caso di
mancanza di uno di questi, la stazione interrompe il processo di accensione e avvisa l’utente del problema.
Tali messaggi possono essere letti dall’utente se la stazione meteo è collegata tramite USB al computer. Una
volta eseguite tutte le istruzioni contenute nella funzione setup(), Arduino entra in maniera irreversibile nella
funzione loop(). Questa funzione viene svolta in continuazione, in maniera ciclica. Appena terminano tutte le
istruzioni, la funzione ricomincia. All’interno della funzione loop() Arduino si connette alla rete Wi-Fi con le
credenziali fornite dalle variabili precedentemente dichiarate. In questo punto, la stazione proverà a
connettersi alla rete finché non riesce a farlo. Si entra quindi in un sotto ciclo che termina solo con la
connessione alla rete.
Una volta connessa ad internet, la stazione può interrogare i sensori, tramite la funzione lettura(), inserire i
dati nelle tre variabili sopra create e inviarli al database online, tramite la funzione invio().
Una svolta finita la funzione invio(), la stazione rimane in standby per cinque minuti, tempo di attesa stabilito
tra un invio ed un altro. Passati cinque minuti verrà ripetuta la funzione loop(), quindi le sotto funzioni lettura()
e invio() e i relativi cinque minuti di pausa.
La funzione loop() sarà ripetuta fino allo spegnimento della stazione meteorologica. Essendo ripetuta ad
intervalli regolari di cinque minuti, la stazione invierà al database dodici record di dati all’ora, quindi
duecentottantotto volte al giorno.
Il codice è reperibile al seguente indirizzo: http://marcolg.altervista.org/stazione/codice.ino
IL DATABASE
Il database è il luogo dove vengono immagazzinati tutti i dati raccolti dalla stazione. È formato da un’unica
tabella formata da cinque campi: ID, Data/Ora, Temperatura, Umidità, Pressione.
Il campo ID è la chiave primaria del database, che permette di individuare unicamente un record. Il suo
valore è generato in modo automatico nel momento di inserimento dei dati: gode infatti della proprietà
AUTO_INCREMENT. Anche il campo Data è compilato automaticamente: viene inserito l’instante di tempo
preciso nel quale avviene l’inserimento dei dati. Gli ultimi tre campi sono i dati raccolti dalla stazione. Tutti
i campi sono di tipo INT (contengono un numero intero), tranne il campo Data che è di tipo TIMESTAMP
(contiene una precisa data nel formato AAAA-MM-GG HH-MM-SS).
ID Data
Temperatura Umidità Pressione
1
2016-03-30 17:55:53
20
68
101400
2
2016-03-30 17:55:53
19
68
140202
3
2016-03-30 17:55:53
19
67
142003
FIGURA 2 ESEMPIO DI TABELLA DEL DATABASE
Pag. 2
REALIZZAZIONE DI UNA STAZIONE METEOROLOGICA CON ARDUINO
LA PAGINA WEB
La pagina web è il punto in cui l’utente interagisce direttamente con la stazione. In questa pagina, infatti,
vengono illustrati in maniera ordinata tutti i dati presenti nel database.
Dalla pagina principale, nella quale è possibile visualizzare le condizioni meteorologiche del momento, è
possibile accedere ad ulteriori due sotto pagine: statistiche e archivio. Nella prima vengono visualizzati i
grafici che mostrano l’andamento di temperatura, umidità e pressione. La pagina riporta anche il minimo e
il massimo e la data della registrazione. Nella pagina “archivio” è possibile inserire una data e visualizzare
le condizioni meteo verificatesi in quel giorno.
Come qualsiasi pagina web, essa è scritta in HTML, linguaggio che permette la formattazione e
l’impaginazione di documenti in internet. All’interno del codice HTML, che, come già detto, serve a costruire
tutti gli elementi grafici della pagina (icone, pulsanti, tabelle, ecc.) è presente un ulteriore linguaggio: il PHP.
Il PHP è un linguaggio di Scripting concepito per la creazione di pagina web dinamiche (pagina web il cui
contenuto, in tutto o in parte, è generato sul momento dal server, potendo dunque essere diversa ogni volta
che viene richiamata consentendo un'interattività con l'utente). Tramite il PHP è possibile collegarsi al
database ed eseguire una serie di query per prelevare i dati e inserirli all’interno del codice HTML dentro
una tabella, ad esempio.
Nel seguente esempio è mostrata una query che preleva i dati degli ultimi quaranta minuti.
SELECT * FROM Stazione WHERE Data > NOW() - INTERVAL 40 MINUTE;
Per la realizzazione del sito sono necessarie, oltre a quella appena visualizzate, numerose query. I valori
minimi/massimi di temperatura, umidità, pressione, ad esempio, si ottengono sempre con le query SQL.
La pagina web è progettata in modo che sia accessibile da qualsiasi tipo di dispositivo, dallo smartphone
più piccolo fino al computer con lo schermo più ampio. In termini tecnici la pagina web è responsiva, in quanto
si adatta ad ogni dimensione dello schermo. Tale caratteristica avviene grazie all’uso di un particolare CSS:
Bootstrap.
Bootstrap è una raccolta di strumenti liberi per la creazione di siti e applicazioni per il Web. Essa contiene
modelli di progettazione basati su HTML e CSS, sia per la tipografia, che per le varie componenti
dell'interfaccia, come moduli, pulsanti e navigazione.
Le seguenti immagini illustrano l’aspetto della pagina iniziale in un computer desktop e in un qualsiasi
smartphone. In entrambi i casi sono evidenziate in primo piano le condizioni ambientali, quindi temperatura,
umidità, pressione e una previsione del tempo, espressa sotto forma di icona. Sotto i dati in primo piano,
sono riportati in una tabella gli ultimi record registrati. Se la stazione non invia dei dati da più di dieci minuti,
verrà visualizzato un avviso.
Nella versione desktop (figura 3) nel lato sinistro è presente una barra a sfondo grigio dalla quale è
possibile accedere alle altre schermate (statistiche e archivio). Nella versione per smartphone (figura 4), per
Pag. 3
REALIZZAZIONE DI UNA STAZIONE METEOROLOGICA CON ARDUINO
ottimizzare lo spazio notevolmente ridotto, la barra laterale non è presente e le altre sezioni del sito sono
accessibili dal menù a cascata che compare cliccando il pulsante con tre linee in alto a destra.
FIGURA 3
FIGURA 4
La pagina web è reperibile al seguente indirizzo: http://marcolg.altervista.org/stazione/
Come già detto, la previsione del tempo sarà espressa sotto forma di un’icona che simboleggia la condizione
meteo prevista. Nella seguente immagine sono raffigurate le possibili icone. In ordine esse annunciano
condizioni di neve, temporale, pioggia, tempo nuvoloso e tempo soleggiato.
FIGURA 5 ICONE METEO
PRESSIONE E PREVISIONE DEL TEMPO
Analizzando i valori della pressione atmosferica è possibile ottenere una previsione del tempo.
La pressione atmosferica, in meteorologia, indica il peso della colonna d'aria che sovrasta una superficie di
un metro quadrato. Nel Sistema Internazionale di pesi e misure (S.I.) l'unità di misura della forza è il Newton
(N) mentre quella della superficie è il metro quadrato (m2); l'unità di misura della pressione è il Pascal (Pa),
pertanto: 1 Pa = 1 N/m2. Data l'entità numerica dei valori di pressione atmosferica tipici con cui si ha a che
fare, in Meteorologia si usa l'hectoPascal (hPa) che è numericamente identico al millibar (1 hPa = 1 mb) e
corrisponde a 100 Pa. Il valore medio della pressione atmosferica al livello del mare (in quella che viene
chiamata in questo caso "atmosfera standard") è pari a 1013.25 mb = 1013.25 hPa = 101325 Pa. Le
variazioni di pressione sono sempre abbastanza contenute: sull'Italia, ad esempio, si può andare in casi
estremi da un valore minimo di 980 hPa a un massimo di 1045 hPa, con una variazione percentuale massima
del 6-7%.
La pressione atmosferica dipende da diversi fattori: altitudine, temperatura e umidità. La pressione
atmosferica che si misura ad una certa altezza è dovuta al peso delle molecole d'aria sovrastanti; poiché
Pag. 4
REALIZZAZIONE DI UNA STAZIONE METEOROLOGICA CON ARDUINO
più si sale in altitudine e minore sarà il numero di molecole al di sopra, la pressione diminuisce all'aumentare
della quota ed aumenta viceversa. La pressione diminuisce anche con l’aumento della temperatura. Poiché
l'atmosfera terrestre, riscaldandosi, tende a dilatarsi diventando meno densa e più leggera a parità di
volume occupato. Di conseguenza il minore peso della massa d'aria calda riduce la pressione della colonna
d'aria e quindi si avrà una più bassa pressione atmosferica rispetto alle ore precedenti. Infine, la pressione
atmosferica è anche influenzata dall’umidità dell’aria: la pressione diminuisce all'aumentare dell'umidità
atmosferica, cioè del suo contenuto di vapore acqueo, in quanto quest'ultima ha una densità minore
dell'ossigeno e dell'azoto (che compone il 78% dell’aria), i gas presenti in maggior quantità nell'atmosfera.
Pertanto, l'aria umida è più leggera dell'aria secca e tende a salire verso l'alto, mentre la seconda tende a
scendere verso il basso.
La pressione come influenza le condizioni meteorologiche? Generalmente ad un aumento della pressione
corrisponde un generale miglioramento delle condizioni atmosferiche (bel tempo), viceversa ad una
diminuzione della pressione corrisponde un generale peggioramento delle condizioni atmosferiche.
Questa "legge" fa riferimento ad una complessa legge fisica detta "equazione di stato dei gas perfetti" che
descrive con complessi calcoli e dimostrazioni matematiche le condizioni fisiche di un gas "perfetto"; si tratta
quindi di una legge che si riferisce ad un elemento in realtà non esistente in natura per spiegare una realtà
molto più complessa. Semplificando molto le cose, ad una pressione minore corrisponde ad una temperatura
minore: se la temperatura è minore l'acqua presente nell'aria tende a condensare e precipita al suolo
(condizioni di maltempo).
In meteorologia, le zone di alta pressione sono definite anticicloni. Negli anticicloni l'aria essendo pesante,
si comprime, si riscalda e diventa più secca), dissolvendo spesso le nubi. In presenza di un anticiclone, però,
durante l'inverno possono formarsi nebbie o foschie a causa delle inversioni termiche nei pressi del suolo,
mentre durante l'estate il forte riscaldamento del suolo può causare la formazione improvvisa di cumulonembi
con i conseguenti temporali locali anche di forte intensità. I cicloni sono invece zone di bassa pressione.
Le nubi "scorrono" alle diverse quote trasportate dai venti ed in base ad essi le correnti d'aria che portano
una certa pressione ed una certa condizione atmosferica si spostano a loro volta determinando la molteplicità
delle condizioni del Tempo.
Questi meccanismi in realtà sono molto più complessi a causa di molteplici variabili che incidono su quanto
scritto; spiegano però in maniera piuttosto soddisfacente quanto accade con la variazione della Pressione
Atmosferica, consentendo quindi di effettuare una previsione del tempo.
Grazie a questa correlazione tra pressione atmosferica e condizioni meteorologiche, la stazione può fornire
una previsione del tempo a breve termine (12/24 ore). La previsione verrà indicata sulla pagina web sopra
descritta e verrà fatta indicando se c’è bassa o alta pressione.
Riassumendo è possibile creare le seguenti fasce di pressione, ordinate in ordine decrescente. Fino a 1015
hPa si parla di alta pressione, quindi è prevedibile a breve termine bel tempo. Tra 1008 e 1014 hPa si è
dentro la fascia intermedia, con tempo quindi variabile; con pressione inferiore a 1007 ci si aspetta brutto
tempo.
POSSIBILI MIGLIORIE
La stazione meteo realizzata lascia molte opportunità di sviluppo. Essendo infatti realizzata con Arduino, è
possibile aggiungere o rimuovere facilmente alcuni componenti.
La Wi-Fi shield presenta uno slot per inserire una scheda microSD. In questa scheda di memoria è possibile,
ad esempio, salvare un file di testo con una serie di credenziali per accedere a più reti Wi-Fi. Consultando
questo file di testo Arduino potrebbe connettersi in diverse posizioni, selezionando la rete corretta. Questo
Pag. 5
REALIZZAZIONE DI UNA STAZIONE METEOROLOGICA CON ARDUINO
sistema eviterebbe di modificare il codice sorgente di Arduino (in C++) ogni volta che cambia la rete WiFi: sarà sufficiente aggiornare il file di testo.
La scheda SD può essere ulteriormente sfruttata come luogo per salvare temporaneamente i dati raccolti
dalla stazione meteorologica in assenza di una connessione ad internet. Attualmente, infatti, se la stazione
non è collegata a nessuna rete Wi-Fi registra i dati ambientali, ma non riesce ad inviarli al database e
quindi essi vanno perduti. Salvandoli nella scheda SD, invece, possono essere inviati in un secondo momento,
quando è possibile nuovamente connettersi alla rete Wi-Fi.
È possibile permettere alla stazione di rilevare ulteriori dati ambientali: per Arduino sono presenti pluviometri
e anemometri. Il primo tipo di sensore indica la quantità di pioggia che precipita tramite una colonna
graduata con una scala in millimetri. L’anemometro indica velocità e direzione del vento. Una maggiore
varietà di dati può permettere una previsione del tempo più accurata.
La Wi-Fi shield rimane collegata alla rete senza fili, senza nessuna disconnessione. Questo comporta un
maggiore consumo di energia elettrica: su internet solo reperibili delle specifiche librerie che permettono di
mettere in standby la Wi-Fi shield tra un invio e l’altro, andando a ridurre notevolmente i consumi.
FONTI
Scheda:

Genuino (marchio europeo di Arduino) Uno rev. 3
(https://www.arduino.cc/en/Main/ArduinoBoardUno)
Realizzazione pagina web:




Modello ed elementi grafici: Bootstrap (http://getbootstrap.com/)
Grafici temperatura, umidità e pressione: Chart.js (http://www.chartjs.org/)
Spazio per la pubblicazione del sito online: Altervista (http://it.altervista.org/)
Set icone condizioni meteorologiche: Weather Icons (https://erikflowers.github.io/weather-icons/)
Codice Arduino:



Libreria per il funzionamento del sensore di temperatura/umidità: dht11.h
(http://playground.arduino.cc/Main/DHT11Lib)
Libreria per il funzionamento del sensore di pressione atmosferica: Adafruit_BMP085.h
(https://github.com/adafruit/Adafruit-BMP085-Library)
Libreria per il funzionamento della Wi-Fi Shield: WiFi.h
(https://www.arduino.cc/en/Reference/WiFi)
Pressione atmosferica e previsione del tempo:


Pag. 6
http://www.meteoland.org/scuola/9-la-pressione-e-latmosfera
http://www.meteo-online.it/conoscereilmeteo.htm