Está en la página 1de 53

https://howtomechatronics.

com/tutorials/arduino/diy-motorized-camera-slider-pan-tilt-head-
project/

https://easyeda.com/

el Rincon de Vicente
https://www.elrincondevicente.site/

https://toolbee.co/

https://howtomechatronics.com/

Control deslizante de cámara motorizado de


bricolaje con cabezal de giro e inclinación -
Proyecto basado en Arduino
 Dejan

 Tutoriales Arduino  , Proyectos

114

En este tutorial aprenderemos cómo hacer un control deslizante de cámara motorizado con
cabezal de giro e inclinación. Este proyecto basado en Arduino es 100% de bricolaje,
construido con materiales baratos como MDF y madera contrachapada y controlado con
Arduino, tres motores paso a paso, algunos botones y un joystick conectado a una PCB de
diseño personalizado. A pesar de esto, el resultado final es bastante impresionante, con
movimientos de cámara súper suaves que nos permiten obtener tomas cinematográficas de
aspecto profesional.

Visión de conjunto

Usando el controlador, podemos mover manualmente la cámara o podemos establecer


puntos de inicio y finalización y luego la cámara se moverá automáticamente de una
posición a otra. También usando el brazo de soporte podemos montar el deslizador incluso
en un trípode más pequeño, en cualquier ángulo que queramos y aún así obtener
movimientos estables.
Para empezar, diseñé el control deslizante utilizando un software de modelado 3D.

Puede descargar y obtener todas las dimensiones del modelo 3D a continuación.

Trabajo solido:
Construyendo el control deslizante de la
cámara
Así que comencé a hacer los rieles deslizantes para los que usé tubería de cobre
con garrapatas de 22 mm. Decidí hacer el control deslizante de 1 metro de largo,
así que corté dos piezas a 1 metro de largo. Las tuberías de cobre se pueden
oxidar fácilmente, por lo que debemos pulirlas con un pulidor de metales. En mi
caso, no tenía uno, así que usé una pasta de dientes para ese propósito.

Esta no fue la solución perfecta, pero pude notar una diferencia y conseguí que las
tuberías estuvieran un poco más limpias.

Luego pasé a hacer la base de madera sobre la que se unirán los dos tubos y
también servirá para montar el deslizador en un trípode. Usando una sierra
circular, corté dos piezas de madera contrachapada de 21 mm y las pegué para
obtener una sola pieza de teletipo. Luego, usando una madera maciza, hice una
réplica de la placa de montaje de mi trípode y la pegué a la pieza de madera
contrachapada con un pegamento para madera y un tornillo. Ahora la base
deslizante se puede montar fácilmente en el trípode.
Montaré los rieles deslizantes a la base usando varillas roscadas de 8 mm, así que
hice dos agujeros en la base e inserté las varillas de 138 mm de largo que
previamente las corté a medida. Luego tuve que perforar orificios de garrapatas de
8 mm en las tuberías, lo que en realidad puede ser un poco complicado.
Para ese propósito hice una plantilla simple donde levanté el lápiz a una altura de
11 mm o eso es la mitad del diámetro de la tubería. Luego aseguré la tubería en
una superficie plana y usando la plantilla marqué la tubería desde ambos
lados. Esto permite obtener orificios alumbrados con precisión desde ambos
lados. Entonces, primero marqué los puntos de perforación con una punta de
tornillo afilada y luego los taladré progresivamente con una broca de 2, 4, 6 y 8
mm.
Después de eso, inserté los rieles a través de las varillas roscadas y, con algunas
arandelas y tuercas, las aseguré a la base del deslizador. De manera similar,
usando un trozo de madera contrachapada y una varilla roscada fijé los extremos
de los rieles. \
Lo siguiente es la plataforma deslizante. Nuevamente utilicé una sierra circular
para cortar el tablero de MDF con garrapatas de 8 mm al tamaño de acuerdo con
el modelo 3D. También hice un agujero de 8 mm para las varillas roscadas en las
que se va a colocar el rodamiento. Para montar la plataforma utilicé pegamento
para madera y unos tornillos. Con un taladro inalámbrico, primero hice agujeros
piloto, luego hice los avellanados y atornillé los tornillos de 3 mm en su lugar.

Una vez asegurados los paneles, continué con el montaje del sistema de
cojinetes. Los rodamientos que estoy usando son 608Z con un diámetro exterior
de 22 mm. Dos arandelas y una tuerca entre dos cojinetes hacen suficiente
distancia entre ellos, lo que permite un buen contacto con los rieles de 22 mm.
Para que la plataforma sea más segura cuando se usa el control deslizante en
ángulo, de manera similar, inserté dos juegos más de cojinetes en la parte inferior
de la plataforma. Al final, la plataforma deslizante resultó funcionar perfectamente.
Aquí podemos notar que ahora, al mover la plataforma a lo largo del control
deslizante en mi trípode pequeño, no resistente, la cabeza no puede sostener el
peso de la plataforma, por lo que tuve que hacer un brazo de soporte para
estabilizar el control deslizante. Entonces, usando dos piezas de madera y
algunas tuercas y pernos, hice una abrazadera simple que se puede sujetar a una
de las patas del trípode.

La abrazadera tiene un perno en el que se puede sujetar el brazo de soporte. A


continuación, tuve que hacer una ranura en el brazo de soporte para poder colocar
el control deslizante en diferentes ángulos. Hice la ranura simplemente perforando
muchos orificios de 6 mm uno cerca del otro, y luego, con una escofina, hice unas
finas líneas rectas. Este sistema de soporte terminó funcionando perfectamente.
Continué esta construcción agregando patas al control deslizante, en caso de que
no desee o necesite usar un trípode. Los hice de MDF de 8 mm. Usando una
sierra de mano y una escofina obtuve fácilmente la forma deseada de las
piernas. Luego, usando un poco de pegamento y dos tuercas, las aseguré a los
extremos del control deslizante.
La siguiente etapa es la construcción del sistema de giro e inclinación que se
colocará en la parte superior de la plataforma deslizante. Usando la sierra circular,
corté todas las piezas necesarias, con las dimensiones tomadas del modelo
3D. Utilicé algunas piezas de madera contrachapada para hacer el mecanismo de
bisagra de la plataforma de nivelación de la cámara cuando el control deslizante
está en ángulo, así como algunas tablas de MDF en las que hice los orificios
adecuados para el motor y los cojinetes para el sistema de panorámica.
Continué con la instalación del motor paso a paso y la correa de distribución de la
plataforma deslizante. En un lado de la plataforma aseguré el motor paso a paso
con un trozo de tablero de MDF y algunos tornillos y pernos. Y en el otro lado del
control deslizante aseguré una polea loca para que ahora pueda instalar la correa
de distribución. Usando dos pernos y bridas, aseguré fácilmente la correa de
distribución a la plataforma deslizante.
Con este paso el mecanismo de deslizamiento quedó completamente hecho.

Continué con la fabricación de las partes superiores del sistema de giro e


inclinación. De acuerdo con el modelo 3D, hice todos los agujeros apropiados para
el motor paso a paso y los cojinetes, y pegué y atornillé todo.

Un amigo mío me imprimió en 3D 2 poleas de 80 dientes. De esta manera obtuve


una reducción de velocidad de 5 veces en relación con la polea de 16 dientes
unida al motor paso a paso.
Ahora necesitaba hacer una correa de distribución de bucle cerrado de acuerdo
con mi configuración, así que medí la longitud de la correa que necesitaba, la corté
y luego simplemente la pegué con un pegamento CA y agregué un trozo de cinta
encima. El pegamento CA hace un gran trabajo con la goma, por lo que el cinturón
de bucle cerrado funciona sin problemas.

A continuación, comencé el montaje final del sistema de giro e inclinación. Primero


aseguré el motor de inclinación con algunos pernos y luego agregué los dos
cojinetes en su lugar mientras los aseguraba en las ranuras con un poco de
epoxi. Luego aseguré la plataforma de inclinación en la plataforma de la bandeja
con unos pernos de 8 mm y al mismo tiempo le coloqué la polea de 80 dientes
junto con la correa de distribución.
Aquí noté que la correa estaba un poco floja, pero agregué un pequeño cojinete en
el lugar donde el perno del motor paso a paso actúa como tensor de la
correa. Esto funcionó y ahora el cinturón tenía suficiente tensión para funcionar
correctamente.

Luego aseguré el motor de la sartén y agregué cojinetes en el lado superior de la


plataforma niveladora, así como en el lado inferior. Luego inserté un perno a
través de ellos, agregué un cojinete de empuje, la polea de 80 dientes y la correa
de distribución, y encima de ellos agregué el cabezal de inclinación previamente
ensamblado. Finalmente lo aseguré con un perno y listo, con este paso se
completa la construcción del deslizador.
Diagrama de circuito
Ok, luego viene la parte divertida o la instalación de los componentes
electrónicos. Aquí está el diagrama de circuito de este proyecto de control
deslizante de cámara de bricolaje.
Por lo tanto, los tres motores paso a paso NEMA 17 se controlan a través de los
tres controladores paso a paso A4988. Para controlar el movimiento del deslizador
usamos un potenciómetro conectado a una entrada analógica del Arduino, y para
controlar el cabezal de giro e inclinación usamos un módulo de joystick que en
realidad consta de dos potenciómetros, por lo que está conectado a dos entradas
analógicas. También hay otro potenciómetro utilizado para establecer la velocidad
del movimiento automático desde las posiciones de entrada y salida. Estas
posiciones de entrada y salida se establecen con la ayuda de un botón. Este botón
tiene una resistencia pull up y está conectado a un pin digital de la placa
Arduino. También hay un botón de reinicio, un interruptor de encendido y un
conector de alimentación, así como un interruptor de límite para el control
deslizante y dos LED para indicar el estado de entrada y salida. Podemos
alimentar este proyecto con 9 o 12V.

Puede obtener los componentes necesarios para este proyecto en los enlaces a
continuación:

 Motor paso a paso (NEMA17) ………. Amazon / Banggood / AliExpress


 Controlador paso a paso A4988 ……………. Amazon / Banggood / AliExpress
 Adaptador 12V 2A ………………… ..…. Amazon / Banggood / AliExpress
 Joystick ………………………………… Amazon / Banggood / AliExpress
 Toma de corriente ……………. ………….
…… Amazon / Banggood / AliExpress
 Placa Arduino ……………………… Amazon / Banggood / AliExpress

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


las compras que califican.

Diseño de PCB
A continuación, de acuerdo con el diagrama del circuito, diseñé una PCB
personalizada para mantener organizados los componentes electrónicos.

Lo hice usando el software de diseño de circuitos en línea gratuito EasyEDA . El


circuito tenía bastantes conexiones, así que utilicé tanto la capa superior como la
inferior y logré obtener una PCB funcional y atractiva. Una vez finalizado este paso
generé el archivo Gerber necesario para fabricar la PCB. Luego encargué el PCB
a JLCPCB , que en realidad es el patrocinador de este tutorial.
Aquí simplemente podemos cargar el archivo Gerber y una vez cargado podemos
volver a revisar nuestra PCB en el visor de Gerber. Si todo está bien, podemos
continuar, seleccionar las propiedades que queremos para nuestro PCB y luego
podemos pedir nuestro PCB a un precio razonable. Tenga en cuenta que si es su
primer pedido de JLCPCB, puede obtener hasta 10 PCB por solo 2 dólares.
Sin embargo, después de una semana han llegado los PCB. La calidad de los
PCB es excelente y debo admitir que es bastante satisfactorio tener su propio
diseño de PCB fabricado.
Montaje de la electrónica
Ok, entonces seguí adelante con el ensamblaje de los componentes
electrónicos. Comencé soldando los encabezados de los pines en PCB. Esto
permite conectar y desconectar los componentes más fácilmente cuando sea
necesario. De hecho, utilicé encabezados de clavija para todo excepto los
condensadores y las resistencias que soldé directamente en la PCB. Por lo tanto,
continué soldando cables de puente a todos los componentes electrónicos.

De esta manera puedo montar fácilmente los componentes en la caja del


controlador y al mismo tiempo conectarlos a la PCB.
En cuanto a la caja del controlador, decidí hacerla con acrílico transparente de 4
mm porque quería que la belleza de todos los componentes electrónicos fuera
visible. Usé una sierra circular para cortar los paneles de la caja a medida. Luego,
usando un taladro y brocas Forstner, hice la abertura en el panel frontal para los
botones, los potenciómetros, el interruptor de encendido y el joystick. Después de
eso, usando un epoxi de 5 minutos, monté la caja, y en cuanto a la parte superior,
inserté y pegué dos pernos a través de los cuales se puede insertar y asegurar el
panel frontal con tuercas en la parte superior.
Finalmente comencé a ensamblar la electrónica insertando la placa Arduino y los
controladores paso a paso A4988 en la PCB. Luego continué insertando y
asegurando los botones y los otros componentes en el panel frontal.
Una vez que los tuve asegurados, conecté los componentes a los encabezados de
pines apropiados en la PCB. En el panel lateral de la carcasa, agregué el conector
de alimentación y luego inserté la PCB en la carcasa. En el mismo panel también
hay un orificio a través del cual coloco cables de puente para conectar los
controladores con los motores paso a paso, así como el interruptor de límite que lo
coloqué al final del control deslizante.

Usando un tubo termorretráctil, organicé los cables de puente que salen de la caja
del controlador y, finalmente, lo que quedaba por hacer es conectar el controlador
con los tres motores paso a paso y el interruptor de límite.
En cuanto a alimentar el control deslizante, utilicé tres baterías de iones de litio de
3,7 V conectadas en serie que producen alrededor de 11 V. Y eso es todo, el
control deslizante está listo y funciona perfectamente.
Código fuente de Arduino
Ahora, lo que queda en este tutorial es echar un vistazo al código Arduino y
explicar cómo funciona el programa. Como 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 de Mike McCauley. Esta es una


biblioteca increíble que permite un fácil control de varios motores paso a paso al
mismo tiempo. Entonces, una vez que incluimos esta biblioteca y la biblioteca
MultiStepper.h que es parte de ella, necesitamos definir todos los pines de Arduino
que se usarán, definir las instancias para los steppers, así como algunas variables
necesarias para el programa a continuación.

#include <AccelStepper.h>

#include <MultiStepper.h>

#define JoyX A0 // Pin Joystick X

#define JoyY A1 // Pin Y del joystick

#define slider A2 // Potenciómetro deslizante

#define inOutPot A3 // Potenciómetro de velocidad de entrada y salida

#define JoySwitch 10 // Interruptor de joystick conectado

#define InOutSet 12 // Botón Establecer

#define limitSwitch 11

#define inLED 8

#define outLED 9

// Definir los motores paso a paso y los pines que usará

AccelStepper stepper1 ( 1, 7, 6 ) ; // (Tipo: controlador, PASO, DIR)

AccelStepper stepper2 ( 1, 5, 4 ) ;

AccelStepper stepper3 ( 1, 3, 2 ) ;

Control paso a paso de MultiStepper; // Crear instancia de MultiStepper


gotoposición larga [ 3 ] ; // Una matriz para almacenar la posición de entrada o salida de cada motor paso a paso

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;

En la sección de configuración establecemos los valores de velocidad inicial para


los steppers, definimos algunos modos de pin y agregamos los tres steppers a la
instancia de control de múltiples pasos llamada “StepperControl”. Usando los
bucles while, movemos el control deslizante a la posición inicial, o se mueve hasta
presionar el interruptor de límite y luego retrocede 200 pasos para soltar el
interruptor de límite.

configuración vacía () {

// Establecer valores de semilla iniciales para los steppers

paso a paso 1. setMaxSpeed ( 3000 ) ;

paso a paso 1. setSpeed ( 200 ) ;

paso a paso 2. setMaxSpeed ( 3000 ) ;

paso a paso 2. setSpeed ( 200 ) ;

paso a paso 3. setMaxSpeed ( 3000 ) ;

paso a paso 3. setSpeed ( 200 ) ;


pinMode ( JoySwitch, INPUT_PULLUP ) ;

pinMode ( InOutSet, INPUT_PULLUP ) ;

pinMode ( limitSwitch, INPUT_PULLUP ) ;

pinMode ( inLED, SALIDA ) ;

pinMode ( outLED, SALIDA ) ;

// Cree instancias para MultiStepper: agregue los 3 steppers a la instancia de StepperControl para el control múltiple

StepperControl. addStepper (paso a paso1 ) ;

StepperControl. addStepper (paso a paso2 ) ;

StepperControl. addStepper (paso a paso3 ) ;

// Mueve el control deslizante a la posición inicial - homing

while ( digitalRead ( limitSwitch ) ! = 0 ) {

paso a paso 1. setSpeed ( 3000 ) ;

paso a paso 1. runSpeed () ;

paso a paso 1. setCurrentPosition ( 0 ) ; // Cuando se presiona el interruptor de límite, establecer la posición a 0 pasos

retraso ( 20 ) ;

// Retrocede 200 pasos desde el interruptor de límite

while ( stepper1. currentPosition () ! = -200 ) {

paso a paso 1. setSpeed ( -3000 ) ;

paso a paso 1. ejecutar () ;

En la sección de bucle, comenzamos verificando si el control deslizante ha


alcanzado las posiciones límite, o ese es el interruptor de límite o los 80 cm en el
otro lado.
// Limitación del movimiento: no haga nada si se presiona el interruptor de límite o si la distancia recorrida en otra
dirección es superior a 80 cm

while ( digitalRead ( limitSwitch ) == 0 || stepper1. currentPosition () < -64800 ) {}

Con la siguiente declaración if, aumentamos las velocidades de giro e inclinación


con cada presión del interruptor del joystick.

// Si se presiona el joystick, aumente las velocidades de giro e inclinación

if ( digitalRead ( JoySwitch ) == 0 ) {

currentSpeed = currentSpeed + 50;

retraso ( 200 ) ;

Luego comprobamos si hemos pulsado el botón Set, que se utiliza para configurar
las posiciones IN y OUT. Con la primera pulsación del botón almacenamos las
posiciones IN de los motores paso a paso y también iluminamos el LED IN.

cambiar ( InandOut ) {

caso 0: // Establecer posición IN

InandOut = 1;

XInPoint = paso a paso1. currentPosition () ; // Establecer la posición IN para steppers 1

YInPoint = paso a paso2. currentPosition () ; // Establecer la posición IN para steppers 2

ZInPoint = paso a paso3. currentPosition () ; // Establecer la posición IN para steppers 3

digitalWrite ( inLED, HIGH ) ; // Ilumina inLed

romper ;

De la misma forma, con la segunda pulsación almacenamos las posiciones OUT y


encendemos el LED OUT.

caso 1: // Establecer posición OUT

InandOut = 2;

XOutPoint = paso a paso1. currentPosition () ; // Establecer los puntos OUT para ambos steppers

YOutPoint = paso a paso2. currentPosition () ;


ZOutPoint = paso a paso3. currentPosition () ;

digitalWrite ( outLED, HIGH ) ;

romper ;

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

caso 2: // Mover a la posición IN / ir al caso 3

InandOut = 3;

inOutSpeed = analogRead ( inOutPot ) ; // Potenciómetro de velocidad automático

// Coloca la posición IN en el Array

gotoposition [ 0 ] = XInPoint;

gotoposition [ 1 ] = YInPoint;

gotoposition [ 2 ] = ZInPoint;

paso a paso 1. setMaxSpeed ( inOutSpeed ) ;

paso a paso 2. setMaxSpeed ( inOutSpeed ) ;

paso a paso 3. setMaxSpeed ( inOutSpeed ) ;

StepperControl. moveTo ( ir a la posición ) ; // Calcula la velocidad requerida para todos los motores

StepperControl. runSpeedToPosition () ; // Bloquea hasta que todos los steppers están en posición

retraso ( 200 ) ;

romper ;

Exactamente de la misma manera, en el caso número 3 o con otra pulsación del


botón, movemos el control deslizante a la posición OUT.

caso 3: // Mover a la posición OUT / volver al caso 2

InandOut = 2;

inOutSpeed = analogRead ( inOutPot ) ;


// Coloca la posición OUT en el Array

gotoposition [ 0 ] = XOutPoint;

gotoposition [ 1 ] = YOutPoint;

gotoposition [ 2 ] = ZOutPoint;

paso a paso 1. setMaxSpeed ( inOutSpeed ) ;

paso a paso 2. setMaxSpeed ( inOutSpeed ) ;

paso a paso 3. setMaxSpeed ( inOutSpeed ) ;

StepperControl. moveTo ( ir a la posición ) ; // Calcula la velocidad requerida para todos los motores

StepperControl. runSpeedToPosition () ; // Bloquea hasta que todos estén en posición

retraso ( 200 ) ;

romper ;

En caso de que mantengamos pulsado el botón Set durante más de medio


segundo, se ejecutará la declaración del 4º caso, que restablece las posiciones IN
y OUT para que podamos establecer otras nuevas.

El siguiente es el control de panorámica e inclinación del joystick. El valor


analógico que estamos obteniendo del joystick es de 0 a 1024, o cuando descansa
en el medio los valores son alrededor de 500. Así que si movemos el joystick hacia
la izquierda y el valor analógico es mayor a 600, configuraremos la velocidad del
motor en particular a positivo, y opuesto, si movemos el joystick hacia la derecha,
estableceremos la velocidad del motor en negativo, lo que significa que girará en
sentido contrario.

// Joystick X - Movimiento panorámico

JoyXPos = analogRead ( JoyX ) ;

// si el joystick se mueve hacia la izquierda, mueva el paso a paso 2 o desplácese hacia la izquierda

si ( JoyXPos > 600 ) {

paso a paso 2. setSpeed ( currentSpeed ) ;

// si el joystick se mueve hacia la derecha, mueva el paso 2 o desplácese hacia la derecha

más si ( JoyXPos < 400 ) {


paso a paso 2. SetSpeed ( -currentSpeed ) ;

// si el Joystick permanece en el medio, no hay movimiento

else {

paso a paso 2. setSpeed ( 0 ) ;

En caso de que permanezca en el medio, la velocidad se establece en 0. Este


método se usa tanto para el eje del joystick como para el potenciómetro
deslizante. En realidad, en el caso del potenciómetro usamos su valor analógico
para aumentar también la velocidad del motor a medida que giramos más el
potenciómetro.

// Potenciómetro deslizante

sliderPos = analogRead ( control deslizante ) ;

// Si el potenciómetro se gira a la izquierda, mueva el control deslizante hacia la izquierda

if ( sliderPos > 600 ) {

sliderPos = map ( sliderPos, 600 , 1024 , 0 , 3000 ) ;

paso a paso 1. setSpeed ( sliderPos ) ; // Aumenta la velocidad al girar

// Si el potenciómetro está girado a la derecha, mueva el control deslizante hacia la derecha

else if ( sliderPos < 400 ) {

sliderPos = map ( sliderPos, 400 , 0 , 0 , 3000 ) ;

paso a paso 1. setSpeed ( -sliderPos ) ; // Aumenta la velocidad al girar

// Si el potenciómetro está en el medio, no hay movimiento

else {

paso a paso 1. setSpeed ( 0 ) ;

}
Por último, llamamos a las funciones runSpeed () para cada uno de los tres
motores paso a paso y eso ejecuta los comandos anteriores o hace girar los
motores de manera adecuada.

// Ejecuta los comandos anteriores - ejecuta los motores paso a paso

paso a paso 1. runSpeed () ;

paso a paso 2. runSpeed () ;

paso a paso 3. runSpeed () ;

Aquí está el código fuente completo:

/*

Control deslizante de cámara de bricolaje con cabezal de giro e inclinación

por Dejan Nedelkovski

www.HowToMechatronics.com

Biblioteca - AccelStepper por Mike McCauley:

http://www.airspayce.com/mikem/arduino/AccelStepper/index.html

*/

#include <AccelStepper.h>

#include <MultiStepper.h>

#define JoyX A0 // Pin Joystick X

#define JoyY A1 // Pin Y del joystick

#define slider A2 // Potenciómetro deslizante

#define inOutPot A3 // Potenciómetro de velocidad de entrada y salida

#define JoySwitch 10 // Interruptor de joystick conectado

#define InOutSet 12 // Botón Establecer

#define limitSwitch 11

#define inLED 8

#define outLED 9
// Definir los motores paso a paso y los pines que usará

AccelStepper stepper1 ( 1, 7, 6 ) ; // (Tipo: controlador, PASO, DIR)

AccelStepper stepper2 ( 1, 5, 4 ) ;

AccelStepper stepper3 ( 1, 3, 2 ) ;

Control paso a paso de MultiStepper; // Crear instancia de MultiStepper

gotoposición larga [ 3 ] ; // Una matriz para almacenar la posición de entrada o salida de cada motor paso a paso

En tJoyXPos = 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;

configuración vacía () {

// Establecer valores de semilla iniciales para los steppers

paso a paso 1. setMaxSpeed ( 3000 ) ;

paso a paso 1. setSpeed ( 200 ) ;

paso a paso 2. setMaxSpeed ( 3000) ;

paso a paso 2. setSpeed ( 200 );

paso a paso 3. setMaxSpeed ( 3000 );


paso a paso 3. setSpeed ( 200 ) ;

pinMode ( JoySwitch, INPUT_PULLUP ) ;

pinMode ( InOutSet, INPUT_PULLUP ) ;

pinMode ( limitSwitch, INPUT_PULLUP ) ;

pinMode ( inLED, SALIDA );

pinMode ( outLED, SALIDA ) ;

// Cree instancias para MultiStepper: agregue los 3 steppers a la instancia de StepperControl para el control múltiple

StepperControl. addStepper (paso a paso1 );

StepperControl. addStepper (paso a paso2 );

StepperControl. addStepper (paso a paso3 ) ;

// Mueve el control deslizante a la posición inicial - homing

while ( digitalRead ( limitSwitch ) ! = 0 ) {

paso a paso 1. setSpeed ( 3000 ) ;

paso a paso 1. runSpeed () ;

paso a paso 1. setCurrentPosition ( 0 ) ; // Cuando se presiona el interruptor de límite, establecer la posición a 0 pasos

retraso ( 20 ) ;

// Retrocede 200 pasos desde el interruptor de límite

while ( stepper1. currentPosition () ! = -200 ) {

paso a paso 1. setSpeed ( -3000 ) ;

paso a paso 1. ejecutar () ;

bucle vacío () {
// Limitación del movimiento: no haga nada si se presiona el interruptor de límite o si la distancia recorrida en otra
dirección es superior a 80 cm

while ( digitalRead ( limitSwitch ) == 0 || stepper1. currentPosition () < -64800 ) {}

// Si se presiona el Joystick, aumente las velocidades de Panorámica e Inclinación

if ( digitalRead ( JoySwitch ) == 0 ) {

currentSpeed = currentSpeed + 50;

retraso ( 200 ) ;

// Si se presiona el botón Establecer - alternar entre las cajas del interruptor

if ( digitalRead ( InOutSet ) == 0 ) {

retraso ( 500 ) ;

// Si mantenemos presionado el botón de configuración durante más de medio segundo, restablecemos las posiciones de
entrada y salida

if ( digitalRead ( InOutSet ) == 0 ) {

InandOut = 4;

cambiar ( InandOut ) {

caso 0: // Establecer posición IN

InandOut = 1;

XInPoint = paso a paso1. currentPosition () ; // Establecer la posición IN para steppers 1

YInPoint = paso a paso2. currentPosition () ; // Establecer la posición IN para steppers 2

ZInPoint = paso a paso3. currentPosition () ; // Establecer la posición IN para steppers 3

digitalWrite ( inLED, HIGH ) ; // Ilumina inLed

romper ;

caso 1: // Establecer posición OUT


InandOut = 2;

XOutPoint = paso a paso1. currentPosition () ; // Establecer los puntos OUT para ambos steppers

YOutPoint = paso a paso2. currentPosition ();

ZOutPoint = paso a paso3. currentPosition () ;

digitalWrite ( outLED, HIGH ) ;

romper ;

caso 2: // Mover a la posición IN / ir al caso 3

InandOut = 3;

inOutSpeed = analogRead ( inOutPot ) ; // Potenciómetro de velocidad automático

// Coloca la posición IN en el Array

ir a la posición [ 0 ]= XInPoint;

ir a la posición [ 1 ]= YInPoint;

ir a la posición [ 2 ]= ZInPoint;

paso a paso 1. setMaxSpeed ( inOutSpeed );

paso a paso 2. setMaxSpeed ( inOutSpeed );

paso a paso 3. setMaxSpeed ( inOutSpeed );

StepperControl. moveTo ( ir a la posición ) ; // Calcula la velocidad requerida para todos los motores

StepperControl. runSpeedToPosition () ; // Bloquea hasta que todos los steppers están en posición

retraso ( 200 ) ;

romper ;

caso 3: // Mover a la posición OUT / volver al caso 2

InandOut = 2;

inOutSpeed = analogRead ( inOutPot ) ;

// Coloca la posición OUT en el Array

gotoposition [ 0 ] = XOutPoint;
gotoposition [ 1 ] = YOutPoint;

ir a la posición [ 2 ]= ZOutPoint;

paso a paso 1. setMaxSpeed ( inOutSpeed ) ;

paso a paso 2. setMaxSpeed ( inOutSpeed ) ;

paso a paso 3. setMaxSpeed ( inOutSpeed ) ;

StepperControl. moveTo ( ir a la posición ) ; // Calcula la velocidad requerida para todos los motores

StepperControl. runSpeedToPosition () ; // Bloquea hasta que todos estén en posición

retraso ( 200 ) ;

romper ;

caso 4: // Si el botón Establecer se mantiene presionado más de medio segundo, regrese al caso 0

InandOut = 0;

digitalWrite ( inLED, LOW ) ;

digitalWrite ( outLED, LOW ) ;

retraso ( 1000 ) ;

romper ;

// Joystick X - Movimiento panorámico

JoyXPos = analogRead ( JoyX ) ;

// si el joystick se mueve hacia la izquierda, mueva el paso a paso 2 o desplácese hacia la izquierda

si ( JoyXPos > 600 ) {

paso a paso 2. setSpeed ( currentSpeed ) ;

// si el joystick se mueve hacia la derecha, mueva el paso 2 o desplácese hacia la derecha

más si ( JoyXPos < 400 ) {


paso a paso 2. SetSpeed ( -currentSpeed ) ;

// si el Joystick permanece en el medio, no hay movimiento

else {

paso a paso 2. setSpeed ( 0 ) ;

// Joystick Y - Movimiento de inclinación

JoyYPos = analogRead ( JoyY ) ;

si ( JoyYPos > 600 ) {

paso a paso 3. setSpeed ( currentSpeed ) ;

else if ( JoyYPos < 400 ) {

paso a paso 3. SetSpeed ( -currentSpeed ) ;

else {

paso a paso 3. setSpeed ( 0 ) ;

// Potenciómetro deslizante

sliderPos = analogRead ( control deslizante ) ;

// Si el potenciómetro se gira a la izquierda, mueva el control deslizante hacia la izquierda

if ( sliderPos > 600 ) {

sliderPos = map ( sliderPos, 600, 1024, 0, 3000 ) ;

paso a paso 1. setSpeed ( sliderPos ) ; // Aumenta la velocidad al girar

// Si el potenciómetro está girado a la derecha, mueva el control deslizante hacia la derecha


else if ( sliderPos < 400 ) {

sliderPos = map ( sliderPos, 400, 0, 0, 3000 ) ;

paso a paso 1. setSpeed ( -sliderPos ) ; // Aumenta la velocidad al girar

// Si el potenciómetro está en el medio, no hay movimiento

else {

paso a paso 1. setSpeed ( 0 ) ;

// Ejecuta los comandos anteriores - ejecuta los motores paso a paso

paso a paso 1. runSpeed ();

paso a paso 2. runSpeed ();

paso a paso 3. runSpeed () ;

Así que eso sería todo, espero que hayas disfrutado de este proyecto de Arduino y
hayas aprendido algo nuevo. No dude en hacer cualquier pregunta en la sección
de comentarios a continuación y consulte mi  colección de proyectos Arduino .

Cómo hacer un controlador de velocidad de


motor PWM DC usando el 555 Timer IC
 Dejan

 Electrónica

8
En este tutorial aprenderemos cómo hacer un controlador de velocidad de motor PWM DC
usando el 555 Timer IC. Veremos en detalle cómo funciona el circuito del generador 555
Timer PWM, cómo usarlo para controlar la velocidad del motor de CC y cómo hacer una
PCB personalizada para él.

Visión de conjunto

Podemos controlar la velocidad del motor de CC controlando el voltaje de entrada del


motor. Para ese propósito podemos usar PWM, o modulación por ancho de pulso.

Control de velocidad del motor PWM DC

PWM es un método mediante el cual podemos generar voltaje variable encendiendo y


apagando la energía que va al dispositivo electrónico a un ritmo rápido. El voltaje promedio
depende del ciclo de trabajo de la señal, o la cantidad de tiempo que la señal está
ENCENDIDA versus la cantidad de tiempo que la señal está APAGADA en un solo
período de tiempo.
Circuito del generador PWM del temporizador 555

El temporizador 555 es capaz de generar una señal PWM cuando se configura en un modo
estable. Si no está familiarizado con el 555 Timer, puede consultar mi tutorial anterior
donde expliqué en detalle lo que hay dentro y cómo funciona el 555 Timer IC .
Aquí hay un circuito básico del temporizador 555 operando en un modo estable y podemos
notar que la salida es ALTA cuando el condensador C1 se está cargando a través de las
resistencias R1 y R2.

Por otro lado, la salida del IC es BAJA cuando el condensador C1 se está descargando, pero
solo a través de la resistencia R2. Entonces podemos notar que si cambiamos los valores de
cualquiera de estos tres componentes obtendremos diferentes tiempos de ENCENDIDO y
APAGADO, o diferentes ciclos de trabajo de la señal de salida de onda cuadrada. Una
forma fácil e instantánea de hacer esto es reemplazar la resistencia R2 con un
potenciómetro y, además, agregar dos diodos en el circuito.
En esta configuración el tiempo de On dependerá de la resistencia R1, el lado izquierdo del
potenciómetro y el condensador C1, mientras que el tiempo de Off dependerá del
condensador C1 y del lado derecho del potenciómetro. También podemos notar que en esta
configuración el período de un ciclo, por lo tanto la frecuencia, será siempre el mismo,
porque la resistencia total, mientras se carga y descarga, seguirá siendo la misma.
Por lo general, la resistencia R1 es mucho menor que la resistencia del potenciómetro, por
ejemplo, 1K en comparación con 100K del potenciómetro. De esa forma tenemos un 99%
de control sobre la resistencia de carga y descarga en el circuito. El pin de control del
temporizador 555 no se usa pero está conectado a un capacitor de 100nF para eliminar
cualquier ruido externo de ese terminal. El reinicio, pin número 4, está activo bajo, por lo
tanto, está conectado a VCC para evitar cualquier reinicio no deseado de la salida.

La salida del temporizador 555 puede hundir o generar una corriente de 200 mA a la
carga. Entonces, si el motor que queremos controlar excede esta clasificación, necesitamos
usar un transistor o un MOSFET para impulsar el motor. En este ejemplo, utilicé un
transistor Darlington (TIP122) que puede manejar una corriente de hasta 5A.
La salida del IC debe estar conectada a la base del transistor a través de una resistencia, y
en mi caso usé una resistencia de 1k. Para prevenir los picos de voltaje producidos por el
motor, necesitamos usar un diodo de retorno que está conectado en paralelo con el motor.

Diseño de una PCB para el controlador de velocidad del


motor DC PWM

Ahora podemos seguir adelante y diseñar un PCB personalizado para este circuito. Para ello
utilizaré el software en línea gratuito EasyEDA . Aquí podemos comenzar buscando y
colocando los componentes en el lienzo en blanco. La biblioteca tiene cientos de miles de
componentes, por lo que no tuve ningún problema para encontrar todos los componentes
necesarios para este circuito controlador de velocidad del motor DC PWM.
Después de insertar los componentes, necesitamos crear el contorno de la placa y comenzar
a organizar los componentes. Los dos condensadores deben colocarse lo más cerca posible
del temporizador 555, mientras que los otros componentes se pueden colocar donde
queramos, pero aún en una disposición lógica de acuerdo con el esquema del circuito.
Usando la herramienta de seguimiento, necesitamos conectar todos los componentes. La
herramienta de seguimiento es bastante intuitiva y fácil de trabajar. Podemos utilizar tanto
la capa superior como la inferior para evitar cruces y acortar las pistas.

Los pads de los componentes que necesitan estar conectados a Ground se establecen en
Ground a través de la pestaña Pad Properties, donde necesitamos escribir GND en la
etiqueta "Net" cuando se selecciona el pad.

Podemos usar la capa Silk para agregar texto al tablero. También podemos insertar un
archivo de imagen, así que agrego una imagen del logotipo de mi sitio web para que se
imprima en la pizarra. Al final, utilizando la herramienta de área de cobre, necesitamos
crear el área de tierra de la PCB.
Puede encontrar los  archivos del proyecto EasyEDA de este proyecto aquí.

Una vez que hayamos terminado con el diseño solo debemos hacer clic en el botón “Salida
Gerber”, guardar el proyecto y podremos descargar los archivos Gerber que se utilizan para
fabricar la PCB. Podemos solicitar el PCB a JLCPCB, que es el servicio de fabricación de
PCB de EasyEDA, y también es el patrocinador de este video.
Aquí simplemente podemos arrastrar y soltar el archivo zip descargado de los archivos
gerber. Después de cargar, podemos volver a revisar la PCB en el visor de Gerber. Si todo
está bien, podemos seleccionar hasta 10 PCB y obtenerlos por solo 2 dólares.
Montaje de la PCB del controlador de velocidad del motor de
CC PWM

Sin embargo, después de una semana han llegado los PCB y debo admitir que es bastante
satisfactorio tener su propio diseño de PCB fabricado. La calidad de las placas de circuito
impreso es excelente y todo es exactamente igual que en el diseño.
Bien, ahora podemos pasar a insertar los componentes en la PCB.

Puede obtener los componentes necesarios para este ejemplo en los enlaces siguientes:

 NE555P Temporizador IC …………………………… Amazon / Banggood / AliExpress

 R1 = R2 = 1k Ohm …………………………. Amazon / Banggood / AliExpress

 C1 = C2 = 100nF …………………………… .. Amazon / Banggood / AliExpress

 D1 = D2 = D3 = 1N4004 …………………. Amazon / Banggood / AliExpress

 Potenciómetro = 100k Ohm ……………. Amazon / Banggood / AliExpress

 Transistor - Darlington TIP122 ………. Amazon / Banggood / AliExpress

 2 terminales de bloque …………………………. Amazon / Banggood / AliExpress

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

Primero inserté los componentes más pequeños, las resistencias, los diodos y los
condensadores.
Doblé sus cables en el otro lado para que permanecieran en su posición cuando voltee la
placa para soldar. En cuanto a los componentes más grandes, utilicé una cinta de
enmascarar para mantenerlos en su lugar al dar la vuelta al tablero.

También podría gustarte