• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Punkt rosy jak wyliczyć
#1
Dzień dobry,
Mam coś takiego: 
Kod:
#include "SHT85.h"

#define SHT85_ADDRESS  0x44

float pr;
float temp;
float wilg;

SHT85 sht;

void setup()
{
  Serial.begin(9600);
  Wire.begin();
  sht.begin(SHT85_ADDRESS);
}

void loop()
{
  sht.read(); 
  temp=sht.getTemperature();
  wilg=(sht.getHumidity());

  pr = pow((wilg/100),((112+(0.9*temp))+((0.1*temp)-112)));
  Serial.print(pr);
  Serial.println(" Punkt Rosy ");
  delay(1000);
}
Co jest nie tak cały czas pokazuje 0.00
Może ktoś już przerabiał temat?
Pozdrawiam
 
Odpowiedź
#2
A skąd masz tę funkcję pow? Jak jest z biblioteki SHT85.h to daj do niej linka/podaj autora.
W sumie nieważne, domyślam się że to zwykle potęgowanie, a nie funkcja z biblioteki. Dla przybliżonego wzoru znalezionego na WIKI to powinno wyglądać tak:
float Tpr(float hum, float temp)
{
return pow(hum/100,1.0/8.0)*(112+(0.9*temp))+0.1*temp-112;

}
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
Tak wzór z Wiki. Tak do końca to nie wiem czy jest on poprawny. "pow" kombinowałem sam. Dosyć mało jest jest na ten temat informacji. A czy jest jakaś gotowa biblioteka z taką funkcją?
Dzięki za pomoc. Sam jestem za cienki w tym temacie.
Pozdrawiam
 
Odpowiedź
#4
(08-02-2022, 19:27)kaczakat napisał(a): A skąd masz tę funkcję pow? Jak jest z biblioteki SHT85.h to daj do niej linka/podaj autora.
W sumie nieważne, domyślam się że to zwykle potęgowanie, a nie funkcja z biblioteki. Dla przybliżonego wzoru znalezionego na WIKI to powinno wyglądać tak:
float Tpr(float hum, float temp)
{
return  pow(hum/100,1.0/8.0)*(112+(0.9*temp))+0.1*temp-112;
 
}
Wielkie dzięki. POMOGŁO!!!!
Zrobiłem coś takiego:
Kod:
#include "SHT85.h"
#include <LiquidCrystal_I2C.h>
byte znak0[8] = { 0b01100, 0b10010, 0b10010, 0b01100, 0b00000, 0b00000, 0b00000, 0b00000 };
byte znak1[8] = { 0b11111, 0b10000, 0b10000, 0b11111, 0b10000, 0b10000, 0b11111, 0b00010 };
#include <Wire.h>
#define SHT85_ADDRESS  0x44

float pr;
float temp;
float hum;
float Tpr;
LiquidCrystal_I2C lcd(0x27,16,2);
SHT85 sht;

void setup()
{
  Serial.begin(9600);
  Wire.begin();
  sht.begin(SHT85_ADDRESS);

  lcd.noBacklight(); 
  lcd.init();                     
  lcd.backlight();
  lcd.clear();
}

void loop()
{
  sht.read();
  temp=sht.getTemperature();
  hum=sht.getHumidity();

Tpr= pow(hum/100,1.0/8.0)*(112+(0.9*temp))+0.1*temp-112;

  Serial.print(Tpr);
  Serial.println(" °C");
  Serial.print(temp);
  Serial.println(" °C");
  Serial.print(hum);
  Serial.println(" %");
////////////////////////////////////////////////////////

lcd.createChar(0, znak0);
lcd.createChar(1, znak1);
lcd.setCursor(0,0);
lcd.print("TEMP.POM: ");
lcd.print(sht.getTemperature(),1);
lcd.print((char)0);
lcd.print("C");
/////////////////////////////////////////////////////////

lcd.setCursor(0,1);
lcd.print("HUM: ");
lcd.setCursor(5,1);
lcd.print(sht.getHumidity(),0);
lcd.print("%");

////////////////////////////////////
lcd.setCursor(10,1);
lcd.print(Tpr);
lcd.print((char)0);
lcd.print("C");

delay(5000);
}
Układ potrzebowałem do hali w której wyłączyliśmy ogrzewanie ze względu na cenę gazu.
Pozdrawiam wszystkich
 
Odpowiedź
#5
Wzór sprawdziłem dla 20oC i wskazania do setnej są OK, jak to ma być na nieogrzewanej hali to sobie porównaj wyniki z tablicami i ustawionymi temperaturami w pętli for w zakresie spodziewanych wartości.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#6
(09-02-2022, 20:32)kaczakat napisał(a): Wzór sprawdziłem dla 20oC i wskazania do setnej są OK, jak to ma być na nieogrzewanej hali to sobie porównaj wyniki z tablicami i ustawionymi temperaturami w pętli for w zakresie spodziewanych wartości.
Porównywałem z kalkulatorami online i różnice są niewielkie. Czyli się sprawdza. Teraz wiadomo kiedy włączyć wentylację Smile. Pozdrawiam
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości