miércoles, 26 de enero de 2011

Proyecto OpenDoor

En mi casa compartimos techo con un perrete. En verano duerme en el patio, pero con el frío le dejamos que duerma dentro. El problema es que como se ha acostumbrado a salir al patio a hacer sus cosas de perro, tenemos que dejarle la puerta abierta. O eso o nos deja un regalito en cualquier rincón (porque madrugar solo para sacarlo, y además enseñarle que se tiene que esperar a que lo saquemos no es realmente algo que contemple :P ).
Lo primero que probé es a que abriera la puerta él mismo, aprovechando las enseñanzas de Pau y Susana.



La verdad que lo hizo mejor de lo que esperaba, pero a la mañana siguiente por alguna razón no abrió la puerta y hubo que limpiar el entuerto. Además el armatoste colgado de la manivela no convencía, y que narices ¿para qué vamos a confiar en las habilidades caninas, cuando podemos solucionarlo del modo friki?

La idea básica consiste en detectar al chucho cuando pase por la puerta de la cocina y de alguna manera girar la manivela para que se abra la puerta del patio. Lo ideal sería cerrarla después, pero eso lo dejamos para la segunda versión del proyecto.

Como de costumbre, lo primero es echar un vistazo a ver que tenemos en el taller. Tenía desguazado un viejo reproductor VHS del que me llama la atención el motor de rebobinar las cintas y unos pequeños sensores negros que tienen la pinta de ser un led infrarrojo y un fotodiodo. Para saber cual es cual, ponemos el polímetro en modo tensión continua y lo acercamos a una fuente de luz infrarroja o incandescente en su defecto. El fotodiodo genera una pequeña diferencia de tensión del orden de milivoltios.

Ahora vamos a ver como hacemos para que funcione. Mi sapiencia de electrónica es justita, y como tengo pensado añadirle más cosas en el futuro, usaré un Arduino.

Sensor infrarrojo

Tengo un fotodiodo, que según dicen (y he podido comprobar) produce una pequeña corriente cuando recibe luz infrarroja. Hay que usarlo con polarización inversa, es decir, para que conduzca corriente al revés de como lo haría un diodo normal. Lo que me vendría mejor es un fototransistor, que es como un transistor normal, pero que conduce en presencia de luz y es más sensible que el fotodiodo.




Leyendo sobre el tema, he visto que se puede convertir un fotodiodo en un fototransistor, simplemente acoplándolo a un transistor común tal que así:



Una vez que tenemos el fototransistor, usarlo como sentido analógico de Arduino está chupado. Si le añadimos un Led, podemos incluso ver su estado:


Colocamos el fotodiodo en el marco de la puerta comprobando que se puede abrir y cerrar sin problemas y lo sujetamos con un poco de pegamento térmico. 

Fotodiodo en el marco de la puerta.

Al otro lado ponemos un Led infrarrojo (que se puede robar de un viejo mando a distancia) y cableamos por dentro de la moldura para que no se vean los cables.

LED infrarrojo colocado en el marco.

Motor de la puerta

La forma más sencilla de abrir la puerta es simplemente tirando de la manivela con un hilo atado a un motor. Tenemos la suerte de que solo con girarla la puerta se abre sola (se ve que se queda ajustada al cerrarla).

El motor del vídeo VHS parece que tiene bastante par. He probado a atarle un hilo al extremo de la manivela y se queda justo de fuerza, pero añadiendo una pequeña palanca es suficiente como para que la abra con soltura. Para sujetarlo nada mejor que aprovechar la rejilla de ventilación.

Motor encargado de girar la manivela de la puerta.

Circuito

Ahora que nuestro amigo tiene un ojo y una mano, es hora de pensar en su cerebro. El motor necesita una tensión de alimentación de unos 17 voltios, y como consume bastante lo más fácil es usar un relé. Esto nos va a permitir usar una tensión distinta al resto del circuito y conseguir cierto aislamiento olvidándonos de corrientes de inducción, etc. Para activar el relé vamos a usar un ULN2003. El circuito queda así:

Esquema del circuito

 Para la alimentación voy a usar un transformador que tengo de una vieja máquina registradora que lleva incluida la parte de rectificación y filtrado. Entrega 17 voltios en vacío, que es demasiado para alimentar a Arduino, así que he puesto un regulador de voltaje de 7 voltios (arriba a la izquierda en el esquema). Sin embargo, 17 voltios es justo el mínimo necesario para mover la manivela, y como les pasa a este tipo de transformadores su voltaje cae a medida que se les demanda más corriente. Efectivamente al conectar el motor el voltaje cae hasta 12 voltios y no consigue arrancar con soltura. ¿Hay que buscar otro transformador aún más grande?

Nop. Usemos condensadores. ¡Muuuchos condensadores! En el esquema he marcado la conexión con los condensadores con CAP. He usado 5 condensadores de 2000 uF conectados en paralelo con la fuente de alimentación, aunque seguramente con alguno menos hubiera funcionado :P. Su misión es acumular energía y entregarla cuando arranca el motor, evitando así que la tensión baje tan drásticamente.

He intentado ajustarme al espacio de una carcasa de un viejo switch que murió. Los cables que van al sensor,  Led y motor van atornillados a un conector que se puede desconectar fácilmente (también reaprovechado de por ahí). En la foto se puede ver el Arduino a la izquierda, los cinco condensadores en el centro, uno más conectado directamente en la alimentación de Arduino (para que sea más estable) y la placa de prototipos con el resto de elementos.

Arduino, condensadores y circuito de control de OpenDoor.

Código

Lo único que queda para probar el invento es escribir el código del microcontrolador. El programa básicamente lo que tiene que hacer es activar el motor cuando el fototransistor deje de recibir la luz del Led. Este fototransistor se conecta a uno de los puertos analógicos de entrada y se monitorizará en busca de un cambio. Para que sea lo más flexible y robusto posible he implementado un mecanismo sencillo de autocalibrado (para que no le afecte la luz ambiental). El programa considera que la barrera infrarroja se ha interrumpido cuando el valor leído por el sensor difiere en al menos un 10% de la media de valores leídos hasta el momento.

El código se puede descargar en este enlace.


Y para terminar, un pequeño vídeo en el que se ve funcionando.


Posibles futuras ampliaciones

- Agregar un segundo sensor infrarrojo más alto para distinguir cuando pasa una persona o cuando pasa el perro.
- Usar un segundo motor para cerrar la puerta de nuevo.
- Mostrar los Leds fuera de la carcasa.
- Añadir botón para activar/desactivar

Hasta la próxima entrega ;)

No hay comentarios:

Publicar un comentario