Está en la página 1de 6

1

Caracterización del voltaje (PWM) para el foco


(fuente de calor)
Esquivel Cruz Belén Abigail, 2021640213 Lozano Sanchez Karla Lorena, 2021640318 Torres Chávez Gonzalo
S, 2021640576 Vallejo Mora Luis Alberto, 2021640587

Abstract—Proyecto final de control neurodifuso en el que se F. Documentación y Capacitación


implementa el control difuso para una incubadora de huevos
de codorniz. En este se destaca la fuzificación de rangos, la Proporcionar documentación detallada sobre el fun-
asignacion de los conjuntos difusos y de las reglas de inferencia. cionamiento del sistema para usuarios y técnicos. Ofrecer ca-
Igualmente se ve la desfuzificacion de centros ponderados. En este pacitación adecuada para aquellos que operarán y mantendrán
proyecto se utilizo el PWM para la caracterizacion del voltaje la incubadora, asegurando un uso correcto y eficiente.
para la fuente de calor y humedad del sistema, utilizando el
software Arduino y Matlab.
II. D ESARROLLO
Index Terms—Unidad Profesional Interdisciplinaria en Inge-
nierı́a y Tecnologı́as Avanzadas, journal, LATEX, proyecto. La incubación exitosa de huevos de codorniz es un proceso
delicado que requiere la creación de condiciones ambientales
I. I NTRODUCCI ÓN óptimas para el desarrollo embrionario. La temperatura y la
humedad son factores crı́ticos que influyen directamente en el
L A combinación de una incubadora de huevos de codorniz
con un control neurodifuso de temperatura y humedad es
una propuesta innovadora. Aquı́ hay algunos aspectos clave
éxito de la incubación y la salud de las crı́as resultantes.
En términos de temperatura, se ha establecido que mantener
que podrı́an considerarse al desarrollar este proyecto. un rango constante entre 37.5 y 38.3 grados Celsius (99.5 a
100.9 grados Fahrenheit). Este rango imita las condiciones
A. Diseño del Control Neurodifuso naturales en las que las codornices incubarı́an sus huevos en
Desarrollar un sistema de control neurodifuso que interprete la naturaleza. Mantener una temperatura constante es esencial
de manera precisa y rápida los datos sensoriales de temperatura para un desarrollo embrionario adecuado, y fluctuaciones
y humedad. Implementar algoritmos que permitan la adaptabil- significativas pueden afectar negativamente el proceso.
idad y aprendizaje continuo del control neurodifuso. La humedad también desempeña un papel crucial en la
incubación de huevos de codorniz. Se recomienda mantener
B. Integración de Sensores una humedad relativa en el rango del 60 al 70 por ciento
Utilizar sensores de alta precisión para medir la temperatura durante la mayor parte del perı́odo de incubación. Durante los
y la humedad en la incubadora. Garantizar una comunicación últimos dı́as previos a la eclosión, algunos criadores optan por
efectiva entre los sensores y el sistema de control neurodifuso aumentar ligeramente la humedad para facilitar el proceso de
para recopilar datos en tiempo real. eclosión de los polluelos.
Para crear un ambiente controlado y establecer las condi-
C. Interfaz de Usuario ciones optimas para la incubación de huevos de codorniz es
esencial la implementación de un sistema de control neurodi-
Desarrollar una interfaz de usuario amigable que permita a
fuso, como se propuso en el proyecto, este ofrece la posibilidad
los usuarios monitorear y ajustar manualmente los parámetros
de ajustar dinámicamente las condiciones de temperatura y
de la incubadora si es necesario. Implementar funciones de
humedad. Para ello se crearon simulaciones, programas y un
visualización de datos para que los usuarios puedan seguir el
incubador que cumpla con estás condiciones.
progreso del proceso de incubación.
Los materiales que se utilizaron son los siguientes:
D. Pruebas y Optimización Material Cantidad
Realizar pruebas exhaustivas para validar la eficacia del Foco con socket y clavija 1
Arduino nano 1
sistema en diferentes condiciones ambientales y situaciones de Relevador de estado sólido 1
incubación. Optimizar constantemente el algoritmo del control Sensor de temperatura DS18X20 1
neurodifuso para mejorar su rendimiento y eficiencia. TABLE I
L ISTA DE MATERIALES .

E. Seguridad y Fiabilidad
Incorporar caracterı́sticas de seguridad para evitar condi- En la siguiente figura se pueden observar todas las partes
ciones extremas que puedan afectar negativamente los huevos que componen nuestro sistema (incubadora); para la selección
o la incubadora. Garantizar la fiabilidad del sistema mediante de los materiales se tomaron diversos aspectos en consid-
pruebas rigurosas y mecanismos de respaldo en caso de fallas. eración, como:
2

• La tapa y base del sistema debe soportar las temperaturas • El tipo de foco a utilizar debe ser de luz amarilla y
a las que se someterá el huevo, a modo de que no se altere de filamento para que se presente un aumento en la
su composición y estructura. El material que utilizamos temperatura, otros tipos de focos como los de LED no
para la base al tratarse de una impresión en 3D fue PLA son funcionales pues no representan una fuente de calor.
mientras que las paredes fueron de acrı́lico. Para este también consideramos que fuera alargado

Fig. 4. Foco utilizado


Fig. 1. Modelo de la base en 3D.
buscando que la dispersión de calor fuera uniforme a toda
Las medidas para cada lado del hexágono fueron de la incubadora y no se centrara solo a la placa con los
80.774 mm. Mientras que para la altura de las paredes huevos.
fueron 350 mm, esto debido a que procuramos alejar el • La base de los huevos debe mantener en su posición el
humidificador del foco para evitar que este se mojara producto sin que se vea afectado por la inclinación.
directamente o se derritiera paulatinamente la carcasa del • Para otros componentes como el humificador y motor
humidificador. En este punto también consideramos un se tomarón en cuenta principalmente como aspectos el
diámetro máximo de 20.41 mm para los orificios donde tamaño y su practicidad pues ya viene con una placa
ı́bamos a posicionar cada huevo. que nos ayuda a tratarlo como si fuera un interruptor, de
• Los sensores de nuestra elección deben cumplir con manera que en el programa solo deben enviarse pulsos
requerimientos similares alde los materiales de la tapa y para activarlo y desactivarlo.
base ya que se posicionarán cerca de la fuente de calor,
ası́ mismo, son enfocados a una sola función cada uno
de ellos.
El sensor de temperatura usado fue el DS18B20 debido
a que al ser un sensor sumergible no tendrı́amos que
preocuparnos por el contacto que tuviese con el agua del
humidificador, pues en la etapa de pruebas podrı́an pre-
sentarse porcentajes de humedad extremos. Por otro lado,

Fig. 2. Sensor de temperatura sumergible


Fig. 5. Ilustración con las partes componentes de la incubadora.
para el sensor de humedad optamos por usar el DHT11
y nos permitio realizar las mediciones correctamente. Con estos materiales se construyo una incubadora cuyo pro-
grama en fuzzy tiene 3 funciones de membresia que relacionan
el nivel de temperatura y húmeda con una salida PWM para el
control y regulación de temperatura, estas funciones se dividen
en bajo, medio y alto, siendo medio el valor óptimo para la
incubación del huevo

A. Simulación en fuzzy logic


III. R ESULTADOS
Fig. 3. Sensor de humedad DHT11
A. Comparación del sistema fuzzy en temperatura propuesto
con el programado en arduino
3

Fig. 6. Función de membresia para la entrada de la temperatura.


Fig. 8. Salida en fuzzy logic a una temperatura de 35 grados.

Fig. 7. Función de membresia para salida de la temperatura.


Fig. 9. Salida en Arduino a una temperatura de 35 grados.

Observamos que con apoyo de la herramienta fuzzy en


MATLAB definimos las figuras correspondientes a cada uno 27 % Bucle para calcular valores de pertenencia
de nuestros parámetros considerados. Al realizar una com- para el rango de 0 a 40 grados
paración de las salidas obtenidas en nuestro sistema y el 28 for x = 0:0.1:40
código de control del sistema fı́sico, observamos que estas 29 % E v a l a y asigna valores para la
concuerdan. f u n c i n de pertenencia "Baja"
30 if x < a1
1 % Limpieza del entorno de MATLAB 31 Baja(i) = 1;
2 close all; % Cierra todas las figuras 32 if valor == x
abiertas 33 Valorbajo = Baja(i);
3 clear all; % Borra todas las variables del 34 end
espacio de trabajo 35 elseif a1 <= x && x < b1
4 clc; % Limpia la ventana de la l n e a 36 Baja(i) = 1;
de comandos 37 if valor == x
5 38 Valorbajo = Baja(i);
6 % Se solicita al usuario que ingrese un valor 39 end
entre 0 y 40 grados Celsius 40 elseif b1 <= x && x < c1
7 valor = input(’Ingrese un valor de 0-40 C : ’) 41 Baja(i) = 1;
; 42 if valor == x
8 43 Valorbajo = Baja(i);
9 % Definici n de variables para valores de 44 end
l mites 45 elseif c1 <= x && x < d1
10 a1 = 0; 46 Baja(i) = (d1 - x) / (d1 - c1);
11 b1 = 0; 47 if valor == x
12 c1 = 36; 48 Valorbajo = Baja(i);
13 d1 = 37; 49 end
14 50 else
15 i = 1; % Inicializaci n de contador 51 Baja(i) = 0;
16 52 if valor == x
17 % Definici n de valores para diferentes 53 Valorbajo = Baja(i);
rangos 54 end
18 a2 = 36; 55 end
19 b2 = 37; 56

20 c2 = 38; 57 % E v a l a y asigna valores para la


21 f u n c i n de pertenencia "Media"
22 a3 = 37; 58 if x < a2
23 b3 = 38; 59 Media(i) = 0;
24 c3 = 40; 60 if valor == x
25 d3 = 40; 61 Valormedio = Media(i);
26 62 end
4

101 end
102

103 i = i + 1; % Incrementa el contador


104 end
105

106 % Imprime los valores de pertenencia


107 fprintf(’Valor de pertenencia en Bajo es = %f
\n’, Valorbajo)
108 fprintf(’Valor de pertenencia en Medio es = %f
\n’, Valormedio)
109 fprintf(’Valor de pertenencia en Alto es = %f
\n’, Valoralto)
Fig. 10. Salida en fuzzy logic a una temperatura de 37 grados. 110

111 % Configuraci n y visualizaci n de g r f i c o s


para las funciones de pertenencia
112 y1 = 0:0.01:1;
113 x1 = 0:0.1:40;
114 figure()
115 hold on
116 plot(x1, Baja, ’Color’, [1 0.35 0.37], ’
Linewidth’, 2)
117 plot(x1, Media, ’Color’, [1 0.792 0.227], ’
Linewidth’, 2)
118 plot(x1, Alta, ’Color’, [0.545 0.784 0.149], ’
Linewidth’, 2)
119 plot(valor, y1, ’ro’, ’Linewidth’, 2)
120 axis([34, 40, 0, 1])
Fig. 11. Salida en Arduino a una temperatura de 37 grados. 121 legend(’Bajo’, ’Medio’, ’Alto’, ’Valor’)
122 set(gca, ’FontSize’, 14)
123 xlabel(’Temperatura C ’, ’FontSize’, 20)
63 elseif a2 <= x && x < b2 124 ylabel(’Pertenencia’, ’FontSize’, 20)
64 Media(i) = (x - a2) / (b2 - a2); 125 title(’Entrada’, ’FontSize’, 20)
65 if valor == x 126 grid on;
66 Valormedio = Media(i); 127 grid minor;
67 end 128 ax.GridAlpha = 0.4;
68 elseif b2 <= x && x < c2 129 ax.MinorGridAlpha = 0.3;
69 Media(i) = (c2 - x) / (c2 - b2); 130 ax.XTick = [0 2 3 4 6 7 8 10];
70 if valor == x 131 ax.YTick = -2:0.5:2;
71 Valormedio = Media(i); 132 ax.Box = ’on’;
133
72 end
73 else 134 %%%%%%%%%%%%%%%%%
135
74 Media(i) = 0;
75 if valor == x 136 % Segunda parte del c d i g o para otro conjunto
76 Valormedio = Media(i); de funciones y valores
137
77 end
78 end 138 % Definici n de variables para otro conjunto
79
de valores
80 % E v a l a y asigna valores para la 139 a1 = 0;
f u n c i n de pertenencia "Alta" 140 b1 = 0;
81 if x < a3 141 c1 = 30;
82 Alta(i) = 0; 142 d1 = 60;
143
83 if valor == x
84 Valoralto = Alta(i); 144 i = 1; % Inicializaci n del contador
145
85 end
86 elseif a3 <= x && x < b3 146 % Definici n de otro conjunto de valores para
87 Alta(i) = (x - a3) / (b3 - a3); diferentes rangos
88 if valor == x 147 a2 = 30;
89 Valoralto = Alta(i); 148 b2 = 60;
90 end 149 c2 = 90;
150
91 elseif b3 <= x && x < c3
92 Alta(i) = 1; 151 a3 = 60;
93 if valor == x 152 b3 = 90;
94 Valoralto = Alta(i); 153 c3 = 120;
154
95 end
96 else 155 a4 = 60;
97 Alta(i) = 1; 156 b4 = 90;
98 if valor == x 157 c4 = 120;
158
99 Valoralto = Alta(i);
100 end 159 % Bucle para calcular valores de pertenencia
5

para el nuevo rango de 0 a 120 17 const int humedad = 10;


160 for x = 0:0.1:120 18 int pos = 0;
161 % E v a l a y asigna valores para la 19 float valor = 0.0;
f u n c i n de pertenencia "Baja" con 20 float Valorbajo = 0.0, Valormedio = 0.0,
nuevos valores Valoralto = 0.0;
162 % ... 21
163 % E v a l a y asigna valores para las 22 // Definimos intervalos para determinar
funciones "Media" y "Alta" con nuevos valores de pertenencia
valores 23 float a1 = 0, b1 = 0, c1 = 36, d1 = 37;
164 % ... 24 float a2 = 36, b2 = 37, c2 = 38;
165 i = i + 1; % Incrementa el contador 25 float a3 = 37, b3 = 38, c3 = 40;
166 end 26

167 27 float maxValor = 0.0;


168 % Configuraci n y visualizaci n de g r f i c o s 28
para las nuevas funciones de pertenencia 29 void setup() {
169 y=0:0.01:1; 30 delay(1000);
170 x=0:0.1:120; 31 i = 0;
171 hold on 32 Serial.begin(9600);
172 plot(x,Baja,’Color’,[1 0.35 0.37],’Linewidth’ 33 sensors.begin(); // Se inicia el sensor
,2) ds18x20
173 plot(x,Media,’Color’, [1 0.792 0.227],’ 34 dht.begin(); // Comenzamos el sensor DHT
Linewidth’,2) 35 myservo.attach(7); // Se adjunta el servo al
174 plot(x,Alta,’Color’,[0.545 0.784 0.149],’ pin 7
Linewidth’,2) 36 }
175 axis([0,120,0,1]) 37
176 legend(’Bajo’,’Medio’,’Alto’) 38 void loop() {
177 set(gca,’FontSize’,14) 39 Serial.println(i); // Imprime el valor
178 xlabel(’Voltaje’,’FontSize’,20) actual de ’i’
179 ylabel(’Pertenencia’,’FontSize’,20) 40 sensors.requestTemperatures(); // Se e n v a
180 title(’Salida’,’FontSize’,20) el comando para leer la temperatura
181 grid on; 41 float x = sensors.getTempCByIndex(0); // Se
182 grid minor; obtiene la temperatura en C
183 ax.GridAlpha = 0.4; 42 Serial.println(x); // Se imprime la
184 ax.MinorGridAlpha = 0.3; temperatura
185 ax.XTick = [0 2 3 4 6 7 8 10]; 43 float h = dht.readHumidity(); // Se lee la
186 ax.YTick = -2:0.5:2; humedad del sensor DHT
187 ax.Box = ’on’; 44 Serial.println(h); // Se imprime la humedad
45

Para la implementación de la dufusificación de nuestro 46 // Evaluaci n de valores de pertenencia


para diferentes rangos de temperatura
sistema, se utilizó programación en Arduino, en donde se 47 // Determina los valores de Valorbajo,
permite realizar el control de nuestras variables mediante Valormedio y Valoralto
PWM, estos PWM nos permite regular la intensidad de nuestro 48 // s e g n los intervalos definidos
LED para el control de temperatura y el otro PWM nos permite anteriormente
controlar el encendido y apagado de nuestro humificador, a 49
50 if (x < a1) {
continuación se muestra el código: 51 Valorbajo = 1.0;
1 #include <OneWire.h> 52 } else if (a1 <= x && x < b1) {
2 #include <DallasTemperature.h> 53 Valorbajo = 1.0;
3 #include <Servo.h> 54 } else if (b1 <= x && x < c1) {
4 #include <DHT.h> // Incluimos l i b r e r a 55 Valorbajo = 1.0;
5
56 } else if (c1 <= x && x < d1) {
6 #define DHTPIN 3 // Definimos el pin digital 57 Valorbajo = (d1 - x) / (d1 - c1);
donde se conecta el sensor 58 } else {
7 #define DHTTYPE DHT11 // Dependiendo del tipo 59 Valorbajo = 0.0;
de sensor 60 }
61
8

9 OneWire ourWire(2); // Se establece el pin 2 62 // ( C o n t i n a el c l c u l o de Valormedio y


como bus OneWire Valoralto basado en rangos de
10 DallasTemperature sensors(&ourWire); // Se temperatura)
63
declara una variable u objeto para nuestro
sensor 64 // C l c u l o del m x i m o entre Valorbajo,
11 DHT dht(DHTPIN, DHTTYPE); // Inicializamos el Valormedio y Valoralto con ciertas
sensor DHT11 condiciones
12 Servo myservo; 65 // y establecimiento de un valor m x i m o (
13
maxValor)
66
14 int valorPWM = 0;
15 int i = 0; 67 // Control de un PWM basado en maxValor
16 const int pinPWM = 9; calculado
6

68 valorPWM = int(maxValor * 51);


69 analogWrite(pinPWM, valorPWM);
70
71 // Control del servo y una salida digital (
humedad) basado en valores de humedad
72 // Se reinicia el contador ’i’ d e s p u s de 5
iteraciones, con pausas entre
iteraciones
73 if (i == 5) {
74 // Acciones basadas en la humedad l e d a
75 // (control de servo y salida digital)
76

77 i = 0; // Reiniciamos el contador d e s p u s
de la ejecuci n
78 }
79

80 i = i + 1; // Incrementamos el contador en
cada i t e raci n
81 delay(500); // P e q u e a pausa entre
iteraciones
82 }

A PPENDIX A
P ROOF OF THE F IRST Z ONKLAR E QUATION
Appendix one text goes here.

A PPENDIX B
Appendix two text goes here.

AGRADECIMIENTOS
Los autores agradecen...

R EFERENCES
[1] H. Kopka and P. W. Daly, A Guide to LATEX, 3rd ed. Harlow, England:
Addison-Wesley, 1999.

También podría gustarte