Sei sulla pagina 1di 18

UNIVERSIDAD NACIONAL DEL CALLAO

FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA


ESCUELA PROFESIONAL DE INGENIERIA ELECTRONICA

CONTROL DIGITAL
LABORATORIO N°4: PROYECTO

PROYECTO DE CONTROL PID DE UNA PLANTA ESTABILIZADORA DE TEMPERATURA


CON DOBLE MODO DE OPERACIÓN

Nombres:
CANALES ESCALANTE, CARLOS ANDRÉS CÓDIGO: 1513220485
HUAMAN YRIGOIN, DENNIS CÓDIGO: 1513220395

RESUMEN

Se pretende mantener estable la temperatura de un sistema mediante el uso de un control PID basado en una
planta de calefactor (bombillo) y enfriamiento (ventilador) dentro de un sistema hermético. El sistema consta de
una termocupla tipo K, que capta los valores de temperatura actuales mediante el microcontrolador Arduino
UNO y a través del control PID se estabiliza el valor de temperatura hasta un Set Point que el usuario establezca
según el modo de operación que seleccione acorde a su necesidad (modo manual y modo inalámbrico). Los
cambios del sistema se visualizan en una pantalla LCD de 16x2.

OBJETIVOS

- Mediante la tarjeta de Arduino UNO implementar un sistema de control de temperatura con el sensor
LM35, bombillo 12 V DC, ventilador y una pantalla LCD.
- Elaboración de un sistema en lazo cerrado con un controlador PID, que controle de una forma correcta
la posición del balancín ante posibles perturbaciones ajenas al sistema.
- Identificar los parámetros de un controlador PID a través del método Ziegler-Nicholls.
MATERIALES
PLACA ARDUINO UNO
Arduino Uno es una placa electrónica basada en el microcontrolador ATmega328. Cuenta con 14
entradas/salidas digitales, de las cuales 6 se pueden utilizar como salidas PWM (Modulación por ancho de
pulsos) y otras 6 son entradas analógicas. Además, incluye un resonador cerámico de 16 MHz, un conector
USB, un conector de alimentación, una cabecera ICSP y un botón de reseteado. La placa incluye todo lo
necesario para que el microcontrolador haga su trabajo, basta conectarla a un ordenador con un cable USB o a la
corriente eléctrica a través de un transformador.

1
Control Digital Laboratorio Ing. Zenón Cucho M.
LCD 16x2 y MÓDULO ADAPTADOR I2C
El Módulo adaptador LCD a I2C que usaremos está basado en el controlador I2C PCF8574, el cual es un
Expansor de Entradas y Salidas digitales controlado por I2C. Por el diseño del PCB este módulo se usa
especialmente para controlar un LCD Alfanumérico.
La dirección I2C por defecto del módulo puede ser 0x3F o en otros casos 0x27. Es muy importante identificar
correctamente la dirección I2C de nuestro módulo, pues de otra forma nuestro programa no funcionará
correctamente. Para identificar la dirección específica de nuestro módulo podemos utilizar un pequeño sketch de
prueba llamado: I2C Scanner, el cual nos permite identificar la dirección I2C del dispositivo conectado al
Arduino.

MÓDULO MAX6675 y TERMOCUPLA TIPO “K”


El MAX6675 es un convertidor A/D especializado para termopares tipo K. Con este módulo es posible conectar
fácilmente un termopar a cualquier microcontrolador a través de una interfaz SPI unidireccional. Dentro de este
pequeño circuito se encuentra la electrónica necesaria para amplificar, compensar y convertir a digital el voltaje
generado por el termopar, lo que hace muy sencilla la tarea de conectar un termopar a un microcontrolador. El
único “pero” es que este circuito solo se consigue en encapsulado SOIC, por lo que no es tan fácil usarlo en el
protoboard. Sin embargo, en este módulo encontramos el MAX6675 con toda la electrónica necesaria y las
terminales apropiadas para facilitar su uso.
Existen muchos sensores de temperatura en el mercado, sin embargo, las soluciones basadas en silicio, como el
LM35 por citar un ejemplo que sea familiar, están normalmente limitados a un rango de temperatura por debajo
de los 150 grados centígrados. Lo que los deja fuera de consideración cuando debemos monitorear algún
proceso con temperaturas superiores. Afortunadamente los termopares vienen a salvar el día, permitiéndonos
mediciones en un rango más amplio, usualmente de varias centenas de grados centígrados y sin un costo
excesivo.
El MAX6675 se conecta con un microcontrolador mediante una interfaz de 3 líneas compatible con el estándar
SPI. El formato en el que el MAX6675 envía datos al microcontrolador es el siguiente.

2
Control Digital Laboratorio Ing. Zenón Cucho M.
CARACTERÍSTICAS DEL MAX6675 MÓDULO INTERFAZ PARA TERMOPAR.
- Interfaz compatible con SPI solo de lectura.
- Resolución de 12 bits, 0.25 grados centígrados.
- Medición hasta 1024 grados centígrados.
- Alimentación de 3.3 a 5 volts.
- Frecuencia de reloj SPI máxima Fscl 4.3 Mhz.
- Tiempo de conversión 0.17 s máximo 0.22 segundos.
- Consumo máximo de 1.5 mA.
- Incluye termopar tipo K

VENTILADOR DE 12V
Características de Ventilador Silencioso 12V. DC. 80x80x25mm. 19dB A c/regulador
Serie de ventiladores ultra-silenciosos con control de velocidad, resultado de años de experiencia en la industria
térmica. Estos ventiladores combinan gran flujo de aire con un bajo nivel de ruido. Con soportes de goma para
absorber las vibraciones producidas por el motor. Disponibles en distintas dimensiones.
Dimensiones:80 x 80 x 25 mm
Voltaje:12 V
Tipo de rodamiento: Sleeve
Velocidad del ventilador:1000 ~ 3500 R.P.M.
Nivel de ruido:19 ~ 29 dB(A)

3
Control Digital Laboratorio Ing. Zenón Cucho M.
MÓDULO HC-05
El módulo Bluetooth HC-05 es idea para utilizar en todo tipo de proyectos donde necesites una conexión
inalámbrica fiable y sencilla de utilizar. Se configura mediante comandos AT y tiene la posibilidad de hacerlo
funcionar tanto en modo maestro como esclavo. Eso quiere decir que puedes conectar dos módulos juntos,
conectar tu robot al móvil o incluso hacer una pequeña red de sensores comunicados entre ellos con un maestro
y varios esclavos.
El módulo Bluetooth HC-05 puede alimentarse con una tensión de entre 3.3 y 6V (normalmente 5V), pero los
pines TX y RX utilizan niveles de 3,3V por lo que no se puede conectar directamente a placas de 5V. Debes
utilizar dos pequeñas resistencias como divisor de tensión para que el módulo no se estropee. En las imágenes
del producto podrás ver el esquema de conexionado. También dispone de un pulsador para entrar en modo
comandos, aunque también lo puedes hacer por software utilizando el pin EN.
Tiene un LED incorporado que indica el estado de la conexión y si está emparejado o no en función de la
velocidad del parpadeo.
El HC-05 es un módulo Bluetooth muy versátil que no dejarás de utilizar en todos tus proyectos!
Características:
 Protocolo Bluetooth: v1.1 / 2.0.
 Frecuencia: banda ISM de 2,4 GHz .
 Modulación: GFSK
 Potencia de transmisión : menos de 4dBm , Clase 2 .
 Sensibilidad: Menos de -84dBm en el 0,1% BER .
 Ratio asíncronos: 2.1Mbps ( Max) / 160 kbps .
 Sincróno : 1Mbps / 1Mbps .
 Perfiles de la ayuda : puerto serie Bluetooth (maestro y esclavo) .
 Fuente de alimentación: + 3.3VDC 50mA . (soporta de 3.3 a 6V)
 Temperatura de trabajo: -5 ° C a 45 ° C.

COMUNICACIÓN CON INTERFAZ APPINVENTOR


App Inventor es un entorno de desarrollo de aplicaciones para dispositivos Android. Para desarrollar
aplicaciones con App Inventor sólo necesitas un navegador web y un télefono o tablet Android (si no lo
tienes podrás probar tus aplicaciones en un emulador). App Inventor se basa en un servicio web que te permitirá
almacenar tu trabajo y te ayudará a realizar un seguimiento de sus proyectos.
Se trata de una herramienta de desarrollo visual muy fácil de usar, con la que incluso los no programadores
podrán desarrollar sus aplicaciones.

4
Control Digital Laboratorio Ing. Zenón Cucho M.
Al construir las aplicaciones para Android trabajarás con dos herramientas: App Inventor Designer y App
Inventor Blocks Editor. En Designer construirás el Interfaz de Usuario, eligiendo y situando los elementos con
los que interactuará el usuario y los componentes que utilizará la aplicación. En el Blocks Editor definirás el
comportamiento de los componentes de tu aplicación.
CODIFICACIÓN POR BLOQUES

Desarrollo del aplicativo móvil para el modo inalámbrico

5
Control Digital Laboratorio Ing. Zenón Cucho M.
COMPONENTES
- Resistencias: 1K Ohm
- TIP120
- Cables y fuente de 12V
CODIFICACIÓN SIN PID
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //If you don't have the LiquidCrystal_I2C library, download it and install it
LiquidCrystal_I2C lcd(0x3f,20,4); //sometimes the adress is not 0x3f. Change to 0x27 if it dosn't work.

#include <SPI.h>
int bombillo = 3;
int ventilador = 11;
#define MAX6675_CS 10
#define MAX6675_SO 12
#define MAX6675_SCK 13
float set_temperature = 30;

void setup() {
Serial.begin(9600);
pinMode(bombillo,OUTPUT);
pinMode(ventilador,OUTPUT);
lcd.init();
lcd.backlight();
}

void loop() {
float temperature_read = readThermocouple();
if(set_temperature > temperature_read)
{ analogWrite(bombillo,0);
// analogWrite(ventilador,0);
}
else
{ analogWrite(bombillo,255);
// analogWrite(ventilador,0);
}

delay(1000);
Serial.println(temperature_read);
lcd.setCursor(1,0);
lcd.print("LABORATORIO 4");
lcd.setCursor(0,1);
lcd.print("SP:");
lcd.setCursor(3,1);
lcd.print(set_temperature,1);
lcd.setCursor(9,1);
lcd.print("V:");
lcd.setCursor(11,1);
lcd.print(temperature_read,1);

double readThermocouple() {

uint16_t v;
6
Control Digital Laboratorio Ing. Zenón Cucho M.
pinMode(MAX6675_CS, OUTPUT);
pinMode(MAX6675_SO, INPUT);
pinMode(MAX6675_SCK, OUTPUT);

digitalWrite(MAX6675_CS, LOW);
delay(1);

v = shiftIn(MAX6675_SO, MAX6675_SCK, MSBFIRST);


v <<= 8;
v |= shiftIn(MAX6675_SO, MAX6675_SCK, MSBFIRST);

digitalWrite(MAX6675_CS, HIGH);
if (v & 0x4)
{
// Bit 2 indicates if the thermocouple is disconnected
return NAN;
}

// The lower three bits (0,1,2) are discarded status bits


v >>= 3;

// The remaining bits are the number of 0.25 degree (C) counts
return v*0.25;
}

Realizamos el montaje del circuito en protoboard para poder realizar toma de datos y poder determinar la
función de transferencia de la planta

Figura N°1: “Circuito Implementado”

CÁLCULO DE LA F.T. DE LA PLANTA (MÉTODO EXPERIMENTAL)

Se realizó una toma de datos a través de Monitor Serie de Arduino, para poder determinar los valores de las
constantes de la función de transferencia de la planta.

7
Control Digital Laboratorio Ing. Zenón Cucho M.
Luego copiamos los valores en una hoja de datos de Excel para poder determinar la tendencia de la gráfica y
calcular por Solver los valores necesarios para minimizar el error de medición.

Utilizamos Solver para optimizar los valores:

8
Control Digital Laboratorio Ing. Zenón Cucho M.
Finalmente, con los valores obtenidos de k y tao obtenemos la función de transferencia:

1.08
GP ( s ) 
18.13134s  1

CÁLCULO DEL PID CONTINUO

Para determinar el PID Discreto debemos obtener los valores de las constantes del control PID de nuestra planta,
para ello utilizamos el comando “pidtool” en Matlab

Generando la gráfica de la respuesta del sistema y los valores de Kp, Ki y Kd.

PID DISCRETO

>> num = [0.0595];


den = [1 -exp(-0.0515)];
Ts = 0.001;
sys = tf(num,den,Ts)

sys =

0.0595
----------
z - 0.9498

Sample time: 0.001 seconds


Discrete-time transfer function.
9
Control Digital Laboratorio Ing. Zenón Cucho M.
>> ltiview(sys)

%CODIGO PARA OBTENER LAS GRAFICA DE LA EC EN DIFERENCIAS DE LA TRANZFORMADA Z


EN MATLAB

num=[0.0595]; %numerador
den=[1 -0.9498]; %denominador
x=[1 zeros(1, 200)]; %Entrada “delta de Kronecker”
v=[0 200 -1 1];
axis(v);
k=0:200;
y=filter(num,den,x) %Comando para obtener la respuesta y(k) desde k=0 hasta k=200.
plot(k,-y+0.06,'o');
grid
title('Respuesta a la entrada “delta de Kronecker');
xlabel('k');

VALORES DE LOS COEFICIENTES DE LA ECUACION EN DIFERENCIAS

y=

Columns 1 through 8

0.0595 0.0565 0.0537 0.0510 0.0484 0.0460 0.0437 0.0415

Columns 9 through 16

0.0394 0.0374 0.0355 0.0338 0.0321 0.0305 0.0289 0.0275

Columns 17 through 24

0.0261 0.0248 0.0235 0.0224 0.0212 0.0202 0.0192 0.0182

Columns 25 through 32

0.0173 0.0164 0.0156 0.0148 0.0141 0.0134 0.0127 0.0121

Columns 33 through 40

0.0114 0.0109 0.0103 0.0098 0.0093 0.0088 0.0084 0.0080

Columns 41 through 48

0.0076 0.0072 0.0068 0.0065 0.0062 0.0059 0.0056 0.0053

Columns 49 through 56

0.0050 0.0048 0.0045 0.0043 0.0041 0.0039 0.0037 0.0035

Columns 57 through 64

0.0033 0.0032 0.0030 0.0028 0.0027 0.0026 0.0024 0.0023

Columns 65 through 72
10
Control Digital Laboratorio Ing. Zenón Cucho M.
0.0022 0.0021 0.0020 0.0019 0.0018 0.0017 0.0016 0.0015

Columns 73 through 80

0.0015 0.0014 0.0013 0.0013 0.0012 0.0011 0.0011 0.0010

Columns 81 through 88

0.0010 0.0009 0.0009 0.0008 0.0008 0.0007 0.0007 0.0007

Columns 89 through 96

0.0006 0.0006 0.0006 0.0005 0.0005 0.0005 0.0005 0.0004

Columns 97 through 104

0.0004 0.0004 0.0004 0.0004 0.0003 0.0003 0.0003 0.0003

Columns 105 through 112

0.0003 0.0003 0.0003 0.0002 0.0002 0.0002 0.0002 0.0002

Columns 113 through 120

0.0002 0.0002 0.0002 0.0002 0.0002 0.0001 0.0001 0.0001

Columns 121 through 128

0.0001 0.0001 0.0001 0.0001 0.0001 0.0001 0.0001 0.0001

Columns 129 through 136

0.0001 0.0001 0.0001 0.0001 0.0001 0.0001 0.0001 0.0001

Columns 137 through 144

0.0001 0.0001 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000

Columns 145 through 152

0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000

Columns 153 through 160

0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000

Columns 161 through 168

0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000

Columns 169 through 176

0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000

Columns 177 through 184


11
Control Digital Laboratorio Ing. Zenón Cucho M.
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000

Columns 185 through 192

0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000

Columns 193 through 200

0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000

Column 201

0.0000
Obteniendo respuesta de sistema en tiempo discreto

Observamos que el sistema es estable

12
Control Digital Laboratorio Ing. Zenón Cucho M.
Finalmente observamos que el valor de la temperatura se estabiliza ante un cambio de Set Point de 30°C a 25°C.

13
Control Digital Laboratorio Ing. Zenón Cucho M.
MODIFICACIÓN DEL PROYECTO A UNA SITUACIÒN REAL

Requerimos modificar la implementación para una posible aplicación a una planta industrial donde además de
modificar el set point del sistema de forma manual mediante pulsadores, el operario podrá realizar el monitoreo
de forma inalámbrica mediante el uso del módulo bluetooth y modificar el valor de temperatura mediante un
dispositivo móvil.

CODIGO FINAL EN ARDUINO

/* Max6675 Module ==> Arduino


* CS ==> D10
* SO ==> D12
* SCK ==> D13
* Vcc ==> Vcc (5v)
* Gnd ==> Gnd */

//Configuracion del LCD (i2C Display, Necesitas instalar la libreria LiquidCrystal_I2C si no la tienes)
#include <Wire.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(5,6);// rx,tx
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3f,16,2); //Cambiar la direccion a 0x027,0x037 o 0x3f. Probar con los valores
indicados.
#include "max6675.h"

/* i2c LCD Modulo ==> Arduino


* SCL ==> A5
* SDA ==> A4
* Vcc ==> Vcc (5v)
* Gnd ==> Gnd */

#include <SPI.h>
//We define the SPI pìns
#define MAX6675_CS 10
#define MAX6675_SO 12
#define MAX6675_SCK 13
//MAX6675 ktc(MAX6675_SCK, MAX6675_CS, MAX6675_SO);

//Pins
byte botonUp = 2;
byte botonDown = 4;
int pulsoUp = 0;
int pulsoDown = 0;
byte boton_op = 7;
int pulso_op =0;
int PWM_pin = 3;
int PWM_pin1 = 11;
int letra;
//Variables
float temperature_read = 0.0;
float set_temperature = 25;
float PID_error = 0;
float previous_error = 0;
14
Control Digital Laboratorio Ing. Zenón Cucho M.
float elapsedTime, Time, timePrev;
int PID_value = 0;

//Constantes PID
int kp = 164.9; int ki = 0; int kd = 0;
int PID_p = 0; int PID_i = 0; int PID_d = 0;

void setup() {
Serial.begin(9600);
mySerial.begin(9600);
pinMode(boton_op, INPUT);
pinMode(botonUp, INPUT);
pinMode(botonDown, INPUT);
pinMode(PWM_pin,OUTPUT);
pinMode(PWM_pin1,OUTPUT);
TCCR2B = TCCR2B & B11111000 | 0x03; // pin 3 and 11 PWM frequency of 980.39 Hz
Time = millis();
lcd.init();
lcd.backlight();
}

void loop() {

pulso_op=digitalRead(boton_op);
if(pulso_op == HIGH)
{
if(mySerial.available()>0)
{ letra=mySerial.read();
Serial.println(letra);
if(letra==0)
{

}
else
{
set_temperature=letra;
}
}
}
else
{
pulsoUp = digitalRead(botonUp);
if (pulsoUp == LOW)
{
set_temperature++;
}
pulsoDown = digitalRead(botonDown);
if (pulsoDown == LOW)
{
set_temperature--;
}
}
// Leemos el valor real de la temperatura
temperature_read = readThermocouple();
//Calculamos el error entre el setPoint y el valor real
PID_error = set_temperature - temperature_read;
15
Control Digital Laboratorio Ing. Zenón Cucho M.
//Calculamos el valor de P
PID_p = kp * PID_error;
//Calculamos el valor de I entre un intervalo de +-3
if(-3 < PID_error <3)
{
PID_i = PID_i + (ki * PID_error);
}

//Para el derivativo necesitamos el tiempo real para calcular la velocidad de razon de cambio
timePrev = Time; // El tiempo anterior es guardado antes que el tiempo actual sea leido
Time = millis(); // Lectura del tiempo actual
elapsedTime = (Time - timePrev) / 1000;
//Calculamos el valor de D
PID_d = kd*((PID_error - previous_error)/elapsedTime);
//Finalmente calculamos el valor del PID, el cual es la suma del P + I + D
PID_value = PID_p + PID_i + PID_d;

//Definimos un PWM en el intervalo de 0 a 255


if(PID_value < 0)
{ PID_value = 0; }
if(PID_value > 255)
{ PID_value = 255; }
//Escribimos la señal del PWM al pin digital D3, en este caso, el foco
analogWrite(PWM_pin,255-PID_value);
//Escribimos la señal del PWM al pin digital D11, en este caso, el ventilador
analogWrite(PWM_pin1,PID_value);
previous_error = PID_error; //Guardamos el error previo para el siguiente bucle

delay(1000);
//lcd.clear();
//Serial.println("Deg C = ");
Serial.print(temperature_read);
//Serial.print("\t SetPoint = ");
Serial.print(" ");
Serial.println(set_temperature);
mySerial.println(temperature_read);
lcd.setCursor(1,0);
lcd.print("LABORATORIO 3");
lcd.setCursor(0,1);
lcd.print("SP:");
lcd.setCursor(3,1);
lcd.print(set_temperature,1);
lcd.setCursor(9,1);
lcd.print("V:");
lcd.setCursor(11,1);
lcd.print(temperature_read,1);
}
double readThermocouple() {
uint16_t v;
pinMode(MAX6675_CS, OUTPUT);
pinMode(MAX6675_SO, INPUT);
pinMode(MAX6675_SCK, OUTPUT);

digitalWrite(MAX6675_CS, LOW);
delay(1);
// Read in 16 bits,
16
Control Digital Laboratorio Ing. Zenón Cucho M.
// 15 = 0 always
// 14..2 = 0.25 degree counts MSB First
// 2 = 1 if thermocouple is open circuit
// 1..0 = uninteresting status
v = shiftIn(MAX6675_SO, MAX6675_SCK, MSBFIRST);
v <<= 8;
v |= shiftIn(MAX6675_SO, MAX6675_SCK, MSBFIRST);
digitalWrite(MAX6675_CS, HIGH);
if (v & 0x4)
{ // Bit 2 indicates if the thermocouple is disconnected
return NAN; }
// The lower three bits (0,1,2) are discarded status bits
v >>= 3;
// The remaining bits are the number of 0.25 degree (C) counts
return v*0.25;
}

PROCEDIMIENTO

Realizamos el armado de la maqueta a base de una caja hermética para evitar entrada y salida de calor para la
planta estabilizadora. Realizamos agujeros para los controladores de set point y el modo de operación.

Ubicamos los el circuito implementado y procuramos mantener el posicionamiento del ventilador y el foco tal y
como se halló la función de transferencia de la planta para evitar cambiar los valores del PID hallados
previamente.

17
Control Digital Laboratorio Ing. Zenón Cucho M.
Se realizaron pruebas del sistema variando set point por medio manual e inalámbrico.

18
Control Digital Laboratorio Ing. Zenón Cucho M.

Potrebbero piacerti anche