Controlador de puerta de gallinero.

Hola a todos os presento mi proyecto de controlador de puerta de gallinero.

circuito.jpg

Hará cosa de un año tenía en un patio unas pocas gallinas y una habitación que hacía las veces de gallinero, donde ellas iban a dormir y poner sus huevos. Pero desgraciadamente, una día me encontré una gallina descabezada y pensé que me iba a quedar sin gallinas. Efectivamente, en cuestión de tres días, una alimaña: zorra, hurón, garduña (no se exactamente cúal) acabo con las gallinas.

Por problemas de trabajo, no puedo estar abriendo el gallinero por las mañanas y cerrándolo por la noche. Pero la solución es obvia, hay que poner una puerta, para que por la noche, que es cuando las alimañas se atreven a atacar el gallinero este cerrado. Y por otro lado, al ser de día se abrá.

Busque por Internet productos "comerciales" y los encontré. Pero estos productos tienen dos defectos:

  • Precio. El más barato que encontré rondaba los 150€ y solo el controlador, la puerta por otro lado.
  • Mecanismo de puerta. Los "baratos" funcionan con un mecanismo de cuerda, que funciona pero le veo pegas: se puede levantar fácilmente y si el carril se llena de mierda al final no cierra. Los hay con actuadores lineales, pero esos ya suben a la friolera de 500€ y más.

No voy a decir marcas y modelos, podeis buscarlo en Internet poniendo "puerta automatica de gallinero".

La solución: ARDUINO.

En un principio pensé como debía funcionar. Pensé en un sensor de luz. Pero el patio está bien orientado al sur, pero hay una casa alta al lado, con lo que hace sombra. En un día nublado de invierno, con pocas horas de sol y además con sombra, dudo mucho del funcionamiento de este. También pensé en que se abrierá a una hora fija, que yo le diga, pero claro, todos sabemos que el sol no sale y se pone a la misma hora todos los días, así que pensé que debería poder calcular el orto/ocaso del sol y que la puerta se abriera en consecuencia.

Ea, como no me decidía por ningún modo, al final ¡los tiene todos! Es decir, el usuario puede elegir entre: manual, hora fija, sensor de luz, hora solar. Ya solo es cuestión de probarlos todos y el que mejor funcione se queda.

El siguiente proceso era elegir el mecanismo de la puerta, aquí era fácil: husillo tuerca. Preparé un bastidor con las dimensiones de la puerta y me puse a buscar un motor que la moviera.

Mi primera elección fue un atornillador de mano que compré por cuatro perras y que menos mal que era barato, porque atornillaba dos tornillos y lo tenía que poner a cargar.

taladro.jpg

Así que lo desmonté, saque la bateria (800mA/h) y la electrónica e instalé dos cables al motor. Conecté el motor al husillo y probé la puerta. El motor se comía 2.3A, con razón no atornillaba nada, ya que la bateria se gastaba pronto. Hize unos cuantos experimentos subiendo y bajando la puerta y bien, me convencía el funcionamiento. Lo que no me convencía era el consumo. Así que busque una fuente de las que tengo por ahí de cargadores viejos, una de 3A y cual fue mi sorpresa: no mueve el motor. El sistema de protección de la fuente la cortaba, eso significaba que el consumo durante el arranque era mayor. Pero me asuste más cuando buscando, me encontré con otra fuente que daba 10A y ¡tampoco fue capaz de mover la puerta!. Obviamente, deseché la idea de usar ese motor.

Ya solo me quedaban dos alternativas: usar servos o motores paso a paso. Tengo algunos rulando por el taller.

Al final decidí probar con un servo MG995, en teoría tiene un buen par, es pequeño y engranajes metálicos. Lo truqué, para que funcionara como motor. Lo monte en la puerta y, cual fue mi sorpresa, abría y cerraba a la perfección. El único "pero" es que es lento. Las RPM del servo son pocas y la puerta tardá aproximadamente unos 8 minutos en abrir y cerrar. Pero bueno, no importa. Mejor que vaya despacio, las gallinas cuando lo oigan sabrán que ya pueden irse a acostar/levantar y que les va a dar tiempo. Es más, si se cerrase muy deprisa podría pillar alguna gallina debajo.

Lo bueno del servo es su consumo. Totalmente ridiculo (al menos comparado con el motor del atornillador o un motor paso a paso).

Bueno ya tenía la puerta funcionando con motor, ahora hay que diseñar el circuito.

Continuará...

circuito.jpg

taladro.jpg

Ahora que ya tenía por donde empezar, hay que diseñar el circuito.

Yo siempre hago lo siguiente: calcular que necesito y cuantos pines cuesta. Si llego a mas de 20, un Uno (atmega328p) no es suficiente, hay que usar algo más grande.

¿Y qué necesitamos?

  • Primeramente un reloj. La puerta se abrirá/cerrará por hora, entre el ds1307 o el ds3231, opté por el segundo, en teoría mas preciso. Aquí necesitamos dos pines (SCL y SDA del I2C).

  • Si queremos ver algo, necesitaremos un display. Usaré el típico lcd de 16x2. Este se come 6 pines. Estos display para verse necesitan el led de la retroiluminación, con lo que la luz siempre estará encendida. Esto no me interesa, asi que tengo que controlar que la luz se encienda y apage. La mejor solución es usar un transistor y un pin de Arduino.

  • El control del motor. Dado que el servo carece de consumo un simple puente H L293D es más que suficiente para controlar el motor. El puente H se come dos pines (giro en un sentido, o hacia otro). Además el pin enable del puente H podemos hacer dos cosas, controlarlo con otro pin, o en su defecto, ponerlo a positivo. Opté por lo segundo, asi que me ahorro un pin.

  • Dos finales de carrera, para abierta o cerrada. Otros dos pines de Arduino.

  • Botones, si hay un display, necesitaremos interactuar con la interfaz. Aquí no sabía decidirme, esbozé varias pantallas y vi si era mejor con 3 o cuatro botones. Al final, no sé por qué, decidí solo usar 3, cosa de la que me arrepiento y contaré cuanto vayamos al software.

  • Una entrada analógica. Voy a poner el sensor de luz, que será una simple LDR. Otro pin (además analógico).

En total son 17 pines, un uno es suficiente.

Si el número de pines es insuficiente, entonces hay que recurrir a métodos para reducir el número de pines (un display I2C, botones con entrada analógica, etc.)

El siguiente paso es ver la alimentación. Tengo infinidad de cargadores y fuentes viejas por casa, cada una de tensión y corriente diferentes. Así que saque del cajón una y vi que era de 15v y 1.2A. Teniendo encuenta que el mayor consumo lo va a tener el motor, unos 250mA, redondeando a 300mA y que el atMega consume unos 20, mas el reloj, etc. En total no llegaba a los 500mA asi que sirve.

Elegida la fuente, tenemos que ver que tensiones necesitamos. Obviamente 5 voltios para el atMega. El motor funciona a 6, así que necesitaremos otra fuente más de 6 voltios.

He aquí el diseño de la fuente:

La fuente está hecha con un regulador 7805 y otro 7806. Por un lado la entrada la protejo con D1 para evitar inversiones de polaridad y la filtro con el conjunto C5, R1, C6. Los diodos D4 y D5 evitan que la corriente vuelva a retornar y provoque "conflictos". Los reguladores tienen, si o si, condensadores de bypass de 100nF. En el diseño de la PCB siempre van todo lo cerca posible del regulador.

Este es el display, creo que todos sabemos conectarlo, así que no hay mucho que decir. En mi caso, siempre que hay algo que tenga alimentación, lleva un condensador de bypass de 100nF, el display no es menos. La retroiluminación cuando es un circuito fijo, no utilizo potenciometro si no que uso una resistencia a negativo, el valor depende mucho del display, pero desde 1k a 3k suele ser suficiente. Para controlar la retroiluminación utilizo un transistor BC547 con las resistencias adecudadas.

Las carreras y botones los trato por igual, son entradas conectadas a negativo y hago uso de la resistencia PULLUP interna del micro. Creo que se nota que también uso condesadores de bypass, en este caso para reducir los rebotes de los interruptores.

reloj.png

El reloj utilizo un modulo DS3231. Yo trabajo con Proteus, y como en este caso no lo trae, tuve que crear tanto el integrado, como el módulo de la PCB.

reset.png

El reset del micro lo hago de forma especial. Utilizo una resistencia PULLUP, en paralelo a un diodo y un condensador de 100nF. El circuito es una recomendación de la propia Atmel y, a mi por lo menos, me funciona bien. El añadi un conector para poder resetear el circuito si lo deseo, además de otro para poder subir los programas (usando el bootloader, TX, RX y GND). Luego explicaré el proceso de grabar programas.

puenteh.png

Por último, el puente H, basado en un L293D. IMPORTANTE que sea "D", si no habría que poner diodos en las salidas para evitar problemas, como el "D" los trae mejor. Aunque cada driver es capaz de manejar 600mA, más que suficiente para el motor, decidí usar una configuración en puente, lo cual permite manejar más corriente (en realidad algo inferior a los 1.2A). Ojo, C20 y c21 no son opcionales, y son necesarios.

Y como no, el cerebro de la bestia:

Como comentario añadiré algo: Generalmente suelo probar los circuitos que no se como funcionan en protoboard, por ejemplo, en este caso desconocía si el puente H en esta configuración iba a funcionar bien, así que primero hice pruebas con él. No suelo usar casi nunca placas perforadas para montajes, a no ser que el circuito sea tan simple que no merezca la pena. Pero el tiempo de montaje en placa perforada y luego busqueda de errores (que son muchos), no compensa el tiempo que se tarda en diseñar la placa y el montaje de esta. Cuando no estas acostumbrado generalmente sueles fallar mas, pero con la práctica, al final te salen como churros.

puenteh.png

reloj.png

reset.png

Bueno que decir victorjam, asi se presenta un proyecto!!

Buena solucion la del MG995 hackeado

Voy a explicar brevemente el diseño de la PCB y el por qué de los pines utilizados en el esquema.

Si cogemos el micro y lo ponemos tumbado:

atmega328.png

Vemos que unos pines quedan arriba y otros abajo. Así que cuando diseñamos el circuito, conviene que los componentes que quedan "arriba" de la PCB, esten conectados a los pines de "arriba" del micro. Si comprobais la pcb, veréis que si el display está arriba, utilizo pines de arriba, igualemente con los botones, carreras, etc. Utilizando esta técnica evito el uso de puentes. Cuando coloco el componente en la PCB, luego corrigo al pin donde debe ir en el esquema.

Para crear dichos puentes, genero en Proteus una "via" (un agujero que une la dos caras de una pcb) y una pista en la cara superior. Esa pista debe ser recta y será un futuro puente. Los puentes serán necesarios, siempre habrá alguna línea que se nos cruze.

Por norma general, hay que evitar hacer un puente en el GND, pero si no queda remedio se hace, pero si se puede evitar, es preferible un puente en un pin que en el negativo. Evitaremos problemas de "ruido" si lo hacemos.

Si hay etapas de potencia (relés, mosfet, transitores, etc) que trabajen a distinta tensión, hay que intentar separarlas y que esten retiradas de la lógica del micro. No siempre es posible, pero hay que intentarlo. En este caso el puente H y su fuente de 6voltios, veis que está más retirada del resto.

Todos los condesadores de 100nF estan literalmente pegados al alemento que se quiere proteger del ruido.

Aunque parezca un plano a masa lo que tiene la PCB, en parte es y en parte no. Es un "ahorra cobre", simplemente para que haya menos cobre que comerse cuando se haga el atacado.

atmega328.png

Muchas gracias Surbyte.

Ya sabes que si me pongo me pongo. Y un proyecto es un proyecto. Hay que explicar que se ha hecho, y si alguien quiere más información se añade.

De momento lo dejo por hoy que hay que madrugar. Mañana pondré el proceso de planchado y explicaré como se hace la subida de sketchs, pruebas, y ya hay que empezar a moverse con el código.

Hola de nuevo a todos.

En este post os voy a enseñar como fabrico mis placas.

En primer lugar una lista de materiales:

  • Impresora láser.
  • Papel de publicidad o similar.
  • Lana de acero.
  • Alcohol de casa y agua oxigeneda.
  • Aguafuerte o salfuman.
  • Algodon.
  • Disolvente.
  • Pasta de soldar, estaño y soldador.
  • Taladro pequeño estilo dremel.
  • Brocas de 0.7, 1 y 3mm

En primer lugar hago la impresión del circuito en el papel. El papel que uso es de los folletos de supermercado, no es nada especial. La impresión la hago sin hacer espejo (mirror) y a escala 1:1.

paso1.jpg

Preparo un trozo de PCB un poco más grande que nuestro circuito, dejando a los lados de 0.5 a 1cm. La limpio bien usando lana de acero. Recorto el trozo de papel tal y como se ve en la foto y lo pego a la placa usando cinta aislante.

paso2.jpg
paso2-2..jpg

Del proceso de planchado no tengo foto, pero es simple. Mientras realizaba los procesos anteriores ya tenía enchufada la plancha y caliente. Coloco la placha encima del papel y hago presión durante al menos 20 segundos. Luego empiezo a planchar el papel hasta que se empieza a ver claramente la tinta del toner (sobretodo las pistas). Hago especial hincapíe en las esquinas, que es por donde peor suele salir el toner. Una vez lo veo bien, sumergo la placa en agua.

paso3.jpg

Cuando el papel se arruga, lo quito, el resultado es algo parecido a esto:

paso4.jpg

Ahora preparo el atacador. Mezclo en cantidades iguales una parte de agua fuerte y dos de agua oxigenada. Introduzco la placa y voy moviendo en brebaje hasta que el cobre desaparece.

paso5.jpg
paso5-5.jpg

Ahora recorto los laterales de la placa que dejamos y quito el toner con disolvente y repaso el cobre con lana de acero de nuevo.

paso6.jpg

Antes de agujear aplico una capa de estaño. Para ello cojo la pasta de soldar y aplico en cantidad sobre la placa. Luego con el soldador voy añadiendo estaño y esparciendolo por la placa.

Ahora ya puedo hacer los agujeros. Primero hago todos los agujeros de la placa con la broca de 0.7 mm. Esta sirve para casí todos los componentes normale (integrados, resistencias, condensadores, puentes...). Cuando los he hecho todos dibujo una "serigrafia" con los componentes con el rotulador. Sirve para localizar la posición de los componentes y para ver si nos ha faltado algún agujero.

Luego con la broca de 1 mm, hago los de los componentes mas gordos (diodos, reguladores, conectores, etc). Por último con la de 3 mm hago los agujeros de soporte. En esta placa no hay agujeros "especiales" (algún componente de tamaño superior a 1), si los hubiera tendríamos que hacer el agujero mas grande, suele ocurrir con algunas clemas atornillables.


Y ya solo queda ponerse a soldar los componentes, desde el más pequeño (jumper), al más alto.

Cuando terminamos es hora de probar el circuito, pero eso en el siguiente post.

paso1.jpg

paso2.jpg

paso2-2..jpg

paso3.jpg

paso4.jpg

paso5.jpg

paso5-5.jpg

paso6.jpg

Test de la placa.

Antes de conectar el micro, reloj y display vamos a hacer una pequeña prueba. Vamos a comprobar que las tensiones son las que deben ser:

  • En el zócalo del micro debemos comprobar que la tensión está entre 4.8 y 5.1 voltios.
  • La tensión del regulador del motor sea 6 voltios.
  • La salida del motor no tenga tensión.
  • Los reguladores no se calientan.

Si alguna de estas pruebas falla tendremos un problema. Tendremos que ver si tenemos algún componente al revés (diodos, condensadores) o alguna pista está haciendo cortocircuito. Siempre se comete algún error, así que hay que ser paciente para encontrarlo. En esta placa no tuve ningún problemas, pero en otras, he tenido que desmontar el circuito entero para encontrar el error.

Pasada esta fase ya podemos instalar el micro, pero previamente hemos de subir el bootloader al micro si es virgen. Hará un tiempo y dado que no utilizo la placa arduino para propositos finales, me construí un shield programador siguiendo los pasos que se indican en Arduino as Isp.

programador.jpg

Una vez el bootloader esté cargado, instalamos el atMega en su zócalo, ponemos el display y hacemos el montaje para poder subir los sketchs. Para ello utilizaré una placa Arduino sin el micro. Coloco las señales reset, rx, tx, gnd del puerto de la pcb a los mismos pines de la placa Arduino.

subidasketch.jpg

Hacemos un sketch de prueba y le damos a subir. Aquí hay un problema: el reset automático no funciona. El circuito de reset que hemos instalado impide que la placa Arduino pueda reiniciar el atMega. Así que cuando le demos a subir, también tendremos que pulsar el
botón de reset de la placa.

Ahora viene la comprobación de cada uno de los elementos: display, botones, reloj y motor. Antes de empezar a escribir código como locos, es recomendable comprobar que el display se enciende y se apaga y que mostramos información, luego comprobamos los valores que nos arrojan las entradas (botones y finales de carrera, mas la entrada analógica), que podemos leer el reloj, que comandamos el L293D, etc.

Una vez comprobado le funcionamiento de nuestra placa y todos sus componentes ya podemos empezar a escribir el código.

programador.jpg

subidasketch.jpg

El software, a groso modo.

En el caso del programa he usado varias librerias dependiendo del "dispositivo" a controlar.

Las carreras y los botones los trato igual, independientemente del uso que tengan, ya que el comportamiento de las carreras es muy similar al de un botón. Para ello uso la libreria SimpleButton, que simplemente hace un debounce y me indica el estado en el que se encuentra el botón. Esta libreria es personal, ni es mejor ni peor que otras, simplemente la escribí y la utilizo.

Al igual ocurre con la libreria SimpleRTC, reduje a la mínima expresión lo que se necesita para leer el reloj y ponerlo en hora. Utilizo una estructura DATETIME como base de tiempo (no uso time_t ni nada similar.

En cuanto al tiempo trabajo en el programa con el "minuto del día". Todos los días duran lo mismo: 24 horas. Esto significa que un dia tiene 2360+59=1439 minitos, siendo las 00:00h el minuto 0 y las 23:59 el minuto 1439. Por ejemplo, si ajusto la hora de abrir a las 06:45, obtengo el minuto (660+45=405) y si el minuto actual es mayor se que debo abrir.

Creé una libreria SimpleMotor para controlar el motor, básicamente con tres funciones: stop(), left(), right(). No es nada del otro mundo, solo encapsulé en un objeto las funciones que puedo volver a necesitar en otro momento.

En cuanto el control del menú y la puerta, usé una máquina de estados. En alguna parte del foro recuerdo que posteé parte del código de la máquina de estados, y desde entonces, me moria de ganas de usarla, así que por fín la he usado.

La máquina de estados de la puerta es fácil. Estados: CERRADA, ABRIENDO, ABIERTA, CERRANDO. Luego cree las transiciones o eventos que pasan de un estado a otro y ya esta.

El menú es especial. Hice una copia de la libreria de máquina de estados finitos, para que en cada estado, transcurrido un tiempo volviera al estado inicial. Cada pantalla es una estado de la máquina, y generalmente, una pulsación de botón realiza una transición/acción.

MENU.png

La verdad, es un poco lioso, llegándote a perder y tener que empezar de nuevo. Para un futuro espero encontrar una libreria que me satisfaga o en su defecto tener que empezar a crear una. Esta libreria "especial" la llame fsme.

Para calcular el orto/ocaso del sol usé la librería Dusk2Dawn, y la modifiqué para poder cambiar las coordenadas, ya que el objeto que se crea es a partir del constructor y cuando se ajusta la latitud y la longitud en el programa hay que poder cambiar el objeto. Ojo, no os perdais, si os equivocais como yo en las coordenadas podeis acabar en medio del océnao

Creo que si no me dejo nada en el tintero dejo todo el código como adjunto.

El próximo post lo titularé: NO TODO EL MONTE ES OREGANO y expondré los fallos que he notado y que quiero compartir con la comunidad.

FSM.zip (1.57 KB)

SimpleButton.zip (1.32 KB)

SimpleRTC.zip (1.25 KB)

Dusk2Dawn.zip (11.9 KB)

fsme.zip (1.31 KB)

simplemotor.zip (614 Bytes)

gg.ino (17 KB)

Bueno hombre.. te has ganado el premio al mejor Proyecto del mes y tal vez del año y eso que falta bastante.
Tal vez no sea el mas complejo pero tu explicaciòn es de libro.

Espero que los nuevos y los no tanto, aprendan varias cosas de tu manera de presentar las cosas.

Ante todo la introducción, es clara y concisa.
Luego la evaluación de alternativas.
A continuación el desarrollo de tus elecciones.
La conclusión y el fe de erratas que ya nos relatarás.

Asi que seguiré atento al desarrollo y a como se comporta la puerta de tus gallinas.

NOTA: luego miraré el tema del cálculo del sol. Ya lo has comentado antes y no recordaba quien lo había hecho y claro que fuiste tu.

TODO EL MONTE NO ES OREGANO

La puerta funciona, es totalmente operativa, PERO tiene defectos, defectos que he de corregir para la siguiente puerta que construya (ea, tener familia con gallinas y que le gusten tus inventos tiene sus mas y menos).

CONSUMO

El AtMega con display y nada más debe consumir aproximadamente unos 20mA que es el consumo que espero en condiciones normales (no es la primera placa que hago y tampoco será la última), pero el consumo que me encontré nada más enchufar fue casi 100mA. Es consumo en reposo, sin el motor en marcha. Creo que el problema viene de no usar el pin enable del L293D, así que en la próxima PCB, tendré que usar el pin que sobra para el enable.

CAIDA DE TENSIÓN EN EL PUENTE H

Al usar la configuración en puente me encontré que la tensión en el motor erá casi 2 voltios inferior. Es decir, usando un regulador de 6 voltios, entrega al motor 4. Le cambié el regulador 7806 por un 7809, con lo que ahora el motor funciona 7.1V. No se me ocurrió medir la caida de tensión que caerían en los transistores internos del L293D, así que debe ser eso. Para obtener los 6V del motor, tendré que buscar un 7808 y así tendré la salida.

ESPACIO DE MEMORIA

El programa se come el 69% de la memoria Flash y el 40% de RAM. No son grandes cifras pero si que quiero reducirlas. Creo que el mayor consumo de memoria lo hace el tocho menú. Quizás poniendo un cuarto botón, puedo reducir la máquina de estados bastante ya que se podría simplificar las operaciones a realizar.

COMPLEJIDAD DEL MENU

Aunque al final ha quedado bastante bien el código y hace lo que se le pide, al usar una máquina de estados para cosas muy repetitivas, al final te acabas liando y perdiendo, me tocó echar unas cuantas horas a desarrollar el menú y algunas veces tuve que empezar desde 0. Así que me tuve que hacer en papel la máquina de estado, e ir tachando estados/transiciones.

PROBLEMA AL TRATAR CON LOS FLOAT

En el programa uso float para las coordenadas GPS. Dependiendo de la zona del planeta, el sol saldrá/pondrá en unas determinadas horas, por lo tanto, el programa necesita tener las coordenadas y había que introducirlas. En el menú había dos opciones: usar el valor float e ir incrementando/decrementando la coordenada en decimas, por ejemplo 0.01. Pero claro dependiendo de la posición se tarda mas en introducir el valor.

Para evitar esto decidí dividir la coordenada en dos: parte entera y parte decimal. En el menú se edita primero la parte entera y luego la decimal, e ir incrementando/decrementando estas por separado. Para ello, el float lo multiplico por 100, se lo asigno a un entero. Ese entero le hago una división entera obteniendo la parte entera, y un "modulo" (resto de la división) y obtengo la parte decimal. Ahora edito esos dos valores y luego cálculo de nuevo el float, multiplico por 100 la parte entera y le sumo la parte decimal, el resultado lo divido por 100.0 para obtener un float. Por ejemplo:

2.13 * 100 = 213
213 / 100 = 2  // División entera, se obtiene la parte entera.
213 % 100 = 13 // Módulo (resto), tengo la parte decimal.
// Ahora reconstruyo el número.
2 * 100 = 200;
200 + 13 = 213;
213 / 100.0 = 2.13 // División con float.

Bien, matemática pura. Lógicamente funciona. Pero... 2.13 después de la operación es 2.13, pero... -2.13 después de la operación es -1.73... Eing? No encontraba donde estaba haciendo mal la operación. Hasta que me acordé de que Arduino y los float no se llevan muy bien y hay que tener cuidado. Simplemente la operación con numeros negativos no funciona. Hay que ver si la coordenada es negativa, anotarlo, y convertirla en positiva, aplicar la operación y si era negativa hay que multiplicar por -1 para obtener el resultado.

De momento no he encontrado ningún fallo mas. Tengo la puerta de despertador ahora mismo y observándola si abre y cierra como está previsto.

Gracias Surbyte, sé que el proyecto es simple, pero veo que la sección de proyectos se ha convertido en una sección de consultas, teniendo la sección software y hardware para ello. Desde que AlexPLD subió su "sistema de refrigeración", nadie ha subido nada. Es más dudo que haya gente que se lea el tocho y haga preguntas. Y quería poner mi "granito de arena".

Por ejemplo, cuando pensé en hacer la puerta, lo primero fué buscar como calcular el orto/ocaso, y como no me funcionaba la libreria hice la consulta en la sección Software, no en proyectos como bien has recordado.

De hecho no espero muchos comentarios, y mira que me he dejado cosas en el tintero y cosas que se pueden preguntar:

  • ¿Cómo has trucado el servo?
  • ¿Cómo has unido el husillo de 8mm al eje dentado del servo?
  • ¿Cómo has hecho el módulo RTC en Proteus?
  • Y la puerta en sí, ¿El bastidor cómo?
  • ...

Para el futuro, aunque tendré que posponerlo ya que tengo muchos proyectos en mente, espero hacer una modificación para darle algo de conectividad, no sé, quizás un módulo WiFi para ver el estado por la red o un módulo Bluetooth.

¿Cómo has hecho el módulo RTC en Proteus?

Pues bien, ya que le das ideas a la gente te pregunto algo de lo que mas me interesa. Cómo lo hiciste? Alguna vez vi como programar módulos pero no me funciono nada.

Felicitaciones, por la ejecución de alta calidad del proyecto.

Gracias Peter.

Surbyte te refieres a ¿crear un módulo simulable en Proteus? Si es eso, no sé, me pasó lo mismo, intenté crear una vez alguna DLL para algún componente y al final no me funcionaba nada. Con el módulo DS3231 en proteus me refiero a crear el componente en Isis (pero no simulable) y a la vez hacer el footprint para el módulo ZS-042 para Ares.

Me habia ilusionado.. jaja con lo de la DLL. Bue, seguiremos esperando algun iluminado que no seremos nosotros claro está.

El programa se come el 69% de la memoria Flash y el 40% de RAM. No son grandes cifras pero si que quiero reducirlas.

Tengo una pregunta, cual es la razón por la cual quieres achicar el código? Tienes previsto cambios a futuro?

Siento no haber respondido antes, ando liado con el trabajo.

Pensaba en que quizás deberia dotarlo de algo de comunicación, aún estan disponibles los pines TX y RX, así que no sé si le pondré WiFi via serie con un ESP, o dotarlo de bluetooth para verlo en el teléfono. Personalmente a mi me gusta las cosas que funcionan, y los huevos hay que ir a cogerlos casi todos los días, que para eso estan las gallinas.

Te falta un detector de huevos de gallina!!

Ahora mas en serio, se me ocurre contar las gallinas que entran y salen y saber si al momento de cerrar la puerta estan todas dentro, dices que son muy respetuosas de los horarios y no existe posiblidad de que ocurra?

De hacerlo no es tarea fácil porque pueden entrar de a 2 o mas por la puerta asi qeu detectarlas por IR esta complicado.
Se me ocurre ponerles a todas un ID (RFID) tal vez y luego cuadno se cierra contar cuantos RFID tienes y si estan todas ok y si no, abrir y esperar a que entre la rezagada.

Las gallinas son a veces tontas.

Tienen su gallinero en perfectas condiciones: limpio, comida, agua, su cama, sus cajones para poner huevos, etc. Pero algunas veces prefieren dormir en un árbol (que tengo en el corral varios) y no entran. Así que si espero a que todas entren... la puerta se queda abierta. La que quiera jugarse la vida y quedarse en la calle es inevitable.

Y lo sé por experiencia. Pocas veces me presento de noche, pero cuando he ido, siempre hay alguna que decide que otro sitio es mejor que el gallinero, sobretodo en verano que por la noche hace más fresco fuera que dentro.

Así que lo del control RFID lo dejo para la gata y su puerta automática para gatos, proyecto que tengo en mente.

Igualmente, lo de contar huevos no parece mala idea, si hubiera una forma de que me avisará que hay podría ir a recogerlos, pero de la misma forma que se quedan a dormir en la calle, me ponen huevos fuera del gallinero.

Quizás mas importante sería un comedero/bebedero automáticos, en conjunto con la puerta. Una luz automática cuando abro la puerta del gallinero y quizás un ahuyentador de alimañas... uhmmm... cuantos proyectos :D:D

Bueno al final la idea mas tonta resultó ser de mayor agrado o a tener en cuenta.
Como contar huevos que tema.
No veo el modo de hacerlo si no tienes la gallina restringida a un espacio tipo carcel y en ese caso... podrias diferencia unos gramos de peso..mmm creo que no.

El único modo que veo tal vez se escape a nuestra capacidad, seria con una camara que detecte huevos blancos (ojalá que sean de ese color) o formas.

Siempre que esten en lugares dentro del campo visual de la cámara funcionaría.. o mas simple, una cámara y lo decides tu.

Comedero/bebedero automáticos no es problema.. si trabajo.
Una luz automática cuando abro la puerta del gallinero, tampoco es problema
Ahuyentador de alimañas mmm como las detectas primero?

Mi más absoluto reconocimiento al proyecto. Soy novato y estoy flipando.

También soy muy creativo y antes que una "máquina contadora de huevos" yo simplemente pondría una cámara dentro del gallinero donde poder ver si han entrado todas, si hay huevos y ya que estamos poder abrir la puerta a distancia por si falta una.

También colocar un sensor de luz en la puerta, que parpadée y haga que el "lobo" se vuelva loco y se pire.

Quien dice luz dice sonido, alarma, o cubo de agua que se caiga sobre el bicho que quiera entrar. Creo que es mucho más simple que lo hasta ahora expuesto (y cómico). Pero podría valer? @surbyte @victorjam

Saludos!