Linea Meteo
Strumenti meteo - Stazione Meteo Completa! (FAI DA TE)
andrea75 [ Sab 07 Nov, 2015 09:01 ]
Oggetto: Re: Stazione Meteo Base (FAI DA TE)
Lavoro spettacolare Eugenio!!! DAVVERO COMPLIMENTI!!! :inchino:
As_Needed [ Sab 07 Nov, 2015 19:47 ]
Oggetto: Re: Stazione Meteo Base (FAI DA TE)
Grazie ancora per il vostro interesse nel mio progetto :smile: Pubblicherò gli altri aggiornamenti futuri!
:bye:
enniometeo [ Dom 08 Nov, 2015 23:14 ]
Oggetto: Re: Stazione Meteo Base (FAI DA TE)
Bravissimo Eugenio :inchino: continua cosi :ok:
As_Needed [ Lun 09 Nov, 2015 16:10 ]
Oggetto: Re: Stazione Meteo Base (FAI DA TE)
Allora ragazzi, volevo chiedervi un consiglio! Sono riuscito a inserire la massime e minime di temperature e la raffica massima sul display, certo ancora non ho capito come farle giornaliere ma almeno ci sono...
Qui la foto
Il consiglio che vi chiedo è: secondo voi essendo disponibili ancora circa 4 spazi quali altri valori metto di massime e minime o qualcos'altro?
Se riuscirò a mettere il tutto online poi la data sarà sempre sincronizzata con il pc e magari poi inserirò pure a che ora è stata rilevata la massima o minima etc... e chissà magari con uno shield che ho adocchiato forse posso mettere sia rtc e sd card per il datalogger ;)
:bye:
As_Needed [ Lun 09 Nov, 2015 17:38 ]
Oggetto: Re: Stazione Meteo Base (FAI DA TE)
Ci sono riuscito a mettere massime e minime giornaliere! Ci ho ragionato e ho usato questo codice
- Serial.print("Tempo= ");
- Serial.print(hour());
- Serial.print(":");
- Serial.print(minute());
- Serial.print(":");
- Serial.print(second());
- Serial.println("");
-
- Serial.print("Data= ");
- Serial.print(day());
- Serial.print("/");
- Serial.print(month());
- Serial.print("/");
- Serial.print(year());
- Serial.println("");
-
- //esegui ogni secondo
- delay(1000);
-
-
- if ((hour()==0)&&(minute()==0)&&(second()<10))
- {
- tempmax=sensors.getTempCByIndex(0);
- tempmin=sensors.getTempCByIndex(0);
- }
-
- if (sensors.getTempCByIndex(0)>tempmax)
- {
- tempmax=sensors.getTempCByIndex(0);
- }
- if (sensors.getTempCByIndex(0)<tempmin)
- {
- tempmin=sensors.getTempCByIndex(0);
- }
-
-
Praticamente appena vede che le ore sono a zero i minuti pure e i secondi minori di 10 resetta tutto
ho messo i secondi minori di 10 perché uguale a 0 anche loro molte volte non li prendeva e continuava come se niente fosse.
Certo l'ora non è sincronizzata ovvero quando la imposti basta che stacchi la corrente e si resetta l'ora, però almeno così già ho una base e poi o metti rtc o online, il resto è solo un discorso di fargli capire sempre che ora è.
As_Needed [ Lun 09 Nov, 2015 19:42 ]
Oggetto: Re: Stazione Meteo Base (FAI DA TE)
Ecco un altro metodo, così non c'è nemmeno il ritardo di quei 10 secondi ;)
- if ( giornoSalvato != day() )
- {
- giornoSalvato=day();
- rafficamax=KMH;
- }
- if (KMH>rafficamax)
- {
- rafficamax=KMH;
- }
-
-
L'esempio è con la raffica massima. Dichiari sopra il setup di salvare che data è, e poi metti nel setup che quel dato è la data attuale e poi metti l'if che se il giorno salvato ovvero quello letto è diverso dal giorno attuale, resetta e aggiungi che adesso quella data salvata è quella letta dopo l'if.
Comunque vale sempre il consiglio di prima: siccome mi rimangono 4/5 spazi sul display, secondo voi cos altro posso inserire di massime e minime o altri valori?
:bye:
andrea75 [ Mar 10 Nov, 2015 09:12 ]
Oggetto: Re: Stazione Meteo Base (FAI DA TE)
Spettacolo!!! :inchino:
Le righe in avanzo direi che ti serviranno per i valori della pioggia quando avrai il pluviometro.... :D Perché ce l'avrai, no? :oops: :roll:
As_Needed [ Mar 10 Nov, 2015 15:22 ]
Oggetto: Re: Stazione Meteo Base (FAI DA TE)
Spettacolo!!! :inchino:
Le righe in avanzo direi che ti serviranno per i valori della pioggia quando avrai il pluviometro.... :D Perché ce l'avrai, no? :oops: :roll:
Ehm mi rincresce dirlo, ma per il pluviometro non posso proprio! L'unico modo per inserirlo sarebbe rifare tutto il circuito stampato, ovvero aggiungere nello schema elettrico (nella pagine prima del topic) pluviometro con relativi componenti, poi fare di nuovo il pcb e poi ristampare il tutto... E' possibile, ma siccome devo ristampare tutto e non dipende da me... L'unica cosa che posso provare e trovare il modo di inserire anche senza rifare il circuito stampato un componente aggiuntivo. Posso chiedere da qualche parte in rete se è possibile, se no proprio non si può fare purtroppo. Oltre il pluviometro che a me piacerebbe molto aggiungere... quali altre cose semmai posso mettere?
:bye:
As_Needed [ Mar 10 Nov, 2015 16:25 ]
Oggetto: Re: Stazione Meteo Base (FAI DA TE)
André forse ho trovato il modo.... :roll:
Frasnow [ Mar 10 Nov, 2015 16:58 ]
Oggetto: Re: Stazione Meteo Base (FAI DA TE)
André forse ho trovato il modo.... :roll:
Ottimo, così la completi al 100%
andrea75 [ Mar 10 Nov, 2015 19:05 ]
Oggetto: Re: Stazione Meteo Base (FAI DA TE)
André forse ho trovato il modo.... :roll:
Hai un PM. ;)
Gab78 [ Mer 11 Nov, 2015 11:10 ]
Oggetto: Re: Stazione Meteo Base (FAI DA TE)
André forse ho trovato il modo.... :roll:
Sei un "mostro"...! :lol:
As_Needed [ Mer 11 Nov, 2015 11:11 ]
Oggetto: Re: Stazione Meteo Base (FAI DA TE)
André forse ho trovato il modo.... :roll:
Sei un "mostro"...! :lol:
Cercando ogni volta si trova tutto :lol:
As_Needed [ Mer 25 Nov, 2015 16:55 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Allora, altro piccolo aggiornamento, ovvero che adesso la stazione meteo ha un orario :D Ovvero anche se stacco la corrente la stazione meteo ha una orario incorporato grazie all'RTC! Ovviamente ancora le massime e minime vengono resettate senza alimentazione perché non ho un datalogger, lo inserirò ;) Ma adesso che ho un orario fare massime e minime giornaliere annue o precipitazioni giornaliere non è un problema! Mi serve solo il datalogger se no se stacco perdo tutto!
Qui una foto, terminato il lavoro non visualizzerò sul display l'orario perché metterò la pioggia giornaliera! il rain rate forse... però se c'è spazio forse lo metto pure ;)

enniometeo [ Mer 25 Nov, 2015 17:42 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Bravissimo,dopo mi insegni! :D
andrea75 [ Mer 25 Nov, 2015 18:28 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Lavoro grandioso!!!! :inchino: :inchino:
As_Needed [ Mer 25 Nov, 2015 19:02 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Lavoro grandioso!!!! :inchino: :inchino:
Anzi anzi, ho risolto anche adesso per le massime e minime anche se stacco la corrente! ;) Ho usato la memoria eeprom di arduino per memorizzarle. Il datalogger mi servirà per fare i grafici dell'andamento termico per esempio ;)
Gab78 [ Mer 25 Nov, 2015 21:54 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Non so più che complimenti fare... :D
As_Needed [ Gio 26 Nov, 2015 16:09 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Non so più che complimenti fare... :D
Nemmeno io come ringraziare! :lol:
As_Needed [ Sab 28 Nov, 2015 12:55 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Che faticaccia!! Ho finito il pcb aggiungendo pluviometro e orologio, probabilmente sarà quello definitivo perché altre combinazioni per non fare intrecciare niente non le trovo :D (sull'intrecciare mi riferisco al PCB, i top copper (piste rosse come spiegato nelle pagine dietro) possono passare sopra i botton copper (piste blu))
SCH
PCB
Sono pronto per fare di nuovo il circuito stampato, visto che alla fine me lo fanno fare allora ho rifatto sch e pcb così viene un lavoro più pulito!
:bye:
As_Needed [ Sab 28 Nov, 2015 13:54 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Ho stretto di più il pcb ;)

Pigimeteo [ Lun 30 Nov, 2015 21:33 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Mi dovrei leggere almeno un paio di libri sui circuiti stampati e sull'elettronica in generale per poter dare una risposta decente, ma credo che il lavoro svolto da Eugenio sia davvero lodevole.
Brevettalo!
Per commercializzarlo, non ti preoccupare: ghe pensi mi! :mrgreen:
:bye:
As_Needed [ Lun 30 Nov, 2015 22:07 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Grazie mille Pierluigi, spero di completare tutto, oltre visualizzazioni che adesso stanno sul display appena mi arriva il pluvio aggiungeró pure la pioggia e forse il rain rate, poi metteró tutto online tramite ethernet shield e con la sd card faró il datalogger e grafici e se potró metterla su lineameteo con l ip che avró, sarà tutto anche sulla rete! A presto per nuovi aggiornamenti che dovrebbero arrivare in settimana ;) Grazie di nuovo a tutti!
:bye:
P.S. Se Andrea poi se potrà darmi uno spazio, voglio racchiudere tutti i passaggi per tutto il lavoro svolto come tutorial e mettere i file da scaricare di sketch completo librerie per arduino e circuiti stampati sch e pcb alla portata di tutti! :D Il tutto, prendendo l'idea di pigi, a 20 euro :lol: Scherzo ovviamente!
:bye:
andrea75 [ Mar 01 Dic, 2015 12:38 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
P.S. Se Andrea poi se potrà darmi uno spazio, voglio racchiudere tutti i passaggi per tutto il lavoro svolto come tutorial e mettere i file da scaricare di sketch completo librerie per arduino e circuiti stampati sch e pcb alla portata di tutti! :D Il tutto, prendendo l'idea di pigi, a 20 euro :lol: Scherzo ovviamente!
:bye:
Nessun problema ovviamente... lo mettiamo nello spazio delle guide con un PDF da scaricare. ;)
As_Needed [ Mar 01 Dic, 2015 15:29 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
P.S. Se Andrea poi se potrà darmi uno spazio, voglio racchiudere tutti i passaggi per tutto il lavoro svolto come tutorial e mettere i file da scaricare di sketch completo librerie per arduino e circuiti stampati sch e pcb alla portata di tutti! :D Il tutto, prendendo l'idea di pigi, a 20 euro :lol: Scherzo ovviamente!
:bye:
Nessun problema ovviamente... lo mettiamo nello spazio delle guide con un PDF da scaricare. ;)
Bene ;)
As_Needed [ Ven 04 Dic, 2015 15:45 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Allora ragazzi ho altre novità! Sono riuscito a mettere pure il pluviometro ;) Metterò presto le foto. L'unica cosa che volevo chiedervi... ma il pluviometro della la crosse, WS 2300-16 è possibile che abbia una sensibilità di 0.9mm, ovvero ogni basculata 0.9 mm? Perché se no ho sbagliato la taratura. Perché praticamente ho preso 50ml d'acqua e l'ho fatti corrispondere a 9.09mm ho fatto bene?
:bye:
P.S. Quando scatta per caso deve segnare 0.518mm?
As_Needed [ Ven 04 Dic, 2015 17:23 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
andrea75 [ Sab 05 Dic, 2015 11:46 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Allora ragazzi ho altre novità! Sono riuscito a mettere pure il pluviometro ;) Metterò presto le foto. L'unica cosa che volevo chiedervi... ma il pluviometro della la crosse, WS 2300-16 è possibile che abbia una sensibilità di 0.9mm, ovvero ogni basculata 0.9 mm? Perché se no ho sbagliato la taratura. Perché praticamente ho preso 50ml d'acqua e l'ho fatti corrispondere a 9.09mm ho fatto bene?
:bye:
P.S. Quando scatta per caso deve segnare 0.518mm?
Sì... confermo, ogni scatto corrisponde a 0.518 mm
Fili [ Sab 05 Dic, 2015 12:00 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Ecco un paio di immagini, il rain rate forse non lo metterò, è un po' complicato aggiungerlo, vi farò sapere ;)
invece tutto il resto è 'na cazzata :lol: sono sicuro che troverai il sistema di mettere anche il RR :ok:
As_Needed [ Sab 05 Dic, 2015 12:06 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Apposto l'ho tarato! E tramite software ho anche inibito ogni possibilità di più scatti fantasma che si potevano presentare con quel pluviometro leggendo in rete ;) Praticamente ho messo che quando gli arriva uno scatto deve essere sempre è soltanto uno alla volta! Poi per gli scatti fantasmi singoli c'è un bel condensatore ad evitare che scatti senza basculate.
As_Needed [ Sab 05 Dic, 2015 12:07 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Ecco un paio di immagini, il rain rate forse non lo metterò, è un po' complicato aggiungerlo, vi farò sapere ;)
invece tutto il resto è 'na cazzata :lol: sono sicuro che troverai il sistema di mettere anche il RR :ok:
:lol: :lol: Bhe diciamo che questo è più complicato del resto :D Forse però riuscirò ad aggiungerlo, però non assicuro niente stavolta :ok: Diciamo che adesso la parte senza mettere online praticamente è fatta 8))
Gab78 [ Sab 05 Dic, 2015 14:44 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Ecco un paio di immagini, il rain rate forse non lo metterò, è un po' complicato aggiungerlo, vi farò sapere ;)
invece tutto il resto è 'na cazzata :lol: sono sicuro che troverai il sistema di mettere anche il RR :ok:
Credo proprio che arrivato a 'sto punto, metterlo sia una quisquilia, una bazzecola, una pinzillacchera... come diceva il grande Totò... :D
As_Needed [ Sab 05 Dic, 2015 16:17 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Ecco un paio di immagini, il rain rate forse non lo metterò, è un po' complicato aggiungerlo, vi farò sapere ;)
invece tutto il resto è 'na cazzata :lol: sono sicuro che troverai il sistema di mettere anche il RR :ok:
Credo proprio che arrivato a 'sto punto, metterlo sia una quisquilia, una bazzecola, una pinzillacchera... come diceva il grande Totò... :D
:lol: bhe quel che conta che o rr o non rr offline la stazione é pronta :D
As_Needed [ Gio 10 Dic, 2015 15:25 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Allora intanto pubblico il pcb finale quello che sarà il reale circuito stampato e stavolta è questo non si cambia :D
Qualcuno forse si chiederà come mai mancano due fili nel top copper. Bhe la risposta è che non userò più arduino uno ma arduino mega, per il fatto che siccome la stazione è diventata abbastanza professionale non mi basta la memoria di arduino, allora ci vuole il mega. Siccome i pin del bus SPI che mi servono non si trovano a 11 e 13 delle uscite digitali della mega ma a 51 e 52, praticamente faccio partire due fili dai pad viola sda e scl, quelli vicini al filo rosso, che corrispondono al mosi e sclk del display in questo caso, che vanno alle uscite 51 e 52, faccio partire due fili esterni praticamente che vanno a 51 e 52 ;) Stessa cosa il bus ic2, ovvero i pad A4 e A5 non sono nel mega ad A4 e A5, ma sono a D20 e D21, per questo faccio partire altri due fili da quei pad fino a quelle uscite. Ovviamente poi i connettori sotto sui pin A4 e A5 non ce li metto. Quando avrò tutto pronto, metterò le foto così si capisce meglio. Praticamente sarà arduino mega, sopra arduino mega ethernet shield e sopra ancora, circuito stampato ;)
Questa è la lista dei componenti usati nella basetta non all'esterno:
E' scritto arduino uno ma solo per i pad usati che sono gli stessi.
Questa è la carta lucido definitiva stavolta con cui formerò le piste in rame del circuito stampato:

Fili [ Gio 10 Dic, 2015 19:45 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Allora intanto pubblico il pcb finale quello che sarà il reale circuito stampato e stavolta è questo non si cambia :D
Qualcuno forse si chiederà come mai mancano due fili nel top copper. Bhe la risposta è che non userò più arduino uno ma arduino mega, per il fatto che siccome la stazione è diventata abbastanza professionale non mi basta la memoria di arduino, allora ci vuole il mega. Siccome i pin del bus SPI che mi servono non si trovano a 11 e 13 delle uscite digitali della mega ma a 51 e 52, praticamente faccio partire due fili dai pad viola sda e scl, quelli vicini al filo rosso, che corrispondono al mosi e sclk del display in questo caso, che vanno alle uscite 51 e 52, faccio partire due fili esterni praticamente che vanno a 51 e 52 ;) Stessa cosa il bus ic2, ovvero i pad A4 e A5 non sono nel mega ad A4 e A5, ma sono a D20 e D21, per questo faccio partire altri due fili da quei pad fino a quelle uscite. Ovviamente poi i connettori sotto sui pin A4 e A5 non ce li metto. Quando avrò tutto pronto, metterò le foto così si capisce meglio. Praticamente sarà arduino mega, sopra arduino mega ethernet shield e sopra ancora, circuito stampato ;)
Ho capito più cose in un comizio di Kim Jong Un che in quello che hai scritto :mrgreen: però deve essere bello! Complimenti! :lol:
As_Needed [ Gio 10 Dic, 2015 20:02 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Ho capito più cose in un comizio di Kim Jong Un che in quello che hai scritto :mrgreen: però deve essere bello! Complimenti! :lol:
Ho provato a spiegare il più chiaro possibile :lol: Intanto quando metto le foto vedrete con gli occhi il lavoro che è la meglio cosa, è più facile di quello che sembra :D Quando avrò finalmente sto circuito stampato definitivo non con tutti quei fili per il mezzo che si vedono nelle foto addietro con la bread board 8))
:bye:
Gab78 [ Gio 10 Dic, 2015 22:03 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Ho capito più cose in un comizio di Kim Jong Un che in quello che hai scritto :mrgreen: però deve essere bello! Complimenti! :lol:
Ho provato a spiegare il più chiaro possibile :lol: Intanto quando metto le foto vedrete con gli occhi il lavoro che è la meglio cosa,
è più facile di quello che sembra :D Quando avrò finalmente sto circuito stampato definitivo non con tutti quei fili per il mezzo che si vedono nelle foto addietro con la bread board 8))
:bye:
Beh, come battuta non c'è male... :lol:
Grandioso! :inchino:
As_Needed [ Gio 10 Dic, 2015 22:29 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Grazie mille Gabrié!!!! ;) E grazie a tutti!
Non vedo l ora di compleatare tutto!
:bye:
andrea75 [ Ven 11 Dic, 2015 09:28 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Prossimo passo, modulo a radiofrequenza per i sensori! :D
Poranese457 [ Ven 11 Dic, 2015 09:36 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
E io che c'ho messo du anni a mette online una webcam! :lol: :lol: :lol: :lol:
Complimenti Eugenio, davvero complimenti :inchino: :inchino: :inchino:
As_Needed [ Ven 11 Dic, 2015 19:53 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Prossimo passo, modulo a radiofrequenza per i sensori! :D
Così anche se succede il terremoto e va via corrente e internet continuo a trasmettere :lol: :lol: :lol: Grazie ancora a tutti! Ai prossimi aggiornamenti!
:bye:
As_Needed [ Lun 14 Dic, 2015 18:18 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Qua piove forte e siamo già a 65 mm :lol: Sono riuscito a fare sto benedetto rr, non mi pare vero :lol: Ecco qua una foto!
Qua intanto il codice completo di tutta la stazione meteo offline, che comprende tutti quei valori sul display ;)
- #include <EEPROM.h>
- #include <DS3232RTC.h>
- #include <Time.h>
- #include <Wire.h>
- #include <BMP180.h>
- #include <SPI.h>
- #include <Adafruit_GFX.h>
- #define sclk 13
- #define mosi 11
- #define cs A3
- #define dc A1
- #define rst A2
- #include <Adafruit_GFX.h> // Core graphics library
- #include <Adafruit_ST7735.h> // Hardware-specific library
- #include <SPI.h>
- Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);
- #include "DHT.h"
- #include <OneWire.h>
- #include <DallasTemperature.h>
- // Data wire is plugged into pin 2 on the Arduino
- #define ONE_WIRE_BUS 8
- // Setup a oneWire instance to communicate with any OneWire devices
- // (not just Maxim/Dallas temperature ICs)
- OneWire oneWire(ONE_WIRE_BUS);
- // Pass our oneWire reference to Dallas Temperature.
- DallasTemperature sensors(&oneWire);
- DHT dht(5,DHT22); //Definisco il pin al quale è collegato il sensore e il tipo
- const int pinLed_blink = 6; // led verde che lampeggia
- const int pinLed_inter = 7;
- const float mmGoccia = 0.518;
- const int pinInterrupt = 3;
- volatile unsigned int gocce = 0;
- volatile float mmPioggia = 0.0; // conteggio millimetri di pioggia
- volatile boolean statoLed = false;
- unsigned long time;
- unsigned long PluvioStep = 0;
- unsigned long PluvioOldStep = 0;
- float dewPoint;
- float windchill;
- float temperaturaf;
- float heatindexf;
- float heatindexc;
- float pressionelivellodelmarehPa;
- float pressionelivellodelmare;
- float rafficamax=0;
- byte giornoSalvato;
- float maxeeprom=0.0;
- float mineeprom=100.0;
- float rainrate=0;
- int eeAddress1 = -1;
- int eeAddress2 = 4;
- int eeAddress3 = -8;
- int eeAddress4 = -4;
- int dataPin = 2;
- int bitLength = -1;
- int data[45];
- int gooddata = 1;
- int timeout;
- int loops = 0;
- int spd[8];
- int i = 0;
- int j = 0;
- char windDirection[16][4] = {
- "N","NNE","NE", "ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"};
- // Store an instance of the BMP180 sensor.
- BMP180 barometer;
- // Store the current sea level pressure at your location in Pascals.
- float seaLevelPressure = 101325;
-
- void setup() {
- Serial.begin(9600);
- tft.initR(INITR_BLACKTAB);
- tft.fillScreen(ST7735_BLUE);
- time=millis();
- tft.setCursor (0,20);
- tft.setTextSize(2);
- tft.setTextColor (ST7735_GREEN);
- tft.print (" STAZIONE");
- tft.setCursor (10,40);
- tft.print (" METEO:");
- delay (2000);
- tft.setTextColor (ST7735_YELLOW);
- tft.setCursor (4,80);
- tft.print ("SITUAZIONE ATTUALE");
- pinMode(pinLed_blink, OUTPUT);
- pinMode(pinLed_inter, OUTPUT);
- attachInterrupt(1, ContaGocce, FALLING); // modo da HIGH a LOW
- setSyncProvider(RTC.get);
- //setTime(16,05,30,25,11,2015);
- giornoSalvato = day();
- EEPROM.get (eeAddress1,maxeeprom);
- EEPROM.get (eeAddress2,mineeprom);
- EEPROM.get (eeAddress3,rafficamax);
- EEPROM.get (eeAddress4,mmPioggia);
- //Serial.println("DHT test");
- dht.begin();
- // Start up the library
- sensors.begin();
- //Serial.print("\n\nInitializing...\n");
- // Serial.print("Data Pin: ");
- // Serial.println(digitalRead(dataPin));
- pinMode(dataPin, INPUT);
- // We start the I2C on the Arduino for communication with the BMP180 sensor.
- Wire.begin();
- // We create an instance of our BMP180 sensor.
- barometer = BMP180();
- // We check to see if we can connect to the sensor.
- if(barometer.EnsureConnected())
- {
- //Serial.println("Connected to BMP180."); // Output we are connected to the computer.
- // When we have connected, we reset the device to ensure a clean start.
- barometer.SoftReset();
- // Now we initialize the sensor and pull the calibration data.
- barometer.Initialize();
- }
- //else
- //{
- // Serial.println("No sensor found.");
- // }
-
- }
-
-
- //void delay2(unsigned long ms){
- // unsigned long start = micros();
- // while (micros() - start <= ms);
- //}
-
- void PluvioDataEngine() {
- if (((PluvioStep - PluvioOldStep) != 0) && (gocce >= 2)) {
- if ((time - PluvioStep) > (PluvioStep - PluvioOldStep)) {
- rainrate = 3600 / (((time - PluvioStep) / 1000)) * mmGoccia;
- if (rainrate < 1) {
- gocce = 0;
- rainrate = 0;
- }
- } else {
- rainrate = 3600 / (((PluvioStep - PluvioOldStep) / 1000)) * mmGoccia;
- }
- } else {
- rainrate = 0.0;
- }
- }
- void loop() {
- sensors.requestTemperatures();
- digitalWrite(pinLed_blink, HIGH);
- delay(100);
- digitalWrite(pinLed_blink, LOW);
- delay(100);
- float h = dht.readHumidity(); // Leggo il valore di umidità
- dewPoint = (pow (h/100,0.125)*(112+(0.9*sensors.getTempCByIndex(0)))+0.1*sensors.getTempCByIndex(0)-112);
- pressionelivellodelmare=barometer.GetPressure()+5240;
- pressionelivellodelmarehPa=pressionelivellodelmare/100;
- //float t = dht.readTemperature(); // Leggo il valore di temperatura
- //if (isnan(t) || isnan(h)) // Se almeno uno dei due valori è NaN (Not a Number)
-
- //Serial.println("Impossibile leggere il sensore!");
-
- //else //altrimenti
- if(barometer.IsConnected)
- {
- // Retrive the current pressure in Pascals.
- long currentPressureP = barometer.GetPressure();
- float currentPressuremb = currentPressureP/100.0;
- float currentPressureinHg = currentPressuremb*0.02953;
-
-
- // Retrive the current altitude (in meters). Current Sea Level Pressure is required for this.
- float altitudem = barometer.GetAltitude(seaLevelPressure);
- float altitudeft = altitudem*3.2808;
-
-
- // Retrive the current temperature in degrees celcius.
- float currentTemperatureC = barometer.GetTemperature();
- float currentTemperatureF = (9.0/5.0)*currentTemperatureC+32.0;
- }
- // Serial.print("Temperatura ");
- // Serial.println(sensors.getTempCByIndex(0));
- // Serial.print("Umidita' ");
- // Serial.print(h);
- // Serial.print(" %\t");
-
- // Serial.println ("Dew Point");
- //Serial.print (dewPoint);
- //Serial.println ("C");
- //Serial.println ("Wind Chill");
- //Serial.print (windchillc);
- //Serial.print ("C");
-
-
- time = millis();
- PluvioDataEngine();
-
- temperaturaf=sensors.getTempCByIndex(0)*1.8+32;
-
-
- if ((sensors.getTempCByIndex(0)>=26.7)&&(h>=40))
- {
- heatindexf=(-42.379+2.04901523*temperaturaf+10.14333127*h-0.22475541*temperaturaf*h-0.00683783*pow(temperaturaf,2)-0.05481717*pow(h,2)+0.00122874*pow(temperaturaf,2)*h+0.00085282*temperaturaf*pow(h,2)-0.00000199*pow(temperaturaf,2)*pow(h,2));
- heatindexc= (heatindexf-32)/1.8;
- }
- else
- {
- heatindexc=sensors.getTempCByIndex(0);
- }
- //delay(1000);
-
- //Serial.print("Temperatura: ");
- //Serial.print(t);
- //Serial.println(" *C");
- // non è necessario mettere un delay() perchè ci vogliono due secondi per leggere i valori, quindi il serial monitor riceverà dati ogni 2 secondi.
-
- // Serial.println("Start");
- gooddata = 1;
- collectData();
- if (gooddata == 1) {
- rawdump();
- outputResults();
- TheData();
- }
- //else //{
- // Serial.println ("READ ERROR");
- //}
- //Serial.println(++loops);
- // Serial.println();
- // delay(1500);
- }
-
- int collectData(void) {
- if (bitLength <0){
- bitLength = 1220;//getbitlenght2();
-
- }
- /*/
- pinMode(dataPin, OUTPUT);
-
- digitalWrite(dataPin, HIGH);
- delay(100);
- digitalWrite(dataPin, LOW );
- delay(500);
- pinMode(dataPin, INPUT);
- /*/
-
- while(digitalRead(dataPin) == LOW){
- }
- //wait slave start signal
- while(digitalRead(dataPin) == HIGH){
- }
- while(digitalRead(dataPin) == LOW){
- }
-
-
-
-
- for (int i=0 ; i<42 ; i++) {
- data[i] = (digitalRead(dataPin) == LOW)? 0:1; // read and save either a 0 or 1
- delayMicroseconds(bitLength);
- }
- }
-
- int TheData() {
- // Serial.println("TheData");
- int i, idx = 0, idy = 0;
- // for (i=8; i>4; i--) { dato originale
- for (i=6; i>2; i--) { // dato modificato
- idx = idx *2 + data[i];
- }
-
- // Serial.print("idx: ");
- // Serial.println(idx, DEC);
- // Serial.print("Wind: ");
- // Serial.println(windDirection[idx] );
-
- // for (i=17; i>8; i--) { dato originale per velocità
- for (i=15; i>6; i--) { // dato modificato
- idy = idy * 2 + data[i];
- }
-
- // Serial.print("Speed: ");
- // Serial.print(idy, DEC);
- //Serial.println (" m/s read");
-
- float idz = idy/10.0;
- //Serial.print("Speed: ");
- // Serial.print(idz);
- // Serial.println (" m/s real");
-
- float KMH = idz * 3.6;
- //Serial.print("Speed: ");
- //Serial.print(KMH);
- //Serial.println (" kmh");
-
- float MPH = KMH * 0.621371192;
- // Serial.print("Speed: ");
- //Serial.print(MPH);
- // Serial.println (" mph");
-
-
- windchill=(13.12+0.6215*sensors.getTempCByIndex(0))-(11.37*pow(KMH,0.16))+(0.3965*sensors.getTempCByIndex(0)*pow(KMH,0.16));
- if ((windchill<sensors.getTempCByIndex(0))&&(KMH>4.6))
- {
- windchill=(13.12+0.6215*sensors.getTempCByIndex(0))-(11.37*pow(KMH,0.16))+(0.3965*sensors.getTempCByIndex(0)*pow(KMH,0.16));
- }
- else
- {
- windchill=sensors.getTempCByIndex(0);
- }
- if ( giornoSalvato != day() )
- {
- giornoSalvato=day();
- rafficamax=KMH;
- maxeeprom=sensors.getTempCByIndex(0);
- mineeprom=sensors.getTempCByIndex(0);
- mmPioggia=0;
- EEPROM.put (eeAddress1, maxeeprom);
- EEPROM.put (eeAddress2, mineeprom);
- EEPROM.put (eeAddress3, rafficamax);
- EEPROM.put (eeAddress4, mmPioggia);
-
- }
- if (KMH>rafficamax)
- {
- rafficamax=KMH;
- EEPROM.put (eeAddress3, rafficamax);
- }
-
- tft.fillScreen(ST7735_BLACK);
- tft.setTextColor (ST7735_GREEN);
- tft.setCursor(0, 0);
- tft.setTextSize(1);
- tft.println("Temp.OUTSIDE");
- if (sensors.getTempCByIndex(0)<3)
- {
- tft.setTextColor (ST7735_BLUE);
- tft.setCursor(80, 0);
- tft.setTextSize(1);
- tft.print(sensors.getTempCByIndex(0));
- tft.print ( (char)248);
- tft.println("C");
- //delay(5000);
- }
- if ((sensors.getTempCByIndex(0)>=3)&&(sensors.getTempCByIndex(0)<=15))
- {
- tft.setTextColor (ST7735_GREEN);
- tft.setCursor(80, 0);
- tft.setTextSize(1);
- tft.print(sensors.getTempCByIndex(0));
- tft.print ( (char)248);
- tft.println("C");
- }
- if ((sensors.getTempCByIndex(0)>15)&&(sensors.getTempCByIndex(0)<30))
- {
- tft.setTextColor (ST7735_YELLOW);
- tft.setCursor(80, 0);
- tft.setTextSize(1);
- tft.print(sensors.getTempCByIndex(0));
- tft.print ( (char)248);
- tft.println("C");
- }
- if ((sensors.getTempCByIndex(0)>=30))
- {
- tft.setTextColor (ST7735_RED);
- tft.setCursor(80, 0);
- tft.setTextSize(1);
- tft.print(sensors.getTempCByIndex(0));
- tft.print ( (char)248);
- tft.println("C");
- }
- tft.setTextColor (ST7735_WHITE);
- tft.setCursor (0,10);
- tft.print ("Umidita'");
- tft.setCursor (80,10);
- tft.print (dht.readHumidity());
- tft.print (" %");
- tft.setCursor (0,20);
- tft.print ("Dew Point");
- tft.setCursor (80,20);
- tft.print (dewPoint);
- tft.print ((char)248);
- tft.print ("C");
- tft.setTextColor (ST7735_GREEN);
- tft.setCursor (0,30);
- tft.print ("Pioggia");
- tft.setTextColor (ST7735_BLUE);
- tft.setCursor (80,30);
- tft.print (mmPioggia);
- tft.print ("mm");
- tft.setTextColor (ST7735_WHITE);
- tft.setCursor (0,40);
- tft.setTextColor (ST7735_GREEN);
- tft.print ("Rain Rate");
- tft.setCursor (62,40);
- tft.setTextColor (ST7735_BLUE);
- tft.print (rainrate);
- tft.setCursor (100,40);
- tft.print("mm/h");
- tft.setTextColor (ST7735_WHITE);
- tft.setCursor (0,50);
- tft.println ("Vento");
- tft.setCursor (55,50);
- tft.print (KMH);
- tft.print ("Km/h");
- tft.setCursor (110,50);
- tft.print (windDirection[idx]);
- tft.setCursor (0,60);
- tft.print ("Pressione");
- tft.setCursor (65,60);
- tft.print (pressionelivellodelmarehPa);
- tft.setCursor (110,60);
- tft.print ("hPa");
- tft.setTextColor (ST7735_BLUE);
- tft.setCursor (0,70);
- tft.print ("Wind Chill");
- tft.setCursor (80,70);
- tft.print (windchill);
- tft.print ((char)248);
- tft.print ("C");
- tft.setTextColor (ST7735_RED);
- tft.setCursor (0,80);
- tft.println ("Heat Index");
- tft.setCursor (80,80);
- tft.print (heatindexc);
- tft.print ((char)248);
- tft.print ("C");
- tft.setTextColor (ST7735_YELLOW);
- tft.setCursor(0, 90);
- tft.println("Temp.INSIDE");
- tft.setCursor(80, 90);
- tft.print(barometer.GetTemperature());
- tft.print((char)248);
- tft.println("C");
- tft.drawLine (0,100,tft.width()-0,100,ST7735_WHITE);
- tft.setCursor(0,103);
- tft.setTextColor (ST7735_RED);
- tft.print("Temp.MAX");
- tft.setCursor(80,103);
- tft.print(maxeeprom);
- tft.print((char)248);
- tft.println("C");
- tft.setTextColor (ST7735_BLUE);
- tft.setCursor(0,113);
- tft.print("Temp.MIN");
- tft.setCursor(80,113);
- tft.print(mineeprom);
- tft.print((char)248);
- tft.println("C");
- tft.setTextColor (ST7735_WHITE);
- tft.setCursor (0,123);
- tft.print ("RafficaMAX");
- tft.setCursor (65,123);
- tft.print (rafficamax);
- tft.print ("Km/h");
- tft.setTextColor (ST7735_YELLOW);
- tft.setTextSize (2);
- tft.setCursor (0,135);
- tft.print(hour());
- tft.print(":");
- tft.print(minute());
- tft.print(":");
- tft.print(second());
- tft.println("");
- tft.setTextSize (1);
- tft.print(day());
- tft.print("/");
- tft.print(month());
- tft.print("/");
- tft.print(year());
- tft.print("");
- }
-
- void rawdump() {
- // Serial.print("Raw: ");
- for (int i=0 ; i<41 ; i++) {
- // Serial.print (data[i]);
- if (i == 4) {
- // Serial.print (" ");
- }
- if (i == 8) {
- // Serial.print (" ");
- }
- if (i == 17) {
- // Serial.print (" ");
- }
- if (i == 20) {
- // Serial.print (" ");
- }
- if (i == 24) {
- // Serial.print (" ");
- }
- if (i == 28) {
- //// Serial.print (" ");
- }
- if (i == 37) {
- // Serial.print (" ");
- }
- }
-
-
- }
- void ContaGocce()
- {
- gocce++; // incrementa numero basculate
- if (gocce>1)
- {
- mmPioggia =mmPioggia + 0.518;
- }
- else
- {
- mmPioggia = mmPioggia + mmGoccia; // sommatoria millimetri pioggia
- }
- PluvioOldStep = PluvioStep;
- PluvioStep = time;
- statoLed = !statoLed;
- digitalWrite(pinLed_inter, statoLed ? HIGH : LOW);
- EEPROM.put (eeAddress4, mmPioggia);
- }
-
- void outputResults() {
- //Serial.println();
-
- int idx =0;
- for (int i=8 ; i> 4 ; i--)
- //for (int i=6 ; i> 2 ; i--) // dato modificato
- {
- idx = idx *2 + data[i]; // data[i] == 0/1.. see prev post. //
- }
-
- //Serial.print("idx: ");
- //Serial.println(idx, DEC);
- //Serial.print("Wind: ");
- //Serial.println(windDirection[idx] );
- // Serial.println();
-
- //Serial.print("Swapped: ");
-
- //HEAD
- for (int i =0 ; i< 5 ; i++)
- {
- //Serial.print(data[i]); // it contains 0 or 1
- }
-
- // Serial.print(" ");
-
- //WINDDIR
- for (int i =8 ; i> 4 ; i--)
- {
- // Serial.print(data[i]);
- }
- // Serial.print(" ");
-
- //WIND SPEED
- for (int i =17 ; i> 8 ; i--)
- {
- // Serial.print(data[i]);
- }
-
- //Serial.print(" ");
-
- //WIND SPEED+3
- for (int i =20 ; i> 17 ; i--)
- {
- // Serial.print(data[i]);
- }
-
- //Serial.print(" ");
-
- /*
- // Checksum
- for (iCounter=0;iCounter<4;iCounter++)
- {
- checksum |= (TX23_DATA_GET_BIT << iCounter);
- delayTargetuSec += bitLength;
- TX23_DoDelay;
- }
-
- //Calculate Checksum
- unsigned int checksumCalc = 0;
- checksumCalc += (winddir & 15);
- checksumCalc += ((windspeed >> 8) & 15);
- checksumCalc += ((windspeed >> 4) & 15);
- checksumCalc += (windspeed & 15);
- */
-
- // Checksum
- for (int i =24 ; i> 20 ; i--)
- {
- // Serial.print(data[i]);
- }
-
- //Serial.print(" ");
-
- //WIND DIR NEGATEIVE
- for (int i =28 ; i> 24 ; i--)
- {
- // Serial.print(data[i]);
- }
-
- //Serial.print(" ");
-
- //WIND SPEED NEGATED
- for (int i =37 ; i> 28 ; i--){
- // Serial.print(data[i]);
- }
-
- // Serial.print(" ");
-
- //WIND SPEED NEGATED +3
- for (int i =40 ; i> 37 ; i--){
- // Serial.print(data[i]);
- }
- // Serial.println();
- // Serial.println();
- // Serial.println();
- /*//
- Serial.print("Tempo= ");
- Serial.print(hour());
- Serial.print(":");
- Serial.print(minute());
- Serial.print(":");
- Serial.print(second());
- Serial.println("");
-
- Serial.print("Data= ");
- Serial.print(day());
- Serial.print("/");
- Serial.print(month());
- Serial.print("/");
- Serial.print(year());
- Serial.println("");
- /*/
- //esegui ogni secondo
- // delay(1000);
-
-
-
- if (sensors.getTempCByIndex(0)>maxeeprom)
- {
- maxeeprom=sensors.getTempCByIndex(0);
- EEPROM.put (eeAddress1, maxeeprom);
-
- }
- if (sensors.getTempCByIndex(0)<mineeprom)
- {
- mineeprom=sensors.getTempCByIndex(0);
- EEPROM.put (eeAddress2, mineeprom);
-
- }
-
- }
-
Si lo so è lungo, ma quello completo con internet sarà il doppio :D infatti metto qualche pacchetto da scaricare alla fine quando farò il tutorial ;)
nicola59 [ Lun 14 Dic, 2015 18:43 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Ok mi hai convinto la compro.
As_Needed [ Lun 14 Dic, 2015 18:56 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Ok mi hai convinto la compro.
:D
As_Needed [ Lun 14 Dic, 2015 19:44 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Chiedo una cosa a voi che comunque li vedete i valori di rr... ma il rain rate minimo qual è? 0.8? Perché io non posso mettere tutti i valori fino a 0.1 perché se no siccome si calcola l'intervallo tra una basculata e l'altra significa che se scende a 0.3 per azzerarsi ci vogliono più di 2 ore... invece ho messo che quando va sotto uno, ovvero tipo 0.9, automaticamente è 0
Gab78 [ Lun 14 Dic, 2015 22:12 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Grande Eugè...! :wohow:
As_Needed [ Lun 14 Dic, 2015 22:46 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Grande Eugè...! :wohow:
;)
andrea75 [ Lun 14 Dic, 2015 23:31 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Chiedo una cosa a voi che comunque li vedete i valori di rr... ma il rain rate minimo qual è? 0.8? Perché io non posso mettere tutti i valori fino a 0.1 perché se no siccome si calcola l'intervallo tra una basculata e l'altra significa che se scende a 0.3 per azzerarsi ci vogliono più di 2 ore... invece ho messo che quando va sotto uno, ovvero tipo 0.9, automaticamente è 0
Credo sia la cosa migliore... cmq hai già fatto un miracolo, visto che nelle Lacrosse di fascia bassa il rainrate non esiste... al più lo calcola il software. ;)
enniometeo [ Mar 15 Dic, 2015 09:31 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Un giorno mi devi dire come si fà :lol: a parte gli scherzi bravissimo Eugenio :inchino:
As_Needed [ Mar 15 Dic, 2015 15:26 ]
Oggetto: Re: Stazione Meteo (FAI DA TE)
Chiedo una cosa a voi che comunque li vedete i valori di rr... ma il rain rate minimo qual è? 0.8? Perché io non posso mettere tutti i valori fino a 0.1 perché se no siccome si calcola l'intervallo tra una basculata e l'altra significa che se scende a 0.3 per azzerarsi ci vogliono più di 2 ore... invece ho messo che quando va sotto uno, ovvero tipo 0.9, automaticamente è 0
Credo sia la cosa migliore... cmq hai già fatto un miracolo, visto che nelle Lacrosse di fascia bassa il rainrate non esiste... al più lo calcola il software. ;)
Allora lascio così, che quando va sotto uno segna 0 ;) Già a come ho capito va benissimo 1! Che poi io con il software posso mettere anche 0.1mm, mi basta cambiare un numero :D
Grazie di nuovo a tutti!
Un giorno ti insegno Ennio :lol: