Go Down

Topic: Ayuda con código. Controlador de caldera. (Read 1 time) previous topic - next topic

sergivv

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.

JRodrigo

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

Un saludo!

sergivv

#2
Aug 31, 2012, 07:05 pm Last Edit: Sep 03, 2012, 04:51 pm by sergivv Reason: 1
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: [Select]


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

masteron

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.

sergivv

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.

flico

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
Trabajando en ...

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

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

masteron

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.

sergivv

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.

Go Up