Control de temperatura mediante histéresis |
|
Uso del LM35 |
|
|
01/12/2017 |
|
Marcos
González Pérez Rubén
Bernardo Vega Emilio
Roy López
Introducción
Se planteó
el problema de un regulador de temperatura, la solución propuesta es un
controlador de histéresis mediante la placa Arduino UNO. El diagrama
correspondiente es:
R(s) + E(s) C(s)
-
Siendo R(S) la temperatura deseada, E(S) el error del sistema y C(S) la salida. El controlador detecta si el error es el indicado, el actuador aumenta o disminuye la intensidad por la resistencia y el sensor detecta la temperatura de ella.
El sistema creado reacciona de la siguiente manera:
-Compara la salida con la entrada de referencia (ts=1seg)
-Si estas son diferentes aparece un error
-Si el error es positivo, el actuador se apaga (produciendo un descenso de la temperatura)
-Si el error es negativo, el actuador se enciende (produciendo un aumento de la temperatura)
LM35
Como sensor de temperatura se
utilizó el LM35. Su precisión está
calibrada a 1ºC, su medición abarca desde -55ºC hasta 150ºC y cada grado
equivale a 10mV, luego su salida vendrá dada sobre el intervalo (-0.5,1.5)V. La tensión a la que trabaja esta entre 4 y 30
voltios. El embalaje y tamaño usado fue: TO-92 de 4.30mm x 4.30mm.
Este sensor
de temperatura destaca por su bajo coste, su precisa calibración, su baja
impedancia de salida y su baja corriente de alimentación.
El principio
físico basado de este sensor, es la influencia de la temperatura en la Ley de
Ohm, es decir, a mayor temperatura menor oposición al tráfico de electrones del
metal luego dependiendo la resistencia que proporcione el sensor la tensión de salida variará. La variación de
la resistencia depende de la fórmula:
Siendo
R0=Resistencia de referencia a esta temperatura, y el coeficiente de temperatura del material.
Arduino UNO
Funciona tanto como
detector del error como para suministrar
intensidad a la resistencia. Posee 14 pines digitales, de los cuales usamos uno
como salida, y 6 analógicos, de los que usamos 2 como entradas. Es un
microcontrolador que trabaja a 5V, la intensidad máxima depende del pin con el
que se actúe, 40mV en normales, 50mV en pines de 3.3V. El código con el que funciona es mediante el programa Arduino, aunque también
se puede programar en C. Sus dimensiones son 50.8mmx53.3mm.
Esquema
de montaje
Ø
El
potenciómetro nos marca la temperatura que queremos obtener.
Ø
Hasta
que el sensor LM35 no detecte en la resistencia que tiene justo al lado la
misma temperatura que la marcada por el potenciómetro, el Arduino seguirá
funcionando.
Ø
En
una pantalla LCD se irán mostrando el dato del potenciómetro y el dato del
sensor de temperatura
Codigo C
Definir las variables y librerias
//LCD: SCA -> SCA; SCL -> SCL
//LM35: A3
//Pot: A2
//Salida: pin 8
#include <Wire.h>
// Use this library with I2C-module found on the webpage
// http://4tronix.co.uk/arduino/I2C_LCD_Module.php
#include <LiquidCrystal_I2C.h>
#define pin_A3 A3
#define pin_A2 A2
#define Tmax 30
#define Tmin 15
int valor_leido;
float temp;
float templ;
int pot;
int temperatura;
// set the LCD address to 0x27 for a 20 chars 4 line display
// Set the pins on the I2C chip used for LCD connections:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd1(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD
I2C address
Configuración de la pantalla LCD
void setup()
{
pinMode(8, OUTPUT);
//analogReference(INTERNAL);
analogReference(DEFAULT);
lcd1.begin(16,2); // initialize the
lcd
// Print a message to the LCD.
lcd1.backlight();
lcd1.print("Bienvenido!");
//lcd1.setCursor(0, 1);
//lcd1.print("hello, world 1!");
delay(3000);
}
Configuración del Bucle
void loop()
{
pot=analogRead(pin_A2);
temperatura=pot*(Tmax-Tmin)/1023+Tmin;
valor_leido=analogRead(pin_A3);
temp=(valor_leido*(5/1.1)*1.1*100.0)/1024.0;
if (temp<temperatura)
{//statement(s)
digitalWrite(8, HIGH);
}
if (temp>temperatura){
digitalWrite(8, LOW);
}
lcd1.clear();
lcd1.setCursor(0, 0);
lcd1.print("Temp=");
lcd1.print(temp);
lcd1.print((char)223);
lcd1.print("C");
lcd1.setCursor(0, 1);
lcd1.print("Objetivo=");
lcd1.print(temperatura);
lcd1.print((char)223);
lcd1.print("C");
delay(1000);
}
Esquemas en Proteus y LabVIEW
Imagen 1: Esquema en proteus
Imagen 2Esquema en LabVIEW
Imagen 3: Simulación en LabVIEW
Video con las simulaciones
https://www.youtube.com/watch?v=fj1MTphUYas