Control De Temperatura Con Lm35 Y Arduino

by ymaogar in Circuits > Arduino

3508 Views, 0 Favorites, 0 Comments

Control De Temperatura Con Lm35 Y Arduino

IMG-20200619-WA0021.jpg

El resultado principal del trabajo es diseñar tres controladores aplicados a un sistema real el cual está compuesto por un horno (bombilla) y se desea controlar su temperatura. Para el control de estos se diseñarán tres controladores que son: controlador proporcional, integral (PI), controlador proporcional, integral y derivativo (PID) y por ultimo polinomial generalizado con acción integral en el controlador. Se realizarán los cálculos y se simularán en el programa Matlab, Simulink donde se demostrará que los controladores construidos funcionan correctamente, posteriormente se realizará la adaptación a un sistema embebido que en este caso será un Arduino, por donde será comunicado con la planta para su debido control. Los procesos serán probados por medio de graficas donde podremos observar que cumple con los requisitos deseados y se podrá observar el comportamiento de dicha señal 

Supplies

irf640.jpg

sensor de temperatura lm35

Arduino

bombillo dc

transistor mosfet irfz44n

simulink

Circuito Y Simulación

simulacion proteus.PNG
IMG-20200619-WA0021.jpg
Captura de pantalla 2022-08-16 161218.png
Captura de pantalla 2022-08-16 161123.png
Captura de pantalla 2022-08-16 162324.png

Iniciaremos este proyecto realizando el montaje del circuito de un horno (bombilla), simulando en el programa isis proteus.


Se utiliza el sensor de temperatura lm35 el cual envía una señal de Salida lineal de 10 mV/°C esta señal esta conectada al conversor analógico digital del microcontrolador atmega2560 de 10bits donde varia de 0-1023 y matemáticamente se opera para evidenciar la temperatura en centígrados, en cuanto al control de potencia de la salida se usa el modulo de pwm del microcontrolador de 0-255 determinando asi el ciclo de trabajo 0-100% y el bombillo de 12v.

Ya que trabajaremos con 12 voltios y una potencia de 3,6 W podemos encontrar nuestra función de transferencia de nuestra planta por medio del programa de Proteus donde se diseñará el funcionamiento para la construcción de la función de transferencia de nuestra planta. 

en proteus simulamos el 20% de la alimentación total de la planta real. Ubicamos 25 grados de temperatura amiente y procedemos a graficar nuestra salida de voltaje del horno.


Procedemos a construir nuestra función de transferencia de nuestra planta en tiempo continuo.


Diseño Del Controlador PI

pi1.png
pi2.png

Diseño Del Controlador PID

PID1.png
PID2.png

Diseño Del Controlador Polinomial Generalizado Con Acción Integral

POL1.png
POL2.png
POL3.png

RESULTADOS

pid.PNG
polgen.PNG
pi.PNG

Como conclusión principal encontramos que los valores resultantes de las constantes son un elemento bastante importante al momento de diseñar un controlador, ya que nos definirá la estabilidad y el funcionamiento del controlador. Podemos concluir que se al momento de comparar el sistema y el controlador simulado contra el sistema y el controlador real, existe una gran diferencia en cuanto a señales y funcionamiento, deducimos que esto es debido a que en las simulaciones no se tienen en cuenta variables existentes en el ambiente y en la vida real. Al momento de realizar el controlador PI se discretico la función por medio del método hacia atrás y pretendimos realizar el siguiente controlador que se trataba del PID, pero encontramos que al momento de hallar el polinomio característico se tornaba más extenso el cálculo. Es por esto que decidimos realizarlo por medio de la función ‘c2d’ de Matlab. Se evidencio que, en nuestra planta real, al momento de llegar a la referencia se encontraban oscilaciones mínimas, deducimos que esto sucede ya que al tratarse de una variable como la temperatura puede llegar a influir las variables que existen en el ambiente, los cambios de temperatura etc

Programación Y Simulaciones En Simulink

https://github.com/ymaogar/control-de-temperatura-discreto-con-lm35-y-arduino


int salida = 6;                 
const int sensorPin= A0;
int valor_salida_pwm;    //  declaramos  la variable de tipo entero para la ulizacion de la modulacion por ancho de pulso 0-255
int setPoint=40;
long int pru;
long int VsetP; //valor del setpoint de 0-1023
//int Vmin=(15*10*1023)/5000;//valor minimo para que el mapeo sea 255 (de 0-1023) 15 C
float error, pwmAnt, errorAnt, errorAnt2;
int PWM;
void setup() {
pru=setPoint*10230;
  VsetP=((pru)/(5000));
  Serial.begin(9600);
  pinMode (salida, OUTPUT); //definimos pin de salida
}


void loop() {
  int value = analogRead(sensorPin); //0-1023
  float millivolts = (value / 1023.0) * 5000;
  float celsius = millivolts / 10; 
  Serial.print(celsius);
  Serial.print(",");
  //Serial.print(PWM);
  /*Serial.print(",");
//   Serial.print(value);
  Serial.print(",");
  Serial.print(VsetP);*/
  Serial.print(",");
  Serial.println(setPoint);
  delay(1000);     



error=setPoint-celsius;
valor_salida_pwm=(pwmAnt)+(9.54459*error)-(13.8118*(errorAnt))+(5.0415*errorAnt2);
pwmAnt=valor_salida_pwm;
errorAnt2=errorAnt;
errorAnt=error;
//if(valor_salida_pwm>100){valor_salida_pwm=100;}
//if(valor_salida_pwm<100){valor_salida_pwm=-100;}
//PWM=map(valor_salida_pwm,-100,100,0,255);
VsetP=map(setPoint,0,100,0,204);//convertir la referencia en un valor 0-100c ---0-205(equivalencia a su entrada analoga 0-1023)
//valor_salida_pwm=map(value,40,VsetP,255,190);// de 19(c)-referencia(c) de - 255 -190pwm //40 equivale a 19c             
//valor_salida_pwm =map(value,0, 1023,0,255); // guardamos el mapeo en la variable (valor salida)
PWM=map(valor_salida_pwm,100,setPoint,255,0); // guardamos el mapeo en la variable (valor salida) 0
  
  
  if(celsius<=setPoint){
    analogWrite(salida, PWM);
  }
  else{
    analogWrite(salida, 0);
  }
}