lorik199 Postat Octombrie 2, 2018 Partajează Postat Octombrie 2, 2018 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
cirip Postat Octombrie 3, 2018 Partajează Postat Octombrie 3, 2018 (editat) 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 Octombrie 3, 2018 de cirip Link spre comentariu
cimitavita Postat Octombrie 3, 2018 Partajează Postat Octombrie 3, 2018 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
lorik199 Postat Octombrie 3, 2018 Autor Partajează Postat Octombrie 3, 2018 Mulțumesc cirip de răspuns, funcționează așa cum ma asteptam. Ce n-am inteles e de ce ai pus histerezisul/2. Link spre comentariu
cirip Postat Octombrie 3, 2018 Partajează Postat Octombrie 3, 2018 (editat) 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 Octombrie 3, 2018 de cirip 1 Link spre comentariu
lorik199 Postat Octombrie 4, 2018 Autor Partajează Postat Octombrie 4, 2018 (editat) 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ă) Editat Octombrie 4, 2018 de lorik199 Link spre comentariu
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum