Stazione meteo con Raspberry Pi

Il kit stazione meteo è un modulo HAT per il Raspberry Pi che permette di raccogliere informazioni sulle condizioni meteorologiche, utilizzando diversi tipi di sensori. Il kit è stato espressamente progettato per essere impiegato nelle scuole, permettendo agli studenti di realizzare una propria stazione meteo completa. Oltre a registrare i propri dati localmente, le scuole possono inviare i dati da esse raccolti a un database Oracle centralizzato, in modo tale da condividerli e collaborare con altre scuole di tutto il mondo.

Setup della stazione meteo

Montaggio del Raspberry Pi

Per assemblare la stazione meteo, occorre anzitutto installare il Raspberry Pi su una base di materiale acrilico. Per questa attività iniziale sono necessari i seguenti componenti:

  1. base di materiale acrilico
  2. Raspberry Pi 2
  3. HAT Weather Station (modulo HAT stazione meteo)
  4. batteria a bottone CR1225
  5. GPIO extender a 40-pin
  6. viti 4 x 8mm
  7. viti 4 x 6mm
  8. 4 distanziali esagonali

Appoggiate il Raspberry Pi sulla base acrilica, come indicato nell'immagine di figura 1. I connettori di alimentazione del Raspberry Pi dovrebbero essere orientati in modo tale da combaciare con le fessure della base acrilica.

Fonte: www.raspberrypi.org

Figura 1: Raspberry Pi 2 e la base acrilica [Fonte: www.raspberrypi.org]

Infilate una vite da 8mm dalla parte inferiore della base acrilica, e avvitatela sul distanziale esagonale (Figura 2).

Fonte: www.raspberrypi.org

Figura 2: Montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Ripetete la stessa operazione per gli altri distanziali (Figura 3).

Fonte: www.raspberrypi.org

Figura 3: Montaggio della stazione meteo [Fonte www.raspberrypi.org]

Inserite l'extender da 40-pin sul Raspberry Pi (Figura 4).

Fonte: www.raspberrypi.org

Figura 4: Montaggio della stazione meteo [Fonte www.raspberrypi.org]

Prendete il Weather Station HAT e separatelo nelle sue due parti, come indicato nella figura 5.

Fonte: www.raspberrypi.org

Figura 5: Montaggio della stazione meteo [Fonte www.raspberrypi.org]

Usate delle pinze per rimuovere la sezione rimanente dell'HAT (Figura 6 e 7).

Fonte: www.raspberrypi.org

Figura 6: Montaggio della stazione meteo [Fonte www.raspberrypi.org]

Fonte: www.raspberrypi.org

Figura 7: Montaggio della stazione meteo [Fonte www.raspberrypi.org]

Inserite la batteria a bottone nell'HAT, con il polo positivo rivolto verso l'alto (Figura 8).

Fonte: www.raspberrypi.org

Figura 8: Montaggio della stazione meteo [Fonte www.raspberrypi.org]

Collegate l'HAT al Raspberry Pi (Figura 9).

Fonte: www.raspberrypi.org

Figura 9: Montaggio della stazione meteo [Fonte www.raspberrypi.org]

Fissate l'HAT utilizzando le viti da 6 mm (Figura 10).

Fonte: www.raspberrypi.org

Figura 10: Montaggio della stazione meteo [Fonte www.raspberrypi.org]

A questo punto potete collegare la tastiera, il monitor, il mouse e l'alimentazione, e procedere con l'installazione e la configurazione della parte software, riprendendo da questo punto per completare l'assemblaggio della stazione meteo. In alternativa, potete proseguire direttamente come indicato nei prossimi passi, e procedere con l'installazione del software in un secondo momento.

Alimentazione e collegamento a internet

L'HAT fornisce l'alimentazione al Raspberry Pi tramite dei pin GPIO. Per alimentare il Raspberry Pi, occorrono i seguenti componenti (Figura 11):

  1. Power over Ethernet (PoE) injector,
  2. Power over Ethernet (PoE) splitter,
  3. trasformatore 24V con adattatori internazionali,
  4. un cavo Ethernet CAT 5, sufficientemente lungo da raggiungere il punto in cui si desidera collocare la stazione meteo. (Il cavo non è fornito nel kit: si veda la sezione relativa al cavo Ethernet, più avanti nella guida).

Fonte: www.raspberrypi.org

Figura 11: Il kit per la stazione meteo [Fonte: www.raspberrypi.org]

Collegate tastiera, monitor, e mouse al Raspberry Pi (Figura 12).

Fonte: www.raspberrypi.org

Figura 12: Montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Collegate lo splitter PoE al Pi e all'HAT (Figura 13 e 14).

Fonte: www.raspberrypi.org

Figura 13: Montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Fonte: www.raspberrypi.org

Figura 14: Montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Collegate lo splitter PoE al PoE injector, utilizzando il cavo Ethernet Cat 5 (Figura 15).

Fonte: www.raspberrypi.org

Figura 15: Montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Collegate il PoE injector al trasformatore, utilizzando l'adattatore compatibile con la vostra rete elettrica (Figura 16).

Fonte: www.raspberrypi.org

Figura 16: Montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Inserite l'alimentatore e il cavo Ethernet per verificare che il Pi sia correttamente alimentato e connesso (Figura 17).

Fonte: www.raspberrypi.org

Figura 17: Montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Collegamento dei sensori

L'HAT (visibile nell'immagine di apertura dell'articolo) dispone di diversi sensori integrati sulla board stessa, e altri sensori ad esso esterni. Maggiori dettagli sui sensori e sul loro funzionamento possono essere ottenuti leggendo i relativi paragrafi di questa guida (li tratteremo in dettaglio più avanti).

Per il momento è sufficiente sapere che il Weather Station HAT si collega a tre sensori esterni:

  1. un sensore di pioggia, che si collega al connettore RJ11 superiore;
  2. un sensore anemometro e un sensore indicatore di direzione del vento, collegato al connettore RJ11 centrale;
  3. un sensore dell'aria, che richiede però di essere preventivamente assemblato (come vedremo ora).

Contenitore per il sensore dell'aria

L'approntaggio di questo contenitore richiede l'utilizzo dei seguenti componenti (Figura 18):

  • 4 x viti di fissaggio in plastica,
  • 4 x distanziali in plastica,
  • 4 x dadi in plastica,
  • base acrilica piccola,
  • contenitore per il sensore dell'aria,
  • 2x viti per il montaggio.

Fonte: www.raspberrypi.org

Figura 18: Scatola e viti [Fonte: www.raspberrypi.org]

Allineate la scheda del sensore dell'aria con la base acrilica come indicato nell'immagine di figura 19.

Fonte: www.raspberrypi.org

Figura 19: Montaggio del sensore dell'aria [Fonte: www.raspberrypi.org]

Utilizzando i distanziali in plastica per separare la board dalla base acrilica, fissate il tutto utilizzando le viti e i dadi di fissaggio (Figura 20).

Fonte: www.raspberrypi.org

Figura 20: Passi di montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Montate la base acrilica nel contenitore, come indicato nella figura 21.

Fonte: www.raspberrypi.org

Figura 21: Passi di montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Rimuovete i due sigilli di gomma in posizione opposta rispetto ai connettori RJ11 (Figura 22).

Fonte: www.raspberrypi.org

Figura 22: Passi di montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Collegate un cavo RJ11 e la sonda di temperatura al modulo sensore dell'aria, come mostrato in figura 23.

Fonte: www.raspberrypi.org

Figura 23: Passi di montaggio della stazione meteo [Fonte: www.raspberrypi.org]

IMPORTANTE: Non sostituite i sigilli di gomma rimossi e non cercate di sigillare i cavi. Il contenitore del sensore dell'aria necessita di essere aperto ed è questo il motivo per cui è stato collocato in un contenitore separato.

Contenitore unità di controllo

Per questa fase occorrono (Figura 24):

  • il contenitore grande,
  • viti 6 x 10mm,
  • il Raspberry Pi e il Weather Station HAT assemblati in precedenza.

Fonte: www.raspberrypi.org

Figura 24:Unità di controllo [Fonte: www.raspberrypi.org]

Aprite il contenitore grande di colore grigio, rimuovete le 4 viti e mettetele da parte. Serviranno poi per chiudere il coperchio (Figura 25).

Fonte: www.raspberrypi.org

Figura 25: Passi di montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Fissate la base acrilica sul fondo del contenitore, utilizzando le viti 6 x 10mm (Figura 26).

Fonte: www.raspberrypi.org

Figura 26: Passi di montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Protezione dall'acqua

A questo punto possiamo collegare il sensore di pioggia. Rimuovete i sigilli di gomma posti sul lato del contenitore (Figura 27).

Fonte: www.raspberrypi.org

Figura 27: Passi di montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Rimuovete il dado di plastica da 12mm dal gommino posto sul cavo RJ11 del sensore di pioggia (Figura 28).

Fonte: www.raspberrypi.org

Figura 28: Passi di montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Utilizzando il dado come guida, marcate il sigillo con un cerchio (approssimativo) di 10 mm (Figura 29 e 30).

Fonte: www.raspberrypi.org

Figura 29: Passi di montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Fonte: www.raspberrypi.org

Figura 30: Passi di montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Utilizzate un taglierino o un coltello affilato per praticare un foro attraverso il sigillo (Figura 31).

Fonte: www.raspberrypi.org

Figura 31: Passi di montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Fate passare il cavo RJ11 attraverso il sigillo (Figura 32).

Fonte: www.raspberrypi.org

Figura 32: Passi di montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Infilate attraverso il sigillo la parte filettata del gommino. Una leggera torsione potrebbere semplificare l'operazione (Figura 33).

Fonte: www.raspberrypi.org

Figura 33: Passi di montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Fate passare il dado di plastica attraverso il cavo RJ11 e infilatelo nel gommino (Figura 34).

Fonte: www.raspberrypi.org

Figura 34: Passi di montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Reinserite il sigillo nel contenitore (Figura 35).

Fonte: www.raspberrypi.org

Figura 35: Passi di montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Ripetete le stesse operazioni per il sensore direzione del vento.

Collegate i cavi RJ11 al Weather HAT (Figura 36).

Fonte: www.raspberrypi.org

Figura 36: Passi di montaggio della stazione meteo [Fonte: www.raspberrypi.org]

Fissate la parte esterna del gommino in modo tale che blocchi il cavo realizzando un sigillo impermeabile.

Gommino del sensore dell'aria

Collegate e sigillate il gommino del sensore dell'aria, esattamente come per il sensore dell'acqua.

Gommino cavo Ethernet

Il cavo Ethernet è stato volutamente omesso dal kit perchè non è possibile sapere dove e come verrà installata la stazione meteo: potrebbe essere collocata vicino ad un router, come pure a una distanza di 50 metri da esso. Esistono due opzioni per quanto riguarda il collegamento alla rete della stazione meteo: o utilizzare un cavo Ethernet già pronto (detto anche cavo patch), oppure potete realizzarne uno da soli.

Realizzazione di un cavo Ethernet

Se siete in grado di realizzare da soli un cavo di rete, oppure conoscete qualcuno che può farlo per voi, questa è sicuramente la soluzione migliore. Potete infilare il piccolo connettore da 16mm direttamente sul cavo prima di crimparlo. In questo modo si otterrà la migliore tenuta, e anche la lunghezza sarà perfetta.

Utilizzo di un cavo patch

Il connettore di plastica di un cavo patch è troppo grande per passare attraverso il dado di plastica da 16mm. Dovrete perciò utilizzare il dado più grande, da 20mm. Il dado è contraddistinto dal marchio "M20". Abbiamo testato diversi cavi, e tutti, con un pò di pazienza, sono passati attraverso il dado da 20mm. Lo svantaggio è che il connettore da 20mm è troppo grande per sigillare opportunamente il cavo. Dovrete cercare di sigillarlo meglio che potete, utilizzando del nastro adesivo o degli altri gommini.

Collegamento alla rete della stazione meteo

Dopo aver testato e installato la stazione meteo, occorrerà collegarla alla rete. Questo è un argomento deve è molto difficile dare delle istruzioni specifiche, in quanto ogni scuola, organizzazione, o casa, è differente dalle altre. Oltre alle differenze fisiche con cui un computer si collega a internet, possono esserci potenziali problemi dovuti alla presenza di firewall, proxy, o altri tipi di restrizioni. Il nostro consiglio è il seguente:

  • se nella vostra scuola è presente un tecnico di rete/ICT, cercate di coinvolgerlo nel vostro progetto;
  • se non disponete di un tecnico, reperite il responsabile dalla vostra rete e coinvolgetelo;
  • se avete ancora dei problemi o vi siete bloccati, visitate il Forum della Stazione Meteo.

Se ovviamente voi stessi siete un tecnico ICT, oppure il manager della vostra rete, ci farebbe piacere che condivideste le vostre esperienze nella sezione commenti.

Il software

Non sono richieste particolari conoscenze per installare il software della stazione meteo. Ci sono diversi passi da seguire, ma il vantaggio di eseguire l'operazione manualmente è quello di imparare come funzionano i sensori e la stazione stessa. Si avrà inoltre la possibilità di utilizzare l'interfaccia a linea di comando, l'editor di testo nano, e il database MySQL. Ovviamente non dimentichiamo il sistema operativo di riferimento, vale a dire Linux. Se vi interessa soltanto avere la stazione meteo funzionante nel minore tempo possibile, potete utilizzare questa immagine su disco. Se vi bloccate su qualche punto, oppure se avete bisogno di assistenza, non esitate a consultare il forum.

Installazione manuale

  1. Partite da una nuova installazione dell'ultima versione di Raspbian.
  2. Al primo boot vi verrà presentato il desktop.
  3. Dal tasto Menu in alto a sinistra, selezionate Preferences > Raspberry Pi Configuration.
  4. Selezionate "Expand Filesystem" (Figura 37):
    Fonte: www.raspberrypi.org

    Figura 37: Raspbian [Fonte: www.raspberrypi.org]

  5. Già che vi trovate lì, vi raccomandiamo di cambiare la vostra password utilizzando il tasto apposito.
  6. Nel tab Interfaces, abilitate l'I2C (Figura 38):
    Fonte: www.raspberrypi.org

    Figura 38: I2C [Fonte: www.raspberrypi.org]

  7. Apparirà una finestra di richiesta di reboot. Selezionate "Yes".

Setup del real time clock

Eseguiremo la maggiorparte di questa configurazione direttamente dalla command line. Aprite una finestra terminale utilizzando l'icona della barra menu (Figura 39).

Fonte: www.raspberrypi.org

Figura 39: Terminal [Fonte: www.raspberrypi.org]

Apparirà il prompt:

pi@raspberrypi: ~ $

Potete inserire i comandi che seguono direttamente dal prompt.

Anzitutto dovrete scaricare i file necessari:

cd ~ && git clone https://github.com/raspberrypi/weather-station

Abbiamo incluso uno script di installazione che esegue automaticamente l'impostazione del real-time clock. Potete eseguire questo script, oppure, in alternativa, seguire le istruzioni qui sotto per impostare l'RTC manualmente. Noi vi raccomandiamo di utilizzare lo script!

Setup automatico dell'RTC

Per eseguire lo script, digitate:

./weather-station/install.sh

L'operazione richiederà un pò di tempo, pertanto siate pazienti. A un certo punto vi verrà chiesto di confermare oppure impostare l'ora corrente. Una volta terminato, verrà eseguito un reboot automatico. Saltate la sezione Test dei Sensori e verificate che la stazione meteo e tutti i suoi sensori stiano funzionando correttamente. Successivamente, andate alla sezione relativa al setup del Database.

Setup manuale dell'RTC

Anzitutto occorre verificare che abbiate installato tutti gli ultimi aggiornamenti per il vostro Raspberry Pi:

sudo apt-get update && sudo apt-get upgrade

Dovete ora fare qualche modifica a un file di configurazione in modo tale da consentire al Raspberry Pi di utilizzare il real-time clock:

sudo nano /boot/config.txt

Aggiungete le righe seguenti alla fine del file:

dtoverlay=w1-gpio
dtoverlay=pcf8523-rtc

Premete Ctrl + O e poi Enter per salvare il file, e Ctrl + X per uscire da nano.

Impostate ora i moduli da caricare automaticamente al boot:

sudo nano /etc/modules

Aggiungete le seguenti righe alla fine del file:

i2c-dev
w1-therm

Premete Ctrl + O e poi Enter per salvare il file, e Ctrl + X per uscire da nano.

Per eseguire i passi successivi, dovremo collegare l'HAT Weather Station al Raspberry Pi:

sudo halt

Eseguite un reboot per applicare i cambiamenti:

sudo reboot

Verificate che il real-time clock (RTC) appaia in /dev:

ls /dev/rtc*

Dovreste ora vedere qualcosa di simile a /dev/rtc0.

Inizializzazione dell'RTC con l'ora corretta

Utilizzate il comando date per verificare che l'ora di sistema corrente sia corretta. Se l'ora è corretta, potete impostare l'ora dell'RTC con il clock di sistema con il comando seguente:

sudo hwclock -w

Se l'ora non è corretta, potete impostare l'ora dell'RTC manualmente utilizzando il comando qui sotto (dovrete modificare il parametro --date, dato che questo esempio imposta la data alla mezzanotte del primo gennaio 2014):

sudo hwclock --set --date="yyyy-mm-dd hh:mm:ss" --utc

Ad esempio:

sudo hwclock --set --date="2015-08-24 18:32:00" --utc

Impostate poi il clock di sistema con il tempo dell'RTC:

sudo hwclock -s

Ora dovrete abilitare l'impostazione automatica dell'ora al boot. Anzitutto editate la regola in /lib/udev/:

sudo nano /lib/udev/hwclock-set

Trovate le righe seguenti poste alla fine del file:

if [ yes = "$BADYEAR" ] ; then
    /sbin/hwclock --rtc=$dev --systz --badyear
else
    /sbin/hwclock --rtc=$dev --systz
fi

Modificate le opzioni --systz in --hctosys in modo tale da ottenere quanto segue:

if [ yes = "$BADYEAR" ] ; then
    /sbin/hwclock --rtc=$dev --hctosys --badyear
else
    /sbin/hwclock --rtc=$dev --hctosys
fi

Premete Ctrl + O e poi Enter per salvare il file, e Ctrl + X per uscire da nano.

Rimozione del finto package hardware clock

Utilizzate i seguenti comandi per rimuovere il finto package relativo all'hardware clock:

sudo update-rc.d fake-hwclock remove
sudo apt-get remove fake-hwclock -y

Test dei sensori

Installazione dei pacchetti software

Accendete il Raspberry Pi e fate il log in.

Digitate il seguente comando alla command line:

sudo apt-get install i2c-tools python-smbus telnet -y

Verificate che i dispositivi I2C siano online e funzionanti:

sudo i2cdetect -y 1

Dovreste vedere un output simile al seguente:

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- UU 69 6a -- -- -- -- -- 
70: -- -- -- -- -- -- -- 77                         
  • 40 = HTU21D, sensore di umidità e temperatura;
  • 77 = BMP180, sensore di pressione barometrica;
  • 68 = PCF8523, il real-time clock. Visualizza UU perchè è riservato dal driver;
  • 69 = MCP3427, convertitore analogico-digitale della main board;
  • 6a = MCP3427, convertitore analogico-digitale della scheda AIR.

Nota: 40, 77 e 6a appariranno soltanto se avrete collegato la scheda AIR alla main board.

Ora che i sensori sono funzionanti, abbiamo bisogno di un database in cui memorizzare i dati da essi provenienti.

Setup del database

Ora occorrerà configurare la stazione meteo in modo tale da loggare automaticamente le informazioni meteo raccolte dai sensori. Le informazioni verranno memorizzate sulla scheda SD del Pi utilizzando il DBMS MySQL. Quando la stazione meteo sarà in grado di loggare con successo i dati localmente, sarete anche in grado di uploadare i dati a un database centrale Oracle Apex in modo tale da poterli condividere con gli altri.

Installazione dei pacchetti software

Digitate i seguenti comandi alla command line:

sudo apt-get update
sudo apt-get install apache2 mysql-server python-mysqldb php5 libapache2-mod-php5 php5-mysql -y

Se fate un errore, utilizzate il tasto cursore UP per richiamare l'editing delle linee precedenti.

Tenete presente che questa operazione richiederà un certo tempo. Vi verrà chiesto di creare e confermare una password per l'utente root del database server MySQL. Segnatela da qualche parte, perchè vi occorrerà più avanti.

Creazione di un database locale in MySQL

Inserite il comando seguente:

mysql -u root -p

Inserite la password che avete scelto durante l'installazione.

Dovreste ora trovarvi sul prompt MySQL mysql>. Cominciate a creare il database:

CREATE DATABASE weather;

Dovreste ora vedere Query OK, 1 row affected (0.00 sec).

Utilizzate il database appena creato:

USE weather;

Dovreste vedere Database changed.

Se ciò non avviene, avrete probabilmente dimenticato il ; finale. Digitatelo quando richiesto e premete Enter.

Creazione di una tabella per memorizzare i dati meteo

Digitate il codice seguente, tenendo presente qualche piccolo consiglio:

  • non dimenticatevi di inserire le virgole alla fine di ogni riga;
  • utilizzate il tasto cursore UP per copiare e modificare una riga precedente, dato che molte si assomigliano tra loro;
  • digitate il codice con attenzione e esattamente come scritto qui sotto;
  • utilizzate il tasto maiuscole!
  CREATE TABLE WEATHER_MEASUREMENT(
    ID BIGINT NOT NULL AUTO_INCREMENT,
    REMOTE_ID BIGINT,
    AMBIENT_TEMPERATURE DECIMAL(6,2) NOT NULL,
    GROUND_TEMPERATURE DECIMAL(6,2) NOT NULL,
    AIR_QUALITY DECIMAL(6,2) NOT NULL,
    AIR_PRESSURE DECIMAL(6,2) NOT NULL,
    HUMIDITY DECIMAL(6,2) NOT NULL,
    WIND_DIRECTION DECIMAL(6,2) NULL,
    WIND_SPEED DECIMAL(6,2) NOT NULL,
    WIND_GUST_SPEED DECIMAL(6,2) NOT NULL,
    RAINFALL DECIMAL (6,2) NOT NULL,
    CREATED TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY ( ID )
  );

Dovreste ora vedere Query OK, 0 rows affected (0.05 sec).

Premete Ctrl - D oppure digitate exit per uscire da MySQL.

Setup del software sensori

Cominciate a scaricare il codice del data logging. Potete saltare questo passo se in precedenza avete impostato il real-time clock.

cd ~
git clone https://github.com/raspberrypi/weather-station.git

Questo comando creerà una nuova cartella nella home directory chiamata weather-station.

Avviate e testate il demone della stazione meteo

Un demone è un processo che gira in background. Per startare il demone richiesto per la stazione meteo, utilizzate il seguente comando:

sudo ~/weather-station/interrupt_daemon.py start

Dovreste vedere qualcosa di simile a PID: 2345 (il vostro numero sarà differente).

Per monitorare il sensore di pioggia e l'anemometro è richiesto un processo che rimanga sempre in esecuzione. Questi sensori utilizzano infatti dei contatti reed e il relativo codice utilizza degli interrupt. Questi interrupt possono verificarsi in qualunque momento, a differenza della misurazione periodica eseguita sugli altri sensori. Potete usare il programma telnet per eseguire un test:

telnet localhost 49501

Dovreste vedere qualcosa di simile:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
OK

Sono disponibili i seguenti comandi:

  • RAIN: visualizza la quantità di pioggia in ml;
  • WIND: visualizza la velocità media del vento in kph;
  • GUST: visualizza le raffiche di vento in kph;
  • RESET: resetta a zero il contatore di interrupt del sensore di pioggia e dell'anemometro;
  • BYE: uscita.

Utilizzate il comando BYE per uscire da telnet.

Impostate l'avvio automatico al boot del demone

Usate il seguente comando per automatizzare il demone:

sudo nano /etc/rc.local

Inserite le seguenti righe prima di exit 0 alla fine del file:

echo "Starting Weather Station daemon..."

/home/pi/weather-station/interrupt_daemon.py start

Premete Ctrl - O e poi Enter per salvare il file, e Ctrl - X per uscire da nano.

Modifica delle credenziali MySQL

Dovrete ora utilizzare la password dell'utente root MySQL scelta durante l'installazione. Se non vi trovate nella cartella weather-station, digitate:

cd ~/weather-station

poi:

nano credentials.mysql

Cambiate il campo password inserendo la password scelta durante l'installazione di MySQL. Le virgolette "" che racchiudono i valori sono importanti, quindi attenzione a non rimuoverle per errore.

Premete Ctrl - O e poi Enter per salvare il file, e Ctrl - X per uscire da nano.

Automatizzare l'aggiornamento del DB

Gli entry point principali del codice sono log_all_sensors.py e upload_to_oracle.py. Questi verranno chiamati da uno schedulatore chiamato cron in modo tale da acquisire le misure automaticamente. Le misure verranno salvate nel database locale MySQL, e uploadate sul database online Oracle Apex, a condizione che vi siate registrati.

Dovrete abilitare cron ad acquisire automaticamente le misure. Questa è nota anche come modalità data logging:

crontab < crontab.save

La vostra stazione meteo è ora operativa e in grado di registrare i dati a intervalli di tempo regolari.

Potete disabilitare la modalità data logging in ogni momento con il seguente comando:

crontab -r

Per riabilitare nuovamente la modalità data logging, utilizzate il comando:

crontab < ~/weather-station/crontab.save

Tenete presente che la modalità data logging deve essere disabilitata quando si seguono le lezioni contenute nello schema di lavoro.

Trigger manuale di una misura

E' possibile, in ogni momento, forzare manualmente una misura (acquisizione dei dati meteo) tramite il seguente comando:

sudo ~/weather-station/log_all_sensors.py

Non preoccupatevi se vedete Warning: Data truncated for column X at row 1: è normale che ciò avvenga.

Visualizzare i dati nel database

Inserite il seguente comando:

mysql -u root -p

Digitate la password (quella di default per l'installazione dall'immagine su disco è tiger). Selezionate poi il database weather:

USE weather;

Lanciate una query di select per ottenere il contenuto della tabella WEATHER_MEASUREMENT:

SELECT * FROM WEATHER_MEASUREMENT;

L'output del comando dovrebbe essere simile a quanto visualizzato in questa immagine di figura 40.

Figura 40:

Figura 40: Database [Fonte www.raspberrypi.org]

Dopo aver registrato diverse misure, potrà tornare comodo usare la clausola where di SQL per selezionare i soli record che sono stati creati dopo una specifica data e ora:

SELECT * FROM WEATHER_MEASUREMENT WHERE CREATED > '2014-01-01 12:00:00';

Premete Ctrl + D oppure digitate exit per uscire da MySQL.

Upload dei dati nel database Oracle Apex

A questo punto avrete una stazione meteo in grado di acquisire i dati dai sensori e memorizzarli a intervalli regolari in un database su scheda SD. Ma cosa succede se la scheda SD si corrompe? Come è possibile eseguire un backup dei dati? E come è possibile condividerli con il resto del mondo?

Oracle ha messo in piedi un database centralizzato per permettere a tutte le scuole che aderiscono al progetto Stazione Meteo ("Weather Station") di uploadare i propri dati. E' un posto molto sicuro per mantenere i propri dati, ed è possibile scaricare le informazioni in diversi formati, condividerle, e creare persino grafici e rapporti. Vediamo come.

Registrate la vostra scuola

Dovrete anzitutto registrare la vostra scuola e aggiungere la vostra stazione meteo. Riprendete esattamente da questo punto quando avrete ottenuto il passcode per la vostra stazione meteo.

Aggiornate il file delle credenziali

Aggiungete il nome e password della stazione meteo al file locali delle credenziali Oracle tramite il comando indicato nel seguito.

cd ~/weather-station

nano credentials.oracle.template

Sostituite i parametri name e key con il Weather Station NamePasscode della stazione meteo. Le virgolette che racchiudono questi valori nel file sono molto importanti, perciò prestate attenzione a non rimuoverle per errore. Il nome della stazione meteo deve corrispondere esattamente, ed è case-sensitive.

Premete Ctrl - O seguito da Enter per salvare il file, e Ctrl - X per uscire da nano.

Rinominate il file template delle credenziali Oracle per abilitarlo:

mv credentials.oracle.template credentials.oracle

Verifica dell'upload

Eseguiamo un trigger manuale della misura, con upload dei dati tramite il seguente comando:

sudo ~/weather-station/upload_to_oracle.py

Loggatevi nell'account Oracle Apex della vostra scuola e andate su 'Weather Measurements' (Figura 41).

Figura 42: Dati stazione [Fonte: www.raspberrypi.org]

Figura 42: Dati stazione [Fonte: www.raspberrypi.org]

Potete scaricare i vostri dati in diversi tipi di formato e creare persino dei grafici utilizzando il menu di figura 43.

Fonte: www.raspberrypi.org

Figura 43: Menù dati Fonte: www.raspberrypi.org

Installazione della stazione meteo

Non è possibile fornire delle istruzioni specifiche o generali in merito all'installazione della stazione meteo, in quanto queste dipendono dall'ambiente e dal luogo in cui è situata la vostra installazione. Ci è capitato di montare stazioni meteo su muri, tetti, recinzioni, e persino su tubi dell'impianto idraulico infilati nel terreno. Fin tanto che i sensori possono acquisire i valori delle grandezze fisiche coinvolte, ogni posto è adatto all'installazione. Aggiungiamo qualche considerazione (abbastanza scontata):

  • il sensore di pioggia deve poter raccogliere l'acqua piovana;
  • l'anemometro e il sensore di direzione del vento devono essere interessati dal flusso del vento;
  • la scatola con il sensore dell'aria deve poter "respirare";
  • la stazione meteo deve essere collegata all'alimentazione e alla rete tramite un cavo Ethernet.

Potreste tuttavia non essere in grado di trovare una posizione ideale. Gli alberi possono ad esempio influire sulla misura del vento, oppure il sensore di pioggia potrebbe essere leggermente protetto da una sporgenza. Se ciò avviene, non bloccatevi, e installate comunque la vostra stazione meteo! Potete comunque utilizzare questo progetto come una grande opportunità didattica: è un'occasione unica per coinvolgere gli studenti in problemi pratici quali il problem solving e la ricerca, e coinvolgere anche altri dipartimenti della stessa scuola.

Lo schermo di Stevenson

Un possibile modo per migliorare le misure della stazione meteo è quello di ospitarla all'interno di una "capanna meteorologica", nota anche con il termine anglosassone di schermo di Stevenson. Potete trovare qualche idea su come costruirne una da soli qui, ma sul web sono disponibili numerosi progetti che potrete reperire facilmente. Ancora una volta, si tratta di un'eccellente opportunità per coinvolgere gli studenti e altri dipartimenti della vostra scuola.

Il sensore di pioggia

In figura 44 un'immagine del sensore di pioggia fornito con il kit della stazione meteo:

Fonte: www.raspberrypi.org

Figura 44: Sensore di pioggia [Fonte: www.raspberrypi.org]

Come funziona

Possiamo esplorare il sensore di pioggia e vedere come funziona rimuovendo il coperchio. Fate leva delicatamente sulle clip poste su entrambi i lati;  il coperchio dovrebbe ora staccarsi (Figura 45).

Fonte: www.raspberrypi.org

Figura 45: Sensore di pioggia [Fonte: www.raspberrypi.org]

Il sensore di pioggia è fondamentalmente equivalente a un recipiente auto-svuotante. La pioggia viene raccolta e canalizzata nel recipiente. Quando una quantità sufficiente di pioggia è stata raccolta, il recipiente riempito si abbassa, la pioggia raccolta defluisce dalla base, e il recipiente sul lato opposto si porta in posizione pronto a raccogliere l'acqua.

Il datasheet del prodotto dice che il recipiente si riempie con 0,2794 mm di pioggia. Possiamo quindi moltiplicare questo valore per il numero di recipienti riempiti per ottenere la quantità totale di pioggia.

Se osservate il connettore RJ11 sul filo collegato al sensore di pioggia, potrete vedere come sono collegati solo due fili: uno rosso e uno verde. Guardiamo ora meglio il cuneo posto al centro tra i due recipienti. Al suo interno è collocato un piccolo magnete cilindrico orientato verso il lato posteriore del sensore, dove è posizionato un contatto reed (Figura 46).

Fonte: www.raspberrypi.org

Figura 46: Interno del sensore di pioggia [Fonte: www.raspberrypi.org]

Il contatto reed ha al suo interno due barrette metalliche che si toccano quando il reed si trova in presenza di un magnete. A tutti gli effetti, un contatto reed è quindi equivalente a uno switch.

Come si collega

  1. Per collegare il sensore di pioggia alla board della stazione meteo, dovrete anzitutto avere già preparato il contenitore principale della stazione meteo.
  2. Individuate il connettore della board marcato come RAIN SENSOR e il relativo gommino.
  3. Svitate il gommino dal contenitore e infilate il cavo del sensore di pioggia all'interno del contenitore (Figura 47).
    Fonte: www.raspberrypi.org

    Figura 47: Montaggio del wheater station [Fonte: www.raspberrypi.org]

  4. Collegate il connettore alla presa, e fissate bene il gommino.

Una volta collegato, il sensore di pioggia utilizzerà il GPIO pin 6 (BCM).

Esempio di codice

Il programma seguente utilizza un gestore di interrupt GPIO per rilevare gl input provenienti dal sensore di pioggia e convertirli in una misura significativa, che viene poi visualizzata sullo schermo.

  #!/usr/bin/python
  import RPi.GPIO as GPIO

  pin = 6
  count = 0

  def bucket_tipped(channel):
      global count
      count = count + 1
      print (count * 0.2794)

  GPIO.setmode(GPIO.BCM)
  GPIO.setup(pin, GPIO.IN, GPIO.PUD_UP)
  GPIO.add_event_detect(pin, GPIO.FALLING, callback=bucket_tipped, bouncetime=300)

L'anemometro

Ecco il sensore per la misurazione dell'intensità del vento (velocità) utilizzato nel progetto della stazione meteo (Figura 48).

Fonte: www.raspberrypi.org

Figura 48: Anemometro [Fonte: www.raspberrypi.org]

Come funziona

Il vento colpisce le tre coppe, provocandone il movimento rotatorio attorno all'asse centrale. Anche in questo caso possiamo aprire il sensore per comprendere meglio il funzionamento. La prima cosa che noteremo è la presenza di un magnete, come indicato nell'immagine di figura 49.

Fonte: www.raspberrypi.org

Figura 49: Anemometro [Fonte: www.raspberrypi.org]

Rimuovendo le tre viti poste sulla base, potremo osservare la presenza di una basetta sulla quale è collocato l'oramai familiare contatto reed, come indicato nell'immagine di figura 50.

Fonte: www.raspberrypi.org

Figura 50: Anemometro [Fonte: www.raspberrypi.org]

Cosa significa tutto questo? Quando le coppe girano, mosse dal vento, il magnete posto sul corpo del sensore compie un movimento circolare passando due volte, nello stesso giro, sopra al contatto reed. Se misuriamo il numero di rotazioni in un dato intervallo di tempo, possiamo calcolare la velocità con cui i bracci delle coppe si stanno movendo. Poichè una parte di energia viene dissipata per muovere le coppe stesse e vincere l'inerzia del sistema, un anemometro solitamente sottostima la velocità del vento. Per compensare questo fenomeno, moltiplicheremo la velocità misurata per un fattore pari a 1,18 (coefficiente specifico per questo modello di anemometro).

L'algoritmo seguente può essere utilizzato per calcolare la velocità effettiva del vento:

Per ogni periodo di tempo t
--- count = numero di impulsi registrati dall'anemometro, --- rotations = count / 2
--- distance = rotations 2 pi * radius (9 cm)
--- speed = distance / t (in cm/s)

Per convertire speed in km/h
--- speed = speed / 100000 (km/s)
--- speed = speed * 3600 (km/h)

Per compensare il fattore dell'anemometro
--- speed = speed * 1.18

Come si collega

Per collegare l'anemometro alla board della stazione meteo, dovrete anzitutto avere già preparato il contenitore principale della stazione meteo.

  1. Individuate il connettore sulla board della stazione meteo marcato con WIND e il corrispondente gommino.
  2. L'anemometro può essere collegato direttamente alla  board, ma in teoria attraverso il wind vane.
  3. Svitate il gommino dal contenitore e infilate il cavo del sensore all'interno della scatola (Figura 51).
    Fonte: www.raspberrypi.org

    Figura 51: Montaggio della Wheater station [Fonte: www.raspberrypi.org]

  4. Collegate il connettore, e avvitate bene il gommino.

Una volta collegato, l'anemometro utilizza il GPIO pin 5 (BCM).

Esempio di codice

Il programma seguente utilizza un gestore di interrupt GPIO per rilevare gli input provenienti dall'anemometro, e convertirli in una misura significativa che viene poi visualizzata sullo schermo.


import RPi.GPIO as GPIO
import time, math

pin = 5
count = 0

def calculate_speed(r_cm, time_sec):
    global count
    circ_cm = (2 * math.pi) * r_cm
    rot = count / 2.0
    dist_km = (circ_cm * rot) / 100000.0 # convert to kilometres
    km_per_sec = dist_km / time_sec
    km_per_hour = km_per_sec * 3600 # convert to distance per hour
    return km_per_hour

def spin(channel):
    global count
    count += 1
    print (count)

GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.IN, GPIO.PUD_UP)
GPIO.add_event_detect(pin, GPIO.FALLING, callback=spin)

interval = 5

while True:
    count = 0
    time.sleep(interval)
    print (calculate_speed(9.0, interval), "kph")

Sensore direzione del vento

In figura 52 un'immagine del sensore utilizzato per la misura della direzione del vento.

Fonte: www.raspberrypi.org

Figura 52: Sensore direzione del vento [Fonte: www.raspberrypi.org]

Come funziona

Questo tipo di sensore mostra la direzione da cui proviene il vento, non quella in cui sta soffiando (questo può creare all'inizio un pò di confusione, dato che le previsioni meteo mostrate in  TV fanno esattamente l'opposto). Il sensore si basa sulla forza esercitata dal vento su una lamina verticale, che ruota in continuazione cercando sempre la posizione di minore resistenza; questa posizione risulta così allineata con la direzione del vento in arrivo. Questo sensore è più complesso del sensore di pioggia o dell'anemometro. Anch'esso utilizza contatti switch e magneti, ma funziona in modo completamente differente. Diamo un'occhiata a come è fatto. Rimuovete la parte superiore del sensore; dovrebbe staccarsi senza applicare troppa forza. Al suo interno, troverete ancora un cilindro metallico che funge da magnete (figura 53).

Fonte: www.raspberrypi.org

Figura 53: Sensore direzione del vento [Fonte: www.raspberrypi.org]

Successivamente, rimuovete con un cacciavite le tre viti poste alla base, e spostate la stessa leggermente verso il basso (Figura 54). Ora possiamo osservare che vi sono otto contatti reed disposti come i raggi di una ruota. Rimuovete le ultime tre viti, liberando completamente il circuito. Mettete da parte le viti.

Fonte: www.raspberrypi.org

Figura 54: Sensore direzione del vento [Fonte: www.raspberrypi.org]

Esaminiamo ora la basetta dalla parte colorata di verde. Questo è il lato rivolto verso l'alto quando la stessa è posizionata all'interno del sensore, con il magnete che dall'alto punta su di essa. Il Nord si trova nella parte superiore dell'immagine precedente, vicino alle due clip nere.

Guardate attentamente e vedrete che c'è un disco di metallo disposto sul bordo. C'è anche un disco più piccolo in prossimità del centro. Ogni contatto reed collega il disco esterno a quello interno tramite una resistenza. Potete osservare come SW1 (switch 1) ha R1 vicina ad esso (resistenza 1); analogamente, SW2 ha R2 vicina ad esso, e così via fino ad arrivare a 8.

Il sensore funziona come una grande resistenza variabile, qualcosa di analogo al controllo di volume. Osservate ora la figura 55: l'idea è che la tensione arriva sull'anello esterno, e può percorrere un percorso qualunque fino a raggiungere l'anello interno, collegato direttamente a massa. Quando il magnete ruota, diversi contatti reed si aprono e chiudono, attivando o disattivando le relative resistenze.

Fonte: www.raspberrypi.org

Figura 55: Diagramma del sensore direzione del vento [Fonte: www.raspberrypi.org]

Le otto resistenze hanno tutte valore diverso, visibile in bianco sulla basetta; ciò permette al sensore di disporre di 16 possibili combinazioni di resistenze, in quanto il magnete è in grado di chiudere due contatti reed quando si trova a metà strada tra di essi. Potete trovare maggiori informazioni nel relativo datasheet.

Riassemblate ora il sensore. Anzitutto, individuate la lettera N sul lato della base, inserite poi la board in modo tale che sia allineata con il Nord. Sostituite le tre viti più piccole; questo passaggio potrebbe essere problematico e un cacciavite magnetizzato potrebbe aiutare parecchio. Sostituite poi la base e le tre viti più grandi.

Come misurare la direzione del vento

Ciò che dobbiamo misurare è qualcosa che cambia in base alle resistenze attivate dal sensore: la tensione che attraversa il sensore di direzione del vento. A differenza dei precedenti sensori, dove dovevamo misurare un segnale digitale (collegato ad uno specifico GPIO), ora dovremo misurare una tensione che varia nel tempo, quindi un segnale analogico. La conversione da analogico a digitale avviene tramite un ADC integrato nella board della stazione meteo.

Come si collega

Per collegare il sensore di direzione del vento alla board della stazione meteo, dovrete anzitutto avere già preparato il contenitore principale della stazione meteo. Individuate il connettore della board marcato WIND e il relativo gommino. Svitate il gommino dal contenitore e infilate il cavo del sensore all'interno del contenitore (Figura 56).

Fonte: www.raspberrypi.org

Figura 56: Collegamento del sensore direzione del vento [Fonte: www.raspberrypi.org]

Collegate il cavo e fissate bene il gommino.

Esempio di codice

while True:
      data = [] # a list to store the measurements
      length = 10 # ten seconds

      print "Measuring wind direction for", length, "seconds..."
      start_time = time.time()

      while time.time() - start_time <= length:
          adc_value = adc.read(0)
          direction = get_direction(adc_value, 10)
          if direction != None: # keep only good measurements
              data.append(direction)

      average = None

      if len(data) > 0:
          average = sum(data) / len(data)

      print "Wind direction:", average

Sensore di temperatura

Questo sensore è integrato all'interno di un contenitore metallico impermeabile (Figura 57).

Fonte: www.raspberrypi.org

Figura 57: Sensore di temperatura [Fonte: www.raspberrypi.org]

Come si collega

Per collegare il sensore, dovete prima assemblare il contenitore della stazione meteo e la scheda del sensore dell'aria. Individuate il connettore sulla scheda del sensore dell'aria con la dicitura 'Temperature Probe'. La sonda di temperatura può essere direttamente collegata a questo connettore.

Esempio di codice

Il modo più semplice per accedere alla sonda di temperatura è quello di usare il modulo Python già pronto per l'uso ds18b29_therm.py, disponibile per il download su GitHub repo.

import ds18b20_therm

temp_probe = des18b20_therm.DS18B20()
print(temp_probe)

La temperatura corrente viene registrata nel file di testo sys/bus/w1/devices/28*/w1_slave. Se vogliamo conoscere la temperatura corrente, possiamo cominciare a controllare il contenuto di questo file.

Aprite lxterminal e digitate i seguenti comandi:

cat /sys/bus/w1/devices/28*/w1_slave

L'output dovrebbe essere simile al seguente:

61 01 4b 46 7f ff 0f 10 02 : crc=02 YES
61 01 4b 46 7f ff 0f 10 02 t=22062

La prima riga indica se i dati sono validi o meno, con YES che indica dati validi. La seconda riga riporta la temperatura registrata. In questo caso il suo valore è pari a 22062.

Questo valore è espresso in millicelsius (millesimi di grado). Per convertirlo in gradi Celsius, occorrerà quindi dividerlo per 1000.

Ecco un esempio di codice per accedere alla temperatura:

## The name of the directory might be different on different devices. Check the name by using:
## ls /sys/bus/w1/devices
directory = "28-00000717878a"
## Open the file and store the first line
with open("/sys/bus/w1/devices/"+directory+"/w1_slave") as file:
    lines = file.readlines()
    temp = lines[1]
    # find where the temperature is recorded in the line and store the position
    position = temp.find("t=") + 2
    # Extract the numerical value and convert to a float
    temperature = float(temp[position:].rstrip())
    print(float(temperature)/1000)

E per finire..

Il kit della stazione meteo è stato volutamente approntato per finalità didattiche, in modo tale che sia gli insegnanti che gli studenti possano esplorare il mondo dei computer, sensori, rete, database, e, ovviamente, la risoluzione dei problemi. Se vi siete bloccati su qualcosa, o se volete semplicemente condividere le vostre esperienze, siete invitati a visitare il forum e a commentare nella sezione sotto. Buona fortuna e buon divertimento!

Link e risorse sul web

Registrati gratuitamente all'Embedded IOT

Registrati gratis all'EmbeddedIOT

3 Commenti

  1. Maurizio Di Paolo Emilio Maurizio 2 luglio 2016
  2. edy 27 luglio 2016

Scrivi un commento