Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

¿Te gustaría llevar tus habilidades de fotografía al siguiente nivel? En este artículo, te enseñaremos cómo crear un control deslizante de cámara DIY con un cabezal de giro e inclinación, todo basado en Arduino. Con este proyecto, podrás capturar tomas increíbles de forma automática y profesional. ¡No te pierdas esta emocionante oportunidad de mejorar tus habilidades fotográficas!

En este tutorial aprenderemos cómo construir un control deslizante de cámara motorizado con un cabezal de giro e inclinación. Este proyecto basado en Arduino es 100% casero, está hecho de materiales baratos como MDF y madera contrachapada y se controla mediante Arduino, tres motores paso a paso, algunos botones y un joystick montado en una placa de circuito especialmente diseñada. Aun así, el resultado final es bastante impresionante: gracias a los movimientos súper suaves de la cámara, podemos capturar imágenes de aspecto profesional.

Puede ver el vídeo a continuación o leer el tutorial escrito a continuación.

ohDescripción general

Con el controlador podemos mover la cámara manualmente o establecer puntos de inicio y fin y luego la cámara se moverá automáticamente de una posición a otra. Usando el brazo de soporte, también podemos montar el control deslizante en un trípode más pequeño en cualquier ángulo que queramos y aún así obtener movimientos estables.

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Primero,>

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Puede>

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Descargar>modelo 3D de thangs.

Conexión de polea GT2 impresa en 3D:

Thingiverso

Construyendo el control deslizante de la cámara

Entonces comencé a hacer los rieles deslizantes para los cuales usé tubos de cobre de 22 mm. Decidí hacer el control deslizante de 1 metro de largo, así que corté dos piezas de 1 metro de largo. Las tuberías de cobre se pueden oxidar fácilmente, por lo que debemos pulirlas con un abrillantador para metales. En mi caso no tenía, así que utilicé una pasta de dientes para este fin.

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

No>

Luego me puse a hacer la base de madera a la que se unen los dos tubos y que también sirve para fijar el control deslizante a un trípode. Usando una sierra circular, corté dos piezas de madera contrachapada en zigzag de 21 mm y las pegué para formar una sola pieza en zigzag. Luego hice una réplica de la placa de montaje de mi trípode con madera maciza y la fijé a la pieza de madera contrachapada con pegamento para madera y un tornillo. Ahora la base deslizante se puede montar fácilmente en el trípode.

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Fijaré>

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Para>

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Luego>

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Luego>

Una vez asegurados los paneles, procedí a armar el sistema de almacenamiento. Los rodamientos que utilizo son 608Z con un diámetro exterior de 22 mm. Dos arandelas y una tuerca entre dos rodamientos aseguran un espacio suficiente entre ellos, permitiendo un buen contacto con los rieles de 22 mm.

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Para>

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Aquí>

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

La>

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Continué>

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

El>

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Procedí>

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Con>

Continué haciendo las partes superiores del sistema de giro e inclinación. Siguiendo el modelo 3D, hice todos los agujeros apropiados para el motor paso a paso y los rodamientos y pegué y atornillé todo.

Un amigo mío me imprimió en 3D dos poleas de 80 dientes. De esta manera logré una reducción de velocidad 5 veces mayor en comparación con la polea de 16 dientes del motor paso a paso.

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Ahora>

Luego comencé el montaje final del sistema de giro e inclinación. Primero fijé el motor de inclinación con algunos tornillos y luego fijé los dos cojinetes mientras los aseguraba en las ranuras con un poco de epoxi. Luego fijé la plataforma inclinable a la plataforma panorámica con unos tornillos de 8 mm y al mismo tiempo le fijé la polea de 80 dientes junto con la correa de distribución.

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Aquí>

Luego conecté el motor de giro y agregué cojinetes tanto en la parte superior como en la inferior de la plataforma niveladora. Luego puse un perno, agregué un cojinete de empuje, la polea de 80 dientes y la correa de distribución, y coloqué el cabezal de inclinación previamente ensamblado encima. Finalmente lo fijé con un tornillo y listo, este paso completa la construcción del slider.

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

diagrama de circuito

Bien, ahora viene la parte divertida: instalar los componentes electrónicos. Aquí está el diagrama de circuito de este proyecto de control deslizante de cámara de bricolaje.

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Los>

Puede obtener los componentes necesarios para este proyecto a través de los siguientes enlaces:

  • Motor paso a paso (NEMA17)………. Amazon / Banggood / AliExpress
  • Controlador paso a paso A4988………………. Amazon / Banggood / AliExpress
  • Adaptador 12V 2A……………………..…. Amazon / Banggood / AliExpress
  • Palanca de mando……………………………… Amazon / Banggood / AliExpress
  • Conexión eléctrica………….………….…… Amazon / Banggood / AliExpress
  • Placa Arduino………………………… Amazon / Banggood / AliExpress

Divulgación: estos son enlaces de afiliados. Como asociado de Amazon, gano con compras que califican.

diseño de PCB

A continuación diseñé de acuerdo con el diagrama del circuito un placa de circuito impreso personalizada para mantener los componentes electrónicos organizados.

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

hice>FácilEDA Software gratuito de diseño de circuitos en línea. El circuito tenía bastantes conexiones, así que utilicé las capas superior e inferior y logré obtener una PCB funcional y atractiva. Después de completar este paso, generé el archivo Gerber necesario para crear la PCB. Luego pedí la placa de circuito a JLCPCBquién es realmente el patrocinador de este tutorial.

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Aquí>

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Sin>

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Montaje de la electrónica

Bien, a continuación pasé a ensamblar los componentes electrónicos. Comencé soldando cabezales de pines en la placa de circuito. Esto permite una conexión y desconexión más sencilla de componentes cuando sea necesario. En realidad, utilicé cabezales para todo excepto para los condensadores y resistencias, que soldé directamente a la placa. Entonces procedí a soldar cables de puente a todos los componentes electrónicos.

De esta manera puedo montar fácilmente los componentes en la caja del controlador y conectarlos a la placa al mismo tiempo.

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

En>

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Finalmente,>

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Después>

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Usando>

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Para>

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

Código Arduino del control deslizante de la cámara DIY

En este tutorial ahora tenemos que mirar el código Arduino y explicar cómo funciona el programa. Dado que el código es un poco más largo, para una mejor comprensión publicaré el código fuente del programa en secciones con una descripción para cada sección. Y al final de este artículo publicaré el código fuente completo.

El programa se basa en la Biblioteca AccelStepper por Mike McCauley. Esta es una biblioteca increíble que permite un fácil control de múltiples motores paso a paso al mismo tiempo. Una vez que incluimos esta biblioteca y la biblioteca MultiStepper.h asociada, necesitamos definir todos los pines de Arduino a usar, las instancias de los motores paso a paso y algunas variables necesarias para el siguiente programa.

#include <AccelStepper.h>
#include <MultiStepper.h>

#define JoyX A0       // Joystick X pin
#define JoyY A1       // Joystick Y pin
#define slider A2     // Slider potentiometer
#define inOutPot A3   // In and Out speed potentiometer
#define JoySwitch 10  // Joystick switch connected
#define InOutSet 12   // Set Button
#define limitSwitch 11
#define inLED 8
#define outLED 9

// Define the stepper motors and the pins the will use
AccelStepper stepper1(1, 7, 6); // (Type:driver, STEP, DIR)
AccelStepper stepper2(1, 5, 4);
AccelStepper stepper3(1, 3, 2);

MultiStepper StepperControl;  // Create instance of MultiStepper

long gotoposition[3]; // An array to store the In or Out position for each stepper motor

int JoyXPos = 0;
int JoyYPos = 0;
int sliderPos = 0;
int currentSpeed = 100;
int inOutSpeed = 100;

int XInPoint = 0;
int YInPoint = 0;
int ZInPoint = 0;
int XOutPoint = 0;
int YOutPoint = 0;
int ZOutPoint = 0;
int InandOut = 0;Code language: Arduino (arduino)

En la sección de configuración, configuramos los valores de velocidad iniciales para los motores paso a paso, definimos algunos modos de pin y agregamos los tres motores paso a paso a la instancia de control de pasos múltiples llamada «StepperControl». Usando los bucles while, movemos el control deslizante a la posición de inicio o se mueve hasta que llega al interruptor de límite y luego retrocede 200 pasos para liberar el interruptor de límite.

void setup() {
  // Set initial seed values for the steppers
  stepper1.setMaxSpeed(3000);
  stepper1.setSpeed(200);
  stepper2.setMaxSpeed(3000);
  stepper2.setSpeed(200);
  stepper3.setMaxSpeed(3000);
  stepper3.setSpeed(200);
  pinMode(JoySwitch, INPUT_PULLUP);
  pinMode(InOutSet, INPUT_PULLUP);
  pinMode(limitSwitch, INPUT_PULLUP);
  pinMode(inLED, OUTPUT);
  pinMode(outLED, OUTPUT);

  // Create instances for MultiStepper - Adding the 3 steppers to the StepperControl instance for multi control
  StepperControl.addStepper(stepper1);
  StepperControl.addStepper(stepper2);
  StepperControl.addStepper(stepper3);

  // Move the slider to the initial position - homing
  while (digitalRead(limitSwitch) != 0) {
    stepper1.setSpeed(3000);
    stepper1.runSpeed();
    stepper1.setCurrentPosition(0); // When limit switch pressed set position to 0 steps
  }
  delay(20);
  // Move 200 steps back from the limit switch
  while (stepper1.currentPosition() != -200) {
    stepper1.setSpeed(-3000);
    stepper1.run();
  }
}Code language: Arduino (arduino)

En la sección del bucle, primero comprobamos si el cursor ha alcanzado las posiciones finales, o si se encuentra el final de carrera o 80 cm al otro lado.

// Limiting the movement - Do nothing if limit switch pressed or distance traveled in other direction greater then 80cm
  while (digitalRead(limitSwitch) == 0 || stepper1.currentPosition() < -64800) {}Code language: Arduino (arduino)

Con la siguiente declaración if, aumentamos las velocidades de giro e inclinación con cada pulsación del interruptor del joystick.

// If Joystick pressed increase the Pan and Tilt speeds
  if (digitalRead(JoySwitch) == 0) {
    currentSpeed = currentSpeed + 50;
    delay(200);
  }Code language: Arduino (arduino)

Luego comprobamos si hemos presionado el botón Set, que se utiliza para configurar las posiciones IN y OUT. Con la primera pulsación de un botón guardamos las posiciones IN de los motores paso a paso y además dejamos que se encienda el LED IN.

switch (InandOut) { 
      case 0:   // Set IN position
        InandOut = 1;
        XInPoint = stepper1.currentPosition(); // Set the IN position for steppers 1
        YInPoint = stepper2.currentPosition(); // Set the IN position for steppers 2
        ZInPoint = stepper3.currentPosition(); // Set the IN position for steppers 3
        digitalWrite(inLED, HIGH); // Light up inLed
        break;Code language: Arduino (arduino)

De igual forma con la segunda pulsación guardamos las posiciones OUT y enciendemos el LED OUT.

case 1: // Set OUT position
        InandOut = 2;
        XOutPoint = stepper1.currentPosition(); //  Set the OUT Points for both steppers
        YOutPoint = stepper2.currentPosition();
        ZOutPoint = stepper3.currentPosition();
        digitalWrite(outLED, HIGH);
        break;Code language: Arduino (arduino)

Con la siguiente pulsación de tecla leemos el valor del potenciómetro de velocidad automática, que se utiliza para establecer la velocidad máxima de los motores. También agregamos las posiciones IN a la matriz «gotoposition», que se usa en la función moveTo(), que calcula la velocidad requerida para todos los motores paso a paso por separado. Luego, el control deslizante se mueve automáticamente a la posición En usando la función runSpeedToPosition().

case 2: // Move to IN position / go to case 3
        InandOut = 3;
        inOutSpeed = analogRead(inOutPot); // Auto speed potentiometer
        // Place the IN position into the Array
        gotoposition[0] = XInPoint;
        gotoposition[1] = YInPoint;
        gotoposition[2] = ZInPoint;
        stepper1.setMaxSpeed(inOutSpeed);
        stepper2.setMaxSpeed(inOutSpeed);
        stepper3.setMaxSpeed(inOutSpeed);
        StepperControl.moveTo(gotoposition); // Calculates the required speed for all motors
        StepperControl.runSpeedToPosition(); // Blocks until all steppers are in position
        delay(200);
        break;Code language: Arduino (arduino)

De la misma forma, en el caso número 3 o con otra pulsación de tecla, movemos el control deslizante a la posición OUT.

case 3: // Move to OUT position / go back to case 2
        InandOut = 2;
        inOutSpeed = analogRead(inOutPot);
        // Place the OUT position into the Array
        gotoposition[0] = XOutPoint;
        gotoposition[1] = YOutPoint;
        gotoposition[2] = ZOutPoint;
        stepper1.setMaxSpeed(inOutSpeed);
        stepper2.setMaxSpeed(inOutSpeed);
        stepper3.setMaxSpeed(inOutSpeed);
        StepperControl.moveTo(gotoposition); // Calculates the required speed for all motors
        StepperControl.runSpeedToPosition(); // Blocks until all are in position
        delay(200);
        break;Code language: Arduino (arduino)

Si mantenemos presionado el botón Set durante más de medio segundo, se ejecutará la instrucción del 4º caso, que restablecerá las posiciones IN y OUT para que podamos configurar otras nuevas.

Luego vienen los controles de giro e inclinación del joystick. El valor analógico que obtenemos del joystick está entre 0 y 1024, o cuando se apoya en el medio los valores rondan los 500. Entonces, si movemos el joystick hacia la izquierda y el valor analógico es mayor que 600, estamos configurando la velocidad a Si movemos el joystick hacia la derecha, ponemos la velocidad del motor en negativa, lo que significa que gira en la dirección opuesta.

// Joystick X - Pan movement
  JoyXPos = analogRead(JoyX);
  // if Joystick is moved left, move stepper 2 or pan to left
  if (JoyXPos > 600) {
    stepper2.setSpeed(currentSpeed);
  }
  // if Joystick is moved right, move stepper 2 or pan to right
  else if (JoyXPos < 400) {
    stepper2.setSpeed(-currentSpeed);
  }
  // if Joystick stays in middle, no movement
  else {
    stepper2.setSpeed(0);
  }Code language: Arduino (arduino)

Si permanece en el medio, la velocidad se establece en 0. Este método se utiliza tanto para el eje del joystick como para el potenciómetro deslizante. De hecho, en el caso del potenciómetro, utilizamos su valor analógico para aumentar también la velocidad del motor a medida que seguimos girando el potenciómetro.

// Slider potentiometer
  sliderPos = analogRead(slider);
  // If potentiometer is turned left, move slider left
  if (sliderPos > 600) {
    sliderPos = map(sliderPos, 600, 1024, 0, 3000);
    stepper1.setSpeed(sliderPos); // Increase speed as turning
  }
  // If potentiometer is turned right, move slider right
  else if (sliderPos < 400 ) {
    sliderPos = map(sliderPos, 400, 0, 0, 3000);
    stepper1.setSpeed(-sliderPos); // Increase speed as turning
  }
  // If potentiometer in middle, no movement
  else {
    stepper1.setSpeed(0);
  }Code language: Arduino (arduino)

Finalmente, llamamos a las funciones runSpeed() para cada uno de los tres motores paso a paso y ejecutamos los comandos mencionados anteriormente o giramos los motores en consecuencia.

// Execute the above commands - run the stepper motors
  stepper1.runSpeed();
  stepper2.runSpeed();
  stepper3.runSpeed();Code language: Arduino (arduino)

Aquí está el código fuente completo:

/*
  DIY Camera Slider with Pan and Tilt Head
  by Dejan Nedelkovski
  www.HowToMechatronics.com

  Library - AccelStepper by Mike McCauley:
  http://www.airspayce.com/mikem/arduino/AccelStepper/index.html

*/

#include <AccelStepper.h>
#include <MultiStepper.h>

#define JoyX A0       // Joystick X pin
#define JoyY A1       // Joystick Y pin
#define slider A2     // Slider potentiometer
#define inOutPot A3   // In and Out speed potentiometer
#define JoySwitch 10  // Joystick switch connected
#define InOutSet 12   // Set Button
#define limitSwitch 11
#define inLED 8
#define outLED 9

// Define the stepper motors and the pins the will use
AccelStepper stepper1(1, 7, 6); // (Type:driver, STEP, DIR)
AccelStepper stepper2(1, 5, 4);
AccelStepper stepper3(1, 3, 2);

MultiStepper StepperControl;  // Create instance of MultiStepper

long gotoposition[3]; // An array to store the In or Out position for each stepper motor

int JoyXPos = 0;
int JoyYPos = 0;
int sliderPos = 0;
int currentSpeed = 100;
int inOutSpeed = 100;

int XInPoint = 0;
int YInPoint = 0;
int ZInPoint = 0;
int XOutPoint = 0;
int YOutPoint = 0;
int ZOutPoint = 0;
int InandOut = 0;

void setup() {
  // Set initial seed values for the steppers
  stepper1.setMaxSpeed(3000);
  stepper1.setSpeed(200);
  stepper2.setMaxSpeed(3000);
  stepper2.setSpeed(200);
  stepper3.setMaxSpeed(3000);
  stepper3.setSpeed(200);
  pinMode(JoySwitch, INPUT_PULLUP);
  pinMode(InOutSet, INPUT_PULLUP);
  pinMode(limitSwitch, INPUT_PULLUP);
  pinMode(inLED, OUTPUT);
  pinMode(outLED, OUTPUT);

  // Create instances for MultiStepper - Adding the 3 steppers to the StepperControl instance for multi control
  StepperControl.addStepper(stepper1);
  StepperControl.addStepper(stepper2);
  StepperControl.addStepper(stepper3);

  // Move the slider to the initial position - homing
  while (digitalRead(limitSwitch) != 0) {
    stepper1.setSpeed(3000);
    stepper1.runSpeed();
    stepper1.setCurrentPosition(0); // When limit switch pressed set position to 0 steps
  }
  delay(20);
  // Move 200 steps back from the limit switch
  while (stepper1.currentPosition() != -200) {
    stepper1.setSpeed(-3000);
    stepper1.run();
  }

}

void loop() {
  // Limiting the movement - Do nothing if limit switch pressed or distance traveled in other direction greater then 80cm
  while (digitalRead(limitSwitch) == 0 || stepper1.currentPosition() < -64800) {}

  // If Joystick pressed increase the Pan and Tilt speeds
  if (digitalRead(JoySwitch) == 0) {
    currentSpeed = currentSpeed + 50;
    delay(200);
  }
  // If Set button is pressed - toggle between the switch cases
  if (digitalRead(InOutSet) == 0) {
    delay(500);
    // If we hold set button pressed longer then half a second, reset the in and out positions
    if (digitalRead(InOutSet) == 0) {
      InandOut = 4;
    }
    switch (InandOut) { 
      case 0:   // Set IN position
        InandOut = 1;
        XInPoint = stepper1.currentPosition(); // Set the IN position for steppers 1
        YInPoint = stepper2.currentPosition(); // Set the IN position for steppers 2
        ZInPoint = stepper3.currentPosition(); // Set the IN position for steppers 3
        digitalWrite(inLED, HIGH); // Light up inLed
        break;

      case 1: // Set OUT position
        InandOut = 2;
        XOutPoint = stepper1.currentPosition(); //  Set the OUT Points for both steppers
        YOutPoint = stepper2.currentPosition();
        ZOutPoint = stepper3.currentPosition();
        digitalWrite(outLED, HIGH);
        break;

      case 2: // Move to IN position / go to case 3
        InandOut = 3;
        inOutSpeed = analogRead(inOutPot); // Auto speed potentiometer
        // Place the IN position into the Array
        gotoposition[0] = XInPoint;
        gotoposition[1] = YInPoint;
        gotoposition[2] = ZInPoint;
        stepper1.setMaxSpeed(inOutSpeed);
        stepper2.setMaxSpeed(inOutSpeed);
        stepper3.setMaxSpeed(inOutSpeed);
        StepperControl.moveTo(gotoposition); // Calculates the required speed for all motors
        StepperControl.runSpeedToPosition(); // Blocks until all steppers are in position
        delay(200);
        break;

      case 3: // Move to OUT position / go back to case 2
        InandOut = 2;
        inOutSpeed = analogRead(inOutPot);
        // Place the OUT position into the Array
        gotoposition[0] = XOutPoint;
        gotoposition[1] = YOutPoint;
        gotoposition[2] = ZOutPoint;
        stepper1.setMaxSpeed(inOutSpeed);
        stepper2.setMaxSpeed(inOutSpeed);
        stepper3.setMaxSpeed(inOutSpeed);
        StepperControl.moveTo(gotoposition); // Calculates the required speed for all motors
        StepperControl.runSpeedToPosition(); // Blocks until all are in position
        delay(200);
        break;

      case 4: // If Set button is held longer then half a second go back to case 0
        InandOut = 0;
        digitalWrite(inLED, LOW);
        digitalWrite(outLED, LOW);
        delay(1000);
        break;
    }
  }

  // Joystick X - Pan movement
  JoyXPos = analogRead(JoyX);
  // if Joystick is moved left, move stepper 2 or pan to left
  if (JoyXPos > 600) {
    stepper2.setSpeed(currentSpeed);
  }
  // if Joystick is moved right, move stepper 2 or pan to right
  else if (JoyXPos < 400) {
    stepper2.setSpeed(-currentSpeed);
  }
  // if Joystick stays in middle, no movement
  else {
    stepper2.setSpeed(0);
  }

  //Joystick Y - Tilt movement
  JoyYPos = analogRead(JoyY);
  if (JoyYPos > 600) {
    stepper3.setSpeed(currentSpeed);
  }
  else if (JoyYPos < 400) {
    stepper3.setSpeed(-currentSpeed);
  }
  else {
    stepper3.setSpeed(0);
  }

  // Slider potentiometer
  sliderPos = analogRead(slider);
  // If potentiometer is turned left, move slider left
  if (sliderPos > 600) {
    sliderPos = map(sliderPos, 600, 1024, 0, 3000);
    stepper1.setSpeed(sliderPos); // Increase speed as turning
  }
  // If potentiometer is turned right, move slider right
  else if (sliderPos < 400 ) {
    sliderPos = map(sliderPos, 400, 0, 0, 3000);
    stepper1.setSpeed(-sliderPos); // Increase speed as turning
  }
  // If potentiometer in middle, no movement
  else {
    stepper1.setSpeed(0);
  }
  // Execute the above commands - run the stepper motors
  stepper1.runSpeed();
  stepper2.runSpeed();
  stepper3.runSpeed();
}Code language: Arduino (arduino)

Eso es todo. Espero que hayas disfrutado este proyecto Arduino y hayas aprendido algo nuevo. No dudes en hacer tus preguntas en la sección de comentarios a continuación y consultar mi colección de proyectos Arduino.

Categorías Tutoriales y proyectos de Arduino.
Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded

Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino

En este tutorial aprenderás a hacer un control deslizante motorizado para cámara con cabezal de giro e inclinación. Este proyecto basado en Arduino es 100% DIY, construido con materiales económicos como MDF y contrachapado, y controlado mediante Arduino, tres motores paso a paso, algunos botones y un joystick conectado a una PCB personalizada. A pesar de ser un proyecto casero, el resultado final es impresionante, con movimientos de cámara suaves que permiten obtener tomas cinematográficas profesionales. Puedes ver el siguiente video o leer el tutorial escrito a continuación.

Visión general

Usando el controlador, podemos mover la cámara manualmente o configurar puntos de inicio y final para que la cámara se desplace automáticamente de uno a otro. También, utilizando el brazo de soporte, podemos montar el deslizador incluso en un trípode más pequeño, a cualquier ángulo que deseemos, y aún así obtener movimientos estables.

Para empezar, diseñé el control deslizante utilizando un software de modelado 3D. Puedes encontrar y descargar este modelo 3D para obtener todas las dimensiones. Luego, comencé a hacer los rieles del deslizador con tubos de cobre de 22 mm de espesor. Decidí hacer el deslizador de 1 metro de longitud, así que corté dos piezas a 1 metro de longitud. Los tubos de cobre pueden oxidarse fácilmente, por lo que es necesario pulirlos con un pulimento metálico. Luego, continué con la base de madera en la cual se montarán los tubos y servirá para montar el deslizador en un trípode. Luego, agregué pernos roscados de 8 mm a los rieles y aseguré los extremos con paneles de madera.

Después de completar la construcción del deslizador, procedí con el diseño de la PCB personalizada para mantener los componentes electrónicos organizados. Usé el software de diseño de circuitos EasyEDA para diseñar la PCB, luego pedí la PCB a JLCPCB, que es el patrocinador de este tutorial. Una vez que la PCB llegó, ensamblé los componentes electrónicos en el estuche del controlador y conecté todo a la PCB.

Diagrama de circuito

A continuación se muestra el diagrama de circuito de este proyecto de control deslizante para cámara DIY.

![Diagrama de circuito](link-to-image)

Ensamblaje del electrónica

Comencé soldando los conectores de clavija en la PCB. Luego, monté los componentes en el estuche del controlador, como los botones, los potenciómetros y el interruptor de encendido. Finalmente, conecté el controlador con los tres motores paso a paso y el interruptor de límite.

Código de Arduino

A continuación se presenta el código de Arduino utilizado en este proyecto para controlar el deslizador de cámara y el cabezal de giro e inclinación.

«`cpp
// Insertar el código completo aquí
«`

Esto es todo. Espero que hayas disfrutado de este proyecto de Arduino y hayas aprendido algo nuevo. Si tienes alguna pregunta, no dudes en dejarla en la sección de comentarios. ¡Visita mi colección de proyectos de Arduino para más ideas!

5 comentarios en «Control deslizante de cámara DIY con cabezal de giro e inclinación: proyecto basado en Arduino»

  1. ¡Qué idea tan original! Me parece súper creativo utilizar Arduino para crear un control deslizante de cámara DIY. Definitivamente voy a intentar hacerlo, ¡gracias por compartir este proyecto tan interesante!

Deja un comentario