Tabla de contenido:

Control deslizante de la cámara de seguimiento de objetos con eje de rotación. Impreso en 3D y construido en el controlador de motor de CC RoboClaw y Arduino: 5 pasos (con imágenes
Control deslizante de la cámara de seguimiento de objetos con eje de rotación. Impreso en 3D y construido en el controlador de motor de CC RoboClaw y Arduino: 5 pasos (con imágenes

Video: Control deslizante de la cámara de seguimiento de objetos con eje de rotación. Impreso en 3D y construido en el controlador de motor de CC RoboClaw y Arduino: 5 pasos (con imágenes

Video: Control deslizante de la cámara de seguimiento de objetos con eje de rotación. Impreso en 3D y construido en el controlador de motor de CC RoboClaw y Arduino: 5 pasos (con imágenes
Video: DIY Object tracking camera slider tutorial. 3D printed + built around the Arduino & RoboClaw 2024, Mes de julio
Anonim
Image
Image
Diseño de hardware + Construcción + Impresión 3D
Diseño de hardware + Construcción + Impresión 3D

Proyectos Fusion 360 »

Este proyecto ha sido uno de mis proyectos favoritos desde que combiné mi interés por la realización de videos con el bricolaje. Siempre he mirado y he querido emular esas tomas cinematográficas en películas en las que una cámara se mueve por una pantalla mientras se desplaza para seguir el objeto. Esto agrega un efecto de profundidad muy interesante a un video de otra manera 2d. Queriendo replicar esto sin gastar miles de dólares en equipo de Hollywood, decidí construir yo mismo un control deslizante de cámara.

Todo el proyecto se basa en piezas que puede imprimir en 3D y el código se ejecuta en la popular placa Arduino. Todos los archivos del proyecto, como los archivos CAD y el código, están disponibles para descargar a continuación.

Archivos de impresión CAD / 3D disponibles aquí

Archivo de código Arduino disponible aquí

El proyecto gira en torno a los 2 motores de CC con escobillas y engranajes y el controlador de motor Basic Micro Roboclaw. Este controlador de motor puede transformar motores de CC con escobillas en un tipo superior de servo con una precisión de posición increíble, toneladas de torque y una rotación completa de 360 grados. Más sobre esto más adelante.

Antes de continuar, mire primero el video tutorial vinculado aquí. Ese tutorial le dará una descripción general de cómo construir este proyecto y esta guía de Instructables profundizará más en cómo construí este proyecto.

Materiales

  • 2x varillas roscadas m10 de 1 metro de largo que se utilizan para conectar todas las piezas
  • 8 tuercas M10 para montar las piezas en las varillas roscadas
  • 2x varillas de acero liso de 95 cm de largo y 8 mm para que el control deslizante se deslice
  • 4 rodamientos lm8uu para que el control deslizante se deslice suavemente sobre las varillas de acero
  • 4 tuercas m3 de 10 mm de largo para montar el motor
  • 2 x rodamientos de patineta (22 mm de diámetro exterior, 8 mm de diámetro interior) para el eje de rotación
  • 1x cojinete de 15 mm para el lado loco
  • 1 perno m4 de 4 cm de largo con contratuerca m4 para montar el cojinete de la polea tensora en la pieza impresa en 3d de la polea tensora.
  • Engranaje de 20 dientes con 4 mm de diámetro interior para el motor deslizante. La polea exacta no es muy importante, ya que su motor de CC debe estar adaptado para un par de torsión suficiente. Solo asegúrate de que sea del mismo tono que tu cinturón
  • Cinturón GT2 de 2 metros de largo. Nuevamente, puede usar cualquier correa siempre que coincida con el paso de los dientes de su polea.

Electrónica

  • 2 * Motores DC con engranajes con encoders (uno controla el movimiento lateral, mientras que el otro controla el eje de rotación). Aquí está el que usé. Más sobre esto en la parte Electrónica de la guía.
  • Controlador de motor DC RoboClaw. (Usé el controlador dual de 15Amp ya que me permitió controlar ambos motores con un controlador)
  • Cualquier Arduino. Usé el Arduino UNO
  • Batería / Fuente de energía. (Usé una batería LiPo de 2 celdas y 7,4 V)
  • Pantalla (para mostrar el menú. Cualquier pantalla compatible con U8G funcionará, utilicé esta pantalla OLED de 1.3 pulgadas)
  • Codificador de rotación (para navegar y configurar opciones en el menú)
  • Botón pulsador físico (para activar el movimiento del control deslizante)

Paso 1: Diseño de hardware + Construcción + Impresión 3D

Electrónica
Electrónica

A continuación, pasemos a la electrónica. La electrónica es donde este proyecto tiene mucha flexibilidad.

Comencemos con el núcleo de este proyecto: los 2 motores de CC con escobillas.

Elegí motores de CC con escobillas por varias razones.

  1. Los motores cepillados son mucho más sencillos de cablear y operar en comparación con los motores paso a paso.
  2. Los motores de CC con escobillas son mucho más livianos que los motores de CC, lo cual es especialmente importante para el motor de eje de rotación, ya que ese motor se mueve físicamente lateralmente con la cámara y hacerlo lo más ligero posible es importante para evitar una tensión excesiva en el motor deslizante de la cámara principal.

Elegí este motor de CC en particular. Este motor me dio una cantidad de torque extremadamente alta que era necesaria para mover una carga de cámara tan pesada. Además, el engranaje alto significaba que las RPM máximas eran lentas, lo que significaba que podía filmar movimientos más lentos, y el engranaje alto también conducía a una mayor precisión posicional, ya que una rotación de 360 grados del eje de salida significaba 341.2 conteos del codificador del motor.

Esto nos lleva al controlador de movimiento RoboClaw. El controlador de motor de CC dual del motor Roboclaw toma instrucciones simples de su Arduino a través de comandos de código simples y realiza todo el procesamiento pesado y la entrega de energía para que su motor funcione según lo previsto. El Arduino puede enviar señales al Roboclaw a través de PWM, voltaje analógico, serie simple o serie de paquetes. La serie de paquetes es la mejor manera de hacerlo, ya que le permite obtener información del Roboclaw que es necesaria para el seguimiento posicional. Profundizaré en la parte de software / programación de Roboclaw en el siguiente paso (programación).

En esencia, el Roboclaw puede transformar un motor con escobillas de CC con un codificador para que sea más como un servo gracias a la capacidad del RoboClaw para hacer control posicional. Sin embargo, a diferencia de un servo tradicional, ahora su motor de CC con escobillas tiene mucho más par, mucha más precisión de posición debido al alto engranaje del motor y, lo que es más importante, su motor de CC puede girar 360 grados continuamente, ninguno de los cuales un servo tradicional puede hacer.

La siguiente parte de la electrónica es la pantalla. Para mi pantalla, elegí este panel OLED por su tamaño y alto contraste. Este alto contraste es increíble y hace que la pantalla sea muy fácil de usar bajo la luz solar directa sin emitir demasiada luz que pueda interferir con una posible toma oscura de la cámara. Esta pantalla se puede cambiar fácilmente por otra pantalla compatible con U8G. La lista completa de pantallas compatibles está disponible aquí. De hecho, este proyecto se codificó intencionalmente en torno a la biblioteca U8G para que los constructores de bricolaje como usted tuvieran más flexibilidad en sus piezas.

Las partes finales de la electrónica para este proyecto fueron el codificador rotatorio y el botón para iniciar el movimiento del deslizador. El codificador le permite navegar por el menú de la pantalla y configurar todo el menú del control deslizante con un solo dial. El codificador rotatorio no tiene una posición "final" como un potenciómetro tradicional, y esto es especialmente útil para ajustar las coordenadas xey del seguimiento del objeto en la pantalla. El botón pulsador se utiliza exclusivamente para iniciar el movimiento del control deslizante sin tener que manipular el codificador giratorio.

Paso 3: programación del control deslizante de la cámara

Programación del control deslizante de la cámara
Programación del control deslizante de la cámara
Programación del control deslizante de la cámara
Programación del control deslizante de la cámara

La codificación fue, con mucho, el desafío más difícil de este proyecto. Verá, desde el principio quería que el control deslizante fuera controlable desde una pantalla. Para que este proyecto sea compatible con tantas pantallas como sea posible, tuve que usar la biblioteca U8Glib para Arduino. Esta biblioteca tiene soporte para más de 32 pantallas. Sin embargo, la biblioteca U8Glib usó un bucle de imagen para dibujar el menú en la pantalla y esto entró en conflicto con la capacidad de Arduino de recopilar simultáneamente información sobre la posición de la cámara que se requería para la funcionalidad de cálculo del ángulo de la cámara (esto se cubre en los siguientes dos párrafos). El U8Glib2 tiene una alternativa al ciclo de imagen mediante el uso de algo llamado una opción de búfer de página completa, pero la biblioteca consumía demasiada memoria y dificultaba el ajuste del resto del código dadas las limitaciones de memoria del Arduino Uno. Esto significaba que estaba atascado con U8G y tuve que solucionar el problema evitando que la pantalla se actualizara cada vez que el control deslizante estaba en movimiento y el Arduino necesitaba recopilar datos de posición del Roboclaw. También me vi obligado a activar el control deslizante para comenzar a moverse fuera del bucle del menú, ya que una vez que entré en los submenús, estaría dentro del bucle de la imagen y el control deslizante no funcionaría como se esperaba. También evité este problema al tener un botón físico separado que activa el movimiento del control deslizante.

A continuación, hablemos del elemento de seguimiento rotacional. Esta parte parece muy compleja de integrar, pero en realidad es bastante simple. La implementación para esto está bajo la función "motor ()" dentro de mi código Arduino. El primer paso es hacer una cuadrícula bidimensional y decidir dónde se coloca el objeto que desea rastrear. En base a eso, puede dibujar un triángulo a su ubicación actual. Puede obtener su ubicación actual a partir del valor del codificador del motor. Si desea configurar la posición del objeto que se está rastreando en cm / mm, deberá traducir el valor de su codificador a un valor de cm / mm. Esto se puede hacer simplemente moviendo el control deslizante de la cámara 1 cm y midiendo el aumento en el valor del codificador. Puede ingresar este valor en la parte superior del código debajo de la variable encoder_mm.

Continuando, ahora usaremos la función de tangente inversa para obtener el ángulo que debe mirar la cámara para apuntar a su objeto. La tangente inversa toma el lado opuesto y adyacente del triángulo. El lado opuesto del triángulo nunca cambia, ya que es la distancia y desde el control deslizante hasta el objeto. Sin embargo, el lado adyacente del control deslizante de la cámara cambia. Este lado adyacente se puede calcular tomando la posición x del objeto y restando su posición actual. A medida que el control deslizante se mueve a través de su rango de movimiento, seguirá actualizando el Arduino en el valor del codificador. El Arduino convertirá repetidamente este valor del codificador a un valor posicional cm / mm x y luego calculará la longitud del lado adyacente, y finalmente calculará el ángulo que la cámara debe mirar en todo momento para apuntar al objeto.

Ahora que nuestro Arduino está procesando dinámicamente el ángulo de la cámara, podemos abordar la conversión de este ángulo en un valor posicional para que se mueva el motor de rotación. Esto nos lleva a la característica más importante de RoboClaw para este proyecto. Al darle al Roboclaw un valor de posición, esencialmente puede hacer que un motor con escobillas de CC se comporte como un servo. Excepto a diferencia de un servo, nuestro motor tiene toneladas más de torque, mucha mayor precisión y también puede girar 360 grados.

El código Arduino para mover el Roboclaw a una determinada posición es el siguiente:

roboclaw. SpeedAccelDeccelPositionM1 (dirección, "velocidad", "aceleración", "desaceleración", "posición a la que desea ir", 1);

Para ajustar el valor posicional del motor para que se corresponda con el ángulo de su cámara, deberá mover manualmente la placa de la cámara 180 grados. A continuación, observe cuánto ha cambiado el valor del codificador de mover la placa de la cámara de 0 grados a 180 grados. Esto le da el rango de su codificador. Puede ingresar este rango en la función del motor que asigna el ángulo de la cámara del Arduino a un valor posicional. Esto también se comenta en el código, por lo que debería ser fácil de encontrar *****

El RoboClaw también me dio la capacidad de ajustar otros factores como la aceleración, la desaceleración y los valores PID. Esto me permitió suavizar aún más el movimiento del eje de rotación, especialmente cuando los cambios de ángulo eran pequeños y agregaban tirones sin un valor alto de PID "D". También puede ajustar automáticamente sus valores PID a través de la aplicación de escritorio de Roboclaw.

Paso 4: operar el control deslizante de la cámara

Manejo del control deslizante de la cámara
Manejo del control deslizante de la cámara

Ahora llegamos a la parte divertida, operando el control deslizante El menú tiene 4 pestañas principales. La pestaña superior está dedicada al control de velocidad. La fila central del menú contiene pestañas para configurar la posición X e Y del objeto rastreado en mm, y también configurar si queremos que el control deslizante gire y rastree nuestro objeto o simplemente haga un movimiento deslizante simple sin rotación. Girar el codificador rotatorio nos permite navegar por las diferentes opciones de los menús. Para configurar cualquiera de las opciones, navegue hasta la opción y presione el codificador rotatorio. Una vez presionado, girar el codificador rotatorio cambiará el valor del submenú resaltado en lugar de desplazarse por el menú. Una vez que haya alcanzado el valor deseado, puede volver a hacer clic en el codificador rotatorio. Ahora ha vuelto al menú principal y puede navegar entre las distintas pestañas. Una vez que esté listo, simplemente presione el botón Ir al lado de la pantalla y el control deslizante hará su trabajo.

Asegúrese de que una vez que haya terminado de usar el control deslizante de la cámara, la cámara esté en la posición "inicial": el lado del control deslizante en el que comenzó. La razón de esto es que el codificador del motor no es un codificador absoluto, lo que significa que Roboclaw / Arduino no puede decir dónde está el codificador. Solo pueden saber cuánto ha cambiado el codificador desde la última vez que se encendió. Esto significa que cuando apaga el control deslizante de la cámara, el control deslizante 'olvidará' la posición del control deslizante y restablecerá el codificador a 0. Por lo tanto, si apaga el control deslizante del otro lado, cuando lo encienda, el control deslizante intente moverse más allá del borde y chocar contra la pared deslizante. Este comportamiento del codificador también es la razón por la que la cámara restablece su ángulo de rotación después de cada movimiento de deslizamiento de la cámara. El eje de rotación también se protege a sí mismo de chocar contra el final de su rango de movimiento.

Puede solucionar este problema agregando paradas finales y un procedimiento de inicio cuando inicie. Esto es lo que usan las impresoras 3D.

Paso 5: Pensamientos finales + Mejoras futuras

Recomiendo encarecidamente que cada constructor cree sus propias versiones de este control deslizante en lugar de crear exactamente el mismo control deslizante. Ajustar mi diseño le permitirá construir su control deslizante según sus especificaciones exactas y al mismo tiempo comprender mejor cómo funcionan la electrónica y el código.

Hice el código lo más legible y configurable posible para que pueda ajustar / calibrar las diferentes variables de código para las especificaciones de su control deslizante. El código también está completamente construido alrededor de funciones, por lo que si desea copiar / modificar / reescribir ciertos comportamientos del control deslizante, no necesita realizar ingeniería inversa y reelaborar todo el código, sino solo las partes que desea editar.

Finalmente, si hiciera una versión 2.0, aquí hay algunas mejoras que haría

  1. Mayor relación de transmisión para el motor de eje de rotación. Una relación de transmisión más alta significa que puedo hacer pequeños movimientos más precisos. Esto es especialmente crítico cuando la cámara está lejos de su objeto y el ángulo de la cámara cambia muy lentamente. Actualmente, mi motor no tiene una marcha demasiado alta y puede provocar un movimiento ligeramente entrecortado cuando el control deslizante de la cámara funciona demasiado lento o cuando hay muy poco cambio en el ángulo de rotación. Agregar un valor de PID "D" alto me ha ayudado a deshacerme de esto, pero ha tenido el costo de una precisión de seguimiento de objetos ligeramente menor.
  2. Longitud modular. Este es un objetivo inverosímil, pero me encantaría que el control deslizante de la cámara tuviera una longitud modular, lo que significa que puede adjuntar fácilmente tramos más largos de pista para que la cámara se deslice. Esto es bastante difícil, ya que uno tendrá que alinear perfectamente ambas orugas y averiguar cómo hacer que funcione el sistema de cinturones. Sin embargo, ¡sería una actualización genial!
  3. Movimiento personalizado Keyframing. Me encantaría introducir el concepto de movimientos de fotogramas clave en este control deslizante de cámara. El fotograma clave es una técnica muy utilizada en la producción de video y audio. Permitiría movimientos de cámara no lineales donde la cámara va a una posición, espera, luego se mueve a otra posición a una velocidad diferente, espera, luego pasa a una tercera posición, etc.
  4. Control de teléfono inalámbrico / Bluetooth. Sería genial poder configurar los parámetros del control deslizante de la cámara de forma inalámbrica y poder implementar el control deslizante de la cámara en ubicaciones de difícil acceso. La aplicación de teléfono también podría abrir oportunidades para integrar fotogramas clave como se menciona en el último párrafo.

Eso es todo por este tutorial. No dude en dejar cualquier pregunta en la sección de comentarios a continuación.

Para obtener más tutoriales de contenido y electrónica, también puede consultar mi canal de YouTube aquí.

Recomendado: