Timelapse Controlado por Movimento - Garagem Maker

Post Top Ad

terça-feira, 11 de junho de 2019

Timelapse Controlado por Movimento




Timelapses são ótimos! Eles nos ajudam a dar uma olhada no mundo em movimento lento, que podemos esquecer de apreciar a beleza dele. Mas às vezes um vídeo de timelapse constante pode ser chato ou há tantas coisas acontecendo ao redor que apenas um ângulo não é suficiente. Vamos apimentar!
Neste tutorial, mostrarei como fiz um dispositivo que adicionará movimento ao seu lapso de tempo. Vamos começar!

Etapa 1: O Plano
Eu queria que a câmera se movesse em duas direções, ou seja, no eixo horizontal (X) e vertical (Y). Para isso, precisarei de dois motores.
Devemos ser capazes de escolher a posição de partida e parada para ambos os eixos.
O movimento dos motores seria tal que após cada foto os eixos deveriam girar em 1 grau.
Para obter um controle tão preciso, usarei Servo Motores.
Além disso, devemos ser capazes de definir o intervalo de tempo.
Eu queria que fosse portátil, então decidi usá-lo em uma bateria LiPo, o que significa que será necessário carregar e impulsionar o circuito.
E por último, o cérebro para controlar tudo isso será o Arduino. O ATMega328p será usado como um microcontrolador autônomo.
Eu fui com uma câmera GoPro, pois é pequena e fazer timelapses com ela é fácil. Você pode ir com qualquer outra pequena câmera ou seu celular.
Etapa 2: Lista de Componentes
1x ATmega328p (com bootloader do Arduino)
2x servo motor MG995
1x Conversor de Impulso MT3608
1x TP4056 LiPo Módulo de Carregamento de Bateria
1x comutador SPDT
1x cristal de 16 megahertz
Capacitor 2x 22pF
Resistor 2x 10k
1x potenciômetro (qualquer valor)
1x Botão de pressão (normalmente aberto)
Opcional:
impressora 3d

Etapa 3: Projetando a PCB
Para tornar o circuito o menor possível, fui com uma placa de circuito impresso. Você pode gravar o quadro em casa ou deixar que os profissionais façam o trabalho duro para você e é isso que eu fiz.
Quando tudo está funcionando bem na breadboard, podemos começar com o processo de projeto de PCB. Eu escolhi EasyEDA para projetar, pois facilita as coisas para iniciantes como eu.
Verifique, confira e confira! Certifique-se de que você não perdeu nada. Quando tiver certeza, clique em Gerar Arquivo de Fabricação para fazer o download dos arquivos Gerber ou você pode encomendá-lo diretamente do JLCPCB por apenas 2 $ usando a opção fornecida abaixo.
Depois de receber / fazer seu PCB, é hora de preenchê-lo. Mantenha seu diagrama de circuito pronto e comece a soldar os componentes conforme a marcação da serigrafia.

Limpe a PCB após soldar com álcool isopropílico para remover o resíduo de fluxo.

Etapa 3: Reunindo o Material
Você não precisará de uma impressora 3D sofisticada. As peças podem ser facilmente construídas com ferramentas adequadas. Eu recentemente tenho uma impressora 3D e estava ansioso para usá-lo no meu projeto. Eu encontrei algumas das partes do Thingiverse .
Soldar fios para o interruptor de alimentação, botão Pot e Push com cabeçalhos femininos e conectá-los aos cabeçalhos masculinos no PCB.
Baixe e abra o arquivo anexo no Arduino IDE e faça o upload do código para o seu Arduino. Após fazer o upload do código, remova o IC da placa do Arduino e insira-o no seu PCB.
  /*  
 Author : IndoorGeek  
 YouTube : www.youtube.com/IndoorGeek  
 Thank you for downloading. Hope you like the project.  
 */  
 #include<Servo.h>  
 Servo xServo;  
 Servo yServo;  
 int potPin = A0;  
 int val,xStart,xStop,yStart,yStop;  
 int button = 2;  
 unsigned long timeInterval;  
 void setup() {  
  pinMode(button, INPUT);  
  xServo.attach(3);  
  yServo.attach(4);  
 }  
 void loop() {  
  xAxis();  
  delay(1000);  
  xStart = val;  
  yAxis();  
  delay(1000);  
  yStart = val;  
  xAxis();  
  delay(1000);  
  xStop = val;  
  yAxis();  
  delay(1000);  
  yStop = val;  
  setTimeInterval();  
  delay(1000);  
  timelapseStart();  
 }  
 void xAxis(){  
  while(digitalRead(button) != HIGH){  
  val = analogRead(A0);  
  val = map(val, 0, 1023, 0, 180);  
  xServo.write(val);  
  }  
 }  
 void yAxis(){  
  while(digitalRead(button) != HIGH){  
  val = analogRead(A0);  
  val = map(val, 0, 1023, 0, 180);  
  yServo.write(val);  
  }  
 }  
 void setTimeInterval(){          //Change the time intervals according to your camera's timelapse settings  
  while(digitalRead(button) != HIGH){  
  val = analogRead(A0);  
  if(val>=0 && val<170){  
   timeInterval = 1000L;  
  }  
  if(val>=171 && val<341){  
   timeInterval = 2000L;  
  }  
  if(val>=342 && val<512){  
   timeInterval = 5000L;  
  }  
  if(val>=513 && val<683){  
   timeInterval = 10000L;  
  }  
  if(val>=684 && val<854){  
   timeInterval = 30000L;  
  }  
  if(val>=855 && val<1023){  
   timeInterval = 60000L;  
  }  
 }  
 }  
 void timelapseStart(){  
  unsigned long lastMillis = 0;  
  xServo.write(xStart);  
  yServo.write(yStart);  
  while(xStart != xStop || yStart != yStop ){  
   if(millis() - lastMillis > timeInterval ){  
    if(xStart < xStop){  
    xServo.write(xStart);  
    lastMillis = millis();  
    xStart++;  
   }  
   if(xStart > xStop){  
    xServo.write(xStart);  
    lastMillis = millis();  
    xStart--;  
   }  
   if(yStart < yStop){  
    yServo.write(yStart);  
    lastMillis = millis();  
    yStart++;  
   }  
   if(xStart > xStop){  
    yServo.write(yStart);  
    lastMillis = millis();  
    yStart--;  
   }  
  }  
 }  
 }  

5º Passo - Trabalhando
Ligue o interruptor principal.
O eixo X estará ativo. Gire o pote para a posição de onde você deseja iniciar o lapso de tempo. Pressione o botão Selecionar para confirmar a posição inicial. Depois disso, o eixo Y estará ativo. Faça o mesmo para selecionar a posição inicial do eixo Y.
Repita o procedimento acima para a posição de parada do eixo X e Y.
Agora, usando o pote, selecione o intervalo de tempo entre cada tiro. A rotação do pote é dividida em 6 partes para intervalos de 1 s, 2 seg, 5 seg, 10 seg, 30 seg e 60 seg. Você pode alterar os intervalos na função setTimeInterval () como mostrado na figura. Pressione o botão Selecionar para confirmar.
Os servos chegarão à sua posição inicial e se moverão 1 grau após o intervalo de tempo.
Seqüência:
  • Definir a posição inicial do eixo X
  • Definir a posição inicial do eixo Y
  • Definir posição de parada do eixo X
  • Definir a posição de parada do eixo Y
  • Definir o intervalo de tempo
6º Passo - Atualizaçoes Futuras
1) Atualmente, devido a 1 shot / degree, o maior número de fotos que podemos obter é 180, já que os servos podem girar de 0 a 180 graus. Adicionar engrenagens aumentará a resolução. Assim, teremos mais tiros e, portanto, timelapses suaves. Estou bastante confortável com a eletrônica, mas não tanto com coisas mecânicas. Ansioso para melhorá-lo.
2) O potenciômetro pode ser substituído pelo codificador rotativo.
3) Controle sem fio, talvez ?!
Há muito a aprender!
7º Passo - Aproveite

Nenhum comentário:

Postar um comentário

Post Bottom Ad