Cómo controlar una cámara con Arduino
Se me plantea un problema a la hora de instalar una cámara. Necesito que mediante control remoto gire horizontalmente para que enfoque a otro punto. Dispongo de un grabador al que se conecta la cámara cctv que almacena las imágenes. Por suerte los DVR (grabador) disponen de una salida para controlar el PTZ (Pan Tilt Zoom) de las cámaras. Estos tienen acceso remoto por http y por apps en Android e IOS que incluyen además del visionado de las imágenes, el control del PTZ.
Con estos datos investigo acerca de estos puertos y descubro que son puertos serie RS485.
Afortunadamente encuentro un módulo para Arduino que me decodifica ese puerto.
Analizo las lecturas y el protocolo de comunicación, en este caso selecciono el PELCO D, uno de los más comunes.
Ya lo tenemos liado, pedido a Amazon que esto parece que se puede hacer.
Objetivo:
Controlar un motor en el eje x para que gire una cámara. El sistema tiene que controlarse con un grabador DVR.
Tecnologías a utilizar:
- Transmisión serie rs485
- Pelco D
- Arduino
- Controladora de motores paso a paso.
Materiales:
- Arduino Nano
- Modulo RS485 Arduino
- Controlador motores Puente H – L298N
- Motor DC 12V
Pelco D
Antes de entrar en detalle, necesito saber un poco acerca del PELCO D.
Pelco D consiste en la transmisión de 7 bytes en hexadecimal.
Byte 0 | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 |
---|---|---|---|---|---|---|
Sync | Camera Address | Command 1 | Command 2 | Data 1 | Data 2 | Checksum |
Prestando atención al Byte 1, que selecciona el canal, es decir, la cámara que queremos controlar, y al Byte 3 que contiene la información para los movimientos según la siguiente tabla:
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
---|---|---|---|---|---|---|---|---|
Command 1 | Sense | Reserved | Reserved | Auto / Manual Scan | Camera on / off | Iris Close | Iris Open | Focus Near |
Command 2 | Focus Far | Zoom wide | Zoom Tele | Tilt Down | Tilt Up | Pan Left | Pan Right | Fixed to 0 |
Por ejemplo:
Si el byte 3 es 00000010 (2 en decimal) Gira horizontalmente (pan) a la derecha.
Si el byte 3 es 00000100 (8 en decimal) Gira horizontalmente (pan) a la izquierda.
Pues tema resuelto. Dejo la demás información para si alguien necesita hacer más funciones.
Puente H – L298N
El L298N es un controlador de motores al cual podemos conectar 2 motores DC o un motor paso a paso de 2 bobinados.
Se alimenta a 12V, al igual que nuestro sistema de vigilancia, y además tiene una salida de 5V para alimentar nuestro Arduino.
Para activar nuestro motor DC que conectaremos a la salida 1 – 2, debemos actuar sobre las entradas IN 1 e IN 2.
Al dejar las dos en LOW el motor se para.
Si ponemos IN1 en HIGH e IN2 en LOW el motor gira a la Izquierda.
En el caso de invertir los estados de IN1 e IN2, el motor invierte el sentido.
Además, dispone de otros pines con los cuales podemos regular la velocidad de giro del motor, los cuales yo dejo puenteados porque no me hace falta. Se trata de los pines ENA y ENB.
Max RS485.
Modulo que usamos para leer las tramas serie que envía el controlador PELCO D de nuestro grabador DVR. En el código he añadido mensajes serie, asique podemos abrir la consola serie de Arduino para comprobar los datos recibidos del DVR cuando mandamos las ordenes.
Así quedaría nuestro código con el cual conseguimos que funcione nuestro proyecto.
Esquema de conexiones:
L298N:
- IN1 – D7
- IN2-D8
- 12V – FUENTE 12V
- GND – GND FUENTE 12V Y GND ARDUINO
- 5V – salida 5v para Arduino a Vin
MAX RS485:
- DI – TX1
- DE- D2
- RE – D2
- RO – RX0
- VCC- 5V ARDUINO
- GND – GND ARDUINO
- A – + DVR
- B – – DVR
En este caso uso las señales del PTZ emitidas por el grabador DVR para mover el motor DC, pero se me ocurren otras aplicaciones como activar relés para abrir puertas o encender luces, eso ya a gusto del consumidor.
Muchas gracias por leer el artículo, si te ha gustado deja un comentario, si no pues también.
Salu010 (010 = 2 = dos para los de letras)