Pagina 7 di 18
Vai a Precedente  1, 2, 3 ... 6, 7, 8 ... 16, 17, 18  Successivo
Vai a pagina   
 

Messaggio Re: Stazione Meteo Base (FAI DA TE)

#91  Frasnow Sab 31 Ott, 2015 14:39

Complimenti!!!    
 




____________
Cricca Inox
small
La meteorologia è una scienza inesatta, che elabora dati incompleti, con metodi discutibili per fornire previsioni inaffidabili. Andrea Baroni
 
avatar
italia.png Frasnow Sesso: Uomo
Francesco
Contributor
Contributor
Socio Ordinario
 
Utente #: 510
Registrato: 19 Gen 2009

Età: 31
Messaggi: 17261
4631 Punti

Preferenza Meteo: Freddofilo

Stazione Meteo: Ecowitt

Località: Beroide (PG) - 223mslm

  Condividi
  • Torna in cima Vai a fondo pagina
 


Messaggio Re: Stazione Meteo Base (FAI DA TE)

#92  As_Needed Sab 31 Ott, 2015 17:29

Grazie ancora! Comunque vorrei specificare che purtroppo non posso inserirci anche un datalogger, usando una semplice sd, perché se no dovrei rifare tutto il circuito stampato e non credo possa rifarlo... In ogni caso per le massime e minime ci vuole un RTC, che serve come orologio, se no arduino non sa che giorno è e che ora è! Quello non ha bisogno di resistenze e niente e forse posso inserirlo nel circuito stampato, devo chiedere se si può fare... Speriamo perché mi dispiacerebbe se magari riuscissi a mettere tutto online non sapere né massime né minime.
 
 



 
Ultima modifica di As_Needed il Sab 31 Ott, 2015 17:30, modificato 1 volta in totale 
avatar
australia.png As_Needed Sesso: Uomo
Eugenio
Guru
Guru
Socio Ordinario
 
Utente #: 1789
Registrato: 15 Ott 2014

Età: 28
Messaggi: 7489
174 Punti

Preferenza Meteo: Indifferente

Stazione Meteo: Altro

Località: Melbourne, Australia

  Condividi
  • Torna in cima Vai a fondo pagina
 

Messaggio Re: Stazione Meteo Base (FAI DA TE)

#93  Gab78 Dom 01 Nov, 2015 10:27

Bene bene, se dovessi avere problemi con la Davis, (scrat... scrat...   ) so già a chi potrei rivolgermi...  
 




____________
I love Appennino...
 
avatar
italia.png Gab78 Sesso: Uomo
Gabriele
Guru
Guru
Socio Sostenitore
 
Utente #: 874
Registrato: 30 Ott 2010

Età: 47
Messaggi: 12047
3994 Punti

Preferenza Meteo: Indifferente

Stazione Meteo: Davis Vantage Vue, Ventus W83x e Altro

Località: San Giovanni Profiamma - 270 m s.l.m. - frazione di Foligno (PG)

  Condividi
  • Torna in cima Vai a fondo pagina
 

Messaggio Re: Stazione Meteo Base (FAI DA TE)

#94  Adriatic92 Dom 01 Nov, 2015 10:30

Eugenio sei una bestia   , complimenti davvero !!    
 



 
avatar
italia.png Adriatic92 Sesso: Uomo
Daniel
Guru
Guru
 
Utente #: 1723
Registrato: 14 Mag 2014

Età: 32
Messaggi: 16693
5514 Punti

Preferenza Meteo: Freddofilo

Stazione Meteo: Davis Vantage Vue e Oregon Scientific Generica

Località: Polverigi - AN - 140 mslm / circa 20km a SW di Ancona

  Condividi
  • Torna in cima Vai a fondo pagina
 

Messaggio Re: Stazione Meteo Base (FAI DA TE)

#95  As_Needed Dom 01 Nov, 2015 12:33

    Comunque vi rivolgo una domanda ai più esperti. Siccome me ne sono fregato che si legge piccolo sul display e ho voluto aggiungere tutti i valori che riesco a inserire, ho aggiunto pure il wind chill, che però ho visto che la sua equazione è applicabile solo con valori inferiori a 10 gradi e superiori a 4.8km/h... Fin qui ci siamo, ho messo un if che per valori non in quel modo il wind chill è uguale alla temperatura. Però per l'indice di calore ho usato questa equazione
http://www.centrometeo.com/articoli...e-heat-index-hi

Qui ho scoperto che è applicabile in modo veritiero solo per valori sopra 26.7... Conoscete quella con il dew point che penso sia applicabile anche con tutti i valori?
 

Foto
 img_0493

EDIT: Adesso sì che c'è spazio
img_0494

Con questa disposizione posso metterci anche volendo l'indice THW, UMIDEX e temperatura interna utilizzando il sensore di pressione e ovviamente anche la pressione.

Se riesco a mettere il RTC lascio perdere il THW etc e metto le massime e le minime sul display stesso  
 



 
Ultima modifica di As_Needed il Dom 01 Nov, 2015 13:17, modificato 3 volte in totale 
avatar
australia.png As_Needed Sesso: Uomo
Eugenio
Guru
Guru
Socio Ordinario
 
Utente #: 1789
Registrato: 15 Ott 2014

Età: 28
Messaggi: 7489
174 Punti

Preferenza Meteo: Indifferente

Stazione Meteo: Altro

Località: Melbourne, Australia

  Condividi
  • Torna in cima Vai a fondo pagina
 

Messaggio Re: Stazione Meteo Base (FAI DA TE)

#96  andrea75 Dom 01 Nov, 2015 13:18

Se vuoi ti do quella che uso per la rete... considera che però è una funzione in PHP. Dovrai poi riconvertirla.
 




____________
Facebook: lineameteo - Twitter: @lineameteo

big

Stazione meteo di San Mariano (PG)
Dati meteo in tempo reale
http://sanmariano.lineameteo.it
 
avatar
italia.png andrea75 Sesso: Uomo
Andrea
Presidente
Presidente
 
Utente #: 2
Registrato: 31 Mar 2005

Età: 49
Messaggi: 45081
3592 Punti

Preferenza Meteo: Freddofilo

Stazione Meteo: LaCrosse WS2300

Località: San Mariano (PG) - 290 mt.

  Condividi
  • Torna in cima Vai a fondo pagina
 

Messaggio Re: Stazione Meteo Base (FAI DA TE)

#97  As_Needed Dom 01 Nov, 2015 13:43

andrea75 ha scritto: [Visualizza Messaggio]
Se vuoi ti do quella che uso per la rete... considera che però è una funzione in PHP. Dovrai poi riconvertirla.


Va bene ci provo Quella del windchill pare che va bene, anche se però vedo sulla stazione di pigi che anche con valori sopra 10 gradi il wind chill non è identico alla temperatura, quindi se hai anche quella mi farebbe piacere
Il dew point invece quello che ho è perfetto l'ho confrontato ovunque ed è precisissimo  
 



 
Ultima modifica di As_Needed il Dom 01 Nov, 2015 13:44, modificato 1 volta in totale 
avatar
australia.png As_Needed Sesso: Uomo
Eugenio
Guru
Guru
Socio Ordinario
 
Utente #: 1789
Registrato: 15 Ott 2014

Età: 28
Messaggi: 7489
174 Punti

Preferenza Meteo: Indifferente

Stazione Meteo: Altro

Località: Melbourne, Australia

  Condividi
  • Torna in cima Vai a fondo pagina
 

Messaggio Re: Stazione Meteo Base (FAI DA TE)

#98  andrea75 Dom 01 Nov, 2015 15:15

As_Needed ha scritto: [Visualizza Messaggio]
andrea75 ha scritto: [Visualizza Messaggio]
Se vuoi ti do quella che uso per la rete... considera che però è una funzione in PHP. Dovrai poi riconvertirla.


Va bene ci provo Quella del windchill pare che va bene, anche se però vedo sulla stazione di pigi che anche con valori sopra 10 gradi il wind chill non è identico alla temperatura, quindi se hai anche quella mi farebbe piacere
Il dew point invece quello che ho è perfetto l'ho confrontato ovunque ed è precisissimo  


Allora, te l'ho un po' semplificata, perché in quella "ufficiale" ci sono più variabili. Cmq dovrebbe andare lo stesso:

Codice: [Download] [Nascondi]
  1. $var1 = (7.5*temp)/(237.7+temp)     // temp in °C  
  2. $var2 = 6.11*Pow(10,$var1)          // cioè 10 elevato al valore di $var1  
  3. $var3 = (umid*$var2)/100            // umidità senza % (ad es: 75)  
  4. $var4 = log($var3/6.11)             // cioè logaritmo in base e del valore di ($var3/6.11)  
  5. $dewp = $var4*237.7/(7.5*log(10)-$var4)  // risultato finale in °C  


Le tue variabili in ingresso sono ovviamente "temp" e "umid".



Quella del windchill che uso è questa, con gli <if> del range di temperatura e vento già inclusi
Codice: [Download] [Nascondi]
  1.          if (($temp<10)&&($wind>4.6))  
  2.          {  
  3.              $windc=13.12+0.6215*$temp-11.37*pow($wind,0.16)+0.3965*$temp*pow($wind,0.16);  
  4.          }  
  5.  

 




____________
Facebook: lineameteo - Twitter: @lineameteo

big

Stazione meteo di San Mariano (PG)
Dati meteo in tempo reale
http://sanmariano.lineameteo.it
 
avatar
italia.png andrea75 Sesso: Uomo
Andrea
Presidente
Presidente
 
Utente #: 2
Registrato: 31 Mar 2005

Età: 49
Messaggi: 45081
3592 Punti

Preferenza Meteo: Freddofilo

Stazione Meteo: LaCrosse WS2300

Località: San Mariano (PG) - 290 mt.

  Condividi
  • Torna in cima Vai a fondo pagina
 

Messaggio Re: Stazione Meteo Base (FAI DA TE)

#99  As_Needed Dom 01 Nov, 2015 15:22

andrea75 ha scritto: [Visualizza Messaggio]
As_Needed ha scritto: [Visualizza Messaggio]
andrea75 ha scritto: [Visualizza Messaggio]
Se vuoi ti do quella che uso per la rete... considera che però è una funzione in PHP. Dovrai poi riconvertirla.


Va bene ci provo Quella del windchill pare che va bene, anche se però vedo sulla stazione di pigi che anche con valori sopra 10 gradi il wind chill non è identico alla temperatura, quindi se hai anche quella mi farebbe piacere
Il dew point invece quello che ho è perfetto l'ho confrontato ovunque ed è precisissimo  


Allora, te l'ho un po' semplificata, perché in quella "ufficiale" ci sono più variabili. Cmq dovrebbe andare lo stesso:

Codice: [Download] [Nascondi]
  1. $var1 = (7.5*temp)/(237.7+temp)     // temp in °C  
  2. $var2 = 6.11*Pow(10,$var1)          // cioè 10 elevato al valore di $var1  
  3. $var3 = (umid*$var2)/100            // umidità senza % (ad es: 75)  
  4. $var4 = log($var3/6.11)             // cioè logaritmo in base e del valore di ($var3/6.11)  
  5. $dewp = $var4*237.7/(7.5*log(10)-$var4)  // risultato finale in °C  


Le tue variabili in ingresso sono ovviamente "temp" e "umid".



Quella del windchill che uso è questa, con gli <if> del range di temperatura e vento già inclusi
Codice: [Download] [Nascondi]
  1.          if (($temp<10)&&($wind>4.6))  
  2.          {  
  3.              $windc=13.12+0.6215*$temp-11.37*pow($wind,0.16)+0.3965*$temp*pow($wind,0.16);  
  4.          }  
  5.  


Allora quella del wind chill praticamente è identica:
Codice: [Download] [Nascondi]
  1.   windchill=(13.12+0.6215*sensors.getTempCByIndex(0))-(11.37*pow(KMH,0.16))+(0.3965*sensors.getTempCByIndex(0)*pow(KMH,0.16)); 
  2. if ((windchill<sensors.getTempCByIndex(0))&&(KMH>4.6)) 
  3. windchill=(13.12+0.6215*sensors.getTempCByIndex(0))-(11.37*pow(KMH,0.16))+(0.3965*sensors.getTempCByIndex(0)*pow(KMH,0.16)); 
  4.   } 
  5.   else 
  6.   { 
  7.     windchill=sensors.getTempCByIndex(0); 
  8.   } 
  9.  
  10.  


solo che ho messo per farla più precisa che se il wind chill diventa meno della temperatura allora esegue la formula, per non perdersi niente, mentre invece se è sopra alla temperatura allora il wind chill diventa uguale alla temperatura.

Per l'heat index non ho ben capito, devo calcolare tutte le variabili e poi con quelle si trova l'indice?

Comunque il dew point con linguaggio C il l'ho messo così è quello come ho detto è precisissimo, l'unico che non riesco a capire come fare è l'heat index...

Codice: [Download] [Nascondi]
  1. dewPoint = (pow (h/100,0.125)*(112+(0.9*sensors.getTempCByIndex(0)))+0.1*sensors.getTempCByIndex(0)-112); 
  2.  
  3.  

 



 
Ultima modifica di As_Needed il Dom 01 Nov, 2015 15:53, modificato 2 volte in totale 
avatar
australia.png As_Needed Sesso: Uomo
Eugenio
Guru
Guru
Socio Ordinario
 
Utente #: 1789
Registrato: 15 Ott 2014

Età: 28
Messaggi: 7489
174 Punti

Preferenza Meteo: Indifferente

Stazione Meteo: Altro

Località: Melbourne, Australia

  Condividi
  • Torna in cima Vai a fondo pagina
 

Messaggio Re: Stazione Meteo Base (FAI DA TE)

#100  andrea75 Dom 01 Nov, 2015 16:09

Questo è l'heat hindex, dove $temp è la temperatura e $UR l'umidità relativa.

Codice: [Download] [Nascondi]
  1. if (($temp >= 27)&&($UR >= 40))  
  2. {  
  3.          $Tf = $temp*(9/5) + 32;  
  4.          $t2 = $Tf*$Tf;  
  5.          $u2 = $UR*$UR;  
  6.          $HIf = -42.379 + (2.04901523*$Tf) + (10.14333127*$UR) - (0.22475541*$Tf*$UR) - (6.83783e-3*$t2) - (5.481717e-2*$u2) + (1.22874e-3*$t2*$UR) + (8.5282e-4*$Tf*$u2) - (1.99e-6*$t2*$u2);  
  7.          $hi = (5/9) * ($HIf - 32);  
  8.          $hi = number_format($hi,1,'.','');  
  9. }  
  10. else  
  11. {  
  12. $hi = $temp;  
  13. }  
  14.  

 




____________
Facebook: lineameteo - Twitter: @lineameteo

big

Stazione meteo di San Mariano (PG)
Dati meteo in tempo reale
http://sanmariano.lineameteo.it
 
avatar
italia.png andrea75 Sesso: Uomo
Andrea
Presidente
Presidente
 
Utente #: 2
Registrato: 31 Mar 2005

Età: 49
Messaggi: 45081
3592 Punti

Preferenza Meteo: Freddofilo

Stazione Meteo: LaCrosse WS2300

Località: San Mariano (PG) - 290 mt.

  Condividi
  • Torna in cima Vai a fondo pagina
 

Messaggio Re: Stazione Meteo Base (FAI DA TE)

#101  As_Needed Dom 01 Nov, 2015 16:41

andrea75 ha scritto: [Visualizza Messaggio]
Questo è l'heat hindex, dove $temp è la temperatura e $UR l'umidità relativa.

Codice: [Download] [Nascondi]
  1. if (($temp >= 27)&&($UR >= 40))  
  2. {  
  3.          $Tf = $temp*(9/5) + 32;  
  4.          $t2 = $Tf*$Tf;  
  5.          $u2 = $UR*$UR;  
  6.          $HIf = -42.379 + (2.04901523*$Tf) + (10.14333127*$UR) - (0.22475541*$Tf*$UR) - (6.83783e-3*$t2) - (5.481717e-2*$u2) + (1.22874e-3*$t2*$UR) + (8.5282e-4*$Tf*$u2) - (1.99e-6*$t2*$u2);  
  7.          $hi = (5/9) * ($HIf - 32);  
  8.          $hi = number_format($hi,1,'.','');  
  9. }  
  10. else  
  11. {  
  12. $hi = $temp;  
  13. }  
  14.  


Ah ecco hai inserito l'if visto che vale solo per un certo valore, anche io adesso l'ho messo, però siccome ho visto che sulla stazione di pigi l'indice di calore varia anche sotto quella temperatura, mi chiedevo se esisteva un'altra equazione, in ogni caso adesso lascio questa.
 



 
Ultima modifica di As_Needed il Ven 06 Nov, 2015 17:12, modificato 6 volte in totale 
avatar
australia.png As_Needed Sesso: Uomo
Eugenio
Guru
Guru
Socio Ordinario
 
Utente #: 1789
Registrato: 15 Ott 2014

Età: 28
Messaggi: 7489
174 Punti

Preferenza Meteo: Indifferente

Stazione Meteo: Altro

Località: Melbourne, Australia

  Condividi
  • Torna in cima Vai a fondo pagina
 

Messaggio Re: Stazione Meteo Base (FAI DA TE)

#102  andrea75 Dom 01 Nov, 2015 16:55

Ce ne sono diversi di indici di calore, e ognuno usa formule diverse... purtroppo manca un indice di riferimento comune.
 




____________
Facebook: lineameteo - Twitter: @lineameteo

big

Stazione meteo di San Mariano (PG)
Dati meteo in tempo reale
http://sanmariano.lineameteo.it
 
avatar
italia.png andrea75 Sesso: Uomo
Andrea
Presidente
Presidente
 
Utente #: 2
Registrato: 31 Mar 2005

Età: 49
Messaggi: 45081
3592 Punti

Preferenza Meteo: Freddofilo

Stazione Meteo: LaCrosse WS2300

Località: San Mariano (PG) - 290 mt.

  Condividi
  • Torna in cima Vai a fondo pagina
 

Messaggio Re: Stazione Meteo Base (FAI DA TE)

#103  As_Needed Dom 01 Nov, 2015 17:00

Ho trovato che la davis utilizza uno strano metodo di calcolo rispetto al normale ecco perché varia  
http://forum.meteonetwork.it/stazio...ice-calore.html
http://forum.meteonetwork.it/strume...heat-index.html

mha mi tengo questa dei 27 gradi intanto a che serve sotto l'indice di calore  

pubblico qui per arduino le formule
DEW POINT
Codice: [Download] [Nascondi]
  1. dewPoint = (pow (h/100,0.125)*(112+(0.9*sensors.getTempCByIndex(0)))+0.1*sensors.getTempCByIndex(0)-112); 
  2.  
  3.  


h è l'umidità e sensor etc è la temperatura

WIND CHILL
Codice: [Download] [Nascondi]
  1. windchill=(13.12+0.6215*sensors.getTempCByIndex(0))-(11.37*pow(KMH,0.16))+(0.3965*sensors.getTempCByIndex(0)*pow(KMH,0.16)); 
  2. if ((windchill<sensors.getTempCByIndex(0))&&(KMH>4.6)) 
  3. windchill=(13.12+0.6215*sensors.getTempCByIndex(0))-(11.37*pow(KMH,0.16))+(0.3965*sensors.getTempCByIndex(0)*pow(KMH,0.16)); 
  4.   } 
  5.   else 
  6.   { 
  7.     windchill=sensors.getTempCByIndex(0); 
  8.   } 
  9.  


sensor ect è la temperatura e KMH la velocità del vento in km/h
ho messo all'inizio l'if diverso in modo tale che così non si perda niente del wind chill, se no magari siccome sono 12 gradi segna sempre 12 anche se c'è un vento di 50 km/h

HEAT INDEX
Codice: [Download] [Nascondi]
  1.  
  2. temperaturaf=sensors.getTempCByIndex(0)*1.8+32; 
  3.    
  4.   if ((sensors.getTempCByIndex(0)>=26.7)&&(h>=40)) 
  5. {  
  6.   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)); 
  7. heatindexc= (heatindexf-32)/1.8; 
  8.    } 
  9.    else 
  10.    {  
  11.     heatindexc=sensors.getTempCByIndex(0); 
  12.    } 
  13.  


Uguale a quella di Andrea
 

Piccolo aggiornamento di dove vedrò la pressione
img_0496
 



 
Ultima modifica di As_Needed il Dom 01 Nov, 2015 17:13, modificato 1 volta in totale 
avatar
australia.png As_Needed Sesso: Uomo
Eugenio
Guru
Guru
Socio Ordinario
 
Utente #: 1789
Registrato: 15 Ott 2014

Età: 28
Messaggi: 7489
174 Punti

Preferenza Meteo: Indifferente

Stazione Meteo: Altro

Località: Melbourne, Australia

  Condividi
  • Torna in cima Vai a fondo pagina
 

Messaggio Re: Stazione Meteo Base (FAI DA TE)

#104  As_Needed Ven 06 Nov, 2015 16:58

Finalmente ho finito il programma!! Successivamente lavorerò per le minime e massime, adesso veramente devo solo montare il tutto.

Questo il programma completo (ho migliorato anche la grafica    Ho messo 4 if che a seconda di quanto è la temperatura esterna, il colore del valore della temperatura cambia)
Codice: [Download] [Nascondi]
  1. #include <Wire.h> 
  2. #include <BMP180.h> 
  3. #include <SPI.h> 
  4. #include <Adafruit_GFX.h> 
  5. #define sclk 13 
  6. #define mosi 11 
  7. #define cs   10 
  8. #define dc   9 
  9. #define rst  8   
  10. #include <Adafruit_GFX.h>    // Core graphics library 
  11. #include <Adafruit_ST7735.h> // Hardware-specific library 
  12. #include <SPI.h> 
  13. Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst); 
  14. #include "DHT.h" 
  15. #include <OneWire.h> 
  16. #include <DallasTemperature.h> 
  17. // Data wire is plugged into pin 2 on the Arduino 
  18. #define ONE_WIRE_BUS 2 
  19. // Setup a oneWire instance to communicate with any OneWire devices  
  20. // (not just Maxim/Dallas temperature ICs) 
  21. OneWire oneWire(ONE_WIRE_BUS); 
  22. // Pass our oneWire reference to Dallas Temperature. 
  23. DallasTemperature sensors(&oneWire); 
  24. DHT dht(3,DHT22); //Definisco il pin al quale è collegato il sensore e il tipo 
  25. float dewPoint; 
  26. float windchill; 
  27. float temperaturaf; 
  28. float heatindexf; 
  29. float heatindexc; 
  30. float pressionelivellodelmarehPa; 
  31. float pressionelivellodelmare; 
  32. int dataPin = 4; 
  33. int bitLength = -1; 
  34. int data[45]; 
  35. int gooddata = 1; 
  36. int timeout; 
  37. int loops = 0; 
  38. int spd[8]; 
  39. int i = 0; 
  40. int j = 0; 
  41. char windDirection[16][4] = { 
  42.   "N","NNE","NE", "ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"}; 
  43. // Store an instance of the BMP180 sensor. 
  44. BMP180 barometer; 
  45. // Store the current sea level pressure at your location in Pascals. 
  46. float seaLevelPressure = 102500;  
  47.  
  48. void setup() { 
  49.   tft.initR(INITR_BLACKTAB); 
  50.   Serial.begin(9600); 
  51.   //Serial.println("DHT test"); 
  52.   dht.begin(); 
  53.    // Start up the library 
  54.   sensors.begin(); 
  55.   Serial.print("\n\nInitializing...\n"); 
  56.   //  Serial.print("Data Pin: "); 
  57.   //  Serial.println(digitalRead(dataPin)); 
  58.     pinMode(dataPin, INPUT); 
  59.      // We start the I2C on the Arduino for communication with the BMP180 sensor. 
  60. Wire.begin(); 
  61. // We create an instance of our BMP180 sensor. 
  62. barometer = BMP180(); 
  63. // We check to see if we can connect to the sensor. 
  64. if(barometer.EnsureConnected()) 
  65. Serial.println("Connected to BMP180."); // Output we are connected to the computer. 
  66. // When we have connected, we reset the device to ensure a clean start. 
  67. barometer.SoftReset(); 
  68. // Now we initialize the sensor and pull the calibration data. 
  69. barometer.Initialize(); 
  70. else 
  71. {  
  72. Serial.println("No sensor found."); 
  73.  
  74.  
  75. //void delay2(unsigned long ms){ 
  76. //    unsigned long start = micros(); 
  77. //    while (micros() - start <= ms); 
  78. //} 
  79.  
  80. void loop() { 
  81.   sensors.requestTemperatures(); 
  82.   pressionelivellodelmare=barometer.GetPressure()+5473; 
  83.   pressionelivellodelmarehPa=pressionelivellodelmare/100; 
  84.   float h = dht.readHumidity(); // Leggo il valore di umidità 
  85.   //float t = dht.readTemperature(); // Leggo il valore di temperatura 
  86.   //if (isnan(t) || isnan(h)) // Se almeno uno dei due valori è NaN (Not a Number) 
  87.    
  88.     //Serial.println("Impossibile leggere il sensore!"); 
  89.    
  90.   //else //altrimenti 
  91.   if(barometer.IsConnected) 
  92. // Retrive the current pressure in Pascals. 
  93. long currentPressureP = barometer.GetPressure(); 
  94. float currentPressuremb = currentPressureP/100.0; 
  95. float currentPressureinHg = currentPressuremb*0.02953; 
  96.  
  97.  
  98. // Retrive the current altitude (in meters). Current Sea Level Pressure is required for this. 
  99. float altitudem = barometer.GetAltitude(seaLevelPressure); 
  100. float altitudeft = altitudem*3.2808; 
  101.  
  102.  
  103. // Retrive the current temperature in degrees celcius. 
  104. float currentTemperatureC = barometer.GetTemperature(); 
  105. float currentTemperatureF = (9.0/5.0)*currentTemperatureC+32.0; 
  106.     Serial.print("Temperatura "); 
  107.     Serial.println(sensors.getTempCByIndex(0)); 
  108.     Serial.print("Umidita' "); 
  109.     Serial.print(h); 
  110.     Serial.print(" %\t"); 
  111.  
  112.     Serial.println ("Dew Point"); 
  113. Serial.print (dewPoint); 
  114. Serial.println ("C"); 
  115. //Serial.println ("Wind Chill"); 
  116. //Serial.print  (windchillc); 
  117. //Serial.print ("C"); 
  118.  
  119. dewPoint = (pow (h/100,0.125)*(112+(0.9*sensors.getTempCByIndex(0)))+0.1*sensors.getTempCByIndex(0)-112); 
  120.    temperaturaf=sensors.getTempCByIndex(0)*1.8+32; 
  121.    
  122.   if ((sensors.getTempCByIndex(0)>=26.7)&&(h>=40)) 
  123. {  
  124.   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)); 
  125. heatindexc= (heatindexf-32)/1.8; 
  126.    } 
  127.    else 
  128.    {  
  129.     heatindexc=sensors.getTempCByIndex(0); 
  130.    } 
  131. //delay(1000); 
  132.      
  133.     //Serial.print("Temperatura: "); 
  134.     //Serial.print(t); 
  135.     //Serial.println(" *C"); 
  136.     // non è necessario mettere un delay() perchè ci vogliono due secondi per leggere i valori, quindi il serial monitor riceverà dati ogni 2 secondi. 
  137.     
  138.   Serial.println("Start"); 
  139.   gooddata = 1; 
  140.   collectData(); 
  141.   if (gooddata == 1) { 
  142.     rawdump(); 
  143.     outputResults(); 
  144.     TheData(); 
  145.   } 
  146.   else { 
  147.     Serial.println ("READ ERROR"); 
  148.   } 
  149.   Serial.println(++loops); 
  150.   Serial.println(); 
  151. delay(1500); 
  152.  
  153. int collectData(void) { 
  154.    if (bitLength <0){ 
  155.      bitLength = 1220;//getbitlenght2(); 
  156.  
  157.   } 
  158.  
  159. pinMode(dataPin, OUTPUT); 
  160.  
  161. digitalWrite(dataPin, HIGH); 
  162. delay(100); 
  163. digitalWrite(dataPin, LOW ); 
  164. delay(500); 
  165. pinMode(dataPin, INPUT); 
  166.  
  167.  
  168. while(digitalRead(dataPin) == LOW){ 
  169. }   
  170. //wait slave start signal 
  171. while(digitalRead(dataPin) == HIGH){ 
  172. while(digitalRead(dataPin) == LOW){ 
  173.  
  174.  
  175.  
  176.  
  177.   for (int i=0 ; i<42 ; i++) { 
  178.     data[i] = (digitalRead(dataPin) == LOW)? 0:1; // read and save either a 0 or 1 
  179.     delayMicroseconds(bitLength); 
  180.   } 
  181.  
  182. int TheData() { 
  183.   Serial.println("TheData"); 
  184.   int i, idx = 0, idy = 0; 
  185. // for (i=8; i>4; i--) {  dato originale 
  186.     for (i=6; i>2; i--) { // dato modificato 
  187.     idx = idx *2 + data[i]; 
  188.   } 
  189.  
  190.   //  Serial.print("idx: "); 
  191.   //  Serial.println(idx, DEC); 
  192.   Serial.print("Wind: "); 
  193.   Serial.println(windDirection[idx] ); 
  194.  
  195. // for (i=17; i>8; i--) {  dato originale per velocità 
  196.     for (i=15; i>6; i--) {   // dato modificato 
  197.     idy = idy * 2 + data[i]; 
  198.   } 
  199.  
  200.   Serial.print("Speed: "); 
  201.   Serial.print(idy, DEC); 
  202.   Serial.println (" m/s read"); 
  203.  
  204.   float idz = idy/10.0; 
  205.   Serial.print("Speed: "); 
  206.   Serial.print(idz); 
  207.   Serial.println (" m/s real"); 
  208.  
  209.   float KMH = idz * 3.6; 
  210.   Serial.print("Speed: "); 
  211.   Serial.print(KMH); 
  212.   Serial.println (" kmh"); 
  213.  
  214.   float MPH = KMH * 0.621371192; 
  215.   Serial.print("Speed: "); 
  216.   Serial.print(MPH); 
  217.   Serial.println (" mph"); 
  218.  
  219.   windchill=(13.12+0.6215*sensors.getTempCByIndex(0))-(11.37*pow(KMH,0.16))+(0.3965*sensors.getTempCByIndex(0)*pow(KMH,0.16)); 
  220. if ((windchill<sensors.getTempCByIndex(0))&&(KMH>4.6)) 
  221. windchill=(13.12+0.6215*sensors.getTempCByIndex(0))-(11.37*pow(KMH,0.16))+(0.3965*sensors.getTempCByIndex(0)*pow(KMH,0.16)); 
  222.   } 
  223.   else 
  224.   { 
  225.     windchill=sensors.getTempCByIndex(0); 
  226.   } 
  227.  
  228. tft.fillScreen(ST7735_BLACK); 
  229.   tft.setTextColor (ST7735_GREEN); 
  230.    tft.setCursor(0, 0); 
  231.   tft.setTextSize(1); 
  232.   tft.println("Temp.OUTSIDE"); 
  233.   if (sensors.getTempCByIndex(0)<3) 
  234.   {  
  235.   tft.setTextColor (ST7735_BLUE); 
  236.   tft.setCursor(80, 0); 
  237.   tft.setTextSize(1); 
  238.   tft.print(sensors.getTempCByIndex(0)); 
  239.   tft.print ( (char)248); 
  240.   tft.println("C"); 
  241. //delay(5000); 
  242.    } 
  243.    if ((sensors.getTempCByIndex(0)>=3)&&(sensors.getTempCByIndex(0)<=15)) 
  244.   {  
  245.   tft.setTextColor (ST7735_GREEN); 
  246.   tft.setCursor(80, 0); 
  247.   tft.setTextSize(1); 
  248.   tft.print(sensors.getTempCByIndex(0)); 
  249.   tft.print ( (char)248); 
  250.   tft.println("C"); 
  251.   } 
  252.     if ((sensors.getTempCByIndex(0)>15)&&(sensors.getTempCByIndex(0)<30)) 
  253.   {  
  254.   tft.setTextColor (ST7735_YELLOW); 
  255.   tft.setCursor(80, 0); 
  256.   tft.setTextSize(1); 
  257.   tft.print(sensors.getTempCByIndex(0)); 
  258.   tft.print ( (char)248); 
  259.   tft.println("C"); 
  260.   } 
  261.     if ((sensors.getTempCByIndex(0)>=30)) 
  262.   {  
  263.   tft.setTextColor (ST7735_RED); 
  264.   tft.setCursor(80, 0); 
  265.   tft.setTextSize(1); 
  266.   tft.print(sensors.getTempCByIndex(0)); 
  267.   tft.print ( (char)248); 
  268.   tft.println("C"); 
  269.   } 
  270.     
  271.   tft.setTextColor (ST7735_WHITE); 
  272.   tft.setCursor (0,10); 
  273.   tft.setTextSize (1); 
  274.   tft.print ("Umidita'"); 
  275.   tft.setCursor (80,10); 
  276.    tft.setTextSize (1); 
  277.   tft.print (dht.readHumidity()); 
  278.    
  279.   tft.print (" %"); 
  280.  
  281. tft.setCursor (0,20); 
  282.   tft.setTextSize (1); 
  283.   tft.print ("Dew Point"); 
  284.   tft.setCursor (80,20); 
  285.    tft.setTextSize (1); 
  286.   tft.print (dewPoint); 
  287.   tft.print ((char)248); 
  288.   tft.print ("C"); 
  289. tft.setCursor (0,30); 
  290.   tft.setTextSize (1); 
  291.   tft.println ("Vento"); 
  292.   tft.setCursor (55,30); 
  293.   tft.setTextSize (1); 
  294. tft.print (KMH); 
  295. tft.print ("Km/h"); 
  296. tft.setCursor (110,30); 
  297. tft.setTextSize (1); 
  298. tft.print (windDirection[idx]); 
  299. tft.setCursor (0,40); 
  300. tft.setTextSize (1); 
  301. tft.print ("Pressione"); 
  302. tft.setCursor (65,40); 
  303. tft.setTextSize (1); 
  304. tft.print (pressionelivellodelmarehPa); 
  305. tft.setCursor (110,40); 
  306. tft.setTextSize (1); 
  307. tft.print ("hPa"); 
  308. tft.setTextColor (ST7735_BLUE); 
  309. tft.setCursor (0,50); 
  310. tft.setTextSize(1); 
  311. tft.print ("Wind Chill"); 
  312. tft.setCursor (80,50); 
  313. tft.setTextSize(1); 
  314. tft.print (windchill); 
  315. tft.print ((char)248); 
  316. tft.print ("C"); 
  317. tft.setTextColor (ST7735_RED); 
  318. tft.setCursor (0,60); 
  319. tft.setTextSize (1); 
  320. tft.println ("Heat Index"); 
  321. tft.setCursor (80,60); 
  322. tft.setTextSize (1); 
  323. tft.print (heatindexc); 
  324. tft.print ((char)248); 
  325. tft.print ("C"); 
  326. tft.setTextColor (ST7735_YELLOW); 
  327. tft.setCursor(0, 70); 
  328. tft.setTextSize(1); 
  329. tft.println("Temp.INSIDE"); 
  330. tft.setCursor(80, 70); 
  331. tft.setTextSize(1); 
  332. tft.print(barometer.GetTemperature()); 
  333. tft.setTextSize(1); 
  334. tft.print((char)248); 
  335. tft.setTextSize(1); 
  336. tft.println("C"); 
  337. tft.drawLine (0,80,tft.width()-1,80,ST7735_WHITE); 
  338. void rawdump() { 
  339.   Serial.print("Raw: "); 
  340.   for (int i=0 ; i<41 ; i++) { 
  341.     Serial.print (data[i]); 
  342.     if (i == 4) { 
  343.       Serial.print (" "); 
  344.     } 
  345.     if (i == 8) { 
  346.       Serial.print (" "); 
  347.     } 
  348.     if (i == 17) { 
  349.       Serial.print (" "); 
  350.     } 
  351.     if (i == 20) { 
  352.       Serial.print (" "); 
  353.     } 
  354.     if (i == 24) { 
  355.       Serial.print (" "); 
  356.     } 
  357.     if (i == 28) { 
  358.       Serial.print (" "); 
  359.     } 
  360.     if (i == 37) { 
  361.       Serial.print (" "); 
  362.     } 
  363.   } 
  364.  
  365. void outputResults() { 
  366.   Serial.println(); 
  367.  
  368.   int idx =0; 
  369.   for (int i=8 ; i> 4 ; i--)  
  370.   //for (int i=6 ; i> 2 ; i--) // dato modificato 
  371.   { 
  372.     idx = idx *2 + data[i];  // data[i] == 0/1.. see prev post.  // 
  373.   } 
  374.  
  375.   Serial.print("idx: "); 
  376.   Serial.println(idx, DEC); 
  377.   Serial.print("Wind: "); 
  378.   Serial.println(windDirection[idx] ); 
  379.   //  Serial.println(); 
  380.  
  381.   Serial.print("Swapped: "); 
  382.  
  383.   //HEAD 
  384.   for (int i =0 ; i< 5 ; i++) 
  385.   { 
  386.     Serial.print(data[i]);  // it contains 0 or 1 
  387.   } 
  388.  
  389.   Serial.print(" "); 
  390.  
  391.   //WINDDIR 
  392.   for (int i =8 ; i> 4 ; i--) 
  393.   { 
  394.     Serial.print(data[i]); 
  395.   } 
  396.   Serial.print(" "); 
  397.  
  398.   //WIND SPEED 
  399.   for (int i =17 ; i> 8 ; i--) 
  400.   { 
  401.     Serial.print(data[i]); 
  402.   } 
  403.  
  404.   Serial.print(" "); 
  405.  
  406.   //WIND SPEED+3 
  407.   for (int i =20 ; i> 17 ; i--) 
  408.   { 
  409.     Serial.print(data[i]); 
  410.   } 
  411.  
  412.   Serial.print(" "); 
  413.  
  414.   /* 
  415.   // Checksum 
  416.    for (iCounter=0;iCounter<4;iCounter++) 
  417.    { 
  418.    checksum |= (TX23_DATA_GET_BIT << iCounter); 
  419.    delayTargetuSec += bitLength; 
  420.    TX23_DoDelay; 
  421.    } 
  422.  
  423.    //Calculate Checksum 
  424.    unsigned int checksumCalc = 0; 
  425.    checksumCalc += (winddir & 15); 
  426.    checksumCalc += ((windspeed >> 8) & 15); 
  427.    checksumCalc += ((windspeed >> 4) & 15); 
  428.    checksumCalc += (windspeed & 15); 
  429.    */ 
  430.  
  431.   // Checksum 
  432.   for (int i =24 ; i> 20 ; i--) 
  433.   { 
  434.     Serial.print(data[i]); 
  435.   } 
  436.  
  437.   Serial.print(" "); 
  438.  
  439.   //WIND DIR NEGATEIVE 
  440.   for (int i =28 ; i> 24 ; i--) 
  441.   { 
  442.     Serial.print(data[i]); 
  443.   } 
  444.  
  445.   Serial.print(" "); 
  446.  
  447.   //WIND SPEED NEGATED 
  448.   for (int i =37 ; i> 28 ; i--){ 
  449.     Serial.print(data[i]); 
  450.   } 
  451.  
  452.   Serial.print(" "); 
  453.  
  454.   //WIND SPEED NEGATED +3 
  455.   for (int i =40 ; i> 37 ; i--){ 
  456.     Serial.print(data[i]); 
  457.   } 
  458.   Serial.println(); 
  459.   //  Serial.println(); 
  460.   //  Serial.println(); 
  461.  
  462.  
  463.    
  464.  

Comprende tutti i valori che si leggono in questa foto la stazione meteo.
img_0501

Ho tarato la pressione con la davis di pigi ed è identico il valore di pressione, ovviamente sul livello del mare, alla sua che sta a 2km. In più ovviamente adesso che c'è questa struttura anticiclonica di sicuro non mi sbaglio    Vedi che serve a qualcosa  
 

P.S. A leggere tutto ci vogliono circa 5/6 secondi per via della lunghezza del programma.
 



 
Ultima modifica di As_Needed il Ven 06 Nov, 2015 17:13, modificato 3 volte in totale 
avatar
australia.png As_Needed Sesso: Uomo
Eugenio
Guru
Guru
Socio Ordinario
 
Utente #: 1789
Registrato: 15 Ott 2014

Età: 28
Messaggi: 7489
174 Punti

Preferenza Meteo: Indifferente

Stazione Meteo: Altro

Località: Melbourne, Australia

  Condividi
  • Torna in cima Vai a fondo pagina
 

Messaggio Re: Stazione Meteo Base (FAI DA TE)

#105  Gab78 Ven 06 Nov, 2015 22:10

Ancora complimenti...!  
 




____________
I love Appennino...
 
avatar
italia.png Gab78 Sesso: Uomo
Gabriele
Guru
Guru
Socio Sostenitore
 
Utente #: 874
Registrato: 30 Ott 2010

Età: 47
Messaggi: 12047
3994 Punti

Preferenza Meteo: Indifferente

Stazione Meteo: Davis Vantage Vue, Ventus W83x e Altro

Località: San Giovanni Profiamma - 270 m s.l.m. - frazione di Foligno (PG)

  Condividi
  • Torna in cima Vai a fondo pagina
 


Pagina 7 di 18
Vai a Precedente  1, 2, 3 ... 6, 7, 8 ... 16, 17, 18  Successivo


NascondiQuesto argomento è stato utile?
Condividi Argomento
Segnala via email Facebook Twitter Windows Live Favorites MySpace del.icio.us Digg SlashDot google.com LinkedIn StumbleUpon Blogmarks Diigo reddit.com Blinklist co.mments.com
technorati.com DIGG ITA linkagogo.com meneame.net netscape.com newsvine.com yahoo.com Fai Informazione Ok Notizie Segnalo Bookmark IT fark.com feedmelinks.com spurl.net
Inserisci un link per questo argomento
URL
BBCode
HTML
NascondiArgomenti Simili
Argomento Autore Forum Risposte Ultimo Messaggio
No Nuovi Messaggi Stazione Meteo Completa arburesu Strumenti meteo 2 Sab 11 Set, 2010 20:23 Leggi gli ultimi Messaggi
arburesu
No Nuovi Messaggi La Regione/i Completa A Livello Climatico ... Adriatic92 Meteocafè 10 Gio 16 Nov, 2017 09:50 Leggi gli ultimi Messaggi
Boba Fett
No Nuovi Messaggi Stazione Meteo Completa WiFi Con ESP8266 E... As_Needed Strumenti meteo 21 Sab 16 Gen, 2021 10:28 Leggi gli ultimi Messaggi
As_Needed