Upload
suguardaropa
View
14
Download
2
Embed Size (px)
DESCRIPTION
Control de Temperatura de Un Horno Electrico
Citation preview
24/09/2012
Reconocimiento y Control de Temperatura de un Horno Elctrico (Reporte)
Rolando Rodrguez Silva
Resumen: En este trabajo se muestra un sistema de reconocimiento de seales (temperatura de un
horno) por medio de un circuito neuronal, que a su vez tambin controla la temperatura,
comparando la entrada contra la salida (Control ON/OFF).
Introduccin:
Como podramos mantener, la temperatura adecuada en un Horno para un para un tratamiento de
un acero al carbono, o como podramos hacer un control de un sistema de calefaccin. Es aqu
donde entra un sistema de control regido por el comportamiento de la temperatura.
Un sistema de control de temperatura, obtiene la temperatura del ambiente a medir mediante un
sensor, y esta seal es acondicionada (Digitalmente o Analgicamente segn el control a
realizar). Luego pasa por un sistema de control el cual enciende, apaga, aumenta, o disminuye el
sistema que estar encargado de mantener la temperatura. En este caso por ejemplo, si la
temperatura del Horno es mayor que la referencia, la potencia del horno disminuir y viceversa
en temperaturas menores, ya que se busca que la temperatura de salida sea aproximada a la
entrada (Figura 1).
Figura 1
24/09/2012
Metodologa:
En este sistema tenemos como entradas variables, la temperatura deseada (Que se establece por
medio de un Potencimetro) y la temperatura que es medida por un sensor LM35. En la salida
tenemos tres leds que indican los diferentes estados de la temperatura y una salida PWM que se
encarga de variar la potencia del horno.
Las temperaturas de trabajo esta en un rango de 0 a 100 grados Celsius.
Para realizar este proyecto lo divid en diferentes partes:
1) Reconocimiento de seales
2) Control
3) Implementacin en Sistema Embebido
Reconocimiento de seales
Un sistema de reconocimiento de seales, son filtros que funcionas a travs de una o varias
funciones de activacin, que adems estn sujetas a condiciones del tipo IF/ELSE.
En el caso del horno se utilizan tres funciones de activacin (Figura 2), dos sigmoidales y una
gaussiana, donde una de las sigmoidales esta trabajando de forma inversa (Figura 3), trabaja de
forma inversa al negar los valores de entrada (Ecuacin 1); la sigmoidal invertida es la
encargada de reconocer las seales de temperatura baja, la gaussiana la temperatura dentro del
rango normal y la otra sigmoidal la temperatura alta.
Las condiciones son las siguientes para cada funcin de activacin, donde x es el valor de la
funcin de activacin y m=.8 que es el condicional (la c o ancho de campana de la funcin
gaussiana es 8 por diseo)
( ) {
( ) {
( ) {
24/09/2012
Figura 2
Figura 3 (Graficas de funciones sigmoidales)
( )
Ecuacin 1 (Funciones de Activacin)
24/09/2012
Existe una variable denominada b que es la temperatura de entrada, que a su ves es el centro de
masa de la gaussiana, esta variable se encarga de mover las graficas en el eje de las X, para poder
lograr esto, a las funciones sigmoidales les reste el valor de b para as por medio de geometra
mover la grafica del origen, por diseo tambin se el agrego una constante k (Ecuacin 2) que
se encarga de desfasar las ecuaciones sigmoidales para que intersecten en .8 con la gaussiana
(Figura 4).
( )
( )
Ecuacin 2 (Desfase de funciones)
Figura 4 (Grafica de funciones desfasadas)
24/09/2012
El Pseudocdigo que se encarga de hacer todo lo anterior posible es el siguiente, para el cdigo
en Matlab ver el Apndice A (Cdigo 1 o 2)
Funcin decisin
RecSenal (b,m,x)
Si Fu-s=1
Entonces imprime y1
Sino Si Fugauss=1
Entonces imprime y2
Sino Imprime y3
Fin_si
Fin_si
Fin de Funcin
Funcin RecSenal (b,m,x) ( ) {
Leer x
Leer b
y1=Fa-sig(x);
y2=Fagauss(x,b);
y3=Fasig(x);
Fu-s=fu(y1,m)
Fugauss=fu(y2,m)
Fus=fu(y3,m) si
Fin de Funcin
En la siguientes graficas (Figura 5) se muestra una de las simulaciones para una temperatura
deseada de 50 grados corriendo el Cdigo 2 del Apndice A, este cdigo funciona en conjunto
con el sistema Arduino que es el que se encarga de enviar por puerto serial la temperatura ya
convertida en grados centgrados, la grafica A muestra cuando la temperatura esta por debajo del
rango deseado, la B cuando la grafica esta dentro del rango y por ultimo la C que es cuando la
temperatura esta mas alta de lo deseado (la lnea color celeste es la que muestra la temperatura
obtenida, e intersecta las 3 funciones en diferentes puntos mostrando siempre si la decisin dada
es la correcta, la lnea de color morado esta en .8 para mostrar mas claramente donde se
intersectan las funciones de activacin), en el Apndice B se muestra un ejemplo para 75 grados.
Como conclusin en este punto, se puede observar como por medio de circuitos neuronales,
trabajando en forma de reconocimiento, se puede filtrar seales y con las condiciones bien
establecidas se puede convertir esa salida en algo fsico, que en este caso al implementarse se
enciende un led, que muestra el estado actual de la temperatura, ese caso se vera ya en el ultimo
punto, el de la implementacin como sistema embebido.
24/09/2012
Figura 5 (temperatura/rango)
Control
Un sistema de control ON/OFF es de los sistemas mas bsicos de control que existen, y es el mas
utilizado en termostatos, su funcin es enviar un 0 o 1 como salida cuando se tiene un error con
respecto a la diferencia entre la entrada y la salida.
A Temperatura Medida 35.2
B Temperatura Medida 46.7
C Temperatura Medida 88.9
24/09/2012
En nuestro caso la entrada del sistema es la temperatura medida y la salida es la temperatura
deseada (Figura 6) y tiene la ventaja de que las perturbaciones de otras fuentes de calor no le
afectan, nuestros rango de estabilidad o de temperatura dentro del rango se encuentran dentro de
.8 a 1.2 normalizando la temperatura deseada.
Figura 6
El sistema de control fue implementado directamente en Arduino (Apndice A cdigo 3) y
comunicado con Matlab para ver las graficas con respecto al tiempo, utilizando el pseudocdigo
de reconocimiento de seales y agregndole ahora que imprima una seal dependiendo de la
temperatura real, para poder controlarla.
Funcin control
RecSenal (b,m,x)
Si Fu-s=1
Entonces potencia=1
Sino potencia=0
Fin_si
Fin de Funcin
A continuacin se muestra la grafica con respecto al tiempo del sistema de control ya
funcionando, con una temperatura deseada de 50 grados, ah se puede ver como el sistema busca
estar dentro de los parmetros (Figura 7), y se logra controlar aun con perturbaciones al someter
al sistema a otra entrada de temperatura no considerada el sistema vuelve a buscar estar dentro
del rango.
Control
Temperatura deseada
u(t) e(t) y(t)
24/09/2012
Figura 7 (grafica de control)
En conclusin de este punto, se puede ver que tomando una parte del reconocimiento de seales
se puede generar control ON/OFF con las condiciones dadas y las decisiones correctas,
encontrando as una gran gama de aplicaciones.
Sistema Embebido
Juntando la parte de reconocimiento y la parte de control e implementndola en un sistema
Arduino se logra un sistema embebido, ya que su nica funcin despus de programarse ser la
de reconocer y controlar la temperatura, el pseudocdigo es el siguiente:
Programa Principal
Control
Decisin
Recsenal
Fin programa
Y a continuacin se muestran unas fotografas de la pantalla (figura 7, 8, 9), del sistema
funcionando en sus diferentes etapas, el cdigo fuente de este sistema embebido se encuentra en
el apndice A, cdigo 4.
24/09/2012
Figura 7a
Figura 7 b
24/09/2012
Figura 8 a
Figura 8 b
24/09/2012
Figura 9 a
Figura 9 b
En las fotografas anteriores se muestra el sistema visto desde arriba y frontalmente, en este
primer estado se ve un led azul encendido y uno rojo (que en este caso simula la potencia del
horno), el led azul indica que la temperatura esta por debajo de rango deseado y el rojo en
24/09/2012
mxima potencia, indica que se esta haciendo el control para llevar la temperatura al rango
deseado.
En la figura 8 a y 8 b se muestra ya la temperatura dentro del rango y con el Led rojo simulando
baja potencia para mantener caliente el horno, as como pasa lo contrario con las figuras 9a y 9b
que nos muestran la temperatura fuera de rango y tambin como apagan el horno para que
empieza a bajar la temperatura. En la tabla uno del apndice B se muestra como van cambiando
los valores y como se va controlando
Como conclusin general, por medio de un circuito neuronal se puede controlar un horno
industrial o domestico de forma econmica y fcil, si requerir sistemas complejos o un control
muy avanzado, o llegar a la implementacin anloga como seria con amplificadores
operacionales. Dentro de mis metas estaba principalmente solo reconocer las seales, pero al
analizar ms a fondo, ca en la cuenta de que el sistema requera un sistema muy bsico de
control y as ampliar las metas de este proyecto.
Referencias:
Jianbo Bai, Hong Xiao, Tianyu Zhu, Wei Liu, Xianghua Yang, Guofang Zhang, Design
of an Improved Single Neuron-based PI Controller for an HVAC System in a Test
Room, 2008 International Workshop on Education Technology and Training & 2008
International Workshop on Geoscience and Remote Sensing.
Lehmann, Charles H. Geometra Analtica, ed. Limusa 2006
Katsuhiko Ogata Ingeniera de control moderno, ed. Pearson 4 ed. 2003
Cetinkunt Sabri Mecatronica, ed Patria 2011
Wu Chunying, Wang Xiaoming, Yang Ling, Research on Simulation of Temperature
Control System for Gyro Based on Single Neuron PID, 2010 International Conference
on Machine Vision and Human-machine Interface.
Zhenya Zhang, Hongmei Cheng, Shuguang Zhang. Research on the Performance of
Feed Forward Neural Network Based Temperature Field Identification Model in
Intelligent Building 2011
Diana Lucia Poma; Prediccin meteorolgica mediante redes neuronales 2010
24/09/2012
Apndice A
Cdigo 1 (Simulador de Reconocimiento de Seales)
clear all clc a=1; %altura de campana c=8; %ancho de campana k=4.15; %unin en aprox .8 de graficas b=input('Ingrese la temperatura deseada: '); y=input('Ingrese la temperatura obtenida: '); x=0:.01:100; %rango de temperatura medible for i=1:1:10001; r(i)=.8; %intervalo de temperatura if x(i)y; z(i)=0; end end g=a*exp(-(((x)-b).^2)/(2*(c^2))); % grafica funcin gaussiana si=(1./(1+exp(x-b+k))); %grafica funcin sigmoidal invertida s=(1./(1+exp(-(x-b-k)))); %grafica funcin sigmoidal go=a*exp(-(((y)-b).^2)/(2*(c^2))); %funcin de activacin gaussiana sio=(1./(1+exp(y-b+4))); %funcin de activacin sigmoidal invertida so=(1./(1+exp(-(y-b-4)))); %funcin de activacin sigmoidal %condiciones de decisin if sio>.8; fprintf('Temperatura Baja') go=0; so=0; elseif go>=.8; fprintf('Temperatura Deseada') sio=0; so=0; elseif so>.8; fprintf('Temperatura Alta') go=0; sio=0; end figure plot(x,si,x,s,x,g,x,z,x,r) grid
Cdigo 2 (Simulador de Reconocimiento de Seales con adquisision real)
Matlab:
clear all clc
24/09/2012
adq=serial('COM7'); %definir serial port adq.BaudRate=9600; %definir baud rate %abrir serial port fopen(adq); clear yy; a=1; %altura de campana c=8; %ancho de campana k=4.15; %unin en aprox .8 de
graficas b=input('Ingrese la temperatura deseada: '); yy=fscanf(adq); %leer valor del sensor y=str2double(yy); %convertir de string a valor
numrico fclose(adq); %cerrar serial port x=0:.01:100; %rango de temperatura medible for i=1:1:10001; r(i)=.8; %intervalo de temperatura if x(i)y; z(i)=0; end end g=a*exp(-(((x)-b).^2)/(2*(c^2))); %grafica funcin gaussiana si=(1./(1+exp(x-b+k))); %grafica funcin sigmoidal invertida s=(1./(1+exp(-(x-b-k)))); %grafica funcin sigmoidal go=a*exp(-(((y)-b).^2)/(2*(c^2))); %funcin de activacin gaussiana sio=(1./(1+exp(y-b+4))); %funcin de activacin sigmoidal invertida so=(1./(1+exp(-(y-b-4)))); %funcin de activacin sigmoidal %condiciones de decisin if sio>.8; fprintf('Temperatura Baja') go=0; so=0; elseif go>=.8; fprintf('Temperatura Deseada') sio=0; so=0; elseif so>.8; fprintf('Temperatura Alta') go=0; sio=0; end figure plot(x,si,x,s,x,g,x,z,x,r) grid
Arduino:
int valor1;
float x1;
24/09/2012
void setup() {
Serial.begin(9600);
}
void loop() {
valor1=analogRead(0);
x1=(valor1)/306.9; //Normalizacin de temperatura
float v1=(x1*150); //Conversin a temperatura real
Serial.println(v1);
delay(100);
}
Cdigo 3
Arduino:
float e = 2.71828; //constante de Euler
float a=1; //altura campana de gauss
int c=64; //ancho de campana de gauss al cuadrado
float k=4.15; //movimiento en x de las funciones con respecto al origen
float b;
float x;
float g=0;
float s=0;
float si=0;
float x1;
float x2;
void setup() {
Serial.begin(9600);
}
void loop() {
float valor1=analogRead(0); //Lectura de temperatura deseada
float valor2=analogRead(1); //Lectura de temperatura real
x1=(valor1)/1023.000; //Normalizacin de temperatura deseada
x2=(valor2)/306.900; //Normalizacin de sensor de temperatura
b=(x1*100); //conversion a grados Celsius temp. deseada
x=(x2*100); //conversion a grados Celsius temp. obtenida
Serial.println(x);
delay(1000);
horno();
}
void horno(){
g=a*pow(e,-((pow((x-b),2)/(2*c)))); //funcin gaussiana
si=(1/(1+ pow(e,(x-b+k)))); //funcin sigmoidal invertida
s=(1/(1+ pow(e,-(x-b-k)))); //funcin sigmoidal
if (si>.8){
analogWrite(2,255); //aumento de potencia del horno
}
else if (g>=.8){
analogWrite(2,128); //potencia disminuida, temperatura dentro de rango
24/09/2012
}
else if (s>.8){
analogWrite(2,64); //temperatura alta, disminuir potencia del horno
}
delay (2000);
return;
}
Matlab: clear all clc adq=serial('COM7'); %definir serial port adq.BaudRate=9600; %definir baud rate %abrir serial port fopen(adq); clear yy; td=input('Ingrese la temperatura deseada: '); for i= 1:2000 %adquisicin de 2000 puntos r1(i)=.8; op(i)=1; r2(i)=1.2; yy=fscanf(adq); %leer valor del sensor k(i) = str2double(yy); y(i)=k(i)/td; plot([1:i],y(1:i),[1:i],op,[1:i],r1,[1:i],r2); grid title('Datos de Temperatura Adquiridos'); xlabel('Tiempo'); ylabel('Temperatura Normalizada'); drawnow;
end fclose(adq);
Cdigo 4
float e = 2.71828; //constante de Euler
float a=1; //altura campana de gauss
int c=64; //ancho de campana de gauss al cuadrado
float k=4.15; //movimiento en x de las funciones sigmoidales con respecto al
origen
float b;
float x;
float g=0;
float s=0;
float si=0;
float x1;
float x2;
void setup() {
Serial.begin(9600);
}
void loop() {
24/09/2012
pinMode(51, OUTPUT);
pinMode(52, OUTPUT);
pinMode(53, OUTPUT);
float valor1=analogRead(0); //Lectura de temperatura deseada
float valor2=analogRead(1); //Lectura de temperatura real
x1=(valor1)/1023.000; //Normalizacin de temperatura deseada
x2=(valor2)/1023.000; //x2=(valor2)/306.900; //Normalizacin de sensor de
temperatura
b=(x1*100); //conversion a grados Celsius temp. deseada
x=(x2*100); //conversion a grados Celsius temp. obtenida
Serial.print("\t Temperatura deseada = " );
Serial.println(b);
Serial.print("\t Temperatura obtenida = " );
Serial.println(x);
delay(1000);
horno();
}
void horno(){
g=a*pow(e,-((pow((x-b),2)/(2*c))));
si=(1/(1+ pow(e,(x-b+k))));
s=(1/(1+ pow(e,-(x-b-k))));
if (si>.8){
Serial.print("\t Temperatura Baja \n \n" );
digitalWrite(52, HIGH);
digitalWrite(51, LOW);
digitalWrite(53, LOW);
analogWrite(2,255); //aumento de potencia del horno
}
else if (g>=.8){
Serial.print("\t Temperatura Correcta \n \n" );
digitalWrite(53, HIGH);
digitalWrite(51, LOW);
digitalWrite(52, LOW);
analogWrite(2,128); //potencia disminuida, temperatura dentro de rango
}
else if (s>.8){
Serial.print("\t Temperatura Alta \n \n" );
digitalWrite(51, HIGH);
digitalWrite(52, LOW);
digitalWrite(53, LOW);
analogWrite(2,64); //temperatura alta, disminuir potencia del horno
}
delay (2000);
return;
}
24/09/2012
Apndice B
En las siguientes graficas se mostrara un ejemplo de cuando la temperatura requerida es de 75
grados, y la primera temperatura se obtiene cuando el sensor es introducido en un congelador por
5 min, despus cuando el sensor se pone cerca del horno y por ultimo como llega a la
temperatura deseada.
Figura10
A Temperatura
Medida 3
B Temperatura Medida 47.7
C Temperatura Medida 79.7
24/09/2012
Tabla 1
En estas tablas de salida se muestra como va cambiando la salida al paso del tiempo, y como
busca estabilizarse en la temperatura dada, estas tablas son para el ejemplo de los 50 grados.