Sari la conținut
ELFORUM - Forumul electronistilor

Cod pompe centrala termica (circulare apa)


zahariaiulian

Postări Recomandate

Salut,am urmatorul cod de mai jos. Intre temperatura 0 grade si 30 pompa imi sta oprita. De la 31 imi pleaca pompa si se opreste la 34 in sus. Acum cand incepe si imi scade temperatura sub 34 grade imi pleaca din nou pompa. Aici e buba. Vreau sa fac in asa fel sa nu mai porneasca la scadere de loc. Doar cand isi face ciclul, sa zic ca scade sub 20 grade si cand ajunge iar la 31 sa plece..

//////////////////////////////////////////////// Pompa 2  ///////////////////////////////////////////////////////////////if (temperature >= 0 && temperature  <= 30)       {       digitalWrite(P2, HIGH);   // Opreste pompa 2       lcd.setCursor(9,1);       lcd.print("0");      }if (temperature >= 31)           {       digitalWrite(P2, LOW);   // Activeaza pompa 2       lcd.setCursor(9,1);       lcd.print("1");      }if (temperature >= 34 )       {       digitalWrite(P2, HIGH);   // Opreste pompa 2       lcd.setCursor(9,1);       lcd.print("0");      }     //-----------------------------------------------Sfarsit cod-----------------------------------------------------------//
Link spre comentariu
  • Răspunsuri 26
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Iti mai trebuie o variabila cu care sa activezi/deactivezi pomparea.

#define TEMP_ACTIVARE_POMPA 20   /*pragul la care activezi pompa*/boolean bNevoieSaPompez = false; //memoreaza starea pompei

Activezi pompa la temperatura care te intereseaza:

if((temperature < TEMP_ACTIVARE_POMPA) && (bNevoieSaPompez== false)){   bNevoieSaPompez = true;}

Modifici conditia de pornit a pompei:

if ((temperature >= 31) && bNevoieSaPompez){  digitalWrite(P2, LOW);   // Activeaza pompa 2  lcd.setCursor(9,1);  lcd.print("1");}

Dezactivezi pompa cand ajunge la pragul de sus. Cred c-o puteai activa si in if-ul anterior, ca-i suficient sa pornesti pompa o singura data. Cum ti se pare tie mai bine/clar.

if (temperature >= 34 ) {   digitalWrite(P2, HIGH);   // Opreste pompa 2   lcd.setCursor(9,1);   lcd.print("0");   bNevoieSaPompez = false; //deactiveaza pompa pana scade temperatura suficient.}     
Link spre comentariu

Pompa proneste cand temperatura depaseste 31 de grade si valoarea memorata in "bNevoieSaPompez" este "true".  Cand temperatura ajunge la 34 opreste pompa si memoreaza bNevoieSaPompez = false, impiedicand ca pompa sa plece din nou la 31 de grade findca bNevoieSaPompez nu este true cum ar trebuii ci este false.  Cand temperatura ajunge sub 20 de grade seteaza bNevoieSaPompez = true care permite in momentul in care se incalzeste inapoi la 31 de grade se place pompa. Deci acea variabila impedica pompa sa porneasca din nou la 31de grade pana in momentul in care nu se raceste prima data pana la 20 de grade.

 

  

Editat de bandi12
Link spre comentariu

Ce memorare? Comentariul de la bNevoieSaPompez?

bNevoieSaPompez "memoreaza" starea sistemului - vine de la rece sau de la cald. In functie de valoarea acestei variabile, pompa porneste sau nu - if-ul de pornit pompa depinde si de variabila asta, nu doar de temperatura. In felul asta sistemul stie "directia" temperaturii.

Intre timp a explicat si bandi12 cum functioneaza programul cu variabila respectiva.

Link spre comentariu

Problema e ca mie imi sta pompa la 22.3 pornita. Acum afisez tot codul:

// include the library code:#include <LiquidCrystal.h>#include <OneWire.h>int TEMP_ACTIVARE_POMPA = 35;   /*pragul la care activezi pompa*/boolean bNevoieSaPompez = false; //memoreaza starea pompei int DS18S20_Pin = 6; //DS18S20 Signal pin on digital 2int P1 = 7; // pompa1int P2 = 8; // pompa2int P3 = 9; // pompa2//Temperature chip i/oOneWire ds(DS18S20_Pin);  // on digital pin 2// initialize the library with the numbers of the interface pinsLiquidCrystal lcd(12, 11, 5, 4, 3, 2);void setup() {  Serial.begin(9600);   pinMode(P1, OUTPUT);   pinMode(P2, OUTPUT);   pinMode(P3, OUTPUT);  // set up the LCD's number of columns and rows:  lcd.begin(16, 2);  // Print a message to the LCD.  }void loop() {  float temperature = getTemp();  Serial.println(temperature); lcd.setCursor(0,0);lcd.print("Temperatura:");lcd.print(temperature);lcd.setCursor(0,1);lcd.print("P1:");lcd.setCursor(6,1);lcd.print("P2:");lcd.setCursor(12,1);lcd.print("BK:"); //////////////////////////////////////////////// Pompa 1  ////////////////////////////////////////////////////////////// /*                        Pompa 1 porneste la 30 grade si se oprest la 26 grade                                       */ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////if (temperature > 60 ) // Activeaza pompa 1 sub temperatura de 60 grade              {        digitalWrite(P1, LOW);          lcd.setCursor(3,1);        lcd.print("1");       } if (temperature < 55 )  // Dezactiveaza pompa 1 sub temperatura de 55 grade              {        lcd.setCursor(3,1);        lcd.print("0");        digitalWrite(P1, HIGH);          }//-----------------------------------------------Sfarsit cod-----------------------------------------------------------////////////////////////////////////////////////// Pompa 2  ///////////////////////////////////////////////////////////////if((temperature < TEMP_ACTIVARE_POMPA) && (bNevoieSaPompez == false)){   bNevoieSaPompez = true;}if ((temperature >= 35) && bNevoieSaPompez){  digitalWrite(P2, LOW);   // Activeaza pompa 2  lcd.setCursor(9,1);  lcd.print("1");}if (temperature >= 65 ) {   digitalWrite(P2, HIGH);   // Opreste pompa 2   lcd.setCursor(9,1);   lcd.print("0");   bNevoieSaPompez = false; //deactiveaza pompa pana scade temperatura suficient.}     if (temperature < 35){  digitalWrite(P2, LOW);   // Activeaza pompa 2  lcd.setCursor(9,1);  lcd.print("1");}//-----------------------------------------------Sfarsit cod-----------------------------------------------------------////////////////////////////////////////////////// Pompa 3  ///////////////////////////////////////////////////////////////if (temperature > 0 )      {      digitalWrite(P3, LOW);   // Activeaza pompa 3      lcd.setCursor(15,1);      lcd.print("1");     }//-----------------------------------------------Sfarsit cod-----------------------------------------------------------//}  float getTemp(){  //returns the temperature from one DS18S20 in DEG Celsius   byte data[12];  byte addr[8];   if ( !ds.search(addr)) {      //no more sensors on chain, reset search      ds.reset_search();      return -1000;  }   if ( OneWire::crc8( addr, 7) != addr[7]) {      Serial.println("CRC is not valid!");      return -1000;  }   if ( addr[0] != 0x10 && addr[0] != 0x28) {      Serial.print("Device is not recognized");      return -1000;  }   ds.reset();  ds.select(addr);  ds.write(0x44,1); // start conversion, with parasite power on at the end   byte present = ds.reset();  ds.select(addr);     ds.write(0xBE); // Read Scratchpad    for (int i = 0; i < 9; i++) { // we need 9 bytes    data[i] = ds.read();  }   ds.reset_search();   byte MSB = data[1];  byte LSB = data[0];   float tempRead = ((MSB << 8) | LSB); //using two's compliment  float TemperatureSum = tempRead / 16;   return TemperatureSum;  }
Link spre comentariu

E normal, bucatile astea doua activeaza pompa pe toata plaja de temperaturi < 65°.

// include the library code:if ((temperature >= 35) && bNevoieSaPompez){  digitalWrite(P2, LOW);   // Activeaza pompa 2  lcd.setCursor(9,1);  lcd.print("1");}if (temperature < 35){  digitalWrite(P2, LOW);   // Activeaza pompa 2  lcd.setCursor(9,1);  lcd.print("1");}
Sterge blocul cu if(temperature < 35) Editat de Liviu M
Link spre comentariu

In setup, nu ar trebuii : digitalWrite(P2, HIGH) ? Din cate stiu la pornire pin-ul este LOW din default si daca pompa pe LOW e pornita e si normal sa porneasca odata cu arduino.

Da, ai dreptate. Dar chinezaria asta de placa cu relee pleaca cand ii dau LOW :). Este exact invers. Va multumesc pentru ajutor.

E normal, bucatile astea doua activeaza pompa pe toata plaja de temperaturi < 65°.

// include the library code:if ((temperature >= 35) && bNevoieSaPompez){  digitalWrite(P2, LOW);   // Activeaza pompa 2  lcd.setCursor(9,1);  lcd.print("1");}if (temperature < 35){  digitalWrite(P2, LOW);   // Activeaza pompa 2  lcd.setCursor(9,1);  lcd.print("1");}
Sterge blocul cu if(temperature < 35)

 

Corect, in loc de LOW trebuia sa pun HIGH ca sa opreasca. Ma incurca chestia asta ca este inversat HIGH = oprire si LOW - pornire pe placa asta de relee :|. Multumesc!

Link spre comentariu

Nu exista "cum se foloseste un releu", ambele contacte sunt exact la fel si fiecare il foloseste cum vrea. 

Pompa pleaca pe LOW findca este legat pe NC adica cand releul nu este actionat, trebuie mutat pe NO care inseamna cand releul este actionat =>> cand e HIGH. 

 

NC = Normal close / NO = normal open. Deci e clara treaba. Il folosesc asa cum este el fara tensiune.

Atunci cand ii dau LOW pe pin-ul X imi actioneaza RELEUL. Nu am pompe legate pe el sau alti consumatori.

 

Iti dau un exemplu:

if ( temp < de x grade ) {

 

sa nu actioneze releul - adica LOW

 

}

 

 

Ehhh.... mie imi actioneaza releul aici! daca ii dau HIGH ii taie alimentarea ;), unde crezi ca e buba?

Link spre comentariu

@zahariaiulian: n-ai inteles, nu tu trebuie sa faci ce vrea releul, ci releul trebuie sa faca ce vrei tu. Cu alte cuvinte, desi ai dreptate referitor la semnificatia pinilor, nu esti obligat sa folosesti releul asa. Daca tie iti place mai mult sa opresti releul cand faci pinul LOW, nu e nici o problema *) daca ignori semnificatia pinilor si conectezi releul sa functioneze cum iti trebuie tie.

Tu esti sefu'.

 

*) Singura problema ar putea fi consumul de curent mai mare, daca inversand logica releul va fi alimentat mai mult timp.

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