Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Slider de câmera DIY com cabeça Pan e Tilt - Projeto baseado em Arduino


Neste tutorial vamos aprender como fazer um slider de câmera motorizada com cabeça de pan e tilt. Este projeto baseado em Arduino é 100% DIY, construído com materiais baratos como MDF e madeira compensada e controlado usando Arduino, três motores de passo, alguns botões e um joystick acoplado em um PCB personalizado. Apesar disso, o resultado final é bastante impressionante, com movimentos de câmera super suaves, permitindo obter fotos cinematográficas com aparência profissional.

Você pode assistir ao vídeo a seguir ou ler o tutorial escrito abaixo.

Visão geral


Usando o controlador, podemos mover manualmente a câmera ou podemos definir os pontos inicial e final e, em seguida, a câmera se moverá automaticamente de uma para a outra posição. Também usando o braço de apoio podemos montar o slider mesmo em um tripé menor, em qualquer ângulo que quisermos e ainda obter movimentos estáveis.

Para começar, desenhei o slider usando um software de modelagem 3D.

Você pode encontrar e baixar este modelo 3D e obter todas as dimensões do modelo 3D abaixo, além de explorá-lo em seu navegador no Thangs.

Baixe o modelo 3D de montagem de Thangs.

Link da polia GT2 impresso em 3D:

 Thingiverse

Construindo o controle deslizante da câmera


Então comecei fazendo os trilhos deslizantes para os quais usei um tubo de cobre de 22 mm. Resolvi fazer o slider com 1 metro de comprimento, então cortei dois pedaços com 1 metro de comprimento. Os tubos de cobre podem oxidar facilmente, portanto, precisamos poli-los com um polidor de metal. No meu caso, eu não tinha um, então usei uma pasta de dente para esse fim.

Esta não foi a solução perfeita, mas ainda assim pude notar uma diferença e deixei os canos um pouco mais limpos.

Então continuei fazendo a base de madeira na qual os dois tubos serão fixados e também servirá para montar o slider em um tripé. Usando uma serra circular, cortei dois pedaços de madeira compensada de 21 mm e colei-os para obter uma única peça. Em seguida, usando uma madeira maciça, fiz uma réplica da minha placa de montagem do tripé e a prendi à peça de compensado usando uma cola de madeira e um parafuso. Agora a base deslizante pode ser facilmente montada no tripé.

Vou montar os trilhos deslizantes na base usando hastes rosqueadas de 8 mm, então fiz dois furos na base e inseri as hastes de 138 mm de comprimento que cortei anteriormente. Em seguida, tive que fazer furos de 8 mm nos tubos, o que pode ser um pouco complicado.

Para isso fiz um gabarito simples onde levantei o lápis a uma altura de 11mm ou isso é metade do diâmetro do tubo. Então prendi o tubo em uma superfície plana e usando o gabarito marquei o tubo de ambos os lados. Isso permite obter furos com precisão de ambos os lados. Então, primeiro marquei os pontos de perfuração com uma ponta de parafuso afiada e depois os furei progressivamente usando brocas de 2, 4, 6 e 8 mm.

Depois disso, inseri os trilhos nas hastes rosqueadas e, usando algumas arruelas e porcas, prendi-os na base do slider. De forma semelhante, usando um pedaço de compensado e uma haste rosqueada, fixei as pontas dos trilhos.

Em seguida é a plataforma deslizante. Novamente usei uma serra circular para cortar a placa de MDF de 8mm no tamanho de acordo com o modelo 3D. Também fiz um furo de 8 mm para as hastes rosqueadas nas quais o rolamento será fixado. Para montar a plataforma usei cola de madeira e alguns parafusos. Usando uma furadeira sem fio, primeiro fiz furos piloto, depois fiz as pias e aparafusei os parafusos de 3 mm no lugar.

Uma vez que os painéis foram fixados, continuei com a montagem do sistema de rolamentos. Os rolamentos que estou usando são 608Z com diâmetro externo de 22mm. Duas arruelas e uma porca entre dois rolamentos fazem uma distância suficiente entre eles, permitindo um bom contato com os trilhos de 22 mm.

Para tornar a plataforma mais segura ao usar o slider em ângulo, de forma semelhante, inseri mais dois conjuntos de rolamentos na parte inferior da plataforma. No final, a plataforma deslizante acabou funcionando perfeitamente.

Aqui podemos notar que agora ao mover a plataforma ao longo do slider no meu tripé pequeno, não pesado, a cabeça não consegue segurar o peso da plataforma, então eu tive que fazer um braço de apoio para estabilizar o slider. Então, usando dois pedaços de madeira e algumas porcas e parafusos, fiz um grampo simples que pode ser preso a uma das pernas do tripé.

A braçadeira possui um parafuso no qual o braço de suporte pode ser fixado. Em seguida, tive que fazer um slot no braço de suporte para poder posicionar o slider em um ângulo diferente. Eu fiz o slot simplesmente fazendo muitos furos de 6mm próximos uns dos outros, e então usando uma grosa fiz linhas retas finas. Esse sistema de suporte acabou funcionando perfeitamente.

Continuei essa construção adicionando pernas ao controle deslizante, caso você não queira ou precise usar um tripé. Fiz em MDF 8mm. Usando uma serra manual e uma grosa consegui facilmente a forma desejada das pernas. Em seguida, usando um pouco de cola e duas porcas, prendi-os nas extremidades do controle deslizante.

A próxima etapa é construir o sistema de pan e tilt que será fixado na parte superior da plataforma deslizante. Com a serra circular, cortei todas as peças necessárias, com as dimensões retiradas do modelo 3D. Usei alguns pedaços de compensado para fazer o mecanismo de dobradiça da plataforma de nivelamento da câmera quando o slider está posicionado em ângulo, além de algumas placas de MDF nas quais fiz furos apropriados para o motor e os rolamentos para o sistema de panning.

Prossegui com a instalação do motor de passo e da correia dentada para a plataforma deslizante. De um lado da plataforma prendi o motor de passo com um pedaço de placa de MDF e alguns parafusos e cavilhas. E do outro lado do slider eu prendi uma polia intermediária para que agora eu possa instalar a correia dentada. Usando dois parafusos e braçadeiras, prendi facilmente a correia dentada na plataforma deslizante.

Com esta etapa o mecanismo de deslizamento foi completamente feito.

Continuei fazendo as partes superiores do sistema de pan e tilt. De acordo com o modelo 3D, fiz todos os furos apropriados para o motor de passo e os rolamentos, e colei e aparafusei tudo.

Um amigo meu imprimiu em 3D 2 polias de 80 dentes para mim. Desta forma consegui uma redução de velocidade 5 vezes em relação à polia de 16 dentes acoplada no motor de passo.

Agora eu precisava fazer uma correia dentada de loop fechado de acordo com minha configuração, então medi quanto comprimento de correia eu precisava, cortei e depois simplesmente colei com uma cola CA e adicionei um pedaço de fita em cima dela. A cola CA faz um ótimo trabalho com borracha para que o cinto de laço fechado funcione sem problemas.

Em seguida, iniciei a montagem final do sistema de pan e tilt. Primeiro, prendi o motor de inclinação usando alguns parafusos e, em seguida, adicionei os dois rolamentos no lugar, prendendo-os nas ranhuras com um pouco de epóxi. Em seguida, prendi a plataforma de inclinação na plataforma do prato usando alguns parafusos de 8 mm e ao mesmo tempo prendi a polia de 80 dentes junto com a correia dentada.

Aqui notei que a correia estava um pouco frouxa, mas adicionei um pequeno rolamento no local onde vai o parafuso do motor de passo para atuar como tensor da correia. Essa coisa deu certo e agora a correia tinha tensão suficiente para funcionar corretamente.

Em seguida, fixei o motor do prato e adicionei rolamentos na parte superior da plataforma de nivelamento, bem como na parte inferior. Em seguida, inseri um parafuso através deles, adicionei um rolamento de encosto, a polia de 80 dentes e a correia dentada, e em cima deles adicionei a cabeça de inclinação montada anteriormente. Por fim, prendi-o com um parafuso e pronto, com este passo a construção do slider está concluída.

Diagrama de circuito


Ok, em seguida vem a parte divertida ou instalar os componentes eletrônicos. Aqui está o diagrama de circuito deste projeto de controle deslizante de câmera DIY.

Assim, os três motores de passo NEMA 17 são controlados através dos três drivers de passo A4988. Para controlar o movimento do slider usamos um potenciômetro conectado a uma entrada analógica do Arduino, e para controlar o cabeçote de pan e tilt usamos um módulo joystick que na verdade é composto por dois potenciômetros, portanto é conectado a duas entradas analógicas. Há também outro potenciômetro usado para definir a velocidade do movimento automático das posições de entrada e saída. Estas posições de entrada e saída são definidas com a ajuda do botão de pressão. Este botão tem um resistor de pull up e está conectado a um pino digital da placa Arduino. Há também um botão de reset, um interruptor de alimentação e um conector de alimentação, bem como um interruptor de limite para o controle deslizante e dois LEDs para indicar o status de entrada e saída. Podemos alimentar este projeto com 9 ou 12V.

Você pode obter os componentes necessários para este projeto nos links abaixo:
  • Motor de passo (NEMA17)……….
  • Driver de passo A4988…………….
  • Adaptador 12V 2A…………………..….
  • Manche ……………………………………
  • Tomada de força…………….………….……
  • Placa Arduino …………………………

Projeto de PCB


Em seguida, de acordo com o diagrama do circuito, desenhei uma PCB personalizada para manter os componentes eletrônicos organizados.

Eu fiz isso usando o software de design de circuito online gratuito EasyEDA. O circuito tinha algumas conexões, então usei a camada superior e inferior e consegui obter uma PCB funcional e com boa aparência. Uma vez finalizada esta etapa, gerei o arquivo Gerber necessário para a fabricação da PCB. Então encomendei o PCB da JLCPCB, que na verdade é o patrocinador deste tutorial.

Aqui podemos simplesmente carregar o arquivo Gerber e, uma vez carregado, podemos revisar novamente nosso PCB no visualizador Gerber. Se tudo estiver bem, podemos continuar, selecionar as propriedades que queremos para o nosso PCB, e então podemos encomendar o nosso PCB a um preço razoável. Observe que, se for seu primeiro pedido da JLCPCB, você pode obter até 10 PCBs por apenas 2 dólares.

No entanto, depois de uma semana os PCBs chegaram. A qualidade dos PCBs é ótima e devo admitir que é bastante satisfatório ter seu próprio projeto de PCB fabricado.

Montagem da eletrônica


Ok, então eu segui em frente com a montagem dos componentes eletrônicos. Comecei soldando os pinos da placa de circuito impresso. Isso facilita a conexão e desconexão dos componentes quando necessário. Na verdade, usei pinos para tudo, exceto os capacitores e os resistores que soldei diretamente no PCB. Portanto, continuei soldando fios de jumper em todos os componentes eletrônicos.

Dessa forma, posso montar facilmente os componentes na caixa do controlador e, ao mesmo tempo, conectá-los à placa de circuito impresso.

Quanto ao gabinete do controlador, decidi fazê-lo em acrílico transparente de 4 mm porque queria que a beleza de todos os componentes eletrônicos fosse visível. Eu usei uma serra circular para cortar os painéis para o tamanho da caixa. Em seguida, usando uma furadeira e brocas Forstner, fiz a abertura no painel frontal para os botões, potenciômetros, interruptor e joystick. Depois disso usando um epóxi de 5 minutos eu montei o gabinete, e quanto ao topo eu inseri e colei dois parafusos através dos quais o painel frontal pode ser inserido e fixado usando porcas em cima dele.

Finalmente comecei a montar a eletrônica inserindo a placa Arduino e os drivers de passo A4988 na placa de circuito impresso. Em seguida, continuei inserindo e prendendo os botões e os outros componentes no painel frontal.

Depois de prendê-los, conectei os componentes aos pinos apropriados na placa de circuito impresso. No painel lateral do gabinete, adicionei o conector de alimentação e, em seguida, inseri o PCB no gabinete. No mesmo painel há também um furo por onde coloco os jumpers para conectar os drivers com os motores de passo, assim como a chave fim de curso que coloquei na ponta do slider.

Usando alguns tubos termorretráteis, organizei os jumpers que saem da caixa do controlador e, finalmente, o que restava fazer era conectar o controlador com os três motores de passo e a chave limitadora.

Para alimentar o slider, usei três baterias Li-ion de 3,7V conectadas em série produzindo cerca de 11V. E é isso, o controle deslizante está pronto e funciona perfeitamente.

Código Arduino Slider de Câmera DIY


Agora o que resta neste tutorial é dar uma olhada no código do Arduino e explicar como o programa funciona. Como o código é um pouco mais longo, para melhor entendimento, postarei o código fonte do programa em seções com descrição de cada seção. E no final deste artigo vou postar o código fonte completo.

O programa é baseado na biblioteca AccelStepper de Mike McCauley. Esta é uma biblioteca incrível que permite o controle fácil de vários motores de passo ao mesmo tempo. Assim, uma vez que incluímos esta biblioteca e a biblioteca MultiStepper.h que faz parte dela, precisamos definir todos os pinos do Arduino que serão utilizados, definir as instâncias para os steppers, bem como algumas variáveis ​​necessárias para o programa abaixo.
#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)

Na seção de configuração, definimos os valores iniciais de velocidade para os steppers, definimos alguns modos de pinos, bem como adicionamos os três steppers à instância de controle multi stepper chamada “StepperControl”. Usando os loops while, movemos o controle deslizante para a posição inicial, ou ele se move até pressionar o interruptor de limite e, em seguida, retrocede 200 passos para liberar o interruptor de limite.
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)

Na seção de loop, começamos verificando se o controle deslizante atingiu as posições limite, ou se é o interruptor de limite ou 80 cm do outro 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)

Com a próxima instrução if, aumentamos as velocidades de Pan e Tilt com cada pressionamento do botão do joystick.
// If Joystick pressed increase the Pan and Tilt speeds
  if (digitalRead(JoySwitch) == 0) {
    currentSpeed = currentSpeed + 50;
    delay(200);
  }Code language: Arduino (arduino)

Em seguida, verificamos se pressionamos o botão Set, que é usado para definir as posições IN e OUT. Com o primeiro toque no botão, armazenamos as posições IN dos motores de passo e também acendemos o 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)

Da mesma forma, com o segundo toque armazenamos as posições OUT e acendemos o 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)

Então, com o próximo toque no botão, lemos o valor do potenciômetro de velocidade automática que é usado para definir a velocidade máxima dos motores. Também colocamos as posições IN no array “gotoposition” que é usado na função moveTo() que calcula a velocidade necessária para todos os steppers separadamente. Em seguida, usando a função runSpeedToPosition(), o controle deslizante se move automaticamente para a posição In.
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)

Exatamente da mesma forma, no caso número 3 ou com outro toque no botão, movemos o controle deslizante para a posição 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)

Caso mantenhamos pressionado o botão Set por mais de meio segundo, a 4ª instrução case será executada, que redefine as posições IN e OUT para que possamos definir novas.

Em seguida é o controle de Pan e Tilt do joystick. O valor analógico que estamos obtendo do joystick é de 0 a 1024, ou quando fica no meio os valores ficam em torno de 500. Então, se movermos o joystick para a esquerda e o valor analógico for maior que 600, definiremos a velocidade do motor em particular para positivo, e ao contrário, de movermos o joystick para a direita, definiremos a velocidade do motor para negativo, o que significa que ele girará no sentido oposto.
// 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)

Caso fique no meio, a velocidade é ajustada para 0. Este método é utilizado tanto para os eixos do joystick quanto para o potenciômetro deslizante. Na verdade, no caso do potenciômetro, usamos seu valor analógico para aumentar também a velocidade do motor à medida que giramos ainda mais o 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 fim, chamamos as funções runSpeed() para cada um dos três motores de passo e que executam os comandos acima ou giram os motores adequadamente.
// Execute the above commands - run the stepper motors
  stepper1.runSpeed();
  stepper2.runSpeed();
  stepper3.runSpeed();Code language: Arduino (arduino)

Aqui está o código fonte 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)

Então isso seria tudo, espero que você tenha gostado deste projeto Arduino e aprendido algo novo. Sinta-se à vontade para fazer qualquer pergunta na seção de comentários abaixo e confira minha Coleção de projetos do Arduino.

Processo de manufatura

  1. Deslizador de câmera motorizada Arduino controlado por Bluetooth
  2. Faça Monitor Ambilight usando Arduino
  3. Sistema de atendimento usando Arduino e RFID com Python
  4. Faça você mesmo voltímetro usando Arduino e Smartphone
  5. Voltímetro DIY com Arduino e um visor Nokia 5110
  6. Arduino e autômatos celulares baseados em OLED
  7. Contador RPM baseado em Arduino com um algoritmo novo e mais rápido
  8. Rádio FM usando Arduino e RDA8057M
  9. Sistema de atendimento baseado em Arduino e planilha do Google
  10. Como fazer música com um Arduino