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