Você está na página 1de 13

UNIVERSIDAD AUTÓNOMA DE NUEVO LEÓN

FACULTAD DE INGENIERÍA MECÁNICA Y


ELÉCTRICA

Reporte Medio Curso PIA


Inteligencia Artificial
Ing. Javier de la Garza
Jueves M1-M3

1734691 Dylan Alejandro Rojas Aguilar


1791890 Andrea Amador Borgeño
1623496 Andrea Montelongo Rodríguez
1642839 Adrián Ramírez Martínez
1630390 Rodrigo Téllez García
1630122 Jorge Eduardo Pérez Santacruz

SAN NICOLÁS DE LOS GARZA, NUEVO LEÓN 27/09/2018


Introducción
En este trabajo se calculará la temperatura que genera una resistencia y el tiempo que
tarda en estabilizarse usando diferentes conocimientos de ingeniería tales como
programación y la realización de conexiones de compontes electrónicos.
Se utilizó una placa Arduino UNO, un sensor de temperatura LM35 y una resistencia
de 10Ω.
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.
El LM35 es un sensor de temperatura con una precisión calibrada de 1 ºC. Su rango de
medición abarca desde -55 °C hasta 150 °C. La salida es lineal y cada grado Celsius
equivale a 10 mV.
El sensor se presenta en diferentes encapsulados pero el más común es el to-92 de
igual forma que un típico transistor con 3 patas, dos de ellas para alimentarlo y la
tercera nos entrega un valor de tensión proporcional a la temperatura medida por el
dispositivo.
Con el LM35 de frente y las letras del encapsulado hacia arriba tenemos que de
izquierda a derecha los pines son: VCC – Vout – GND.
El sensor de temperatura no requiere de circuitos adicionales para calibrarlo
externamente. La baja impedancia de salida, su salida lineal y su precisa calibración
hace posible que esté integrado sea instalado fácilmente en un circuito de control.
Debido a su baja corriente de alimentación se produce un efecto de auto
calentamiento muy reducido.
El LM35 funciona en el rango de alimentación comprendido entre 4 y 30 voltios.

SAN NICOLÁS DE LOS GARZA, NUEVO LEÓN 27/09/2018


Diagrama del circuito

Funcionamiento:
El Arduino tiene una alimentación de 12V y en él va conectado un sensor de
temperatura LM35 en el pin A0 y una resistencia de 10Ω en el pin 3 que tiene la
función para PWM que permite regular la potencia que se le administra para que se
caliente a cierta temperatura y el sensor detecte esas diferentes temperaturas a un
determinado tiempo.

Resultados

Salida t(s) T(°C)


(PWM)
0% 0s 30.6°C

25% 90s 34.1°C


(63.75)

SAN NICOLÁS DE LOS GARZA, NUEVO LEÓN 27/09/2018


50% 90s 38°C
(127.5)
75% 90s 43.2°C
(191.25)
100% 90s 47.6°C
(255)
Programas Utilizados
Sistema Experto
const int sensor=A0, pinPWM=5;
float TemperaturaActual, TemperaturaDeseada, Error;
int LecturaA0, i, ValorPWM;

void setup() {
analogWrite (pinPWM, 128);
TemperaturaDeseada= 29;
Serial.begin(9600);
Serial.print(0);
Serial.print(" ");
Serial.print(40);
Serial.print(" ");
}
void loop() {
LecturaA0=0;
for (i=0;i<20;i++) {

SAN NICOLÁS DE LOS GARZA, NUEVO LEÓN 27/09/2018


LecturaA0 += analogRead(sensor);
delay(50);
}

TemperaturaActual = (LecturaA0 /1023.0) *5 *5;


Error=TemperaturaActual-TemperaturaDeseada;

if (TemperaturaActual < TemperaturaDeseada) {ValorPWM +=


1; }
if (TemperaturaActual > TemperaturaDeseada) {ValorPWM -= 1;
}
if (ValorPWM<0)
{
ValorPWM=0;
}
if(ValorPWM>255)
{
ValorPWM=255;
}
analogWrite (pinPWM,ValorPWM);
Serial.print("Temperatura Actual: ");
Serial.print(TemperaturaActual);
Serial.print(" ");
SAN NICOLÁS DE LOS GARZA, NUEVO LEÓN 27/09/2018
Serial.print("Temperatura Deseada: ");
Serial.print(TemperaturaDeseada);
Serial.print(" ");
Serial.print("PWM:");
Serial.println(ValorPWM);

delay(1000);
}
Lógica Difusa
const int TemperaturaPin=A0, PWMPin=5;
float TemperaturaActual, TemperaturaDeseada, FlotantePWM;
int LecturaA0,i,PWM;
float TemperaturaAnterior;
float Negativo;
float Cero;
float Positivo;
float Pendiente;
float Sube, Baja, Estable, Error, Decrementar, Incrementar,
Mantener, Cambio, R1, R2, R3, R4, R5, R6, R7, R8, R9;
float PorcentajePWM;

void setup()

SAN NICOLÁS DE LOS GARZA, NUEVO LEÓN 27/09/2018


{
analogWrite(PWMPin, 0);
TemperaturaDeseada=29;
Serial.begin(9600);
Serial.print(0);
Serial.print(" ");
Serial.print(40);
Serial.print(" ");

void loop()
{
TemperaturaAnterior=TemperaturaActual;
LecturaA0 = 0;
for (i=0;i<20;i++) {
LecturaA0 += analogRead(TemperaturaPin);
delay(200);
}
TemperaturaActual = (LecturaA0 / 1023.0) * 5 * 5;
Serial.println(TemperaturaActual);

SAN NICOLÁS DE LOS GARZA, NUEVO LEÓN 27/09/2018


Error= TemperaturaActual-TemperaturaDeseada;
Pendiente=(TemperaturaActual-TemperaturaAnterior);

//Pertenencia
if(Error < -4)
{
Negativo=1;
Cero=0;
Positivo=0;
}
if(Error > 4)
{
Negativo=0;
Cero=0;
Positivo=1;
}
if((Error > -4)&&(Error < 0))
{
Negativo=1-Cero;
Cero= (4-Error)/4;
Positivo=0;

SAN NICOLÁS DE LOS GARZA, NUEVO LEÓN 27/09/2018


}
if((Error > 0)&&(Error < 4))
{
Negativo= 0;
Cero= (4-Error)/4;
Positivo= (1-Cero);
}

if(Pendiente < -1)


{
Baja= 1;
Estable= 0;
Sube= 0;
}
if(Pendiente > -1)
{
Baja= 0;
Estable= 0;
Sube= 1;
}
if((Pendiente > -1)&&(Pendiente < 0))
{

SAN NICOLÁS DE LOS GARZA, NUEVO LEÓN 27/09/2018


Baja=1-Estable;
Estable= (1-Pendiente)/1;
Sube=0;
}
if((Pendiente > 0)&&(Pendiente < 1))
{
Baja=0;
Estable= (1-Sube);
Sube= (1-Pendiente)/1;
}

//Reglas
R1= min(Negativo,Baja);
R2= min(Negativo,Estable);
R3= min(Negativo,Sube);
R4= min(Cero,Baja);
R5= min(Cero,Estable);
R6= min(Cero,Sube);
R7= min(Positivo,Baja);
R8= min(Positivo,Estable);
R9= min(Positivo,Sube);

SAN NICOLÁS DE LOS GARZA, NUEVO LEÓN 27/09/2018


Incrementar=sqrt((sq(R1)+sq(R2)+sq(R4)));
Mantener=sqrt((sq(R3)+sq(R5)+sq(R7)));
Decrementar=sqrt((sq(R6)+sq(R8)+sq(R9)));

Cambio=((Decrementar* -
10)+(Mantener*0)+(Incrementar*10))/(Decrementar+Mantener+
Incrementar);
//Salida;
FlotantePWM=FlotantePWM+Cambio;
if(FlotantePWM > 255) (FlotantePWM = 255);
if(FlotantePWM<0) (FlotantePWM=0);
PWM=FlotantePWM;
analogWrite (PWMPin,PWM);
PorcentajePWM = (PWM / 255.0)*100;
Serial.print("Temperatura Actual: ");
Serial.print(TemperaturaActual);
Serial.print(" ");
Serial.print("Temperatura Deseada: ");
Serial.print(TemperaturaDeseada);
Serial.print(" ");
Serial.print("%PWM:");
Serial.print(PorcentajePWM);
Serial.print(" ");
SAN NICOLÁS DE LOS GARZA, NUEVO LEÓN 27/09/2018
Serial.print("Error: ");
Serial.print(Error);
Serial.print(" ");

}
Pruebas Previas

SAN NICOLÁS DE LOS GARZA, NUEVO LEÓN 27/09/2018


Conclusión grupal:
Se tuvo que aumentar el tiempo del sensor para que la resistencia estabilizara su
temperatura y pudiera detectarse lo más preciso posible. Sin embargo, se tuvo que
sacar un promedio de 3 intentos ya que los resultados variaban un poco.

Bibliografía:
http://www.iescamp.es/miarduino/2016/01/21/placa-
arduino-uno/
http://www.geekbotelectronics.com/producto/lm35-sensor-
de-temperatura/

SAN NICOLÁS DE LOS GARZA, NUEVO LEÓN 27/09/2018

Você também pode gostar