Stazione Meteo Solare Wifi (v2.0)

 

AGGIORNAMENTO 03-11-2018

Nell’articolo precedente ho descritto la costruzione di una Stazione meteo basata su Arduino utilizzando materiale di recupero o comunque presente nel mio laboratorio. L’appetito vien mangiando e mi sono posto una sfida….ne realizzo una da zero super economica….Wireless!
Apro il sito di e-commerce con gli occhi a mandorla e prendo la mia carta di credito ricaricabile…

Sulla carta c’erano ben 4,7 Euro!
E che ci fai? Direte voi….ma su questi siti sono un capitale! 🙂
Iniziamo con la lista della spesa.

  • Scheda NodeMcu (cugino di Arduino, si programma con lo stesso IDE ma ha Wireless integrato, 80Mhz di controllore e tanta tanta memoria in più)
  • Pannello solare da 6volt 100mA
  • Sensore di Temperatura/Umidità/Pressione BME280
  • Regolatore di carica per celle LiPo

Avanza ancora qualche centesimo….compro anche un secondo pannello solare e un secondo regolatore di carica. Totale spesa 4,6 Euro.

In città compro una normale cassetta stagna da elettricista e procuro una batteria a LiPo proveniente da un notebook.

Dopo 20 giorni arriva tutto….iniziamo a saldare!

Parto con una prima configurazione : Controllore Wifi + Scheda di regolazione di carica (D1 Battery shield) e un sensore di Temperatuta Umidità DHT11

Dovrebbe essere lavoro di un oretta…ma non e’ cosi!

La scheda che gestisce la tensione nasce per la famiglia Wemos di microcontrollori e oltre a gestire la carica di una sola cella LiPo (3,7Volt) ha incorporato un circuito di StepUp che porta la tensione a 5V che io collego direttamente alla Vin della scheda NodeMcu.
Il regolatore di carica non nasce per lavorare con un pannello solare…ma per essere alimentato/caricato da una sorgente a 5v proveniente da una presa USB. Il pannello solare sappiamo che fornisce una tensione variabile in base alla quantità di luce (sole) che lo colpisce….e questo al regolatore non andava giù!

Nello specifico se collegavamo il tutto con il sole o con la notte andava tutto bene…ma alla prossima transizione notte/giorno andava tutto in palla. Si creava un punto in cui come tensione di uscita c’erano solo 3 volt….troppo bassi per l’ingresso Vin di NodeMcu.

In fase di sperimentazione (e senza aver risolto il problema alimentazione) apporto le prime modifiche. Il sensore viene sostituito con un più performante BME280 che sfrutta il protocollo I2C per inviare oltre alla Temperatura e Umidità…anche la Pressione atmosferica.

Sensore BME280

Viene aggiunto anche un punto di controllo della tensione della batteria interna…finezze!

Ecco un primo schema

Schema iniziale

 

Troppi componenti e troppa poca corrente per alimentare il tutto….dobbiamo risparmiare!

La batteria fornisce circa 2000mA (non 110 come da immagine), NodeMcu ne consuma 100…il pannellino solare…ne fornisce 100 di giorno a sole pieno. C’e’ da spegnere qualcosa e utilizzare qualche trucchetto.

Iniziamo a spegnere! Avere tutti i dati inviati online ogni secondo non ha senso…diciamo che possiamo tranquillamente allungare il tempo tra una lettura e l’altra anche a 10 minuti.
A noi cambia poco….la durata della batteria di allunga in maniera esponenziale.
Tra una lettura e l’altra…spegniamo tutto. Mandiamo il microcontrollore in DeepSleep.
Tramite un comando (e un ponticello che connette il pin D0 al pin Reset) riusciamo a spegnere tutto e portare l’assorbimento a meno di 1mA.

Ponticello per disabilitare il DeepSleep

Avremmo comunque il sensore sempre sotto tensione che assorbe preziosa energia.
Spostiamo (come da schema) il Vcc del BME280 su un Pin gestibile da codice e lo accendiamo solo quando serve.

Dopo ogni accensione ho aggiunto qualche secondo di attesa (delay) prima della lettura per far riscaldare il sensore e rendere le letture più veritiere.

Non contento aggiungo la lettura della tensione batteria. Per far ciò utilizzo il pin A0 (analogico) per leggere la tensione.
Il problema sta nel fatto che l’ingresso analogico restituisce un valore che va da 0 a 1023 leggendo rispettivamente da 0 a 1Volt.
Sul circuito stesso e’ presente un partitore resistivo formato da 2 resistenze da 220k e 100k che permettono di leggere da 0 a 3.3 volt…ma una batteria al Litio arriva al massimo della sua carica a 4.2Volt!

Carta, penna e calcolatrice alla mano….aggiungo una resistenza da altri 220K e alzo la lettura fino a 5Volt (più precisamente 5.1).

Check up lettura voltaggio batteria

Iniziamo ad assemblare

Iniziamo a programmare…cercando di risolvere con qualche altro trucchetto da codice il problema dell’alimentazione.

Niente…al passaggio tra notte e giorno (e viceversa) si blocca tutto.

Mi viene in aiuto un altro gestore di carica della batteria il TP4056 al quale lascerò il pensiero della carica della batteria e utilizzerò il secondo gestore di carica solo come StepUp per portare la tensione a 5V.

Cambia lo schema

Modifica schema principale

Sembra abbiamo risolto il tutto in questo modo non ci sono più sbalzi di tensione e il caro NodeMcu puo’ lavorare tranquillamente.

Ecco il risultato finale

Inseriti nel codice i dati della mia rete Wireless posso inviare i dati al portale Thingspeak

Dati su Thinkspeak

 

Di seguito il codice commentato per chi volesse cimentarsi nella replica…..mi raccomando le librerie!

#include <Wire.h>
#include <Adafruit_BME280.h>
#include <ESP8266WiFi.h>
#include <ThingSpeak.h>

unsigned long myChannelNumber = NUMERO CANALE;
const char * myWriteAPIKey = "API KEY";
const char* ssid = "SSID WIRELESS";
const char* password = "CHIAVE WPA";

const char* server = "api.thingspeak.com";
WiFiClient client;

Adafruit_BME280 bme; // I2C

void setup() {
  pinMode(D1, OUTPUT);  
  digitalWrite(D1, HIGH); // accendo e alimento il sensore
  delay(10000); //attendo 10 secondi per riscaldare il sensore
  Wire.begin(D3, D2); // cambio impostazioni I2C 
  Serial.begin(115200);

  WiFi.begin(ssid, password);

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  if (!bme.begin()) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }
  ThingSpeak.begin(client);
}

void loop() {
  float t = bme.readTemperature();
  float p = bme.readPressure();
  float h = bme.readHumidity();
  int s = analogRead(A0);
  float volt = s * (5.1 / 1024); // ricavo i volt dal partitore resistivo


  Serial.print("Temperatura: ");
  Serial.print(t);
  Serial.print(" °C Pressione: ");
  Serial.print(p);
  Serial.print(" Umidità: ");
  Serial.print(h);
  Serial.print(" Voltaggio: ");
  Serial.print(volt);
  Serial.println("V ... invio a Thingspeak");
  ThingSpeak.setField(1, t);
  ThingSpeak.setField(2, p);
  ThingSpeak.setField(3, h);
  ThingSpeak.setField(4, volt);
  ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
  delay(2000);
  ESP.deepSleep(10*60*1000000); // spengo tutto per 10 minuti
}

Alla prossima!

Fermi tutti 🙂

Ho testato il tutto per qualche giorno e mi sono accorto che il modulo di ricarica della batteria…direttamente connesso al pannellino solare non funziona bene!
Con il sole presente alle mie latitudini il pannello solare arriva a sviluppare anche 7 volt a vuoto. Superati i 6v il modulo di ricarica va in protezione e stacca tutto.

Si perde così tantissimo sole prezioso e la stazione va a morire.

Ho risolto il tutto aggiungendo 3 diodi 1N4007 in serie sul positivo del pannello solare. La tensione totale si abbassa di circa 1,8volt e il tutto continua a funzionare anche con il sole a picco sulla stazione.

Buon lavoro!

31 thoughts on “Stazione Meteo Solare Wifi (v2.0)

  1. Grazie Guido, la lista e’ nel testo. Ho usato una NodeMcu come microcontrollore, una Battery shield per Wemos e una schedina Tp4056 come regolatore di carica.

  2. Ciao, ottimo lavoro!!. Io ho fatto una cosa simile per un sensore remoto di una stazione meteo ( si trova a circa 9 km di distanza) però con un arduino mini pro , sensore hdc1010 e come tx un modulo HC12 seriale che funziona in UHF . Come ho fatto io , potresti “modulare” i tempi di stby in funzione dello stato di carica (tensione ) delle batterie. In caso di mancanza illuminazione sufficiente, quanta autonomia ha il sistema.?

  3. Ciao Viki,
    Il sistema sta funzionando in assenza di illuminazione da 4gg partendo da una LiPo con 3,8v di carica.
    In questi giorni devo affinare la ricarica …

  4. arrivato qua da Hackaday di oggi.
    Che dire? bellissimo lavoro!
    grazie per averlo condiviso!

  5. Grazie mille, in questi giorni sto monitorando il funzionamento. Sembra andare bene. Forse più in la aggiungo un secondo pannellino per ricaricare il tutto anche con giornate annuvolate.
    Alla prossima

  6. Complimenti Danilo,

    progetto molto interessante.

    P.S. Fa piacere che HaD sia seguito anche da altri italiani 😉

  7. Ciao vincenzo, si può attaccare tutto. Basta capire i consumi e in che modo i device comunicano.

  8. Ciao Danilo, ho notato che nella sezione “stazione meteo” di questo sito sono presenti i grafici thingspeak relativi ai dati acquisiti, suppongo da una stazione meteo simile a questa. Mi sapresti indicare come li hai integrati nel tuo sito? Grazie e complimenti per questo progetto che mi ha dato molti aiuti per il mio.

  9. Ciao leo, sono due stazioni meteo. Si integrano facilmente perché thingspeak per ogni grafico ti da il codice da incorporare direttament nel tuo sito.
    Basta un copia e incolla

  10. Buongiorno Danilo,
    grazie per questo tutorial, ho però un dubbio… dall’ultimo schema vedo che hai collegato sia le batterie che il pannello fotovoltaico all’ingresso batteria della scheda, lasciando vuoto il connettore micro usb per la ricarica.
    In questo mod, correggi se sbaglio, non ricarichi le batterie con il pannello, ma alimenti il tutto con entrambi i dispositivi, però vedo che nel primo schema invece il pannello è connesso alla presa di ricarica…
    Grazie

  11. Ciao Mario…
    sono due schemi diversi in corso d’opera.
    Con il primo schema utilizzavo il modulo sia come step-up per portare i 3,7v a 5 che per la gestione della carica. Ma non funzionava bene.
    Ho aggiunto un modulo di ricarica separato in modo da gestire la ricarica con un modulo e lo step-up con il secondo modulo.

  12. Ciao a tutti, premesso che non sono un esperto , ma questo è un progetto che volevo fare anche io e avevo già visto qualcosa a riguardo..
    La “D1 battery shield wemos” messa così mi pare un pò fuori posto, sia in termini di consumi che di utilità.. [ https://arduinodiy.wordpress.com/2017/01/02/reviewing-the-wemos-battery-shield/ ]
    Esistono moduli TP4056 con la doppia uscita(una Vout e una BatteryOut) che forniscono anche una sorta di protezione di sovra-scarica(tensione batteria < 2.4v) [ https://www.robotstore.it/Caricabatterie-Li-Ion-TP4056-con-circuito-di-protezione ]
    Io utilizzerei più uno step-up semplice per portare la tensione a 5V collegato all'uscita Vout del modulo TP4056
    In alternativa ho trovato questo : https://www.banggood.com/3_7V-9V-5V-2A-Adjustable-Step-Up-18650-Lithium-Battery-Charging-Discharge-Integrated-Module-p-1264852.html?rmmds=buy&cur_warehouse=CN che con un unico modulo fa tutto il lavoro (ed è anche più economico)
    Inoltre al posto dei diodi per abbassare la tensione e far lavorare il TP4056 ci metterei un Buck/boost converter in modo da far lavorare il pannello a qualsiasi(o quasi) tensione , con la possibilità di aggiungere anche altri pannelli solari (ad esempio questo: https://it.banggood.com/DC-DC-Boost-Buck-Adjustable-Step-Up-Step-Down-Automatic-Converter-XL6009-Module-p-1087346.html?rmmds=search&cur_warehouse=CN)
    Che ne pensate ?

  13. Scusa luca se compare ora ma il blog aveva messo direttamente in spam il tutto per il gran numero di link che avevi messo.

  14. ciao Danilo,
    io ho fatto un lavoro simile ma senza il D1 battery shield, utilizzando direttamente una scheda simile al tp4056: non mi ero mica posto il problema dell’oscillazione. Però devo dire che ha funzionato correttamente qualche mese.
    Ora volevo apportare questa tua correzione ma al contempo usare un contenitore più adeguato (https://www.thingiverse.com/thing:2970799), modificato opportunamente per “sigillare” tutta l’elettronica, compresa la batteria lipo e lasciare fuori esclusivamente il sensore.
    Come hai affrontato il problema della condensa sui contatti? Da quello che vedo sulle foto, il tuo sistema non è stagno.

  15. Ciao
    Progetto molto bello e ben studiato, volevo solo capire dove hai trovato tutto il materiale a così poco, grazie.

  16. Ciao Gilberto, direttamente dalla Cina. ci sono svariati portali dove potersi sbizzarrire 🙂

  17. Ragazzi ho bisogno di una mano. Devo dare corrente a una scatolina che contiene un esp-01e un hx711 che legge 4 celle di carico. si tratta di due barre pesatrici per monitorare il peso delle arnie. le arnie si sa sono nei campi dove la corrente scarseggia. ho bisogno di 3,3v per un consumo di circa 300/400 mah. poteconsigliarmi che pannello che controllore che batteria ? Grazie infinite

  18. Grazie, ho modificato leggermente il codice per usare un sensore BME680 per misurare anche la qualità dell’aria. Fantastica guida. Un saluto

  19. ciao Danilo, vorrei sapere se oltre alla riga 6 dove mettere id canale, riga 7 dove mettere la mia riga write API KEY, la riga 8 nome connessione e la riga 9 chiave pass dovrei cambiare anche altre righe, tipo la riga 11, mi scuso per la mia inesperienza in questo campo, mi cimento da poco.
    grazie

  20. ciao Danilo, vorrei chiederti se è la stessa cosa se invede del nodemuc ci piazzo la wemos d1 mini. cambia qualcosa sui pin? dal d1 esce ugualmente alimentazione?, i pin A0 e quelli del reset sono gli stessi o brucio la scheda?

  21. Ciao francesco…..cambia solo le righe dove sono richieste informazioni della propria connessione.
    Il resto lascialo invariato

  22. Si anche wemos va benissimo. Le uscite e le entrate sono identiche cambia la disposizione dei pin di alimentazione ma puoi usare le,stesse tensioni.

  23. ciao, molto interessante il tutto.

    secondo te che componentistica utilizzare se si volesse lasciare il microcontrollore sempre accesso senza sleep? Fattibile ?

  24. la componentistica non cambia, devi solo cambiare il codice ed eliminare il deepsleep.

  25. Salve ,ho fatto la sua stazione circa 8 mesi fa , bellissima ma ho problemi quando la batteria scende sotto i 2,4v e il circuito stacca l’ESP….quando la batteria si ricarica con il bel tempo poi nn riparte più se nn con il reset manuale . .. volevo chiedere c’è un qualcosa per poterlo riavviare in automatico..( si trova a 100km di distanza)
    Grazie e complimenti per il progetto

  26. Ciao, prova ad alzare il tempo di deepsleep cosi ha piu tempo per ricaricarsi….oppure compra un secondo pannellino solare da mettere in parallelo al primo in modo da avere più corrente di carica.

Lascia un commento

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