Trabajo Presentado para La Obtenci On Del T Itulo de
Trabajo Presentado para La Obtenci On Del T Itulo de
Trabajo Presentado para La Obtenci On Del T Itulo de
Presentado por
Dirigido por
En el presente trabajo se desarrolla un algoritmo que simula tanto el aumento de temperatura como
la generación de vapor en una caldera de vapor saturado.
El programa resultante se ha cargado en una placa Arduino Mega 2560 y los datos generados en la
simulación se visualizan a través de una pantalla LCD y se escriban en el puerto serie de la placa.
La fundamentación teórica de este proyecto se basa en la termodinámica que describe el comporta-
miento de una caldera de vapor y sus subsistemas. Los datos necesarios para calcular las distintas
ecuaciones que intervienen se obtienen a través de tablas de búsqueda que contienen las propiedades
termodinámicas del agua en función de la presión y temperatura.
Tras varias simulaciones, las cuales se han realizado con el quemador a distintas potencias, se observa
que la variación producida en el volumen de agua de la caldera como la presión generada se aproxima
a los valores teóricos esperado. Esto lleva a considerar que la ejecución de este código, cuya duración
depende del estado del quemador, es capaz de obtener valores próximos a los que se pueden recoger
en una caldera real con las mismas dimensiones y en las mismas condiciones.
iii
Abstract
In the present work, an algorithm has been developed to simulates the temperature rise and the
generation of steam in a saturated steam boiler.
The resulting program has been loaded into an Arduino Mega 2560 board, the data generated in
the simulation are displayed on an LCD screen and they are written to the serial port of the board.
The theoretical basis of this project are grounded on the thermodynamics linked to the behaviour
of a steam boiler and its subsystems. The required data to calculate the different equations involved
are obtained by means of look-up tables which contain the thermodynamic properties of water in
function of pressure and temperature.
After several simulations, which have been performed with the burner at different power levels, it
has been observed that the variation produced in the volume of water of the boiler and the pressure
generated, are close to the expected theoretical values. This leads to consider that the execution of
this code, whose duration depends on the power of the burner, is able to obtain values close to those
that can be collected in a real boiler with the same dimensions and under the same conditions.
v
Índice general
Lista de figuras IX
Lista de tablas XI
1. Introducción 1
2. Fundamentación teórica 3
2.1. Principios termodinámicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.1. Vaporización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.2. Equilibrio evaporativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.3. Ebullición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2. Procesos termodinámicos en calderas de vapor . . . . . . . . . . . . . . . . . . . . . 4
2.2.1. Vapor saturado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2.2. Gas ideal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2.3. Gas real . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2.4. Vapor flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
vii
viii ÍNDICE GENERAL
4. Algoritmo de cálculo 15
4.1. Hardware y lenguaje empleado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.2. Diagrama de conexiones del simulador . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.3. Desarrollo del Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.3.1. Diagrama de flujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.3.2. Código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5. Resultados 25
5.1. Errores en la programación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.2. Datos obtenidos en la simulación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.2.1. Posición del quemador al 100 % . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.2.2. Posición del quemador al 76 % . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.2.3. Posición del quemador al 49.8 % . . . . . . . . . . . . . . . . . . . . . . . . . 31
6. Discusión y conclusión 35
6.1. Comprobación del correcto funcionamiento del simulador . . . . . . . . . . . . . . . 35
6.2. Conclusión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Bibliografı́a 36
Anexos 41
A. Tablas de búsqueda 41
B. Código fuente 43
Índice de figuras
ix
Índice de tablas
xi
Simbologı́a
P Presión.
T Temperatura.
HL Entalpı́a de lı́quido saturado.
HG Entalpı́a de vapor saturado.
Hvap Entalpı́a de evaporización.
Q Energı́a aportado miente el calor.
m Masa del fluido.
ce Calor especifico del fluido.
∆T Salto térmico existente.
V Volumen.
n Número de moles.
R Número de Avogadro.
Z Factor de comprensibilidad.
EN Energı́a neta.
Pc Potencia calorı́fica.
Pc Potencia pérdidas.
EC Energı́a requerida para el calentamiento a la temperatura de saturación.
ma La masa del fluido.
ce Calor especı́fico del agua.
Ts Temperatura de saturación.
mcal La masa de agua en la caldera.
Cecal El calor especı́fico del agua de la caldera.
mal La masa de agua de alimentación.
Ceal El calor especı́fico del agua de alimentación.
Tal La temperatura del agua de alimentación.
Tf La temperatura de la caldera tras el aporte de energı́a.
Ti La temperatura intermedia.
vf Vapor flash generado.
Hn Entalpı́a especifica del lı́quido del ciclo actual.
Hb Entalpı́a especifica del lı́quido del ciclo anterior.
L Calor latente.
Pa Presión en la caldera en el momento de la operación.
Pv Presión generada por la generación de vapor.
a Constante experimental relacionada con las atracciones moleculares.
b Constante relacionada con el volumen molecular.
Va Volumen de la caldera antes de la generación de vapor.
Vv Variación del volumen causado por la generación de vapor.
mv Masa de la caldera antes de la generación de vapor.
ρ Densidad del agua en estado lı́quido.
PWN Modulación de onda por pulsos.
ICSP Programación serial en circuito.
USB Bus de Serie Universal
SRAM Memoria estática de acceso aleatorio.
EEPROM Memoria de sólo lectura programable y borrable eléctricamente.
IDE Entorno de Desarrollo Interactivo.
I2C Circuito integrado.
xiii
1 Introducción
El profesor Carlos Efrén Mora ha desarrollado un software que contiene las distintas ecuaciones
con las que se puede simular tanto los distintos componentes que componen una caldera de vapor
saturado como las variaciones que se producen durante la simulación.
De los componentes simulados, se destacan:
Aunque dicho código tiene en consideración los distintos componentes necesarios y las variaciones de
comportamiento en una caldera de vapor saturado, no se han establecido las ecuaciones necesarias
para realizar la simulación del aumento de temperatura ni la generación de vapor.
Este trabajo tiene como objetivo el desarrollo del algoritmo necesario para la simulación del aumento
de temperatura y la generación de vapor para una caldera de vapor saturado, para posteriormente
integrarlo al código realizado por el profesor. En esta ocasión, debido a la escasez de tiempo, se ha
considerado que no hay pérdidas de energı́a, por lo que el algoritmo desarrollará una simulación de
una caldera de vapor saturado ideal.
Para el cálculo de la temperatura se ha tenido en consideración la variación de la misma que se
produce tanto por la introducción de agua de alimentación como por el aporte energético. De este
modo, el cálculo se realiza en dos etapas: en la primera etapa se calcula el nuevo valor de temperatura
que queda en la caldera por la introducción de agua de alimentación; en la segunda se computa la
temperatura por el aporte energético.
En el cálculo de la generación de vapor saturado se ha tenido en cuenta el vapor producido por
el aporte energético y por el vapor flash resultante de la apertura de la lı́nea principal. Para la
generación de vapor por aporte energético, se utiliza la energı́a sobrante tras el cálculo del aumento
de temperatura. En cuanto a la generación de vapor flash, debido al desconocimiento de la velocidad
de evaporación del agua por la variación de la presión, se ha supuesto que la variación de presión
por la apertura de la lı́nea principal es tan pequeña en cada ciclo, que la evaporación se produce
instantáneamente. Con este supuesto, el cálculo se realiza dividiendo la diferencia entre la entalpı́a
del agua del ciclo anterior y la entalpı́a del ciclo actual más el aporte energético, por el calor latente
del ciclo actual. Por último, multiplicando ese resultado por la masa de agua se obtiene el vapor
total generado.
La caldera que se ha utilizado como ejemplo tiene las siguientes caracterı́sticas:
1
2 Introducción
En muchos sectores el agua se utiliza como fluido de trabajo. La razón por la que se utiliza es:
1. Disponibilidad → Las tres-cuartas partes de nuestro planeta está cubierto por agua, por lo
que es una fuente inagotable.
2. Economı́a de producción → Se puede obtener el agua a partir de los distintos sistemas de
desalación, como por, el de evaporación, los cuales trabajan a partir de calor residual, que
suele ser un excedente abundante tanto en buques como en centrales térmicas.
3. Propiedades fı́sico-quı́micas → Como el calor especı́fico, sus valores altos hacen que el agua
sea un excelente acumulador de energı́a[23].
2.1.1 Vaporización
Las partı́culas de un lı́quido, al estar rodeadas por las otras partı́culas, son atraı́das en todas las
direcciones debido a las fuerzas intermoleculares. A pesar de estas fuerzas, las partı́culas conservan
bastante movilidad, pudiéndose desplazar en cualquier dirección y a velocidades distintas. En el caso
de que alguna de las partı́culas de la superficie, donde las partı́culas no están siendo atraı́das en todas
las direcciones, consiga una velocidad suficiente para superar la fuerza de atracción, podrá saltar
al espacio por encima del lı́quido, es decir, esa partı́cula se habrá vaporizado. Cabe destacar que
aunque algunas de las partı́culas en el interior del lı́quido tengan suficiente energı́a para cambiar
de estado, este suceso es imposible ya que cuando se crea la burbuja de vapor, esta se romperá
rápidamente debido a que la presión en el interior de la burbuja es inferior a la ejercida por el
exterior. Debido a que la energı́a cinética de una molécula es proporcional a su temperatura, la
evaporación se produce más rápido cuanta más alta sea la temperatura. Cuando se vaporizan algunas
partı́culas, las restantes poseen una energı́a cinética inferior, lo que provoca que la temperatura del
agua disminuya [9, 7, 11, 8].
3
4 Fundamentación teórica
Cuando las partı́culas que se vaporizan sean las mismas que las que se condensan, se considera que
el sistema se encuentra en equilibrio. En este estado, se dice que el vapor está “saturado” y ya no
se dará ningún cambio adicional en la presión o en la densidad del mismo.
Para un sistema que consiste en vapor y lı́quido de una sustancia pura, este estado de equilibrio
está directamente relacionado con la presión de vapor de la sustancia, como viene expresado en la
relación de Clausius-Clapeyron:
P2 ∆Hvap 1 1
ln =− ( − ) (2.1)
P1 R T2 T1
Donde P1 y P2 son las presiones de vapor a temperaturas T1 y T2 respectivamente, ∆Hvap es la
entalpı́a de la vaporización, y R es la constante universal de los gases [9, 7, 11, 8].
2.1.3 Ebullición
Cuando a una sustancia, se le aplica energı́a mediante calor, irá aumentando su temperatura. Cuando
el calor aplicado sea igual al calor latente, la presión de vapor dentro del lı́quido será igual a la presión
exterior, posibilitando la formación de partı́culas de vapor en toda la masa de la sustancia y no solo
en la superficie, provocando que hierva y cambie de estado [9, 7, 11, 8].
Un gas ideal es un gas perfecto, compuesto por partı́culas con movimientos aleatorios que no in-
teractúan entre sı́. En condiciones normales de presión y temperatura, la mayorı́a de los gases se
comportan de forma cualitativa como un gas ideal. Muchos gases tales como el aire, nitrógeno,
oxı́geno, hidrógeno, los gases nobles y algunos gases pesados como el dióxido de carbono pueden ser
tratados como gases ideales dentro de una tolerancia razonable [9, 30, 32, 31, 22].
Las leyes del gas perfecto son:
pV = constante (2.2)
El escribir la ecuación para dos estados arbitrarios obtendremos la relación de los parámetros
de un gas ideal:
p1 V1 = p2 V2 (2.3)
V
= constante (2.4)
T
El escribir la ecuación para dos estados arbitrarios se obtendrá la relación de los parámetros
de un gas ideal:
V T2
= (2.5)
T T1
V = constante
n = constante (2.6)
De la unión matemática de todas estas leyes se obtiene la ecuación general de los gases ideales:
P V = nRT (2.7)
Donde,
P → Presión.
V → Volumen.
n → Número de moles.
R → Número de Avogadro.
T → Temperatura.
Los gases reales se desvı́an del comportamiento ideal porque las moléculas reales tienen un volumen
no siempre despreciable y porque se atraen entre sı́. Es imposible no tener en consideración las
atracciones moleculares cuando estas se mueven lentamente, es decir, a bajas temperaturas.
Cuando los gases se comprimen, los volúmenes moleculares aumentan su importancia. Por ello los
gases se aproximan más al comportamiento ideal a temperaturas altas y presiones bajas.
Por otro lado, a ciertas temperaturas bajas y alta presión, los gases reales sufren un cambio de
estado. Este cambio no se describe en el modelo de gas ideal [9, 30, 32, 31, 10, 6].
6 Fundamentación teórica
En 1873, Van der Waals introdujo correcciones en la ecuación de gas real para incluir los efectos del
volumen propio de las moléculas y de la menor fuerza de choque.
Para n moles, la ecuación de Van der Waals es:
an2
[P + ](V − nb) = nRT (2.8)
V2
Donde a es una constante experimental relacionada con las atracciones moleculares y b es una
constante relacionada con el volumen molecular [9, 10, 12, 18].
Gas Hg He H2 H2 O O2 N2 CO2
a (l2 atmmol− 2) 8,09 0,0341 0,2444 5,464 1,360 1,390 3,592
b (cm3 mol− 1) 17,0 23,70 26,61 30,49 31,83 39,13 42,67
El vapor flash se puede definir como aquel que se genera a partir del lı́quido condensado por la
reducción de la presión. Este vapor solo puede producirse en un recinto cerrado.
Cuando se aporta energı́a mediante calor a un recipiente cerrado produce un aumento progresivo
de la temperatura del agua. Una vez que la temperatura llega al punto de ebullición, una parte
del agua se evaporará, ocupando el espacio libre del recipiente. A medida que trascurre el tiempo,
el vapor ejercerá una nueva presión sobre el lı́quido, provocando que la temperatura de ebullición
se eleve. Si ese recipiente se abriera, la presión interna serı́a superior a la externa, por lo que el
vapor acumulado saldrı́a al exterior, disminuyendo la presión que ejercı́a sobre el agua. El lı́quido,
el cual ha ido aumentando progresivamente su temperatura de ebullición a causa de la presión
existente, ve disminuida dicha presión, debido a esto, su nueva temperatura de ebullición es inferior
a su temperatura actual, provocando que el agua libere de manera inmediata ese exceso de energı́a,
dando como resultado la evaporación de una parte del agua [5, 4].
3 Cálculo de las variabes termodinámi-
cas simuladas
El agua va variando sus distintas propiedades a medida que va aumentando la presión, como es su
temperatura de saturación, su densidad o la energı́a necesaria para el cambio de estado. Estos datos
se encuentran recogidas en distintas tablas de vapor.
El programa, partiendo de la presión que posee la caldera en ese momento, recoge los valores de las
distintas variables para posteriormente utilizarlas. Cuando la presión que presenta la caldera es un
valor que no está establecido en la tabla, el programa debe realizar una interpolación. Cabe destacar
que el programa ejecutará una interpolación por cada variable.
La interpolación que utiliza el programa es una interpolación lineal, que a partir de dos valores
dados, en este caso, los valores superior e inferior más cercanos al valor de la presión.
y − y0 x − x0
= (3.1)
y1 − Y0 x1 − x0
En la ecuación anterior, la única variable desconocida es el valor y. Si se toma como ejemplo que se
quiere calcular la temperatura de saturación para la presión actual de la caldera, siendo 1,35 bar,
el programa buscará en la tabla los valores inferior y superior más próximos, tanto de la presión
como de la temperatura de saturación. En este caso, la presión inferior y superior son 1,3 y 1,4 bar
respectivamente, mientras que la de la temperatura de saturación son 107,109 y 109,292◦ C. Con
estos valores y utilizando la ecuación 3.1, se tiene:
y − 1, 3 1, 35 − 1, 3
= (3.2)
109, 292 − 107, 109 1, 4 − 1, 3
Para poder generar vapor o simplemente calentar el agua, se debe aplicar una determinada energı́a.
Esta energı́a se obtiene a partir del calor suministrado por el quemador.
Para poder conocer la energı́a aportada por el quemador, se parte de la potencia calorı́fica del
quemador, donde:
Energı́a calorifica generada
Pc = (3.4)
unidad de tiempo
Despejando, se obtiene:
Energı́a calorifica generada = Pc tiempo (3.5)
7
8 Cálculo de las variabes termodinámicas simuladas
En la simulación, el tiempo viene determinado por la velocidad que tarda el programa en realizar
un bucle, denominándola dt.
Además de calcular la energı́a suministrada por el quemador, se tiene que considerar que el sistema
puede tener pérdidas de energı́a. Por tanto, le ecuación de la energı́a total o energı́a neta disponible
es:
EN = (Pc − Pp ) dt (3.6)
Donde Pp es la cantidad de energı́a que se pierde en nuestro sistema.
Durante la simulación, cabe la posibilidad de que la energı́a neta disponible sea superior a la energı́a
necesaria para generar vapor, por lo que el sistema serı́a capaz tanto de calentar como de evaporar.
Para poder conocer la energı́a necesaria para calentar, se aplica la siguiente ecuación:
Q = m ∗ ce ∗ ∆T (3.7)
Donde,
ce → Calor especı́fico del agua, cálculo a partir de la presión que se encuentre la caldera en el
momento del cálculo (kJ/kgK).
Para calcular la energı́a que dispone el sistema para generar vapor, una vez que se ha aumentado
la temperatura de la caldera hasta la temperatura de saturación, simplemente hay que resolver la
siguiente ecuación:
ES = EN − EC (3.9)
Trabajo de fin de grado 9
Donde,
En este incremento no se tiene en cuenta el aporte energético del quemador, ya que éste se ha
utilizado para la generación de vapor flash. Por otro lado, la variación de temperatura, causada por
la generación de vapor, es negativa. Debido a que el vapor se ha generado con la energı́a acumulada
en el agua, se tiene que usar esa misma energı́a para calcular la nueva temperatura de la caldera, es
decir, Q = (Hn − Hb ).
El cálculo de esta nueva temperatura se obtiene con la siguiente ecuación:
Despejando,
Hn − Hb
Tf = Ti + (3.17)
m ce
El resultado obtenido es la variación de temperatura por cada kg de vapor generado. Para obtener
la temperatura final debe multiplicarse por la masa de vapor generada:
Hn − Hb
Tf = Ti + ( mv ) (3.18)
ma ce
Cabe destacar que el valor de la diferencia de entalpı́as será un valor negativo, ya que dicha energı́a
acumulada se ha utilizado anteriormente para generar vapor, lo que implica un descenso de la
temperatura.
Cuando se esta aportando energı́a al sistema, el cálculo se estima utilizando el valor resultante de
la ecuación 3.9 y el calor latente. La ecuación resultante es la siguiente:
ES
∆mv = (3.19)
L
Donde,
Destacar que el valor del calor latente depende de la presión a la que se encuentre la caldera.
Al desconocer la velocidad de evaporación del agua, consideramos que la caı́da de presión que se
produce en cada ciclo de nuestra simulación, es tan pequeña, que la producción de vapor flash es
inmediata. De esta manera, la ecuación para el cálculo de vapor flash serı́a:
Hb − Hn
∆vf = (3.20)
L
Donde,
Aunque se produzca el vapor flash por cambio de presión, el quemador puede estar encendido y
seguir aportando energı́a, por lo que se debe incluir el aporte de energı́a del quemador a la ecuación
anterior.
Como la energı́a que aporta el quemador es una energı́a total, se debe conocer dicha energı́a con
respecto a la cantidad de agua existente en la caldera.
Con lo anterior, la ecuación quedarı́a de la siguiente manera:
EN
Hb − Hn + ma c e
∆vf = (3.21)
L
Donde,
Actualmente se tiene el vapor flash generado con respecto al agua disponible en la caldera. Para
obtener la cantidad exacta de vapor generado, debe multiplicarse el resultado anterior por la masa
de agua de la caldera, quedando como ecuación final:
EN
Hb − Hn + ma c e
∆vf = ( ) ma (3.22)
L
A su vez, esa masa evaporada provoca una variación de la presión, la cual, se calcula con la siguiente
ecuación:
∆P = Pa + Pv (3.23)
Donde,
Cuando se genera vapor, se produce una variación en el volumen de agua que hay en la caldera.
Esta variación se calcula de la siguiente manera:
V = Va + ∆Vv (3.27)
Donde,
∆Vv = mv ρ (3.29)
Donde,
Destacar que la densidad utilizada es la densidad del agua en estado lı́quido, correspondiente a la
presión a la que se encuentra la caldera, ya que la masa de vapor generada es la misma cantidad de
masa de agua que se ha perdido en el volumen de agua de la caldera.
4 Algoritmo de cálculo
Microprocesador ATmega2560.
Tensión de alimentación (recomendado) 7-12V.
Integra regulación y estabilización de +5 Vcc.
54 lı́neas de Entradas/Salidas Digitales (14 de ellas se pueden utilizar como salidas PWM).
16 entradas analógicas.
Máxima corriente continua para las entradas: 40 mA.
Salida de alimentación a 3.3V con 50 mA.
Memoria de programa de 256Kb (el bootloader ocupa 8Kb).
Memoria SRAM de 8Kb para datos y variables del programa.
Memoria EEPROM para datos y variables no volátiles.
Velocidad del reloj de trabajo de 16MHz.
Reducidas dimensiones de 100 x 50 mm.
15
16 Algoritmo de cálculo
importantes que ocurren durante la simulación. Estos se encuentran conectados a las conexiones
digitales como salidas.
LED 1, conectado a la salida digital número 22 → Alarma por alto nivel de agua en la caldera.
Dichos LEDs trabajan con un voltaje de 2,1V y a una intensidad de 20mA, por lo que al conectarlo
a la placa se le aplicarı́a un voltaje mayor del que necesita, provocando el deterioro de los LEDS
y de los pines del microcontrolador. Para evitarlo, se coloca una resistencia, entre el pin y el LED,
cuyo valor es calculado a partir de la ley de Ohm.
Además, mediante una conexión digital utilizada como entrada (D35), se ha colocado el reseteo
del simulador, con el fin de eliminar el bloqueo de la caldera cuando se han solucionado los errores
pertinentes. Asimismo, al mantenerlo pulsado durante un periodo de tiempo, se produce la variación
de las variables iniciales del simulador, pudiendo simular en dos estados diferentes.
Por otro lado, se han utilizado cuatro potenciómetros, tres de ellos con el fin de modificar las variables
de simulación y el último para modificar la luminosidad de la pantalla LCD. Estos se encuentran
conectados a las conexiones analógicas como entradas.
Como los potenciómetros son resistencias variables y, a fin de evitar el deterioro de los pines de la
placa, se ha colocado una resistencia conectada a la pata de salida.
En la siguiente imagen se puede apreciar los pasos que realiza el programa para simular la generación
de vapor.
Trabajo de fin de grado 19
4.3.2 Código
void calculateThermodynamicVariables(){
H_water_b = h_water;
//Calcula la densidad del agua lı́quida con respecto actual actual de la caldera
en este ciclo
density_liquid = interpolate(SteamPressure+1,dl[i],dl[i+1],Pa[i],Pa[i+1]);
//Calcula el calor latente del agua lı́quida con respecto a la presión actual de
la caldera en este ciclo
L_ws = interpolate(SteamPressure+1,L[i],L[i+1],Pa[i],Pa[i+1]);
//Calcula el calor especifico del agua lı́quida con respecto a la presión actual
de la caldera en este ciclo
c_water = interpolate(SteamPressure+1,Ce[i],Ce[i+1],Pa[i],Pa[i+1]);
}
Se procede a guardar el dato de la entalpı́a del agua del ciclo anterior con otro nombre, ya que
a continuación se sobrescribirá. Posteriormente, se calculan las variables termodinámicas mediante
la interpolación. Para este proceso se necesita saber la posición del valor de la presión en la tabla
de búsqueda, para ello se realiza un comando de búsqueda que localiza los valores de las presiones
superiores e inferiores de la presión dada en la caldera en este ciclo. Para finalizar, se efectúa tanto
el cálculo de la masa de agua en la caldera como de alimentación, los cuales serán necesarios más
adelante.
Se realiza el cálculo de la energı́a neta utilizando la ecuación 3.6.
/*Serial.println ("tiempo");
Serial.println (t_delta);
Serial.println ( "potencia quemador");
Serial.println (PowerTransferred);
Serial.println ("losepower");
Serial.println (LosePower);
Serial.println("Energia neta (kJ)");
Serial.println(NetEnergy);*/
Se realiza el cálculo de la energı́a neta utilizando la ecuación 3.6. Luego se genera una condición
referente a la temperatura actual de la caldera. Si esta no supera la temperatura de saturación del
ciclo actual, se ejecutarán los cálculos necesarios para el cálculo de temperatura y la generación de
vapor; en caso contrario, se procederá a realizar las ecuaciones pertinentes para simular la generación
de vapor flash.
HeatEnergy = 0;
} else HeatEnergy = ((float(T_saturate)+273.15)-(float (WaterTemperature)+273.15))
*float (c_water)*float (WaterMass);
if (NetEnergy>HeatEnergy)
{
//Generación de vapor por aporte energético
} else {
//Cálculo de temperatura
}
22 Algoritmo de cálculo
Aunque se ejecuta utilizando la ecuación 3.8, se debe realizar una condición a fin de evitar errores
debido a los decimales resultantes de los cálculos anteriores. Seguidamente se encuentra otra condi-
ción, donde dependiendo de la energı́a que se disponga, se realizará el cálculo de temperatura o de
la generación de vapor.
//IntermediateTemperature = (WaterTemperature+273.15)+(NetEnergy/(c_water
*WaterMass));
} else IntermediateTemperature = FeedWaterTemperature;
/*Serial.println("Temperatura intermedia");
Serial.println(IntermediateTemperature);*/
Como el programa completo se compone de dos etapas, la primera etapa se sitúa donde la caldera se
encuentra en condiciones iniciales, es decir, sin agua en el interior de la misma; y la segunda, cuando
la caldera está en condiciones necesarias para funcionar. En este punto se debe haber introducido
un comando adicional, dependiendo de si lo cumple o no esa variable tiene distinto valor, con el fin
de que la ecuación 3.15 funcione correctamente.
if (NetEnergy>HeatEnergy)
{
WaterTemperature=T_saturate;
//Cálculo de moles
n = (SurplusEnergy/L_ws*1000)/18;
/*Serial.println("n moles");
Serial.println(n);*/
Trabajo de fin de grado 23
/*Serial.println("Presion de la caldera");
Serial.println(SteamPressure);*/
if(SurplusEnergy) {
WaterVolume -= SurplusEnergy/L_ws/density_liquid;
} else WaterVolume = WaterVolume;
/*Serial.println("Volumen de la caldera");
Serial.println(WaterVolume);*/
}
Como la energı́a que se aporta es superior a la energı́a requerida para llegar a la temperatura de
saturación, la temperatura automáticamente se igualará con la temperatura de saturación. Acto
seguido se calcula la energı́a restante disponible 3.9, con la que se realizará la generación de vapor
3.19, con el correspondiente aumento de presión 3.24 y la variación en el volumen 3.29.
5 Resultados
1. Errores básicos de programación → Falta de ”;.al final de una función, falta de cierra de un
paréntesis, etc.
2. Error en la introducción de datos → Se introdujo los mismo valores para dos variables distintas.
3. Error en los cálculos debido a la unidades → En las ecuaciones se mezclaron valores con
distintas unidades, produciendo resultados incorrectos.
4. Error en la utilización de variables → Para el cálculo del vapor flash se estaba usando el valor
del calor sensible del vapor en vez del agua lı́quida.
5. Error en la estructura → Se coloco los distintos cálculos de interpolación dentro del bucle de
búsqueda de la presión existente. Debido a esto, la interpolación daba lugar a valores infinitos.
6. Error en las variables → No utilizaba las variables utilizadas por el tutor, por lo que los cálculos
no afectaban al resto del sistema.
7. Error por falta de variable → No se introdujo todas las variables necesarias en distintas
ecuaciones, como por ejemplo, la introducción de la variable para el calor especı́fico del agua
de calentamiento, por lo que el cálculo de temperatura no se realizaba con éxito.
8. Error con el tiempo de simulación → El valor del tiempo de simulación se utiliza en varias
ecuaciones a lo largo del código. Como en dichas ecuaciones se utilizan valores decimales, al
usar el tiempo como valor entero, el valor resultante era erróneo. Para solucionarlo, el tiempo
se toma como valor flotante en dichas ecuaciones.
9. Error por redondeo de decimales → Cuando se realiza el cálculo de la energı́a requerida para
llegar a la temperatura de saturación, la diferencia existente entre la temperatura de saturación
y la temperatura de la caldera nunca llegaba a cero, debido a decimales. Para evitarlo, se coloco
un diferencia de 0.05.
10. Error por calor → Debido al tiempo que tardaba la simulación, se producı́a un recalentamiento
en la placa, afectando a los cálculos a realizar.
25
26 Resultados
Se han realizado distintas simulaciones variando la potencia del quemador con el fin de observar el
comportamiento de la caldera. Destacar que la simulación de vapor flash no está realizado debido a
que no existe una lı́nea de consumo establecida.
El tiempo total de la simulación es 04:33:27.925 horas, el cual lo podemos en tres momentos de gran
interés:
1. Tiempo transcurrido desde el inicio del barrido hasta alcanzar la primera temperatura de
saturación → 01:49:16.031 horas.
3. Tiempo transcurrido desde la presión de trabajo hasta alcanzar la presión máxima. → 00:35:37.401
horas.
1. Tiempo transcurrido desde el inicio del barrido hasta alcanzar la primera temperatura de
saturación → 02:23:03.391 horas.
2. Tiempo transcurrido desde la primera temperatura de saturación hasta alcanzar la presión de
trabajo → 02:46:25.408 horas.
3. Tiempo transcurrido desde la presión de trabajo hasta alcanzar la presión máxima. → 00:44:24.701
horas.
1. Tiempo transcurrido desde el inicio del barrido hasta alcanzar la primera temperatura de
saturación → 03:36:16.718 horas.
2. Tiempo transcurrido desde la primera temperatura de saturación hasta alcanzar la presión de
trabajo → 04:02:54.708 horas.
3. Tiempo transcurrido desde la presión de trabajo hasta alcanzar la presión máxima. → 01:01:02.960
horas.
Para comprobar que los datos que se obtienen durante la simulación son correctos, se realiza el
despeje de los moles en la ecuación 2.7. El resultado que se consigue es un valor aproximado al valor
real.
Un vez finalizado la simulación, se comprueban los datos comparándolos con el valor obtenido
mediante la ecuación 2.8. El valor de esta ecuación es el valor real que deberı́a generar la simulación.
De dicha estimación, se obtiene:
6.2 Conclusión
El objetivo del trabajo era la realización de un algoritmo que simulará el aumento de temperatura
y la generación de vapor, tanto por el aporte energético como por caı́da de presión. Por motivos de
plazos, no se pudo complementar el código con las ecuaciones referentes a la lı́nea principal de la
caldera. Como consecuencia, no ha sido posible efectuar la simulación de la generación de vapor por
caı́da de presión.
Este tipo de trabajo, sin necesidad de disponer de un elevado presupuesto, permite adquirir cono-
cimientos básicos de programación, ası́ como mejorar tus habilidades referentes a la planificación y
organización. Además, permite profundizar en los conocimientos que se adquieren durante la etapa
académica.
Por otro, la realización de simuladores de bajo coste puede ser beneficiosos para distintas empresas.
Al implementarlas, podrı́an efectuar simulaciones previas relacionadas con el puesto de trabajo que
van a realizar, mejorando la adaptación de los nuevos empleados y ahorrando a la empresa un coste
económico debido a un error humano provocado por el desconocimiento inicial del funcionamiento
y comportamiento del sistema.
A modo de conclusión, este algoritmo tiene la posibilidad de seguir mejorando:
35
36 Discusión y conclusión
Variación del volumen → En esta simulación se realiza la variación del volumen debido a la
generación de vapor, pero no tiene en cuenta la variación del volumen debido a la densidad
del agua, la cual varı́a con la temperatura.
Simulación de la lı́nea de consumo → Con la inclusión de la lı́nea de consumo se podrı́a simular
su apertura con la correspondiente caı́da de presión y por tanto, la generación de vapor flash.
37
38 BIBLIOGRAFÍA
[18] Jorge alfaro, 9 gases reales. [Página web], [consultado 5 de Abril de 2017]. URL:
http://www.fis.puc.cl/˜jalfaro/fis1523/clases/.
[19] Juan J Corace, Unidad II: Equilibrio termodinámico. [Página web], [consultado 10 de Abril
de 2017]. URL: http://ing.unne.edu.ar/pub/fisica2/2012/t2.pdf.
[20] Luis del Valle, 80. Processing, el lenguaje para gráficos. [Página web], [consultado 23 de Agos-
to de 2017]. URL: https://programarfacil.com/podcast/80-processing-lenguaje-para-graficos/.
[21] MCI electronics, ¿Que es Arduino? [Página web], [consultado 16 de Febrero de 2017]. URL:
http://arduino.cl/que-es-arduino/.
[22] Miriam Janet Ruiz, Gases ideales. [Página web], 2012 [consultado 6 de Abril de 2017]. URL:
http://gasesidealesrmb.blogspot.com.es/.
[23] Pedro Rivero Rodrı́guez, Conceptos previos. Dpto. de Ingenierı́a Marı́tima. Universidad de
La Laguna, 2015.
[24] Prof. Carlos Gutiérrez, tablas y diagramas. [Página web], [consultado 25 de Marzo de
2017]. URL: http://webdelprofesor.ula.ve/ingenieria/gutierrezc/CURSOS/INTRODUCCION %20ING %20QCA/.
[29] s.n., Steam and condensate. Properties of saturated Steam - Pressure in bar. [Página web],
[consultado 25 de Marzo de 2017]. URL: http://www.engineeringtoolbox.com.
[30] Steven C. Stultz and John B. Kitto, STEAM its generation and use. 40 ed., Barberton,
Ohio, U.S.A.: The Babcock & Wilcox Company, 1992, ISBN 0-9634570-0-4.
41
42 Tablas de búsqueda
void calculateThermodynamicVariables(){
H_water_b = h_water;
//Calcula la densidad del agua lı́quida con respecto actual actual de la caldera
en este ciclo
density_liquid = interpolate(SteamPressure+1,dl[i],dl[i+1],Pa[i],Pa[i+1]);
//Calcula el calor latente del agua lı́quida con respecto a la presión actual
de la caldera en este ciclo
L_ws = interpolate(SteamPressure+1,L[i],L[i+1],Pa[i],Pa[i+1]);
43
44 Código fuente
void Steamgeneration(){
/*Serial.println ("tiempo");
Serial.println (t_delta);
Serial.println ( "potencia quemador");
Serial.println (PowerTransferred);
Serial.println ("losepower");
Serial.println (LosePower);
Serial.println("Energia neta (kJ)");
Serial.println(NetEnergy);*/
HeatEnergy = 0;
} else HeatEnergy = ((float(T_saturate)+273.15)-(float (WaterTemperature)+273.15))
*float (c_water)*float (WaterMass);
if (NetEnergy>HeatEnergy) {
WaterTemperature=T_saturate;
//Cálculo de moles
n = (SurplusEnergy/L_ws*1000)/18;
/*Serial.println("n moles");
Serial.println(n);*/
/*Serial.println("Presion de la caldera");
Serial.println(SteamPressure);*/
/*Serial.println("Volumen de la caldera");
Serial.println(WaterVolume);*/
} else {
//IntermediateTemperature = (WaterTemperature+273.15)+(NetEnergy/(c_water
*WaterMass));
} else IntermediateTemperature = FeedWaterTemperature;
/*Serial.println("Temperatura intermedia");
Serial.println(IntermediateTemperature);*/
//Cálculo de Temperatura
if (WaterMass) {
//IntermediateTemperature = (WaterTemperature+273.15)+(NetEnergy/(c_water*WaterMass));
} else IntermediateTemperature = FeedWaterTemperature;
/*Serial.println("Temperatura intermedia");
Serial.println(IntermediateTemperature);*/
//Cálculo de moles
n = (SteamMass*1000)/18;
/*Serial.println("n moles");
Serial.println(n);*/
//Volumen de vapor
SteamVolume = v[32] - WaterVolume;
/*Serial.println("Presion de la caldera");
Serial.println(SteamPressure);*/
/*Serial.println("Volumen de la caldera");
Serial.println(WaterVolume);*/
}
Serial.print ("\t");
Serial.print (NetEnergy);
Serial.print ("\t");
Serial.print (SteamPressure);
Serial.print ("\t");
Serial.print (WaterTemperature);
Serial.print ("\t");
Serial.print (WaterVolume);
Serial.print ("\t");
Serial.print (WaterMass);
Serial.print ("\t");
Serial.print (SteamVolume);
Serial.print ("\t");
Serial.print (SteamMass);
Serial.print ("\t");
Serial.print (T_saturate);
Serial.print ("\t");
Serial.print (L_ws);
Serial.print ("\t");
Serial.print (HeatEnergy);
Serial.print ("\t");
Serial.println (SurplusEnergy);
}