Slider de Cámara Motorizado DIY con Pan & Tilt – Proyecto Controlado por Arduino
En este tutorial aprenderemos a hacer un slider de cámara motorizado con cabeza pan & tilt. Este proyecto Arduino 100% DIY está construido con materiales económicos como MDF y contrachapado, controlado con Arduino, tres motores paso a paso, botones y un joystick en un PCB de diseño personalizado. A pesar de ello, el resultado final es impresionante, con movimientos de cámara super-suaves que permiten obtener tomas cinematográficas de aspecto profesional.
Puede ver el video siguiente o leer el tutorial escrito a continuación.
Resumen
Con el controlador podemos mover la cámara manualmente o definir puntos de inicio y fin para que la cámara se mueva automáticamente entre ellos. Además, usando el brazo de soporte podemos montar el slider incluso en un trípode pequeño, a cualquier ángulo, y conseguir movimientos estables.

Empecé diseñando el slider en software de modelado 3D.

Puede encontrar y descargar este modelo 3D con todas las dimensiones aquí, y explorarlo en su navegador en Thangs.

Enlace polea GT2 impresa 3D: Thingiverse
Construcción del Slider de Cámara
Empecé con los rieles del slider: tubos de cobre de 22 mm. Decidí 1 metro de longitud, así que corté dos piezas a 1 m. El cobre se oxida fácilmente, así que hay que pulirlo con pulidor metálico. Yo no tenía y usé pasta de dientes.

No fue la solución perfecta pero se notó la diferencia y los tubos quedaron más limpios.
Luego hice la base de madera donde se fijan los tubos y que sirve para montar el slider en trípode. Con sierra circular corté dos piezas de contrachapado 21 mm y las encolé para obtener una pieza más gruesa. Con madera maciza hice réplica de la placa de montaje de mi trípode y la fijé con cola y tornillo. Ahora la base del slider se monta fácilmente en el trípode.

Monté los rieles a la base usando varillas roscadas de 8 mm: hice dos agujeros en la base e inserté varillas de 138 mm cortadas a medida. Luego taladré agujeros de 8 mm en los tubos (algo delicado).

Hice una plantilla simple elevando un lápiz a 11 mm (mitad del diámetro del tubo). Fijé el tubo en superficie plana y marqué con la plantilla desde ambos lados para agujeros perfectamente alineados. Primero marqué con punta de tornillo afilado y luego taladré progresivamente con brocas de 2, 4, 6 y 8 mm.

Inserté los rieles por las varillas roscadas y los aseguré con arandelas y tuercas. De forma similar, con una pieza de contrachapado y varilla roscada fijé los extremos de los rieles.

La plataforma deslizante: corté tablero MDF de 8 mm según modelo 3D. Hice agujeros de 8 mm para varillas roscadas donde irán los rodamientos. Ensamblé con cola y tornillos: taladré guías, avellané y atornillé tornillos de 3 mm.
Asegurados los paneles, continué con el sistema de rodamientos. Uso rodamientos 608Z (diámetro exterior 22 mm). Dos arandelas y una tuerca entre dos rodamientos crean la separación suficiente para buen contacto con los rieles de 22 mm.

Para mayor seguridad al usar el slider inclinado, añadí dos juegos más de rodamientos en la cara inferior de la plataforma. Al final la plataforma desliza perfectamente.

Al mover la plataforma en mi trípode pequeño, la cabeza no aguantaba el peso, así que hice un brazo de soporte para estabilizar. Con dos piezas de madera y tornillos/ tuercas hice una abrazadera que se fija a una pata del trípode.

La abrazadera tiene un tornillo donde se fija el brazo de soporte. Hice una ranura en el brazo para posicionar el slider a distintos ángulos: taladré muchos agujeros de 6 mm juntos y luego limé líneas rectas. Este sistema de soporte funcionó perfectamente.

Añadí patas al slider por si no se usa trípode. Las hice de MDF 8 mm con sierra de mano y lima. Las fijé a los extremos con cola y dos tuercas.

Sistema Pan & Tilt
Construí las partes superiores del sistema pan & tilt que se montan sobre la plataforma deslizante. Con sierra circular corté todas las piezas según modelo 3D. Usé contrachapado para el mecanismo de bisagra de la plataforma de nivelación de la cámara (cuando el slider está inclinado), y tableros MDF con agujeros para motor y rodamientos del sistema de pan.

Instalé el motor paso a paso y correa dentada para la plataforma deslizante. En un lado de la plataforma fijé el motor con MDF y tornillos/pernos. En el otro extremo del slider fijé una polea tensora para instalar la correa. Con dos pernos y bridas aseguré la correa a la plataforma.

Con esto el mecanismo deslizante quedó completo.
Continué con las partes superiores de pan & tilt. Según modelo 3D, hice agujeros para motor y rodamientos, encolé y atornillé todo.
Un amigo me imprimió en 3D dos poleas de 80 dientes. Así logré reducción 5:1 respecto a la polea de 16 dientes en el motor.

Hice una correa dentada de lazo cerrado a mi medida: medí longitud necesaria, corté y pegué con cianocrilato y cinta encima. El cianocrilato funciona genial con goma; la correa cerrada funciona sin problemas.
Empecé el ensamblaje final de pan & tilt. Fijé el motor de tilt con pernos, puse los dos rodamientos en su sitio asegurándolos en las ranuras con epoxi. Fijé la plataforma de tilt sobre la de pan con pernos de 8 mm y a la vez monté la polea de 80 dientes con la correa.

La correa quedó un poco floja, pero puse un rodamiento pequeño donde va el tornillo del motor para actuar como tensor. Funcionó y la correa tuvo tensión suficiente.
Fijé el motor de pan, puse rodamientos en la parte superior e inferior de la plataforma de nivelación. Inserté un tornillo a través, añadí rodamiento de empuje, polea de 80 dientes, correa, y encima la cabeza de tilt ya ensamblada. Aseguré con tornillo y ¡listo! La construcción mecánica del slider está completa.

Diagrama de Circuito
Viene la parte divertida: instalar la electrónica. Aquí el diagrama de circuito del proyecto DIY slider de cámara.

Tres motores paso a paso NEMA 17 controlados por tres drivers A4988. Para movimiento del slider usamos un potenciómetro en entrada analógica; para pan & tilt usamos módulo joystick (dos potenciómetros) en dos entradas analógicas. Otro potenciómetro ajusta velocidad del movimiento automático entre posiciones IN y OUT. Estas posiciones se definen con pulsador (con pull-up en pin digital). También hay pulsador de reset, interruptor de alimentación, conector de alimentación, final de carrera para el slider y dos LEDs indicadores de estado IN/OUT. Alimentación 9 o 12V.
Componentes necesarios:
- Motor Paso a Paso (NEMA17)
- Driver A4988
- Adaptador 12V 2A
- Joystick
- Conector Alimentación
- Placa Arduino
Diseño PCB
Según el esquema diseñé PCB personalizado en EasyEDA para organizar la electrónica. El circuito tenía muchas conexiones, usé ambas capas y logré PCB funcional y estético. Generé archivo Gerber y pedí a JLCPCB (patrocinador).


Subimos Gerber, revisamos en visor, seleccionamos propiedades y pedimos. Primer pedido: hasta 10 PCBs por $2.

Tras una semana llegaron los PCBs. Calidad excelente y es muy satisfactorio ver tu propio diseño fabricado.

Montaje de la Electrónica
Soldé pines header en el PCB para conectar/desconectar componentes fácilmente. Usé headers para todo salvo condensadores y resistencias (soldados directo). Soldé cables jumper a todos los componentes electrónicos.

Para la caja del controlador usé acrílico transparente de 4 mm para ver la electrónica. Sierra circular para cortar paneles. Taladro y fresas Forstner para huecos en panel frontal: botones, potenciómetros, interruptor, joystick. Ensamblé con epoxi 5 min. Para la tapa, puse dos tornillos por donde se inserta el panel frontal y se asegura con tuercas arriba.

Monté la electrónica: inserté Arduino y drivers A4988 en PCB. Luego fijé botones y demás componentes en panel frontal.

Conecté componentes a los headers correspondientes del PCB. En panel lateral puse conector alimentación, e hice agujero para pasar jumpers a drivers y motores, y final de carrera al final del slider.

Con termoretráctil organicé cables que salen de la caja. Finalmente, conecté controlador con tres motores paso a paso y final de carrera.

Para alimentar usé tres baterías Li-ion 3,7V en serie (~11V). ¡El slider está listo y funciona perfectamente!

Código Arduino Slider DIY Cámara
Queda ver el código Arduino y explicar su funcionamiento. Al ser largo, lo publicaré en secciones con descripción. Al final pondré el código completo.
El programa usa la librería AccelStepper de Mike McCauley, increíble para control fácil de múltiples motores paso a paso simultáneos. Incluimos esta librería y MultiStepper.h (parte de ella), definimos pines, instancias de steppers y variables.
#include <AccelStepper.h>
#include <MultiStepper.h>
#define JoyX A0 // Joystick eje X
#define JoyY A1 // Joystick eje Y
#define slider A2 // Potenciómetro slider
#define inOutPot A3 // Potenciómetro velocidad auto IN/OUT
#define JoySwitch 10 // Pulsador joystick
#define InOutSet 12 // Botón Set IN/OUT
#define limitSwitch 11 // Final de carrera
#define inLED 8 // LED IN
#define outLED 9 // LED OUT
// Motores paso a paso y pines (Tipo:driver, STEP, DIR)
AccelStepper stepper1(1, 7, 6); // Slider
AccelStepper stepper2(1, 5, 4); // Pan
AccelStepper stepper3(1, 3, 2); // Tilt
MultiStepper StepperControl; // Control multi-stepper
long gotoposition[3]; // Array posiciones IN/OUT por motor
int JoyXPos = 0, JoyYPos = 0, sliderPos = 0;
int currentSpeed = 100, inOutSpeed = 100;
int XInPoint = 0, YInPoint = 0, ZInPoint = 0;
int XOutPoint = 0, YOutPoint = 0, ZOutPoint = 0;
int InandOut = 0; // Máquina de estados
En setup() fijamos velocidades iniciales, modos de pin, añadimos los 3 steppers a StepperControl. Con bucles while hacemos homing: movemos slider hasta pulsar final de carrera (posición 0), luego retrocedemos 200 pasos para liberar el final de carrera.
void setup() {
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);
StepperControl.addStepper(stepper1);
StepperControl.addStepper(stepper2);
StepperControl.addStepper(stepper3);
// Homing
while (digitalRead(limitSwitch) != 0) {
stepper1.setSpeed(3000); stepper1.runSpeed();
stepper1.setCurrentPosition(0);
}
delay(20);
while (stepper1.currentPosition() != -200) {
stepper1.setSpeed(-3000); stepper1.run();
}
}
En loop() limitamos movimiento: no hacer nada si final de carrera pulsado o distancia > 80 cm en dirección opuesta.
while (digitalRead(limitSwitch) == 0 || stepper1.currentPosition() < -64800) {}
Pulsando el botón del joystick aumentamos velocidad pan/tilt.
if (digitalRead(JoySwitch) == 0) {
currentSpeed = currentSpeed + 50; delay(200);
}
Botón Set para definir posiciones IN/OUT (máquina de estados InandOut):
- Caso 0 (1ª pulsación): Guarda posición IN de los 3 motores, enciende LED IN.
- Caso 1 (2ª pulsación): Guarda posición OUT, enciende LED OUT.
- Caso 2 (3ª pulsación): Lee potenciómetro velocidad auto, pone posiciones IN en array
gotoposition, configurasetMaxSpeeden los 3 motores, usamoveTo()(calcula velocidades requeridas) yrunSpeedToPosition()(bloquea hasta llegar). - Caso 3 (4ª pulsación): Igual pero hacia posición OUT. Vuelve a caso 2.
- Caso 4 (pulsación larga >0,5s): Resetea IN/OUT (vuelve a caso 0), apaga LEDs.
Control Pan/Tilt con joystick: valor analógico 0-1024 (centro ~500). Si >600 → velocidad positiva; si <400 → negativa; centro → 0. Igual para eje Y (tilt).
// Joystick X - Pan
JoyXPos = analogRead(JoyX);
if (JoyXPos > 600) stepper2.setSpeed(currentSpeed);
else if (JoyXPos < 400) stepper2.setSpeed(-currentSpeed);
else stepper2.setSpeed(0);
// Joystick Y - Tilt
JoyYPos = analogRead(JoyY);
if (JoyYPos > 600) stepper3.setSpeed(currentSpeed);
else if (JoyYPos < 400) stepper3.setSpeed(-currentSpeed);
else stepper3.setSpeed(0);
Control slider con potenciómetro: similar pero mapeando valor analógico a rango velocidad 0-3000 según giro.
sliderPos = analogRead(slider);
if (sliderPos > 600) {
sliderPos = map(sliderPos, 600, 1024, 0, 3000);
stepper1.setSpeed(sliderPos);
} else if (sliderPos < 400) {
sliderPos = map(sliderPos, 400, 0, 0, 3000);
stepper1.setSpeed(-sliderPos);
} else stepper1.setSpeed(0);
Finalmente ejecutamos los comandos:
stepper1.runSpeed();
stepper2.runSpeed();
stepper3.runSpeed();
Código completo al final del artículo original.
¡Eso es todo! Espero que hayan disfrutado este proyecto Arduino y aprendido algo nuevo. Pregunten en comentarios y vean mi Colección de Proyectos Arduino.
Proceso de manufactura
- Controlador de Slider Motorizado para Cámara con Bluetooth y Arduino para Tomas Cinematográficas Suaves
- Crea un Impresionante Sistema Ambilight para Monitor con Arduino
- Sistema de Asistencia RFID Fiable con Arduino y Python
- Construye un Voltímetro Inteligente con Arduino y Smartphone – Proyecto DIY Fácil
- Construye un voltímetro DIY con Arduino y pantalla Nokia 5110 – Guía paso a paso
- Autómatas Celulares en Tiempo Real con Arduino y Pantalla OLED 128x64
- Tacómetro Arduino de Alta Velocidad – Algoritmo "Single-Shot" para RPM Preciso
- Construye una Radio FM Compacta con Arduino Nano y RDA5807M
- Sistema de control de asistencia RFID en tiempo real con Arduino y Google Sheets
- Genera Tonos Musicales con Arduino: Guía Paso a Paso
- Construye un Monitor de Energía Inteligente Fiable con Arduino UNO – Guía Paso a Paso