Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Control deslizante de cámara de bricolaje con cabezal de giro e inclinación - Proyecto basado en Arduino

En este tutorial aprenderemos a hacer un deslizador de cámara motorizado con cabezal panorámico e inclinable. Este proyecto basado en Arduino es 100% DIY, construido con materiales baratos como MDF y madera contrachapada y controlado usando Arduino, tres motores paso a paso, algunos botones y un joystick conectado a una PCB diseñada a medida. A pesar de esto, el resultado final es bastante impresionante, con movimientos de cámara supersuaves que nos permiten obtener tomas cinematográficas de aspecto profesional.

Puede ver el siguiente video o leer el tutorial escrito a continuación.

Resumen

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. Además, utilizando el brazo de soporte, podemos montar el control deslizante 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 buscar y descargar este modelo 3D y obtener todas las dimensiones del modelo 3D a continuación, así como explorarlo en su navegador en Thangs.

Descargue el modelo 3D de ensamblaje de Thangs.

Enlace de polea GT2 impreso en 3D:

 Thingiverse

Construyendo el control deslizante de la cámara

Así que comencé con la fabricación de los rieles deslizantes para los cuales usé un tubo de cobre de 22 mm. Decidí hacer el deslizador de 1 metro de largo así que corté dos piezas de 1 metro de largo. Las tuberías de cobre pueden oxidarse 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 era la solución perfecta, pero pude notar la diferencia y dejé las tuberías un poco más limpias.

Luego continué con la fabricación de la base de madera en 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. Luego, usando madera maciza, hice una réplica de mi placa de montaje de trípode 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.

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 corté a la medida. A continuación, tuve que perforar agujeros 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é el tubo en una superficie plana y usando la plantilla marqué el tubo por ambos lados. Esto permite obtener orificios aplanados con precisión desde ambos lados. Entonces, primero marqué los puntos de perforación con una punta de tornillo afilada y luego los perforé 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 usando algunas arandelas y tuercas los fijé a la base del deslizador. De manera similar, utilizando un trozo de madera contrachapada y una varilla roscada fijé los extremos de los rieles.

La siguiente es la plataforma deslizante. Una vez más, utilicé una sierra circular para cortar el tablero MDF 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 fijar el rodamiento. Para montar la tarima utilicé cola para madera y unos tornillos. Con un taladro inalámbrico, primero hice agujeros guía, luego hice los fregaderos y atornillé los tornillos de 3 mm en su lugar.

Una vez asegurados los paneles continué con el montaje del sistema de rodamientos. Los rodamientos que estoy usando son 608Z con un diámetro exterior de 22 mm. Dos arandelas y una tuerca entre dos rodamientos hacen suficiente distancia entre ellos, lo que permite un buen contacto con los rieles de 22 mm.

Para hacer que la plataforma sea más segura cuando se usa el control deslizante en ángulo, de manera similar, inserté dos juegos más de rodamientos en la parte inferior de la plataforma. Al final, la plataforma deslizante resultó funcionar perfectamente.

Aquí podemos notar que ahora, cuando muevo 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 tornillos, 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 un ángulo diferente. Hice la ranura simplemente perforando muchos agujeros de 6 mm uno cerca del otro, y luego usando una escofina hice líneas rectas finas. Este sistema de soporte terminó funcionando perfectamente.

Continué esta construcción agregando patas al control deslizante, en caso de que no quieras o necesites usar un trípode. Los hice de MDF de 8 mm. Usando una sierra de mano y una escofina conseguí fácilmente la forma deseada de las piernas. Luego, usando un poco de pegamento y dos tuercas, los aseguré a los extremos del deslizador.

La siguiente etapa es construir el 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. Usé 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 apropiados para el motor y los rodamientos para el sistema de panoramización.

Seguí adelante con la instalación del motor paso a paso y la correa de distribución para la plataforma deslizante. En un lado de la plataforma aseguré el motor paso a paso con un 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. Con dos pernos y bridas, aseguré fácilmente la correa de distribución a la plataforma deslizante.

Con este paso el mecanismo de deslizamiento estaba completamente hecho.

Continué con la fabricación de las partes superiores del sistema pan and tilt. De acuerdo con el modelo 3D, hice todos los agujeros apropiados para el motor paso a paso y los rodamientos, y pegué y atornillé todo junto.

Un amigo mío imprimió en 3D 2 poleas de 80 dientes para mí. De esta forma, obtuve una reducción de velocidad de 5 veces en relación con la polea de 16 dientes instalada en el 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 añadí un trozo de cinta encima. El pegamento CA hace un gran trabajo con el caucho, 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 rodamientos en su lugar mientras los aseguraba en las ranuras con un poco de epoxi. Luego aseguré la plataforma basculante en la plataforma plana con unos pernos de 8 mm y, al mismo tiempo, le sujeté la polea de 80 dientes junto con la correa de distribución.

Aquí noté que la correa estaba un poco floja pero le agregué un pequeño cojinete en el lugar donde va el perno del motor paso a paso para que actúe como tensor de la correa. Esto funcionó y ahora el cinturón tenía suficiente tensión para funcionar correctamente.

A continuación, aseguré el motor de giro y agregué cojinetes en la parte superior de la plataforma de nivelación, así como en la parte inferior. Luego inserté un perno a través de ellos, añadí un cojinete de empuje, la polea de 80 dientes y la correa de distribución, y encima de ellos añadí la cabeza basculante previamente ensamblada. 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 deslizador 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 control deslizante, 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 que se utiliza 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 pulsador. Este pulsador 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 12 V.

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

  • Motor paso a paso (NEMA17)……….
  • Controlador paso a paso A4988…………….
  • Adaptador 12V 2A……………………..….
  • Palanca de mando ………………………………
  • Conector de alimentación……………….………….……
  • Placa Arduino …………………………

Diseño de PCB

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

Lo hice usando el software gratuito de diseño de circuitos en línea 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 terminado con este paso generé el archivo Gerber necesario para la fabricación de la PCB. Luego ordené el PCB de JLCPCB, que en realidad es el patrocinador de este tutorial.

Aquí simplemente podemos cargar el archivo Gerber y, una vez cargado, podemos revisar nuevamente nuestro PCB en el visor de Gerber. Si todo está bien, podemos continuar, seleccionar las propiedades que queremos para nuestra PCB y luego podemos pedir nuestra 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 continué con el ensamblaje de los componentes electrónicos. Empecé soldando los pines de los cabezales de la PCB. Esto permite una conexión y desconexión más fácil de los componentes cuando sea necesario. De hecho, usé cabezales de pines para todo excepto los condensadores y las resistencias que soldé directamente en la PCB. Por lo tanto, continué soldando cables 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 de 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, ensamblé la caja y, en cuanto a la parte superior, inserté y pegué dos pernos a través de los cuales se puede insertar el panel frontal y asegurarlo 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 demás componentes en el panel frontal.

Una vez que los tuve asegurados, conecté los componentes a los cabezales de pines apropiados en la PCB. En el panel lateral de la caja, agregué el conector de alimentación y luego inserté la PCB en la caja. En el mismo panel también hay un orificio por el que puse los cables de puente para conectar los controladores con los motores paso a paso, así como el interruptor de límite que coloqué al final del deslizador.

Usando un tubo termorretráctil organicé los cables de puente que salen de la caja del controlador y, finalmente, lo que queda por hacer es conectar el controlador con los tres motores paso a paso y el interruptor de límite.

En cuanto a la alimentación del control deslizante, utilicé tres baterías de iones de litio de 3,7 V conectadas en serie que producían alrededor de 11 V. Y eso es todo, el control deslizante está listo y funciona perfectamente.

Código Arduino del deslizador de cámara DIY

Ahora lo que queda en este tutorial es echar un vistazo al código de 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 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 múltiples motores paso a paso al mismo tiempo. Entonces, una vez que incluimos esta biblioteca y la biblioteca MultiStepper.h que forma parte de ella, debemos definir todos los pines Arduino que se utilizarán, definir las instancias para los motores paso a paso, así como algunas variables necesarias para el programa a continuación. /P>

#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, establecemos 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 inicial, o se mueve hasta que presiona el 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 de bucle, comenzamos comprobando si el control deslizante ha alcanzado las posiciones límite, o si es el interruptor de límite 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 instrucció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 verificamos si hemos presionado el botón Set, que se usa 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 encendemos 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)

Del mismo modo, con la segunda pulsación memorizamos las posiciones OUT y encendemos 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)

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 motores por separado. Luego, usando la función runSpeedToPosition(), el control deslizante se mueve automáticamente a la posición de entrada.

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)

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.

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)

En caso de que mantengamos presionado el botón Establecer durante más de medio segundo, se ejecutará la declaración del cuarto caso, que restablece la posición de ENTRADA y SALIDA para que podamos establecer otras nuevas.

El siguiente es el control Pan y Tilt del joystick. El valor analógico que estamos obteniendo del joystick es de 0 a 1024, o cuando está en el medio los valores rondan los 500. Entonces, si movemos el joystick hacia la izquierda y el valor analógico es mayor a 600, estableceremos la velocidad. del motor en particular a positivo, y al contrario, si movemos el joystick hacia la derecha, estableceremos la velocidad del motor en negativo, lo que significa que girará en sentido contrario.

// 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)

En caso de que permanezca 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. 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.

// 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)

Por último, llamamos a las funciones runSpeed() para cada uno de los tres motores paso a paso y eso ejecuta los comandos anteriores, o gira los motores apropiadamente.

// 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 sería todo, espero que hayas disfrutado este proyecto 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 de Arduino.


Proceso de manufactura

  1. Deslizador de cámara motorizado controlado por Bluetooth Arduino
  2. Hacer Monitor Ambilight usando Arduino
  3. Sistema de asistencia que usa Arduino y RFID con Python
  4. Voltímetro de bricolaje con Arduino y un teléfono inteligente
  5. Voltímetro de bricolaje con Arduino y una pantalla Nokia 5110
  6. Autómatas celulares basados ​​en Arduino y OLED
  7. Contador de RPM basado en Arduino con un algoritmo nuevo y más rápido
  8. Radio FM usando Arduino y RDA8057M
  9. Sistema de asistencia basado en Arduino y hoja de cálculo de Google
  10. Cómo hacer música con un Arduino
  11. Smart Energy Monitor basado en Arduino