Sistema de cámara PTZ inalámbrico controlado por Arduino Deja un comentario

VISIÓN DE CONJUNTO

Hace un tiempo hice un video en YouTube que muestra cómo construyó el sistema de Pan Tilt y Zoom con control inalámbrico controlado por RC que utilizo para hacer mis videos, pero nunca pude crear una página de Tutorial para ello.

En el espíritu de “Mejor tarde que nunca” aquí está!

El sistema utiliza la cabeza de giro e inclinación motorizada Bescor MP-101 económica.

Obtuve el mío de Amazon.com aquí: Kit Bescor MP-101 pero puedes encontrarlos en otros lugares también.

El Bescor funciona con 4 pilas AA o con una fuente de alimentación si se encuentra cerca de una toma de corriente. Desde mi experiencia, las baterías duran bastante tiempo, así que lo estoy usando de esa manera.

Estoy usando un simple transmisor y receptor RC para enviar comandos de arriba hacia abajo, izquierda-derecha y acercamiento de zoom al Arduino Nano que luego mueve el Bescor.

Para el control de zoom implementado utilicé un control remoto LANC barato hecho por eBenk:

eBenk LANC Zoom Remote

Una vez más obtuve el mío de Amazon.

Por supuesto, necesitará una cámara que tenga un puerto LANC para usar esta función. Estoy usando las videocámaras Canon Vixia HG20 HD:

No te olvides de mirar este video para tener una mejor idea de cómo funciona esto:

Arduino Control remoto inalámbrico Pan Tilt Zoom Camera System

CONEXIONES

Para tener control de Zoom, necesitará obtener un control remoto de LANC de eBenk, ábralo y luego verá 2 interruptores táctiles que se encuentran debajo del balancín Zoom. Luego necesita soldar algunos cables a esos interruptores táctiles como se ve en el shematic anterior.

Estamos simulando presionar los interruptores táctiles que están en el control remoto de LANC de eBenk conectándolos a un interruptor bilateral 4066 IC.

Para obtener más información acerca del IC 4066, puede consultar este tutorial aquí:

¡Usando el interruptor bilateral IC 4066!

Conecte los pines D2-D5 del NANO a CH1-CH5 del receptor RC. Estos recibirán los comandos enviados por el Transmisor RC cuando movemos los palos.

Los pasadores D9-D12 se utilizan para mover el cabezal Bescor MP-101. Las conexiones que se muestran arriba son desde el punto de vista de mirar directamente al conector en el mismo Bescor.

Luego debe alimentar el receptor RC y el 4066 utilizando los pines de salida 5V y GND del NANO.

A continuación, puede alimentar el NANO con una batería de 5 V o conectarlo a una fuente de alimentación USB.

EL CÓDIGO

Cuando mueve las palancas del controlador RC, esa información es recibida por el Arduino NANO que luego hace que los pines sean altos o bajos.

Esos pines están conectados a los pines Bescor Up-Down o Left-Right, y si está intentando Zoom, lo envía a los interruptores táctiles remotos eBenk hackeados a través del 4066 IC.

Puede echar un vistazo a este video tutorial para tener una mejor idea de cómo funciona el CI 4066 para simular el botón de presionar: 4066 Tutorial

También mire este video para el tutorial sobre el sistema de cámara Bescor MP-101: Arduino RC Camera System Tutorial

/ * Inicio del código * / 

/ * Código Arduino One / Bosquejo para Dos funciones

 Creado por Yvan / https: // Inteligente - Bits . com
 Este código es  en el dominio público ... Puede: copiarlo, usarlo, modificarlo, compartirlo o simplemente ignóralo ! Gracias ! 

* / 

// Incluir bibliotecas necesarias al principio #include "nRF24L01.h" // Biblioteca NRF24L01 creada por TMRh20 https://github.com/TMRh20/RF24 
#include "RF24.h" 
#include "SPI.h" 
#include "FastLED.h" // Biblioteca FastLED para WS2812 RGB Stick http://fastled.io/ 

// Definir los pines utilizados #define NUM_LEDS 8 // Número de leds en stick para Receptor 
#define LED_PIN 8 // Entrada digital (DI) del RGB Stick conectado al pin 8 del UNO (Receptor) 
#define SwitchPin 8 // El conmutador Arcade está conectado al Pin 8 en NANO (Transmisor) 
#define board_select A0 // Pin utilizado para detectar el estribo 

// Variables utilizadas En t Mensaje enviado[ 1 ] = { 000 }; // Se usa para almacenar el valor antes de ser enviado a través del NRF24L01 (Transmisor) En t ReceivedMessage [ 1 ] = { 000 }; // Se usa para almacenar el valor recibido por el NRF24L01 (Receptor) En t Tabla de correr; // Se usa para almacenar la identidad del estribo
 const uint64_t pipe =  0xE6E6E6E6E6E6 ; // Necesita ser el mismo para comunicando entre 2 NRF24L01 // Componentes Init
 Radio RF24 ( 9 , 10 ); // NRF24L01 usa pines SPI + Alfiler 9  y  10 en UNO y NANO
 LED CRGB [NUM_LEDS]; // FastLED Library Init (Receptor)


 Configuración de vacío ()
 { // Make board_select Pin HIGH al inicio
 pinMode (board_select, INPUT);
 digitalWrite (board_select, HIGH);
 retrasar( 100 ); // Poco retraso para asegurarse de que es estable a ALTO // Compruebe para ver qué tabla es corriendo Si (digitalRead (board_select)) { // Si es ALTO entonces es el NANO (transmisor) Tabla de correr =  0 ;

 pinMode (SwitchPin, INPUT_PULLUP); // Haz el pin del interruptor entrada  con resistor pullup
 digitalWrite (SwitchPin, ALTO); // Hacer el pin de interruptor ALTO al inicio
 } más { // Luego, el pin se detectó BAJO, lo que significa es el UNO (Receptor) Tabla de correr =  1 ;

 pinMode (LED_PIN, SALIDA); // Coloque el pin RGB Stick UNO (receptor) en una SALIDA

 FastLED . addLeds NEOPIXEL, LED_PIN > (leds, NUM_LEDS); // Configurar la biblioteca FastLED
 FastLED . claro(); // Borrar los LED RGB Stick para ( En t X =  0 ;  X ! = NUM_LEDS;  X ++ ) { // Ilumina LED Stick todas Rojo al inicio
 leds [x] = CRGB :: Rojo;
 }

 FastLED . setBrightness ( 50 );
 FastLED . espectáculo();
 }

 radio . empezar(); // Comience RF24L01 en ambos tableros Si ( Tabla de correr ==  0 ) //  0  = Nano (transmisor)
 {
 radio . openWritingPipe (pipe); // Tubería de escritura abierta para transmitir
 } más  //  Si  no  =  0 Entonces eso es el UNO (Receptor) {
 radio . openReadingPipe ( 1 ,tubo); // Abra la pipa de lectura para recibir
 radio . empieza a escuchar();
 }

 }

 void loop () { Si ( Tabla de correr ==  0 ) { // Entonces eso es el transmisor 

Si (digitalRead (SwitchPin) == BAJO){ // Si el interruptor es Activado
 Mensaje enviado[ 0 ] =  111 ;
 radio . escribir (SentMessage, 1 ); // Enviar valor a través de NRF24L01
 } más {
 Mensaje enviado[ 0 ] =  000 ;
 radio . escribir (SentMessage, 1 );
 }
 } Si ( Tabla de correr ==  1 ) // Entonces eso es el Receptor { mientras (radio . disponible())
 {
 radio . leer (ReceivedMessage, 1 ); // Leer información de  el  NRF24L01 

Si (ReceivedMessage [ 0 ] ==  111 ) // Indica cambio es presionado
 { para ( En t X =  0 ;  X ! = NUM_LEDS;  X ++ )
 {
 leds [x] = CRGB :: Verde;
 FastLED . espectáculo();
 }
 } más { para ( En t X =  0 ;  X ! = NUM_LEDS;  X ++ )
 {
 leds [x] = CRGB :: Rojo;
 FastLED . espectáculo();
 }
 }
 retrasar( 10 );
 }
 }
 } / * Fin del código * / 
DESCARGAR

Copie el código de Sketch anterior en su software Arduino IDE para programar su Arduino.

No se necesitan bibliotecas para este tutorial.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Enviar Whatsapp
Hola 👋
¿En qué podemos ayudarte?