Calcolo punto di rugiada, problema elevamento a potenza

Ciao a tutti,
Nel mio sketch sulla stazione meteorologica, vorrei integrare un calcolo sul punto di rugiada e la formula è questa:

Il problema sta semplicemente nel far capire ad arduino questa formula.
Purtroppo c’è un elevamento a potenza di cui non riesco a uscirne fuori…

Premessa:
1)la compilazione della Es non l’ho fatta perché non so da dove cominciare.
Tc e Rh sono cambiati nel mio sketch rispettivamente in ‘t’ e ‘h’.

Quindi io inizierei cosi:

#include <math.h> 

Float t, h;
Double E, Es, Dp;

Void loop()
{
E = (h*Es)/100;
Dp = (-430.22 + 237.7 * logf(E))/(-logf(E) + 19.08);
}

Spero di non aver fatto errori… grazie :smiley:

La funzione pow(base, esponente) ti aiuterà con la potenza.

Per il resto occhio a maiuscole e minuscole: float e double sono tipi validi (e peraltro lo stesso tipo, di fatto), Float e Double no!

Questa è la formula per il dewpoint che uso su varie applicazioni professionali, nel mio caso devo fare i conti anche con la pressione che può variare tra 2 e 6 bar, nel tuo caso puoi eliminare il computo per la pressione mettendo un valore costante per 1 bar. La formula fornisce valori con un errore massimo di +/- 0.5%, da sommare all'errore del sensore di temperatura e rh.

int Calc_dewPoint(float celsius, float humidity)
{
  float a = 17.271;
  float b = 237.7;
  float c = sqrt(Milli_Bar) / 3.5;
  float temp = (a * celsius) / (b + celsius) + log(humidity * 0.01);
  int Td = (b * temp) / (a - temp) - c;
#if defined test_mode
  Td = -20;
#endif
  return Td;
}

Se non hai ancora risolto, io uso questa formula:

dewPoint = (pow (h / 100, 0.125) * (112 + (0.9 * t)) + 0.1 * t - 112);

dove h è la variabile in cui memorizzi la pressione e t quella per la temperatura.

Ciao

Perdonatemi se rispondo adesso…detto questo:

SukkoPera:
La funzione pow(base, esponente) ti aiuterà con la potenza.
Per il resto occhio a maiuscole e minuscole: float e double sono tipi validi (e peraltro lo stesso tipo, di fatto), Float e Double no!

Grazie mille, ho risolto, il fatto delle variabili sarà dovuto al fatto che avevo scritto al cellulare e la prima riga da la lettera in maiuscolo :confused:

astrobeed:
Questa è la formula per il dewpoint che uso su varie applicazioni professionali, nel mio caso devo fare i conti anche con la pressione che può variare tra 2 e 6 bar, nel tuo caso puoi eliminare il computo per la pressione mettendo un valore costante per 1 bar.
La formula fornisce valori con un errore massimo di +/- 0.5%, da sommare all’errore del sensore di temperatura e rh.

Non capisco quando pari di errore massimo +/- 0.5%, il punto di rugiada non dovrebbe essere una formula certa? E’ chiaro che ci sta l’errore del sensore…ma di una formula matematica non capisco.

In questi giorni ho avuto modo di scrivermi la formula sul punto di rugiada e la condivido:

#include <math.h>
void setup()
{
  float t, h;
  double E, Es, Dp;
  Serial.begin(9600);
}
void loop()
{
  float E = 0;
  float Es = 0;
  float Dp = 0;
  float t = 27;
  float h = 78;
  Es = 6.11 * pow(10, (7.5 * t) / (237.7 + t));
  E = (h * Es) / 100;
  Dp = (-430.22 + 237.7 * logf(E)) / (-logf(E) + 19.08);
  Serial.print("Punto di rugiada: ");
  Serial.print(Dp);
  Serial.println("*C");
  delay(2000);
}

secondo vari calcolatori online il risultato è esatto.

droidprova:
Se non hai ancora risolto, io uso questa formula:

dewPoint = (pow (h / 100, 0.125) * (112 + (0.9 * t)) + 0.1 * t - 112);

dove h è la variabile in cui memorizzi la pressione e t quella per la temperatura.
Ciao

Non male come formula, si sbaglia con la mia di 0,01°C…sarà dovuto a qualche arrotondamento che fa arduino…comunque, molto più compatta ed è meglio :smiley:

Grazie a tutti!