INCUBADORA CON CONTROL DE TEMPERATURA AUTOMÁTICO Y VOLTEO DE HUEVOS; CADA 6 HORAS 1/4 DE VUELTA
Realizado por : Joaquín Berrocal Piris. Visitar; http://iesccp.comze.com/ 1
INCUBADORA Autor: JOAQUÍN BERROCAL PIRIS Fecha : 2001.
► DISPONE DE: ◊ UN TERMÓMETRO PARA VERIFICAR LA TEMPERATURA DE LA INCUBADORA. ◊ UN CONTROL DE TEMPERATURA AJUSTABLE MEDIANTE POTENCIÓMETRO (dispone de NTC 47K un TRIAC T2801D y un Diac BR100/03)) ◊ ACTÚA SOBRE DOS LÁMPARAS (del tipo usado en laboratorios fotográficos de 60W cada una) LAS CUALES SE ILUMINARÁN MÁS O MENOS MANTENIENDO LA TEMPERATURA ADECUADA. (37,8ºC para los huevos de gallinas) ◊ UN MOTOR de 12V DC (sacado de un motor de ralentí de un sistema de inyección monopunto Renault 19) ◊ UN CIRCUITO ELECTRÓNICO QUE CONTROLA LAS VUELTAS QUE DA EL MOTOR. ◊ EL SISTEMA HACE QUE EL MOTOR GIRE LAS VUELTAS NECESARIAS PARA HACER VOLTEAR LOS HUEVOS 1/4 DE VUELTA CADA 6 HORAS . LO QUE HACE QUE DEN UNA VUELTA COMPLETA CADA 24 Horas. (de esta manera se calientan por igual en toda su superficie.) ◊ UN HIGRÓMETRO PARA EL CONTROL DE LA HUMEDAD. “SE ACONSEJA MANTENER UNA HUMEDAD DEL 65 % EN EL INTERIOR. Para conseguirlo tan sólo hemos de colocar uno o dos tapes pequeños con agua en la parte inferior del habitáculo. ◊ UN VENTILADOR DE LOS USADOS EN LOS PC’S PARA PROVOCAR UNA CORRIENTE DE AIRE QUE SIRVE PARA HOMOGENIZAR EL NIVEL DE TEMPERATURA Y HUMEDAD EN TODO EL RECINTO. ► CONDICIONES DE TRABAJO PARA HUEVOS DE GALLINA: ◊ Temperatura; 38ºC ◊ Humedad; 65 % ◊ Tiempo de gestación ; aprox. 21 días ◊ Dos días antes desconectar el motor DC con su interruptor “Led rojo desconectado” Esto es para posicionar los pollitos y no queden atrapados en una posición inadecuada.
Realizado por : Joaquín Berrocal Piris. Visitar; http://iesccp.comze.com/ 2
Realizado por : Joaquín Berrocal Piris. Visitar; http://iesccp.comze.com/ 3
Realizado por : Joaquín Berrocal Piris. Visitar; http://iesccp.comze.com/ 4
Realizado por : Joaquín Berrocal Piris. Visitar; http://iesccp.comze.com/ 5
Realizado por : Joaquín Berrocal Piris. Visitar; http://iesccp.comze.com/ 6
Realizado por : Joaquín Berrocal Piris. Visitar; http://iesccp.comze.com/ 7
Realizado por : Joaquín Berrocal Piris. Visitar; http://iesccp.comze.com/ 8
Realizado por : Joaquín Berrocal Piris. Visitar; http://iesccp.comze.com/ 9
CIRCUITO ELECTRÓNICO PARA EL CONTROL DEL GIRO DEL MOTOR Y DE LA TEMPERATURA
Realizado por : Joaquín Berrocal Piris. Visitar; http://iesccp.comze.com/ 10
Realizado por : Joaquín Berrocal Piris. Visitar; http://iesccp.comze.com/ 11
ESQUEMA ELECTRÓNICO: 1-. Del Regulador de Temperatura -. con triac T2810D(400V-6A) -. con Diac BR 100/03 -. NTC 47K y Potenciómetro 200K 2-. Circuito Activación del motor -. Cada 6 horas hará que los huevos Se desplacen ¼ de vuelta. Lo que supone unas 35 vueltas del motor 3-. PROGRAMA EN PICBASICPRO para quien desee modificarlo a su propio interés. NOTA: No es el original montado en la incubadora. Pero perfectamente válido. En este esquema se utiliza un PIC16F628A ( en el montaje real utilicé un 16F873)
Realizado por : Joaquín Berrocal Piris. Visitar; http://iesccp.comze.com/ 12
Realizado por : Joaquín Berrocal Piris. Visitar; http://iesccp.comze.com/ 13
Realizado por : Joaquín Berrocal Piris. Visitar; http://iesccp.comze.com/ 14
'****************************************** '* Nombre : INCUBADORA.pbp * '* Autor : Joaquín Berrocal * '* Copyright : Copyright * '* Fecha : ABRIL-2013 * '* Versión : 1.0 * '****************************************** ;***************OBSERVACIONES PREVIAS:*************** ;PIC 16F628A (2k memoria flash) pero se puede utilizar otros más pequeños ;frecuencia a 4 MHZ ;************************************************* ;-----------------FUNCIONAMIENTO-------------------------'utilizo estas patillas por no usar las que el PBP utiliza por 'defecto para el manejo de una LCD --> A4-B3-A0 a A3 'RB3 -'RB0/INT --'Entrada de los pulsos del giro del motor DC (0V sector negro) 'entrada de pulsos del motor através del sensor optico ECG3100 'para contar las vueltas. Ver pag 87 3ª edicion 'RB1 -- Activación transistor/Relé Giro Adelante 'RB2 -- Activación transistor/Relé Giro ATRÁS 'RB3 -- Entrada de Final de Carrera FC1 (activa por 0V al ser pulsado) 'RB4 -- Entrada de Final de Carrera FC2 (activa por 0V al ser pulsado) 'NOTA: EL TIEMPO LO TENGO PUESTO SÓLO PARA 6 Sdos. en lugar de 6 H. para 'poder ver y simular en el PROTEUS. PARA APLICARLO CAMBIAR LA RUTINA 'TIEMPO_6H: 'REALIZADO POR TECNICA PULLING es decir por sondeo constante de los pines 'conectados a los finales de carrera FC1 = RB3 y FC2 = RB4 'Evito con ello el problema de hacerlo con interrupciones: '''PROBLEMAS AL HACERLO CON INTERRUPCIONES ''' '-. Si se pulsara cualquier Final de Carrera, aunque no '-. fuese de forma permanente; al terminar la espera de 6H. haría la interrupcion '-. y de ahí "Interrupcion" y volvería a INICIO volviendo a hacer '-. otra espera de 6H. '********************************************************** 'DEFINICIONES INICIALES. Fusibles de configuración. define Osc 4
' Define el Oscilador para un Cristal ' de 4 Mhz.
' Configuración de Puertos: 'NOTA ADCON1 = 7 para los pic que tienen conversores A/D como el 'PIC16F87X SUSTITUIR POR CMCON = 7 si lleva comparadores y no conversores A/D 'como sucece en los 16F628A (ver pag 43 3ªedicion) CMCON = 7'PARA CONFIGURAR EL PUERTO A COMO ENTRADA/SALIDA (no lleve este pic 'conversore A/D y sí comparadores por ello poner 'CMCON = 7 en lugar de "ADCON1 = 7" 'en los pic el RA4 esta a colector abierto conectarlo a 'pull-up (+) su salida a nivel 0 ok pero flotará cuando 'su salida se active a nivel 1. 'El RA5 sólo puede ser configurado como ENTRADA. ver pags '38-43-77 'NOTA PREFIERO CONFIGURAR COMO SALIDA TODOS LOS PINES QUE NO UTILIZO 'PARA EVITAR PROBLEMAS CON CONVERSORES ANOLOGICOS DIGITALES DE LOS PUERTOS
Page 1 of 5
'RA5 DEBE SER SIEMPRE CONFIGURADO CONO ENTRADA en estos PICS 16F628A '(ver pag 77 3ª edicion) TRISA = %00010000 'los demás pines del PuertoA los configuro 'como salida por seguridad Pero NO ES NECESARIO TRISB = %00011001
' Configura RB0/INT como entrada para contaje vueltas motor 'entrada de los pulsos del optoacoplador ECG3100 'que cuenta las vueltas del motor. nivel 0 sector negro. 'RB1 --- Salida para activar la marcha_Adelante a nivel 0 'RB2 --- Salida para activar la marcha_Atras a nivel 0 'RB3 Y RB4 como entrada de los finales de carrera FC1 y FC2
' Declaramos las variables: Marcha_Adelante var Portb.1 'RB1para activar T1/RELE 1 Marcha Adelante Marcha_Atras var Portb.2 'RB2 para activar T2/RELE 2 Marcha Atrás X var word ' Variable para el contaje del tiempo espera 6 horas Contaje var byte 'Variable para el contaje de vueltas del motor DC 'considerando que el Diámetro de un huevo es de unos '50 mm ,que la varilla roscada es de paso 1,25 mm ' y dejando una holgura de unos 10 mm y otros 10 mm 'por desfases en el desplazamiento de los huevos. 'el recorrido total que debe hacer el carro para rotar 'completamente los huevos será: 'longitud = 3,14 x 50 mm = aprox 155 mm '155 mm + 10mm holgura + 10 mm posibles resbalam. = 175 mm ' 175 mm : 1,25 mm paso = 140 vueltas : 4 = 35 vueltas 'de la varilla roscada para mover 1/4 de vuelta los huevos. 'cada 6 horas realizará 1/4 de vuelta de los huevos 'para que en 24 horas se hayan dado una vuelta completa. 'NOTA. los Flags se grabaran en posición EEPROM 1 Y 2 Respectivamte. 'Los utilizo para que si se va la luz una vez vuelva se sepa hacia donde 'debe seguir desplazandose el motor. Flag_FC1 var byte Flag_FC2 var byte FC1 var PortB.3 FC2 var PortB.4
'flag indicador de estar pulsado el Final de Carrera 1 'flag indicador de estar pulsado el Final de Carrera 2
'para designar los Finales de carrera FC1 y FC2 'activos a nivel 0 V
Option_Reg = %00000000
'RBPU# = 1 Pull-up Desactivadas 'RBPU# = 0 Pull-up del Puerto B Activadas
'++++++ INICIO +++++ INICIO: high Marcha_Atras 'Desactivado con HIGH activado con LOW high Marcha_Adelante Contaje = 0 call TIEMPO_6H
'Inicializa el contaje 'Lo primero hacer el tiempo de 6 horas. para luego
'Crear y Guardar los flags para saber donde debe girar. 'Si es FC1 activo escribe 170 en posición 1 y 0 en posición 2
Page 2 of 5
if FC1 = 0 then high Marcha_Atras 'Desactivado con HIGH activado con LOW low Marcha_Adelante ''''EEPROM 1,[170,0] 'LO ANULO PORQUE DA PROBLEMAS SIMULACIÓN PROTEUS 'al utilizar dos veces esta instrucción en la MISMA RUTINA "INICIO" write 1,170 write 2,0 goto Espera_Suelte_FC
'y de ahí irá a "CONTAJE_VUELTAS"
endif 'Si es FC2 Activo escribe 0 en posición 1 y 170 en posición 2 if FC2 = 0 then 'EEPROM 1,[0,170]' lo quito por no aceptar esta instrucción 2 veces 'en la misma RUTINA "INICIO high Marcha_Adelante 'Desactivado con HIGH activado con LOW low Marcha_Atras write 1,0 write 2,170 goto Espera_Suelte_FC
'y de ahí irá a "CONTAJE_VUELTAS"
endif read 1,Flag_FC1 read 2, Flag_FC2
'lee la posición 1 de la EEPROM y la guarda 'en la variable "Flag_FC1" 'lee la posición 2 y lo guarda en Flag_FC2"
if (FC1 = 1) and (FC2 = 1) and (Flag_FC1 = 170) then high Marcha_Atras 'Desactivado con HIGH activado con LOW low Marcha_Adelante goto CONTAJE_VUELTAS endif if (FC1 = 1) and (FC2 = 1) and (Flag_FC2 = 170) then high Marcha_Adelante 'Desactivado con HIGH activado con LOW low Marcha_Atras goto CONTAJE_VUELTAS endif 'En caso de no tener ningún flag indicador ir hacia adelante: 'Marcha_Adelante y guardar en la EEPRON los valores de los Flag_FC1-2 'para que así ya pueda saber en qué sentido debe girar hasta el próximo 'Final de Carrera que se encuentre. if (FC1 = 1) and (FC2 = 1) and (Flag_FC1 <> 170) and (Flag_FC2 <> 170) then high Marcha_Atras low Marcha_Adelante
'Desactivado con HIGH. Activado con LOW
' EEPROM 1,[170,0] write 1,170 'Guardamos para el flag de Marcha Adelante write 2,0 goto CONTAJE_VUELTAS endif
Page 3 of 5
'----------------------------------------------------------goto INICIO 'en principio sobra, pero por si acaso lo dejo. '----------------------------------------------------------'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ '++++++ RUTINA PARA EL CONTAJE DE TIEMPO: 1 minu x 360 = 6 Horas +++++ TIEMPO_6H:
'lo pongo de 6 sgdos para las pruebas
for X = 1 to 6''360 pause 1000'60000 next return
'bucle de 360 ciclos de 1 minuto = 6 Horas 'variable WORD puede contar de 0 a 65535 ms 'Retorno
'RUTINA PARA ESPERAR SE SUELTE EL EL FC O LOS PULSOS DEL GIRO DEL MOTOR 'Y EVITE ASÍ EL INCREMENTO DESCONTROLADO DE LA VARIABLE "Contaje" Espera_Suelte:
'aquí son los pulsos del giro del motor
pause 20 'para estabilizar tensión evita rebote de contactos if PortB.0 = 0 then goto Espera_Suelte return '----------------------------------------------------'RUTINA PARA QUE SALGA DEL FINAL DE CARRERA y vaya al '"CONTAJE_VUELTAS". De esta manera estará operativa 'sin problemas el chequeo de los Finales de Carrera FC1 y FC2 'para detener de forma instantánea el motor. Espera_Suelte_FC: pause 20 'para estabilizar tensión evita rebote de contactos 'Hasta que no salga de los Finales de carrera no hacer el contaje. if FC1 = 0 or FC2 = 0 then goto Espera_Suelte_FC '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ '++++++ RUTINA PARA EL CONTAJE DE LAS VUELTAS DE GIRO DEL MOTOR +++++ 'POR RB0 recibe los pulsos del optoacoplador ECG3100 pag 87 3ª edic. '""CADA VEZ QUE PASE POR LA FRANJA NEGRA DARÁ UN PULSO (0)"" CONTAJE_VUELTAS: 'Se daran en 24 Horas un giro completo de los huevos 'haciendo un recorrido total de 175 mm 'Cada 6H habra 1/4 de recorrido haciendo un contaje de '35 vueltas x 1,25mm paso = 43,75 mm 'haciendo como ya dije al cabo de las 24H un total de 175 mm 'y una vuelta completa de los huevos. if PortB.0 = 0 then 'Es cero cuando pasa la banda negra por el sensor call Espera_Suelte 'espera suelte tecla para volver a contar Contaje = Contaje + 1 'incrementamos variable "Contaje" endif
'----No es un rebote, verifica cual FC1-2 ha sido pulsado ------'Chequeo pulling de los finales de carreara para parar de forma inmediata 'el giro del motor if FC1 = 0 then
Page 4 of 5
write 1,170 write 2,0 pause 30 goto INICIO
'valor del Flag_FC1 'para evitar los rebotes 30 ms
(se puede suprimir)
' Se envía a INICIO donde se inicia el "Contaje", ' Se PARA el MOTOR, y se hace la espera de los ' 6 Horas antes de volver a poner en marcha el motor
endif if FC2 = 0 then write 1,0 'valor del Flag_FC1 write 2,170 pause 30 'para evitar los rebotes 30 ms (se puede suprimir) goto INICIO
'se envia a INICIO donde se inicia el "Contaje", ' Se PARA el MOTOR, y se hace la espera de los ' 6 Horas antes de volver a poner en marcha el motor
endif '------------------------------------------------------------------'PARA PODER PROBAR Y SIMULAR SÓLO PONGO 6 vueltas en lugar de 35 if Contaje>=6 then goto INICIO
'¡¡¡ cuando llegue a (6 vueltas!!)activar !!!
'se hace la espera de 6h (6 segdos) y se chequea los FC1-2
else goto CONTAJE_VUELTAS
'Si no se ha llegado a las 35 vueltas 'seguir seteando el contaje
endif '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ end
'fin del programa
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Page 5 of 5