You are on page 1of 6

#include <max6675.

h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
int input;
// LCD de 16 bits
LiquidCrystal_I2C lcd(0x3f,16,2); //LCD

//Pines de conexión de el termopar y del max6675


int thermo_so_pin = 53;
int thermo_cs_pin = 49;
int thermo_sck_pin = 51;
MAX6675 thermocouple(thermo_sck_pin, thermo_cs_pin, thermo_so_pin);

//Valores para hacer el PID


unsigned long lastTime;
double Y= thermocouple.readCelsius();//definida como Y
double error=0;// definida como error
double errorSum,lastErr ;
double kp=16,ki=0.1,kd=0.2;
int actual=1000;
double U; // definida como señar de control
int muestras=10;
float temp50=50;
float Valor;

//tiempo de muestreo
int TiempoMuestreo=1000; // tiempo de muestreo Se encuentra en milisegundos
unsigned long pasado=0; // tiempo pasado (Se hace para asegurar tiempo de muestreo)
unsigned long ahora;
//pulsador
int EDO1=0;
int EDOANT=0;
int out1=0;
int ON=24;
int OFF=26;

void setup() {
pinMode(2, OUTPUT); //Declaramos pin 2 como Ventilador
pinMode(3, OUTPUT); //Declaramos pin 3 como Resistencia activada
pinMode(ON,INPUT);
pinMode(OFF,INPUT);
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.print("Inicializando...");
delay (1000);
lcd.setCursor(0,1);
lcd.print("En espera...");
delay(1000);
lcd.setCursor(0,0);
lcd.print(" ");
for (int i=0; i<=1;i++){
lcd.setCursor(0,1);
lcd.print("Temp: ");
lcd.println(thermocouple.readCelsius());
lcd.println("C");
}
EDO1=digitalRead(24);
}

void loop() {
EDO1=digitalRead(24);

if ((EDO1==HIGH)&&(EDOANT==LOW))
{
out1=1-out1;
lcd.setCursor(0,0);
lcd.print("Activando sensor y resistencia de calor ");
delay(1);
lcd.setCursor(0,1);
lcd.print("Temp: ");
lcd.println(thermocouple.readCelsius());
lcd.println("C");
delay (1000);
}
EDOANT=EDO1;
delay (200);
if (out1==1)
{
unsigned long actual= millis();
double timeChange= (double)(ahora-pasado);
lcd.setCursor(0,1);
lcd.print("Temp: ");
lcd.println(thermocouple.readCelsius());
lcd.println("C");
lcd.setCursor(0,0);
lcd.print("e=");
lcd.println(error);
lcd.print("U=");
lcd.println(U);
error=10-(thermocouple.readCelsius());
errorSum=error + lastErr;// rev
int dErr=(error-lastErr);
U= kp*error+ki*errorSum+kd*dErr;
lastErr=error;
lastTime= actual;
delay (100);
if (U<0)
{
U=0;
double C=U;
lcd.setCursor(11,1);
lcd.print("H=");
lcd.println(C);
}

else{ int a=1;


}

if(0<U<=255)
{
int Valor=U;
int Vent=0;
analogWrite(3, Valor);
delay (10);
analogWrite(2, Vent);
delay (10);
lcd.setCursor(11,1);
lcd.print("V=");
lcd.println(Valor);
}
else{
if (U>255)
{
int Valor=255;
int Vent=0;
analogWrite(3, Valor);
delay (10);
analogWrite(2, Vent);
delay (10);
lcd.setCursor(11,1); //Se ajusta posición de
lcd.print("A=");
lcd.println(Valor);
}
else{
int Valor=0;
analogWrite(3,Valor);
lcd.setCursor(11,1); //Se ajusta posición de
lcd.print("C=");
lcd.println(Valor);
}
}
}
else
{
lcd.setCursor(0,0);
lcd.print("Sensor Apagado ");// impresión del lcd indicando que el sensor esta apagado
digitalWrite(3, LOW); //Si el valor de input es diferente de 1, se apaga el pin Resistencia
delay(1);
lcd.setCursor(0,1);
lcd.print("Temp: ");
lcd.println(thermocouple.readCelsius());
lcd.println("C");
}
delay(100);

You might also like