Pages: [1]   Go Down
Author Topic: Ayuda con código. Controlador de caldera.  (Read 1623 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenos días chicos.
A ver si alguien puede ayudarme con un proyecto que tengo en mente. Se trata de un controlador para una caldera de calefacción y como aún estoy algo verde en el tema de programación pues acudo a vosotros. Os comento como va a ser el montaje.
Va a llevar dos sensores de temperatura, uno montado en la caldera y otro en el acumulador. El controlador tendrá que controlar los dos sensores para después encender/apagar la caldera y la bomba del agua.
Los datos a tener en cuenta son:
-   Tacumulador < 40ºC enciende caldera
-   Tcaldera >= Tacumulador enciende bomba de agua
-   Tacumulador >= 65ºC apaga caldera
-   Tcaldera <= 65ºC apaga bomba de agua
Yo lo tengo echo con cuatro sentencias if y funciona perfectamente en un circuito de prueba con dos potenciómetros (hacen de sensores) y dos leds (uno para la caldera y otro para la bomba)
¿Hay alguna sentencia para mejorar el código? Sin poner tantos “if”
Un saludo.
Logged

COM22
Offline Offline
God Member
*****
Karma: 6
Posts: 702
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sin el código sera difícil de decir como puedes optimizarlo, si se puede.

Un saludo!
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas tardes.

Pongo el código ya que cuando puse el anterior post no tenía el código en el ordenador. Está con distintos valores en las temperaturas.

Code:

#include <PCD8544.h>

static const byte sensorTc = 0;
static const byte sensorTa = 1;
static const byte ledCal = 11;
static const byte ledBom = 10;

//Tamaño de la pantalla (pixeles)
static const byte LCD_WIDTH = 84; //Ancho
static const byte LCD_HEIGHT = 48; //Alto

static const byte CHART_HEIGHT = 5;

static const byte DEGREES_CHAR = 1;
static const byte degrees_glyph[] = { 0x00, 0x07, 0x05, 0x07, 0x00 };

static PCD8544 lcd;

float getVoltage (int pin) {
  return (analogRead(pin) * .004882814);
}


void setup() {
  
  Serial.begin(9600);
  
  lcd.begin(LCD_WIDTH, LCD_HEIGHT);
  
  lcd.createChar(DEGREES_CHAR, degrees_glyph);
  
  pinMode(ledCal, OUTPUT);
  pinMode(ledBom, OUTPUT);
}


void loop() {
  static byte xChart = LCD_WIDTH;
  
  float tempTa = getVoltage(sensorTa);
  tempTa = (tempTa) * 100;
  delay(250);
  
  lcd.setCursor(0, 0);
  lcd.print("TAcum: ");
  lcd.print(tempTa, 1);
  lcd.print("\001C ");
  delay(250);
    
  float tempTc = getVoltage(sensorTc);
  tempTc = (tempTc) * 100;
  delay(250);
  
  lcd.setCursor(0, 1);
  lcd.print("TCald: ");
  lcd.print(tempTc, 1);
  lcd.print("\001C ");
  
  if (tempTa < 40) {
    digitalWrite(ledCal, HIGH);
    lcd.setCursor(0, 3);
    lcd.print("Caldera: ON ");
  }
    
  if (tempTa > 60) {
    digitalWrite(ledCal, LOW);
    lcd.setCursor(0, 3);
    lcd.print("Caldera: OFF");  
  }
    
  if (tempTc > tempTa && digitalRead(ledCal) == HIGH){
    digitalWrite(ledBom, HIGH);
    lcd.setCursor(0, 4);
    lcd.print("Bomba:   ON ");  
  }
    
  if (tempTc <= 65 && digitalRead(ledCal) == LOW){
    digitalWrite(ledBom, LOW);
    lcd.setCursor(0, 4);
    lcd.print("Bomba:   OFF");  
  }
    
      
}

Muchas gracias.
« Last Edit: September 03, 2012, 09:51:47 am by sergivv » Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 72
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mirate la función switch, que te puede servir.

Luego no se que función quieres para la caldera, pero me despista un poco. Haces funcionar la caldera entre 40 y 65 ºC, y sin saber para que es, me parece un margen muy amplio.
Al ver que cortas la caldera a los 65ºC me hace pensar que quieres agua caliente sanitaria. Si es así el margen de temperatura deberia de ser de 60-65 ºC aproximadamente.

Y luego respecto a la bomba de agua dices que quieres que arranque cuando la temperatura de la caldera sea mayor que la del depósito, pero la apagas si es menor que 65ºC por lo que la bomba se apagará siempre, ya que nunca pasará la temperatura de 65ºC.

La función normal de una caldera es mantenerla entre 70-80ºC y encender la bomba para mantener el agua del depósito entre 60-65ºC. O incluso mantener la bomba en marcha e instalar una válvula de 3 vias que deje paso al calentamiento del depósito.

También te aconsejo que mires de hacer periodos de sobrecalentamiento para eliminación de legionela

Pero repito... todo esto suponiendo que es un depósito para ACS.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Muchas gracias Masteron.

Voy a estudiar la función switch.

La verdad es que el tema de las temperaturas aún las estoy estudiando. Estas son unas que me comento mi padre para ponerlo a funcionar y ver como va.

El funcionamiento que pensamos nosotros es que cuando la temperatura del acumulador baje de 40º se encienda la caldera y caliente un poco el agua. Cuando la caldera ya este caliente y sea mayor que la del acumulador, que se encienda la bomba del agua para que suba el agua. Una vez que el agua en el acumulador llegue a la temperatura deseada (en este caso los 65º) que se apague la caldera (que estará a una temperatura bastante mayor) y la bomba siga funcionando para aprovechar el calor de la caldera y una vez que baje de la temperatura del acumulador se apague.

No se como ves el funcionamiento y si tengo que cambiar algo.

Un saludo.
Logged

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No esta planteado mal. Solamente añadiria un diferencial a la temperatura porque si no la caldera te parara a 60,1 y arrancara a 60. Con un diferencial de 5 grados seria suficiente
Logged

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

Offline Offline
Jr. Member
**
Karma: 1
Posts: 72
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

El planteamiento como dice flico es bueno.

Pero según creo que lo planteas no veo que la caldera pare nunca, solo como dice flico al llegar el depósito a los 60ª. Y que pasa si el agua llega a 100ºC antes que el depósito a 60ºC? Pues que el agua se convierte en vapor. Te aseguro que esto suele pasar y no es nada divertido, aunque al estar a presión suele ser por algo por encima de los 100ºC.

La normativa te dice que el agua de la caldera no debe de pasar de 80ºC y yo para evitarte condensaciones te aconsejo que la mantengas entre 60 y 80 ºC mientras estes calentando el depósito. Ademas cuanto mas caliente tengas el agua de la caldera, antes calientas el depósito.

Otro consejo es que te asegures de que la sonda de temperatura de la caldera está bien ubicada y es rapida. Ten en cuenta que vas a estar calentando el hogar de la caldera sin circulación de agua, y puede ser que se te caliente demasiado el hogar, y al encender la bomba recibas una cantidad de agua fria que no le va a venir nada bien a la caldera.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenos días a todos.

Perdón por la tardanza pero distintos motivos, últimamente no tengo tiempo para dedicarle al cacharreo. Ahora ya me puedo poner con el proyecto de controlar la caldera.

Voy a sacar las cosas del cajón y a revisar los post para ver por donde seguir.

Un saludo y gracias.
Logged

Pages: [1]   Go Up
Jump to: