17

Arduino postazione meteo a carica solare

Questo progetto è a lungo termine. E’ una semplice postazione meteo realizzata con Arduino che rileva i dati meteo ogni ora e si connette al wifi di casa caricando tali dati su un database. Il tutto viene poi analizzato e può essere visualizzato in vari grafici ai quali si può accedere dai bottoni sotto. Nella tabella invece si vedono gli ultimi dati rilevati e l’orario relativo.

Il tutto è alimentato a carica solare e l’obiettivo è quello di far funzionare il tutto per un periodo superiore ad un anno, senza interventi esterni e senza l’utilizzo di corrente elettrica.

 

INFORMAZIONI PRINCIPALI SUL PROGETTO (poi, in fondo, i dettagli):

Obiettivo: far funzionare il progetto in autonomia per un periodo superiore ad un anno usando solo energia rinnovabile (carica solare).

 

VUOI REALIZZARLO ANCHE TU?

Oltre alle informazioni già fornite ho realizzato un video dove spiego il progetto, poi spiego passo passo come realizzare il tutto:

 

Vuoi realizzare anche tu questo progetto? Bene, allora cominciamo…

Prima di vedere il codice, che si può scaricare dal link sottostante o dal fondo della pagina, vediamo di parlare di sensori e di altre parti necessarie alla realizzazione di tale progetto.

Meteo Simo
Meteo Simo
meteo_simo.zip
101.9 KiB
1518 Downloads
Dettagli

 

Sensore per temperatura e umidità

Per quanto riguarda la misurazione di temperatura e pressione ho usato il sensore DHT22 di Adafruit.

Questo sensore è appena più costoso del sensore DHT11 ma rispetto a questo ha un range maggiore per quanto riguarda temperatura e umidità e, siccome noi andremo ad usarlo per il meteo, avremo bisogno di misure piuttosto precise.

Per farci un’idea delle differenze tra i due sensori:

  • DHT11
    • Basso costo;
    • 3 a 5V;
    • 2.5mA max di uso corrente durante la misura;
    • Range umidità 20-80% con il 5% di precisione;
    • Range temperatura 0-50°C con ± 2°C di precisione;
    • Frequenza di campionamento 1 Hz (una volta al secondo);
    • Dimensioni di 15,5 mm x 12 mm x 5,5 mm;
    • 4 pin con 0.1″ di spaziatura.
  • DHT22
    • Basso costo;
    • Da 3 a 5 V di I/O;
    • 2,5 mA max di corrente richiesta durante la conversione dati;
    • Range umidità: da 0% a 100% con 2-5% di precisione;
    • Range temperatura: da -40°C a +80°C con ± 0,5°C di precisione;
    • Frequenza di campionamento non superiore a 0,5 Hz (una volta ogni 2 secondi);
    • Dimensioni: 27 mm x 59 mm x 13,5 mm;
    • 4 pin, 0,1″ di spaziatura.

Quindi ci conviene usare il DHT22.

Per i collegamenti:

dht22

 

N.B. Il terzo Pin del sensore non è utilizzato!

 

Acquista il sensore.

 

Sensore per pressione atmosferica

Per misurare la pressione ho usato il sensore BMP180 della Bosh ma può anche essere usato il BMP085.

  • Range pressione: da 300 hPa a 1100 hPa con una precisione di 0,02 hPa ;
  • Tensione di alimentazione: da 1.8V a 3.6V;
  • Bassissimo consumo energetico;
  • Include sensore di temperatura;
  • Dimensioni molto ridotte;

 

Vediamo i collegamenti:

bmp180-bosch-temperature-air-pressure-sensor-module

  • VIN = 3.3V (N.B. Non collegatelo a 5V!!)
  • GND = Gnd
  • SCL e SDA invece vanno collegate in base al tipo di Arduino usato:
    • Arduino UNO:
      • SDA = A4
      • SCL = A5
    • Arduino Mega, Due:
      • SDA = 20
      • SCL = 21
    • Leonardo:
      • SDA = 2
      • SCL = 3

Questo sensore può anche misurare l’altitudine. Io non l’ho utilizzata.

Acquista il sensore.

 

Sensore per livello di luce

Per il livello di luce ho usato il sensore LDR.

Questo darà un livello di luce in un range da 0 a 1023. Poi sarà nostro compito metterlo nel formato che preferiamo. Io lo rappresento poi in percentuale.

 

Vediamo i collegamenti:

ldrarduinoddf

 

Acquista il sensore.

 

Carica solare

Per far funzionare il nostro progetto a carica solare abbiamo bisogno di 4 ingredienti:

  • Solar Shield Charger (io ho la v2): gestirà la carica della batteria, alimenterà il progetto e ha una funzione di sleep-mode che entra in funzione automaticamente quando la carica non sarà sufficiente per far funzionare il progetto e sarà disattivata quando la carica e la tensione saranno sufficienti.
    Ha due led: un rosso per quando la batteria si sta caricando e uno verde quando la batteria è carica.

    • Corrente massima: 700 mA;
    • Dimensioni: 69,30 mm x 59,30 mm.
  • Uno o più pannelli solari da max 5,5 V in tutto con picco massimo 700mA, io ne ho usati 4 con queste caratteristiche:
    • Tensione di picco: 5,5 V;
    • Potenza massima: 0,935 W;
    • Corrente di picco: 0,17 A;
    • Dimensioni: 100 x 75 x 2,9 mm;
    • Peso: 33 g;
    • Efficienza: 15,5%;
    • N.B. Se usate anche voi più di un pannello solare sarà necessario (a parer mio) inserire un diodo per ciascun pannello per evitare inversioni di corrente. Poi vedremo perchè quando parleremo del diodo.
  • Una batteria da 3,7V connessa alla Solar Shield. Io ho usato:
    • Batteria ai polimeri di litio;
    • 3,7 V;
    • 6600 mAh;
    • Dimensioni: 19 x 54 x 54 mm;
    • Peso: 110 g.
  • Un relay temporizzato. Parleremo poi di questo ma è necessario alla durata nel tempo della batteria e quindi del funzionamento del progetto.

 

Disposizione pannelli solari

Se come me hai deciso di inserire più pannelli solari il mio consiglio è di posizionarli in luoghi ben illuminati dalla luce diretta del sole e posizionati ad angoli diversi tra di loro per sfruttare al massimo il sole. Come noto infatti un pannello solare rende al massimo quando la luce solare gli arriva diretta e perpendicolare.

Io ad esempio ne ho posizionati due diretti (con angoli differenti) verso sud e due verso ovest per la luce pomeridiana (purtroppo non ho potuto direzionarne uno a est ma sarebbe stata una buona idea).

In questo modo la luce del sole sarà sfruttata al massimo.

La luce deve essere diretta.

Diapositiva1

 

Diodi

Per evitare inversioni di corrente ho pensato di collegare in serie a ciascun pannello solare un diodo (rivolto nel senso giusto della corrente). In questo modo la corrente fluirà in un solo senso. Il diodo abbassa di 0.75V la tensione ma sarà poco influente.

Successivamente, dopo aver collegato i diodi in serie a ciascun pannello, ho collegato i pannelli in parallelo, in modo da avere una sola uscita. E ho collegato il tutto alla Solar Shield.

Il diodo che ho scelto io è il 1N4007 con 1A e 1000V ma vanno bene anche altri ovviamente, basta calcolare tensione e corrente.

Uno schema per la configurazione dei 4 pannelli (come ho fatto io):

panel config

 

Disposizione sensori

I sensori è meglio disporli lontano dalla luce diretta del sole per non dare errori nella rilevazione. Io li ho disposti sotto ad un balcone cercando di metterli al riparo dalla luce diretta per evitare che il sole riscaldi il sensore e dia misure non precise. Il problema è stato risolto quasi del tutto.

Ovviamente i sensori vanno protetti dalla pioggia ma senza esser chiusi dentro una scatola completamente sigillata (la temperatura, l’umidità e la luce altrimenti non potrebbero essere rilevate!).

disposizione sensori

 

Wifi Shield

Per quanto riguarda la Arduino Wifi Shield rimando al sito ufficiale per avere ulteriori informazioni ma sarà sufficiente far combaciare i pin della Shield con gli Header di Arduino. Poi fa tutto da sola.

N.B. Questa Shield come noto consuma molta corrente, soprattutto nella ricerca di connessioni e invio dati. Quindi sarà necessario il Relay, di cui parleremo a breve.

 

Relay

Questo Relay si è reso necessario poichè anche disconnettendo il Wifi, usando WatchDog, limintando invio di dati e altri tipi di ottimizzazioni il circuito funzionava per un periodo di tempo inferiore ai 3 giorni anche con una batteria da 6600 mAh. Facendo una media il circuito consumava circa 120-130 mAh, facendo una stima tra ore di luce e ore di buio.

Veramente poco quindi…

Perciò ho pensato di introdurre un particolare relay temporizzato, l’FRM01, 5V, nel quale è possibile scegliere una tra 18 funzioni preimpostate. Io ho scelto la n 6 dove si può impostare due tempi dove una volta acceso il relay si attiva per t1 secondi e poi si disattiva per t2 secondi e ripete questo ciclo all’infinito.

Il relay può cambiare il proprio stato 100000 volte, quindi considerando due cambi di stato ogni ora si ottengono 50000 ore, ovvero circa 2083 giorni quindi quasi 6 anni.

Io ho scelto:

  • t1 = 120 secondi = 2 minuti;
  • t2 = 3480 secondi = 58 minuti.

Perciò il relay si attiva (con la funzione n 6) per 2 minuti e poi si disattiva per 58 minuti e si ha così un ciclo di 1 ora.

Quando il relay è disattivo abbiamo un consumo di circa 2 mAh e quindi abbiamo raggiunto il nostro scopo e il nostro circuito avrà un consumo significativo solo in quei 2 minuti di connessione, per il resto sarà quasi irrilevante.

In più tenendo premuto SET per 10 secondi il display si pone in modalità risparmio e sta acceso solo 10 secondi se attivo e si spengono tutti i led inutilizzati. In questo modo il Relay consuma il meno possibile.

Vediamo i collegamenti:

 

La porta NO è quella Normally Open ovvero quella che quando il relay è disattivo (in t2) si ha un circuito aperto e che quindi non consuma corrente.

In t1 vogliamo avere un circuito chiuso che quindi fa passare corrente e quindi dobbiamo connettere la Solar Shield (già connessa alla batteria) ad Arduino e quindi:

relay2

e poi:

collegare GND Arduino a GND della Solar Shield.

Abbiamo ottenuto il nostro scopo.

Acquista il modulo.

 

Durata batteria dai test passati (2200 mAh e 6600 mAh con e senza relay)

Da un precedente test con una batteria da 2A ed 1 solo pannello solare il circuito si è disattivato (batteria scarica) dopo circa 17h.

Con 4 pannelli solari e 1 batteria da 6A abbiamo avuto una durata maggiore: circa 55h.

Con l’aggiunta del relay, anche iniziando da una situazione di batteria quasi scarica il circuito sta ancora funzionando (test effettuato per 1 settimana) e continua a funzionare.

Si può dire di esser riusciti nell’intento di far funzionare a carica solare una scheda che richiede parecchia corrente come quella Wifi con tutti i sensori annessi.

 

 

 

PASSIAMO AL CODICE

 

Database

  • Crea un database MySQL;
  • Crea una tabella nel database chiamata meteo;
  • Nella tabella metti 6 campi chiamati (in questo ordine) temperatura, umidita, pressione, luce, battery e time_stamp;
  • Definisci i tipi che vedi nell’immagine sottostante;
  • Poni come NULL i valori predefiniti di tutti i campi tranne del time_stamp e anche impostare la possibilità che siano NULL;
  • Per quanto riguarda il campo timestamp ponilo come chiave primaria “PRIMARY”, in questo modo si eviteranno dati doppi inviati per qualsiasi errore che si può verificare.

Dovresti avere un risultato simile a quello nell’immagine sottostante.

database

 

Pagina PHP

Scarica il file cliccando qui sotto o dal fondo della pagina.

Meteo Simo
Meteo Simo
meteo_simo.zip
101.9 KiB
1518 Downloads
Dettagli

Nel file zip scaricato troverai un file inserisci.php. (FILE AGGIORNATO in data 04/08/2015 17:38 sostituendo con estensione mysqli poichè la precedente mysql è deprecata)

  • Apri il file;
  • Modifica le voci: $username, $password, $database e $tabella con i tuoi dati e tabella meteo;
  • Carica il file .php sul tuo sito ricordandoti l’URL dove lo caricherai (N.B. Ti consiglio di cambiare nome al file prima di caricarlo, e ricordati del nome se lo rinomini. Non rinominandolo, guardando questa guida e sapendo che nel vostro sito web lo utilizzate sarà facile, per un malintenzionato, usare tale file!).

 

Sketch

Nel file .zip scaricato troverai lo sketch:

  • Modifica le voci “your_network”, “your_password” con quelle della tua rete;
  • Modifica char server[] = “www.tuosito.it” con il dominio dove hai caricato il file inserisci.php (N.B. Inserisci solo il dominio e non l’URL intero!);
  • Modifica l’URL in “POST /inserisci.php HTTP/1.1” e anche il nome del file se lo hai rinominato in gni punto in cui compare;
  • Modifica l’host in “Host: www.tuosito.it” (N.B. Inserisci solo il dominio e non l’URL intero!) in ogni punto in cui compare.

Controlla bene di aver cambiato tutto quello che devi in ogni punto.

Per altri dubbi lo sketch è ben commentato.

Ora carica il tuo sketch.

 

Come fare i grafici

[UPDATE: 20/10/2015]

Per visualizzare i grafici potete fare in vari modi, il modo che io ho scelto, ormai un anno fa, è quello di sfruttare script già pronti e adattarli ai miei scopi. Io in particolare ho usato i grafici di chartjs e ho realizzato il codice php per visualizzare i dati su questi grafici.

Esistono sicuramente metodi più eleganti.

Ecco come fare per la temperatura, gli altri grafici si fanno di conseguenza:

  1. Vai sul sito http://www.chartjs.org/ ed effettua il download;
  2. Clicca su “Download zip”;
  3. Decomprimere il contenuto della cartella nella stessa cartella “meteo”, ad esempio;
  4. Copiare il file temperatura.php che trovate all’interno del file zip che avete scaricato per questo progetto. Copiatelo nella stessa cartella nella quale avete decompresso lo zip precedente (meteo, nel nostro esempio). In questo modo il percorso del file sarà meteo/temperatura.php;
  5. All’interno di questo file modificate i parametri del vostro database, come già avevate fatto in inserisci.php;
  6. Se avete fatto delle modifiche ai nomi della tabella del database o altri campi, dovrete modificare anche il codice di temperatura.php;
  7. Caricare sul vostro sito web tutti i file nella cartella “meteo” (in pratica dovrete caricare temperatura.php e tutti i file scaricati dal sito http://www.chartjs.org/, importante è che sia tutto nella stessa directory. Per capirci, se avete copiato nel modo corretto allora nella cartella meteo dovrete avere il file temperatura.php, il file Chart.js, più tutti gli altri. Non tutti gli altri file sono necessari, ma se fate così non sbagliate).
  8. Andate sul vostro sito seguendo il percorso e arrivando alla pagina temperatura.php (ad esempio www.miosito.it/meteo/temperatura.php) e avrete il grafico della temperatura degli ultimi 2 giorni.
[UPDATE: 03/06/2016]

Recenti aggiornamenti alla libreria ChartJS non permettono di utilizzarle nello stesso modo che è presentato in questo articolo. Quindi ho aggiunto nel file del progetto anche la cartella contenente la libreria e gli esempi che ho scaricato e usato io.

 

Obiettivo

L’obiettivo che mi sono posto è quello di far funzionare il progetto in autonomia per un periodo superiore ad un anno (minimo) usando solo energia rinnovabile (carica solare).

 

P.S. Un ringraziamento a mio padre, mio zio Daniele e a Marco B. per i consigli e gli aiuti nella realizzazione.

 

Meteo Simo
Meteo Simo
meteo_simo.zip
101.9 KiB
1518 Downloads
Dettagli

Share This:

Simone

Studente Data di nascita: 12/07/1990 - Parma, IT Hobbies: Informatica, acquariofilia, viaggi, tecnologia, aria aperta, sport, web.

17 Comments

  1. Ciao simone! Ho letto la tua guida ed é veramente fatta bene! Sono interessato alla realizzazione di questi progetto e vorrei apportare alcune modifiche, tra le tante, un alimentazione diretta e non solare…. Possiamo comunicare tramite scambio di mail?

    • Ciao Met. Grazie. Ci sono molti dettagli che potrebbero essere migliorati.
      Puoi scrivermi ovviamente, trovi la mia e-mail nella sezione contatti.
      A presto, Simone

  2. Ciao! Ed innanzitutto grazie per condividere il tuo sapere con tutti.
    Ho citato questo post ed altri del Tuo sito in un topic su arduino.cc per la realizzazione di un prototipo di stazione meteo completa e scalabile. Io sono alle prime armi ed invito tutti gli esperti a dare il loro apporto ad uno sketch “perfetto”…. o perlomeno ho raccolto molti link ed informazioni riguardo arduino ed il meteo in un unico post sul sito ufficiale! Magari potrebbe interessarti partecipare.
    ecco il link:
    http://forum.arduino.cc/index.php?topic=404176.0

    • Ciao, grazie.
      Non mancherò dal commentare allora.
      Sono poco attivo sul forum ufficiale ma vedrò di leggere tutto.

      Simone

  3. complimenti!!! ti chiedo una info: premesso che sono un neofita, volevo sapere quale parte del codice dovrei modificare per usare una Ethernet shield al posto di una WIFI.grazie!

    • Ciao Riccardo,
      purtroppo non ho occasione di provare perchè non ho una Ethernet Shield. Dando uno sguardo al codice però potresti provare a fare queste modifiche:

      #include “WiFi.h”
      diventa
      #include “Ethernet.h”

      WiFiClient client;
      diventa
      EthernetClient client;

      al posto del while: while ( status != WL_CONNECTED) { ….. } potresti mettere

      if (Ethernet.begin(mac) == 0) {
      Serial.println(“Failed to configure Ethernet using DHCP”);
      // try to congifure using IP address instead of DHCP:
      Ethernet.begin(mac, ip);
      }
      // give the Ethernet shield a second to initialize:
      delay(1000);
      Serial.println(“connecting…”);

      ovviamente nelle variabili globali dovresti mettere:
      byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
      byte ip[] = { 10, 0, 0, 177 };
      Dove metti i tuoi…

      Non serve più status = WiFi.disconnect();
      e nemmeno la funzione printWifiStatus()..

      Sicuramente manca qualcosa ma in linea di massima mi sembra ok. Prova a dare uno sguardo a https://www.arduino.cc/en/Reference/Ethernet e soprattutto a https://www.arduino.cc/en/Tutorial/WebClient (questo rappresenta la versione base di un client usando la Ethernet Shield)

      Simone

  4. salve, volevo sapere se in alternativa alla wifi shield originale di arduino (che ha un costo elevato) posso utilizzarne un’altra, se si, quale?

    • Certo, potrebbe essere usato Esp8266 (effettuando alcune modifiche per l’invio dei dati), oppure si potrebbe pensare di usare la scheda Fishino, ha già tutto (compreso WiFi). Altrimenti ci sono sicuro altre schede wifi più a basso costo ma non ho mai avuto fortuna perché l’unica che ho provato era danneggiata

      • ho preso la shield wifi esp8266 ma ho dei problemi nel farla funzionare e nelle modifiche al programma, potresti aiutarmi?

        • Ciao, se ti può essere di aiuto ti linko un altro mio progetto dove ho usato l’ESP8266..
          LINK ALL’ARTICOLO
          Sicuramente non è immediato usare questo modulo ma in quel progetto c’è una funzione per inviare i dati che ti tornerà utile

  5. Ciao! Ti ringrazio per aver pubblicato il tuo progetto. Avrei da farti tre domande
    1) il relay non è più disponibile da 5v, è un gran problema se lo prendo da 12v?
    2) La Wfi shield che hai usato , è originale e comprata sul sito di Arduino?
    3) La Solar Shield Charger dove l’hai acquistata?

    Grazie

    • Ciao,
      non ho mai provato quella a 12V. Quindi non saprei dirti. Prova a cercare altrove per sicurezza.
      La Wifi Shield è originale, acquistata tramite rivenditori di terze parti.
      Solar shield: non ricordo dove ho acquistato, se su robot-italy, robot domestici, o cosa. In ogni caso quella che trovi online è sempre uguale, solo che in alcuni store trovi già i pacchetti “pannello solare + batteria + shield”. Il problema è che un pannello è insufficiente. Se vuoi puoi acquistare direttamente da seeedstudio (il produttore) però devi valutare i costi della dogana (possibile)

  6. Ciao Simone! un articolo eccezzionale e ben fatto, i miei complimenti!!!
    voglio riuscire a realizzarne uno similare al tuo sopratutto creare un’indipendenza di arduino( e tutto ciò che vi è connesso), dalla rete elettrica.
    guardavo il Solar Shield Charger in commercio, e mi chiedevo se è possibile far caricare batterie al piombo anzichè le li-po come hai fatto tu?
    volevo usare batterie al piombo da 6V ma fatico a trovare un regolatore che vada bene… hai qualche idea?
    Grazie!

    • Ciao Alex. Purtroppo non ho mai provato con batterie al piombo. Sicuramente esiste qualcosa ma non so consigliarti di preciso.
      Per il regolatore intendevi qualcosa del genere? Link

  7. Salve Simone,
    ho letto il tuo articolo trovandolo molto interessante. Permettimi una domanda. Volendo installare la postazione in montagna e quindi trasmettere il segnale a distanze più elevate 3 – 5 km sapresti consigliarmi qualcosa?
    Grazie

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *