Sari la conținut
ELFORUM - Forumul electronistilor

Histerezis termostat


lorik199

Postări Recomandate

Salutare, am facut un termostat pentru centrala cu arduino uno si ds18b20.

Functioneaza bine pe masa insa as vrea sa ii adaug un mic histerezis sa nu imi comute centrala foarte des.

Undeva la 0.2-0.3 grade ar fi suficient, insa nu stiu cum sa il implementez.

Atasez codul 

 

Citat

#include <OneWire.h> 
#include <DallasTemperature.h>
#include <LiquidCrystal.h> 
#define ONE_WIRE_BUS 8 
OneWire oneWire(ONE_WIRE_BUS); 
DallasTemperature sensors(&oneWire);
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Parameters: (rs, enable, d4, d5, d6, d7) 

void setup() { 
  
 lcd.begin(16,2); 
sensors.begin(); 
pinMode(LED_BUILTIN, OUTPUT);
}

void loop() { 
  sensors.requestTemperatures();
  float val = analogRead(A0);
 val = (map(val, 0, 1023, 100,250))/10.0;
 lcd.setCursor(0,0);
 lcd.print("Actuala  Setata");  
 lcd.setCursor(0,1); 
 lcd.print(sensors.getTempCByIndex(0),1); 
 lcd.print((char)223);
 lcd.print("C");
 lcd.setCursor(9,1);
 lcd.print(val,1); 
 lcd.print((char)223);
 lcd.print("C");

  if((val)>=sensors.getTempCByIndex(0)){
  digitalWrite(LED_BUILTIN, HIGH);  
  }
  else{
    digitalWrite(LED_BUILTIN, LOW);    
    }
    }

 

Link spre comentariu
if(t_masurata > (t_set + t_hist/2){
	opreste_caldura();
	}
else if(t_masurata < (t_set - t_hist/2){
	porneste_caldura();
	}
else;

Salut,

 

Uite o posibilitate. Ideea e sa nu comuti decat in afara benzii de histerezis. Daca temperatura masurata este in banda dintre cele doua limite care includ histerezisul, nu faci nimic. Sau cu alte cuvinte, trebuie sa ai trei stari posibile ale sistemului. If/else iti ofera numai doua. Asa ca pui If/else if/ else. Cele trei stari ar fi "temp mai mica decat cea setata minus histerezis/2", "temp mai mare decat cea setata plus histerezis/2" si a treia intre aceste doua limite.

Editat de cirip
Link spre comentariu

la montaje termostate eu folosesc Temperatura_ON si Temperatura_OFF. Ambele temperaturi pot fi setate din meniu si bineinteles ca programul nu trebuie sa dea voie ca Temperatura_ON sa fie egala cu Temperatura_OFF, iar pentru incalzire Temperatura_ON trebuie sa fie intotdeauna mai mica decat Temperatura_OFF (pentru racire, trebuie sa fie invers).

Link spre comentariu
2 hours ago, lorik199 said:

Ce n-am inteles e de ce ai pus histerezisul/2.

Salut,

Pai, cand potrivesti temperatura, o pui p-aia din mijloc, nu te prea gandesti la histerezis. Pe de alta parte, histerezisul e definit ca diferenta limitelor de declansare. Asa ca, daca fata de temperatura potrivita permiti controlerului sa se duca juma' de histerezis in sus si jumate in jos, se cheama ca ai un interval de histerezis/2 + histerezis/2 = histerezis, care e centrat exact pe temperatura potrivita de locatar. Daca pui histerezisul de 0.3 grade, inseamna ca il lasi sa comute cu 0.15 grade mai sus sau mai jos de potriveala, ceea ce mie mi se pare cam "strans". O sa comute incalzitoarea ca la Vadu Lat. Cred ca histerezis de 1 grad sau chiar 2 e mai rezonabil. Dar o sa te lamuresti in exploatare ce ti-e pe plac.

 

 

Editat de cirip
Link spre comentariu

Mulțumesc de explicatie, eu histerezisul îl priveam numai că valoarea ce trece peste/sub ce am setat și nu ca diferența dintre ele.

Am reglat histerezisul la 1 grad, cu conditie de >= in if (altfel era 1.2 grade), dar oricum temperatura scade foarte greu(nici nu e așa frig afară)

20181004_084730.jpg

Editat de lorik199
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări