camara digital controlada por arduino usando modbus

Error message

  • Notice: Undefined index: taxonomy_term in similarterms_taxonomy_node_get_terms() (line 518 of /home/venydivi/public_html/automatizanos/sites/all/modules/similarterms/similarterms.module).
  • Notice: Undefined offset: 0 in similarterms_list() (line 221 of /home/venydivi/public_html/automatizanos/sites/all/modules/similarterms/similarterms.module).
  • Notice: Undefined offset: 1 in similarterms_list() (line 222 of /home/venydivi/public_html/automatizanos/sites/all/modules/similarterms/similarterms.module).
administrador's picture
Circuito controlador remoto camara digital con arduino

CONTROL REMOTO CAMARA DIGITAL

Es muy probable que mas de una persona tenga en un cajon guardada alguna camara digital en relativamente buen estado, que probablemente ya no se usa, pues los telefonos celulares actuales tienen camaras de mayor resolucion. A estas camaras se les podria dar un segundo uso, como camaras para fotografia de naturaleza mediante deteccion de movimiento con un sensor PIR, o una camara a intervalos (time lapse) o como camara para fotografiar automaticamente elementos en una pequeña cadena de produccion, etc.

* This article is also available in English clicking here

Existen formas de reusar estas camaras en otros propositos de forma relativamente simple, si dicha camara posee conexion para un interruptor externo que accione el obturador, o si es una de las afortunadas camaras que tienen soporte para el CHDK (Canon Hack Developmen Kit) en el cual se pueden hacer cosas muy interesantes.

Si ninguna de las anteriores opciones aplica para el modelo/camara que se tenga, existe una alternativa un poco menos "elegante" que consiste en extender las conexiones de los interruptores que ejecutan acciones en la camara, como puede ser el obturador, el enfoque, el zoom, menus, etc.

Este proceso requiere de paciencia, pues se debera desarmar la camara (en lo posible usar una herramienta para abrir celulares para evitar daños en los seguros plasticas) para llegar a los interruptores de interes y soldar cables lo mas finos posibles. Una de las cuestiones que se debera determinar es si los interruptores son activos por alto, o activos por bajo, esto requiere un poco de malicia a no ser que se posean los planos de la camara o los manuales de reparacion y/o fallas!.

En este caso en particular se han soldado los interruptores del enfoque y el obturador en unos pads de prueba que habia en la tarjeta, de otra forma se habrian tenido que soldar directamente a los pines del interruptor. Como se determino que son activos por bajo, tambien se ubico en esta tarjeta un punto de voltaje negativo (gnd) y se soldo un alambre tambien. Se agrego un poco de cinta kapton para proteger los alambres

Alambrado de los interruptores de foco y obturador de la camara digital para conectarlos al Arduino

ARDUINO Y PROTOCOLO MODBUS RTU

El protocolo ModBus es ampliamente difundido en equipo de automatizacion industrial como PLC, HMI, variadores de velocidad,etc. Generalmente se usa sobre alambres trenzados usando el estandar RS-485 hasta distancias de 1200 metros. Debido a que es un protocolo abierto, bastante difundido, bien documentado y de facil implementacion en multiples lenguajes/plataformas (Java, python, Arduino, PIC) es un candidato ideal para mandar los comandos para el manejo remoto de la camara.

La idea del circuito es usar un Arduino Nano para recibir los comandos (enfocar, tomar fotografia) y que este realice las respectivas pulsaciones de botones como si se estuviera haciendo manualmente. Se utilizaron optoacopladores igual que en un proyecto anterior para aislar electricamente la camara del circuito de control remoto.

La camara en cuestion, en este caso una Panasonic Lumix DMC-LS3 cuenta con un un doble interruptor. Al presionarlo hasta la mitad, la camara realiza el enfoque, y al presionarlo hasta el fondo, la camara toma la fotografia. Se debera mantener pulsado los interruptores un tiempo determinado, pues si se pulsan demasiado rapido, el algoritmo interno de antirebote de la camara omitira la accion. Estos tiempos deberan hallarse experimentalmente pues varian mucho de camara a camara.

Se implementaron varios comandos.

1 - Presionar y mantener presionado el boton del enfoque
2 - Soltar el boton del enfoque
3 - presionar el boton del enfoque, mantener presionado por un tiempo determinado, presionar el interruptor del obturador, dejar presionado por un tiempo y soltar ambos.

Los dos primeros son utiles para mantener la camara encendida, si el tiempo entre una toma de fotografia y la otra es muy largo algunas camaras se apagan automaticamente para ahorrar energia. En algunas camaras este auto apagado puede ser desactivado o modificado el tiempo, pero en otras no. Puede usarse el comando de tocar el enfoque y soltar, cada cierto tiempo a manera de "ping" para mantener la camara encendida.

El tercer comando es el que realiza la toma de fotografia y emula los pasos como lo hara un usuario humano de forma manual.

Para la ejecucion de cada comando, debera escribirse un numero diferente de cero (0) en el registro modbus respectivo

Diagrama esquematico del circuito de control de camara digital manejado por modbus

PRUEBAS INICIALES CON PC

Para esta prueba se utilizo un computador personal con una pequeña aplicacion en Pyton para realizar peticiones ModBus RTU. Se utilizo un conversor USB a RS-485. Este haria las veces de maestro ModBus

Se conecto el circuito de la camara controlada con el Arduino y el conversor mediante un simple cable trenzado. Este haria las veces del esclavo ModBus

Se envio un comando para escribir, en este caso en el registro holding 10, un valor diferente de 0. Este registro activa el comando de toma de fotografia. Puede notarse los leds que se usaron como depuracion para determinar el tiempo de permanencia de los interruptores de foco y de obturador.

Conexion del arduino con un PC mediante conversor USB a RS-485

PRUEBA EN RED RS485 RASPBERRY PLC Y ARDUINO

Para simular una red ModBus RTU mas compleja, se creo una red mas grande, y se utilizo un equipo de control industrial como parte de ella. La configuracion de la red quedo asi:

- Raspberry Pi, con convertidor USB a RS-485 que hara las veces de maestro de la red
- PLC panasonic FPX-C14 con un convertidor de RS232 a RS485 que hara las veces de esclavo
- El circuito con el Arduino Nano y la camara que hara las veces de esclavo

En esta prueba el maestro leera un valor almacenado en un registro del PLC, si este valor es mayor que un determinado numero entonces se enviara el comando para la toma de fotografia al Arduino Nano. Se cargo en el PLC un programa de forma tal que el valor de dicho registro puede aumentarse o decrementarse mediante un potencionetro que posee el PLC.

La logica de comandos ModBus RTU que hay dentro del Raspberry PI en esta ocasion fue implementada mediante Node-RED. Se creo una pequeña implementacion didactica ModBus RTU, que solo requiere del nodo de puerto serial y ninguna otra dependencia o libreria. Si bien es ineficiente, es muy didactica pues se puede ver el flujo de como se construye la trama de peticion y como se va analizando la trama de respuesta que se recibe. Tambien es muy facil hacer cambios, agregar nuevas funcionalidades, etc

Finalmente para darle un poco de aspecto mas "industrial" se ubico la Raspberry Pi dentro de una caja, y se le añadieron accesorios para montaje en un riel din.

Pruebas en red ModBus RS485 con PLC, raspberry y Arduino

PRUEBAS Y CONCLUSIONES

- Se realizo una prueba inicial con un PC Celeron 900 Mhz, 2GB RAM, Lubuntu 14.04, Node-Red v0.15.2, Node.js v0.10.25. Se configuro el disparador del Node-RED para hacer ciclos de lectura al PLC y escritura al arduino cada 15 segundos. No se noto un retraso evidente en los tiempos programados.

- Se realizo una segunda prueba con un Raspberry Pi (1 B+) Broadcom 700MHz, 512MB RAM, Raspbian Jessi Lite 4.4, Node-Red v0.15.2, Node.js v0.10.29. Se noto una considerable demora de (10 segundos adicionales) a los 15 programados en los ciclos de lectura. Si bien no hay grandes diferencias entre el Node-RED y el Node.js de ambos dispositivos, si hay una gran brecha en el hardware que puede ser el causante de dicho retraso. Hay que recordar que la aplicacion no fue escrita de una manera optima!

- En cualquiera de las 2 pruebas el resultado fue el mismo: Solo se toma la fotografia, cuando la lectura del registro del PLC esta por debajo del limite pre-establecido en la logica de Node-RED

- La implementacion de ModBus en Arduino funciona bastante bien, para poder ser utilizado como parte de una red ModBus RS-485 con otros dispositivos industriales

- Como mejoras futuras, se pretende miniaturizar el circuito para instalarlo permanentemente en la camara.

- Explorar modos de bajo consumo para el microcontrolador y poder alimentarlo con la misma fuente de alimentacion de la camara.

- Node-RED es una herramienat muy util para implementar protocolos de comunicacion de forma grafica y rapida.

DOCUMENTACION

(Ver en la parte inferior - Archivos adjuntos)

* Articulo en PDF.
* Codigo fuente del programa Arduino.
* Esquematicos de circuito de control remoto para camara digital con Arduino Nano.
* Logica de prueba para lectura de PLC y escritura en arduino por modbus RTU en Node-RED.
* Implementacion didactica de Modbus RTU en Node-RED.
* Codigo fuente de la aplicacion Pyton de prueba para maestro Modbus RTU.
* Programa del PLC Panasonic FPX-C14 para mapeo de potenciometro a registro ModBus.

VIDEO

Video demostrativo de la conexion de distintos componentes, ademas de las pruebas realizadas