Jump to content
ELFORUM - Forumul Electronistilor
zahariaiulian

Cod pompe centrala termica (circulare apa)

Recommended Posts

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-----------------------------------------------------------//

Share this post


Link to post
Share on other sites

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.}     

Share this post


Link to post
Share on other sites

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.

 

  

Edited by bandi12

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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;  }

Share this post


Link to post
Share on other sites

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) Edited by Liviu M

Share this post


Link to post
Share on other sites

L-am sters. Tot asa imi sta pompa.

Problema este atunci cand alimentez arduino si am Temperatura 22 grade imi sta pompa 2 activata, cand trece de temperatura 65 si se opreste este ok.

Edited by zahariaiulian

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

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. 

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites

@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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.