Equipo grabadorHace ya tiempo que se adquirió un sistema de cámaras de vigilancia para el Centro que consistía en un aparato específico para esta labor más 4 cámaras -una de ellas con la posibilidad de "visión nocturna"-. Además de estos equipos, es necesario un televisor/monitor para poder configurar y manejar el grabador y además ojear qué está mostrando cada cámara.

Equipo grabadorAunque siempre cabe la posibilidad de aquirir en algún comercio un televisor/monitor, gracias al profesor de Tecnología, Domingo García, que amablemente [1] cedió uno al Centro, este problema quedó resuelto en poco tiempo.

Sin embargo, los dos problemas más serios han sido:

Para resolverlos, se ha optado por incluir un par de microcontroladores de la firma Microchip en el aparato grabador y uno más en el televisor que, programados de forma oportuna, hacen esta labor.

Equipo grabadorPoco más o menos, y salvando las diferencias, las soluciones adoptadas a ambos problemas son muy similares a lo que seguramente alguna vez habrás oído de incluir chips a las consolas de videojuegos para que acepten casi cualquier programa que se le introduzca -sea o no original y sea o no legal hacerlo-, aunque lógicamente en este caso desde luego no va a haber ningún aspecto legal al respecto que considerar :-)

Si tienes curiosidad por saber como se ha hecho puedes seguir leyendo, aunque desde luego el texto es extenso y para no hacerlo -aún- más largo de lo que ya es, de aquí en adelante serán necesarios algunos conocimientos de informática y electrónica para no perderse en los detalles más técnicos. De todas formas, si consigues leerlo al completo sin dormirte será todo un logro.


No olvides hacer clic en las imágenes para verlas ampliadas


Como se ha comentado, los problemas a resolver son básicamente conseguir que tanto el grabador como el televisor, tras conectarlos a la tensión de alimentación funcionen automáticamente. El primero de ellos deberá comenzar a grabar y luego ir alternando la imagen que muestra de una a otra cámara de forma indefinida, y el otro, deberá encenderse y cambiar a la entrada de señal AV por si mismo.

Sin lugar a dudas, el problema planteado por el televisor es con diferencia más complejo de resolver que el del grabador, así que al igual que en los exámenes, comenzaremos primero por resolver el problema más sencillo y luego ya veremos que hacer con el televisor.

Automatización del grabador

Configuración del grabador Después de leer con detenimiento el manual del grabador -que en realidad no son más que unas cuantas hojas con unas instrucciones muy básicas ya que está ideado para un funcionamiento muy simplón- y tras un tiempo de "cacharrear" con él, se puede concluir que la única forma de conseguir que tras encenderlo comience a grabar y vaya pasando de vista en vista de las cámaras es operando de forma manual los diferentes pulsadores de su panel frontal.

BotoneraConfiguración del grabador Aunque dispone de algunas posibilidades básicas para temporizar las grabaciones, poco más puede ofrecer su programa de control -su firmware-; ni un autoencendido a una hora prefijada ni mucho menos la alternancia entre imágenes captadas, dejando claramente estos aspectos relegados a una operatoria manual. Evidentemente, reprogramándole el firmware sería posible conseguir eso y mucho más, pero esto es algo que está fuera de toda consideración ya que no dispone de ninguna posibilidad de actualización y la empresa que comercializa este aparato lo vende tal y como es sin más soporte para el mismo.

Tampoco es posible, o al menos nadie se ha prestado voluntario :-), para estar constantemente pendiente del grabador y pulsar sus botones todos los días de forma rutinaria -incluso sábados y domingos- , por lo que la única posibilidad real es añadirle algún circuito electrónico que haga esa misma tarea.

¡Poco sitio queda dentro! Aunque en un primer momento se pudiera considerar el diseño de algún tipo de circuito secuencial con componentes discretos (como los antiguos integrados de la serie 74xx ó 40xx), a poco que se considere esta solución se verá que el número de ellos necesarios sería muy grande y que el espacio físico que se dispone para añadir componentes al grabador es muy pequeño -en las imágenes puede verse que la mejor zona para realizarle "añadidos" es justo detrás del panel de botones en donde hay un hueco de unos 9x5x1 centímetros disponibles-.

Detrás de la botonera hay algo de sitio libre Así las cosas, la solución pasa por incluirle algún circuito de tipo microcontrolador, que programado adecuadamente, haga que tras encender el grabador y esperar unos 25 segundos -que es lo que este tarda en inicializarse- le haga creer que "alguien" ha pulsado en el botón de grabar, y luego, de forma periódica y cada 10 segundos vaya haciéndole creer que "alguien" pulsa de uno en uno y de forma secuencial cada uno de los botones que alternan las diferentes vistas de las cámaras.

Actualmente hay muchísimos tipos de microcontroladorores disponibles -¿quizás por el auge de la televisión digital y las consolas de videojuegos?- y cada uno con sus ventajas e inconvenientes. Para este caso, los más potentes y con más capacidad de memoria se pueden descartar desde un principio, pues la tarea que va a tener que realizar no exige gran velocidad (el que más y el que menos suele rondar velocidades de funcionamiento en torno a varios MHz y en este caso las señales se "mueven" en el ámbito de los segundos) y tampoco el programa de control es tan complejo como para requerir mucho más de 100 bytes de memoria -eso si, dando por sentado que habrá que programarlo en lenguaje ensamblador [2] directamente como suele ser lo habitual en estos casos-.

Lo que si deberá tener el microcontrolador elegido son varios puertos de entrada/salida disponibles para poder así "pulsar" los botones adecuados... al menos hará falta 1 puerto de salida para gestionar el botón de grabación, 5 puertos más también de salida para gestionar los botones de cambio de vista de las cámaras, y un puerto más de entrada en este caso para gestionar un botón que permita, si se desea, detener el funcionamiento automático y manejar el grabador como si no tuviese ningún "añadido".

El entorno de programación Entre los microcontroladores candidatos para hacer esto, los de la empresa Microchip son de los más adecuados. Por un lado está su precio (cercano a 1 Euro los que aquí se han usado), por otro su posibilidad de funcionamiento sin ningún componente adicional (ni siquiera la señal de reloj ya que si la precisión necesaria no es muy alta la puede generar él mismo internamente), y su facilidad de programación y simulación en un PC convencional con un entorno integrado bastante "amigable" diseñado por la propia empresa que los fabrica.

Quizás el hecho de que estén construidos en torno a una arquitectura Harvard en lugar de en torno a la típica arquitectura de Von Neumann de todos los microprocesadores que usan los PCs "normales" puede echar un poco para atrás en un principio, pero desde luego no es motivo para descartarlos ni mucho menos.

Envío gratuito de muestras Es más, y por si aún quedara alguna duda al respecto, Microchip facilita muestras gratuitas de muchísimos de los componentes que fabrica y que envía a cualquiera que los solicite sin coste alguno -ni siquiera de gastos de envío-, por lo que la elección de sus productos para este caso no deja lugar a dudas :-)

En concreto, el elegido para esta ocasión ha sido el PIC12508 que en un encapsulado DIP de 8 patillas ofrece 5 puertos de entrada o salida (según se configuren por software), y uno más solo de entrada (las dos patillas restantes son para la alimentación, evidentemente). En realidad se ha usado un PIC12F509 durante la fase de diseño y un PIC12C508 para "añadir" al grabador [3], pues el primero de ellos permite la reprogramación -es muy difícil, aún contando con un simulador en PC, que el programa creado funcione a la primera en el equipo real- y el segundo una vez programado ya no hay forma de variarlo y siempre realizará la misma tarea. Si quieres puedes descargarte el código fuente (o bien la versión ya compilada y lista para grabar) del programa de gestión de la botonera.

Programador JDMUn programa programador :-) Aunque no se ha mencionado, es obvio que hará falta además un programador -y un programa adecuado que lo maneje- para poder programar estos microcontroladores. Afortunadamente, es algo relativamente barato y fácil de conseguir ya sea en las tiendas de electrónica habituales o comprándolo en la Web. Igualmente, el programa para programar los microcontroladores también es fácil de conseguir.

De todas formas, lo más complejo en este caso no ha sido ni elegir el microcontrolador, ni buscarle un lugar donde añadirlo en el grabador, ni siquiera crear el programa en ensamblador para manejarlo o programarlo... lo que más ha costado es conseguirle la tensión de alimentación y hacer que pudiera simular que pulsa los botones del grabador sin alterar el funcionamiento "normal" de esos mismos botones.

Los dos PICs ya conectados El problema de la tensión de alimentación es debido a que la gestión de la botonera que hace el grabador es independiente para los botones de selección de las vistas de las cámaras y para el botón de grabar. Esto ha motivado que en lugar de emplear un único PIC12C508 se hayan empleado dos (uno para los botones de las cámaras y otro para el de grabar) pues las tensiones de esos botones no compartían masa entre ellos -la referencia sobre la que se miden- y tampoco están tomados con referencia a la masa de la fuente de alimentación. Quizás añadiendo más componentes tipo diodos o resistencias para crear divisores de tensión y una "tierra virtual" se podría también haber resuelto el problema, pero desde luego no parece que merezca la pena.

El "truco" usado ha sido el mismo que antiguamente se usaba para alimentar la electrónica que incluyen los ratones que se conectaban al puerto serie de los PCs (los que tenían un conector grueso con 9 patillas en lugar del conector PS2 o USB que se usan ahora), es decir, aprovechando que el microcontrolador no consume más que unos pocos miliamperios, es posible con ayuda de algunos diodos, "robar" algo de la propia tensión que se usa para la gestión de las señales de los botones y a partir de ella alimentar el microcontrolador.Diodos Esto lógicamente tiene algunos inconvenientes como pueden ser tener que "aislar" mediante diodos las salidas del microcontrolador o tener que usar al menos la tensión de dos botones para este fin, pues si se toma de uno solo la tensión, si alguien lo pulsara ésta caería a cero y el microcontrolador se quedaría sin alimentación... e incluso se podría dar el caso de que la caída de tensión propia de los diodos no permitiese suplir al menos el mínimo necesario para funcionar el microcontrolador, aunque afortunadamente estos dispositivos funcionan correctamente entre 2.0 y 5.5 voltios y no ha habido ningún problema al respecto.

Los dos PICs en otra vista En las imágenes se pueden ver los diodos usados (un total de 10 de ellos... suerte que son tan corrientes -del tipo 1N4148- que cada uno cuesta solo un par de céntimos) y los dos PIC12C508 montados uno tras otro en un único zócalo de 18 patillas para dar algo de solidez al montaje (aunque en realidad son tan pequeños y pesan tan poco que los mismos cables usados para las conexiones son los que los mantienen en su posición).

Automatización del televisor

Aquí el problema es más serio. El televisor que se ha usado -al igual que el 99% de ellos- si se conecta su enchufe directamente a tensión de alimentación se enciende pero queda en modo de espera ("stand by" que dicen los ingleses). Para que realmente comience a funcionar hace falta o bien pulsar en alguno de los 4 botones de tiene o lo que es más habitual, pulsar el botón de encendido en el mando a distancia. Esto, que es lo más habitual de mundo, para este caso es un muy serio inconveniente. Es decir, si se quiere que se encienda "solo" habrá que incluirle algún circuito diseñado a propósito ya que de nuevo nadie se ha prestado voluntario para realizar esta tarea todos los días de forma repetitiva.

En una primera aproximación se podría pensar que si pulsando alguno de los botones que tiene se enciende sin más, bastaría con hacer un montaje similar al usado para el grabador -incluso más simple- y ya estaría resuelto el problema... pero no, no basta esto :-( . Efectivamente, pulsando sus botones se puede conseguir que se encienda, pero además de eso es imprescindible seleccionar la entrada AV -no un canal cualquiera- para que pueda captar la señal enviada por el grabador... y esto no es nada sencillo.

Equipo grabador Después de muchas pruebas, se puede concluir que este televisor tras estar sin funcionar unas 4 ó 5 horas, si se pulsa alguno de sus botones, se enciende en el canal 1, así que luego habría que pulsar un par de veces en el botón de "retroceder canal" para llevarlo al canal 0 y luego a la entrada AV (que es la que permite ver la salida del grabador). Si lleva sin funcionar menos de 4 ó 5 horas y se pulsa algún botón, se enciende en el último canal que se estuviese mostrando... pero nunca en la entrada AV, por lo que habrá que operar sobre el botón de "retroceder canal" o de "avanzar canal" dependiendo del último canal que se estuviese mostrando antes de apagarlo para llegar a AV.

Este comportamiento hace descartar cualquier posibilidad de gestión similar a la creada antes para el grabador, pues un microcontrolador no podría determinar si lleva más o menos tiempo sin funcionar y además no tendría forma de saber en que canal ha comenzado en cada ocasión, por lo que no podría saber si debe avanzar o retroceder de canal para llegar a AV.

Descartada la posibilidad de usar los botones del propio televisor se podría pensar en tratar de hacer que un microcontrolador gestionase el mando a distancia y simulase que "alguien" pulsa en él en primer lugar el botón de encender y luego el botón de cambiar a la entrada AV.

Teóricamente es viable y el programa de control del microcontrolador sería muy sencillo -es más, no harían falta más que emplear un par de puertos de salida y poco más-. Desde luego para hacer esto el mando debería estar dentro del propio televisor y alimentarlo a partir de él, pues de esa forma justo al encender el televisor se encendería el mando y el microcontrolador añadido y en ese preciso instante simularía la pulsación de botones (evidentemente no valdría que el microcontrolador estuviese constantemente simulando la pulsación de botones del mando a distancia o terminaría por "volver loco" al televisor).

El mando a distancia del televisor De todas formas, lo que hace inviable esta solución es que si se da un vistazo por dentro al mando a distancia se verá que la forma de conexión de sus botones se basa en pistas "dibujadas" sobre un circuito que al "puentearlas" cuando se pulsan los botones es como eligen una u otra función a realizar -en la imagen se ven claramente las pistas en color verde y los "puentes" en color negro-. Podría pensarse en eliminar el aislante de algunas zonas y soldar a ellas finos hilos de cobre que luego se conectarían al microcontrolador, pero desde luego sería muy complejo de hacer. Aún así, lo peor es que para ahorrar patillas en el integrado que gestiona el mando a distancia este controla varios botones con diferentes funciones usando un único cable.

A ver esto último con más detalle. Por ejemplo, los botones que permiten elegir el canal 1, el canal 2 o el canal 3 están todos "cogidos" al mismo cable, por lo que para distinguir cual de ellos se está pulsando el integrado de control del mando lo que debe hacer -digo "debe" porque no dispongo del esquema de funcionamiento del mando y por tanto no puedo asegurarlo- es medir la caída de tensión que se produce y según sea mayor o menor sabe cual es el botón concreto, de entre esos tres, que se está pulsando.

Esta forma de funcionamiento haría muy difícil poder insertar un microcontrolador "en medio" de ese circuito y que siguiese funcionando tal cual, pues la menor variación en las tensiones de referencia haría creer al integrado de control del mando a distancia que se está pulsando un botón que no es el deseado.

Así las cosas, solo queda una solución... la de tirar el televisor y comprar otro no cuenta :-). Podría "interceptarse" al señal infrarroja que envía el mando a distancia y leer la información que va en ella para luego, "duplicar" esa información y hacer creer al televisor que le está llegando desde el mando a distancia cuando en realidad le va a llegar desde un microcontrolador programado al efecto.

Un primer prototipo Técnicamente desde luego es viable y para corroborarlo se diseñó y montó un prototipo sobre unas "placas de entrenamiento" (la idea es que el televisor siempre que reciba la información apropiada se encenderá y cambiará al canal que se le indique venga esta de donde venga). Bastará con ver en que punto del circuito el televisor recibe estas señales provenientes del mando a distancia e inyectarle unas similares. Como afortunadamente, y gracias a Internet, se dispone del esquema del televisor, esto no es nada complejo (la mayor parte del funcionamiento del televisor lo gestiona un gran microprocesador, y una de sus patillas está dedicada expresamente a este cometido -en su esquema se puede ver que es concretamente la patilla 64 del componente IV01... no tiene pérdida, es el componente más grande rotulado como TDA935X/6X/8X-).

Señal portadora modulada El inconveniente serio de esta solución es conocer el contenido y los tiempos de la señal infrarroja empleada, ya que no están disponibles en ninguna parte. Es cierto que marcas como Sony o Philips han tratado de estandarizar este tipo de señales, pero dado que la marca del televisor es Ansonic -una de las marcas "blancas" de Hipercor, algo así como FirstLine para Carrefour- esta información es totalmente desconocida (aunque si tienes interés al respecto, en Internet es fácil encontrar información sobre este tema, por ejemplo, en este enlace puedes leer muchos detalles de algunos de los protocolos infrarrojos más conocidos).

Señal portadora modulada Un primer prototipo De todas formas, lo habitual es que los unos y ceros de las señales infrarrojas se envíen sobre una señal portadora de unos 34 a 36 KHz (para evitar interferencias con la luz "visible") y moduladas en amplitud. Al recibirlas por tanto hay que amplificarlas -suelen ser muy débiles-, filtrarlas -para dejar solo las de la frecuencia apropiada- y demodularlas -para quitarles la portadora y quedarse únicamente con la información-.

El PIC ya colocado en el televisor Así que la idea es escribir un programa para un microcontrolador que insertado en el punto oportuno testee la señal infrarroja que recibe el televisor al pulsar en el mando a distancia los botones de encendido y cambio a AV, la almacene, y luego sea capaz de volver a reproducirla. De esta forma, el televisor será "engañado" por el microcontrolador y creerá estar recibiendo los datos de su mando a distancia en lugar de desde el microcontrolador.

Afortunadamente, el proceso de amplificación, filtrado y demodulación de las señales infrarrojas los fabricantes lo resuelven de un "plumazo" mediante algunos circuitos construidos al efecto (por ejemplo, el sfh506 ó el is1u60) así que no es nada difícil localizarlo en el televisor y aprovecharse de él para disponer de esta información. Es decir, a la salida de esos circuitos se dispone directamente de los unos y ceros que envía el mando a distancia (fíjate en esta imagen y verás el punto exacto al que me refiero), aunque eso si, nadie evita tener que diseñar un programa que los lea, los "cronometre" y los almacene para luego volver a generarlos.

En cuanto a qué microcontrolador usar, para este caso hará falta uno que disponga de algo de memoria eeprom -para poder guardar la información de la señal recibida- y escribir un par de programas para él, uno que lea y almacene la señal y otro que la reproduzca y la envíe. En este caso, el microcontrolador elegido ha sido el PIC12F629. Dispone de 1024 bytes de memoria para programas (reprogramable del tipo Flash, similar a los lápices USB, aunque en este caso cada "byte" de esa memoria tiene 14 bits... lo que por otra parte no debe sorprender considerando como ya se ha comentado que está construido en torno a una arquitectura Harvard), 64 bytes de memoria para datos y otros 128 bytes de eeprom.

Un primer prototipo Respecto a los programas para el microcontrolador se han unido ambos -el que testea y almacena la señal y el que la reproduce- en uno solo, pues 1024 bytes dan mucho de si y de esta forma, tan solo cambiando de nivel una de la patillas del microcontrolador se puede conseguir o bien que lea las señales infrarrojas o bien que las reproduzca. Incluso como en un principio la señal ni siquiera sabía si era activa a niveles altos o bajos, otra de las patillas del microcontrolador permite seleccionar fácilmente este aspecto.

También es necesario considerar que si bien es factible guardar la información recibida en la memoria eeprom del microcontrolador -para que no se pierda cuando esté se desconecte-, no es posible hacerlo en "tiempo real" -es decir, a la vez que se están recibiendo las señales- pues la grabación en eeprom es un proceso "lento" en comparación con el ritmo al que van llegando los datos (a pesar de que el ritmo de trabajo del microcontrolador sea muy superior a la frecuencia de las señales). Esto desde luego complica algo el programa, pero no es ningún problema insalvable (si tienes curiosidad, aquí puedes ojear el código fuente del mismo o descargar la versión ya compilada y lista para grabar en un PIC12F629 real).

Así es la señal infrarroja Tras alguna pruebas se puede comprobar que la señal de encendido tiene este aspecto numérico (en hexadecimal): 7A 61 E9 5E 7C 5E 7C 5E 7C, mientras que la señal de selección de AV tiene este otro: 7A 61 7C 61 E9 5E 7C 5E 7C. Sabiendo que cada paso del TIMER0 del microcontrolador -que ha sido el usado en este caso- equivale a 8 microsegundos (si has ojeado el código habrás visto que se está usando un preescalador de 1:8 y que cada instrucción tarda un microsegundo en ejecutarse), resultaría, convirtiendo los valores numéricos a tiempo [4], algo parecido a la imagen adjunta (recuerda que puedes hacer clic en cualquier imagen para verla ampliada).

Una vez obtenidas las señales, basta con crear un programa para el microcontrolador que las reproduzca y las inyecte directamente [5] al microprocesador del televisor y veremos que "mágicamente" tras enchufarlo él solo se enciende y pasa a AV como se necesita :-)

Si has conseguido llegar hasta aquí leyendo sin dormirte ¡enhorabuena!. Si te queda alguna duda al respecto o tienes curiosidad por algún punto aquí no tratado puedes pasar por el departamento de informática y quizás pueda resolverla. Entre tanto, cada vez que vengas al Centro y veas en el mostrador de los conserjes las imágenes de las cámaras de seguridad, piensa que para que eso ocurra hace falta un buen rato de trabajo previo :-)