Aprenda a construir um Intervalômetro e Controle Remoto para Câmeras DSLR 11

Nesse post veremos como criar um Intervalômetro e Controle Remoto para Câmeras DSLR. Todas as funcionalidades do dispositivo são acessíveis através de um aplicativo Android. Com esse projeto podemos criar Time-lapses de alta qualidade e tirar fotos a distância a partir do aplicativo, dessa forma podemos utilizar a câmera para tirar fotos em grupo e de longa exposição.

Utilizaremos a interface de controle com fio presente na Câmera DSLR  para comandar que a foto seja tirada. O Arduino em conjunto com o módulo Bluetooth interage com essa interface e o celular para permitir que tiremos fotos de forma remota.

O que é um Intervalômetro?

Intervalômetro

O intervalômetro é um dispositivo usado em conjunto com uma câmera para fotografia time-lapse. O dispositivo comanda a câmera para que tire fotos espaçadas por um determinado intervalo de tempo. Com auxílio de um software de edição de vídeo, essas fotos são usadas para formar um vídeo no formato time-lapse, como o abaixo.

Compatibilidade

Esse projeto pode ser usado com qualquer câmera que possua entrada para controle remoto com plug P1 de 2,5 mm como o da imagem abaixo.

Materiais Necessários

Para confecção desse projeto serão necessários os seguintes materiais:

Circuito Intervalômetro e Controle Remoto para Câmeras DSLR

O módulo Bluetooth utilizado nesse projeto, apesar de poder ser alimentado com 5 V , trabalha com níveis lógicos de 3,3 V, enquanto o Arduino trabalha com níveis de 5 V. Por esse motivo precisamos utilizar um divisor de tensão entre as portas TX do Arduino e RX do módulo. Para entender melhor sobre como utilizar o módulo HC-05 acesse o “Tutorial Módulo Bluetooth com Arduino“.

A conexão do dispositivo com a câmera é feita através de um Conector P1 de 2,5 mm, como o da imagem abaixo.

O comando para tirar foto é feito quando conectamos o circuito do obturador com o circuito comum. E o comando para focar é feito conectando o circuito de foco ao comum. Nesse projeto, conectaremos o comum ao terra do Arduino para que os comandos sejam feitos ao puxar para baixo as portas do microcontrolador onde os circuitos estão conectados.

Tabela de Conexões
Arduino HC-05 Bateria 220Ω 510Ω 1kΩ LED Conector P1
5V VCC
GND GND Negativo Terminal 1 Negativo Comum
D2 Obturador
D3 Foco
D5 Terminal 1
D10 TX
D12 Terminal 1
RAW Positivo
RX Terminal 2 Terminal 2
Terminal 2 Positivo

Código

No código usaremos apenas a biblioteca Software Serial, presente nativamente na IDE do Arduino. Essa biblioteca nos permite utilizar outros pinos digitais do Arduino para estabelecer conexão serial com o módulo Bluetooth. Conectando o módulo diretamente na interface serial do Arduino, seria necessário desconectá-lo toda vez que um novo código fosse ser carregado no Arduino.

#include <SoftwareSerial.h>

//Portas---------
#define LEDpin 5
#define focous 3
#define shutter 2

//Protótipos------------------------
void takeShot();
void getFocous();
void intervalometer();
void bluetoothControl();
String getCommand(int command_size);

SoftwareSerial bluetooth(10, 12); // RX, TX

void setup() 
{ 
  bluetooth.begin(9600);              //Comunicação Serial via Software com o HC-05
  
  pinMode(LEDpin, OUTPUT);
  pinMode(focous, OUTPUT);
  pinMode(shutter, OUTPUT);
  
  digitalWrite(focous, HIGH);
  digitalWrite(shutter, HIGH);

  digitalWrite(LEDpin, HIGH);         //Pisca o LED ao ligar
  delay(300);
  digitalWrite(LEDpin, LOW);
}

//Variáveis Globais-------------
int velocidade = 1000;
bool intervalometro = false;

void loop() 
{
  intervalometer();
  bluetoothControl();
}

void takeShot()
{
  digitalWrite(LEDpin, LOW);        //Desliga o LED para não interferir na foto
  
  digitalWrite(shutter, LOW);
  delay(100);
  digitalWrite(shutter, HIGH);

  digitalWrite(LEDpin, HIGH);
}

void getFocous()
{
  digitalWrite(LEDpin, LOW);        //Desliga o LED para não interferir no foco
  
  digitalWrite(focous, LOW);
  delay(1500);
  digitalWrite(focous, HIGH);

  digitalWrite(LEDpin, HIGH);
}

void intervalometer()
{
  static unsigned long long tempoAtual = 0;
  static unsigned long long tempoAnterior = 0;
  
  if(intervalometro)
  { 
    tempoAtual = millis()/1000;
    if((tempoAtual - tempoAnterior) >= velocidade)
    {
      tempoAnterior = tempoAtual;
      takeShot();                  
    }
  }
}

void bluetoothControl()
{
  String comando = getCommand(7);     //Comandos mandados pelo aplicativo possuem 7 caracteres

  if(comando == "INT1111")            //Liga Intervalômetro
    intervalometro = true;
  if(comando == "INT0000")            //Desliga Intervalômetro
    intervalometro = false;

  //Velocidades
  if(comando == "INT0001")
    velocidade = 1;
  if(comando == "INT0002")
    velocidade = 2;
  if(comando == "INT0005")
    velocidade = 5;
  if(comando == "INT0010")
    velocidade = 10;
  if(comando == "INT0015")
    velocidade = 15;
  if(comando == "INT0025")
    velocidade = 25;
  if(comando == "INT0050")
    velocidade = 50;
  if(comando == "INT0100")
    velocidade = 100;
  if(comando == "INT0500")
    velocidade = 500;

  if(comando == "SHUTTER")            //Tirar Foto
    takeShot();
  if(comando == "GFOCOUS")            //Obter Foco
    getFocous();

  if(comando == "CONECTD")            //Aplicativo Conectado via Bluetooth
    digitalWrite(LEDpin, HIGH);
}

String getCommand(int command_size)
{
  String answer = "\0";
  static String command = "\0";
  static int counter = 0;
    
  if (bluetooth.available())
  {
    command += char(bluetooth.read());
    counter++;
  }

  if(counter == command_size)
  {
    answer = command;
    command = "\0";
    counter = 0;
  }

  return answer;
}

As funções definidas nesse projeto e suas respectivas atribuições são:

  • takeShot: define o pino do obturador como LOW por 100 milissegundos para que a foto seja tirada
  • getFocus: define o pino de foco como LOW por um segundo e meio para que a câmera foque
  • intervalometer: quando a função intervalômetro está ativada tira foto no intervalo de tempo definido
  • bluetotoothControl: de acordo com o comando recebido pelo aplicativo, altera as variáveis de configuração do dispositivo
  • getCommand: cuida da conexão serial com o módulo Bluetooth e retorna os comandos recebidos

Na função setup iniciamos a conexão Serial, definimos a função de cada pino e piscamos brevemente o LED para indicar que o dispositivo foi ligado.

Na função loop chamamos a função que tira as fotos no instante determinado e a função que define as configurações do usuário.

Para saber como carregar o código para o Arduino Nano acesse o nosso post “Primeiros passos com Arduino“.

Para instruções em como fazer upload do código no Arduino Pro Mini você pode conferir o post “Programando um Arduino Pro Mini com Arduino Uno” ou “Programando o Arduino Pro Mini com Cabo Conversor USB TTL“.

Aplicativo

Aplicativo para o intervalômetro e controle remoto

O aplicativo para esse projeto foi desenvolvido com auxílio do MIT App Inventor, uma plataforma online para desenvolvimentos de apps de forma simples e rápida. Faça o download do arquivo para instalação do app e instale no seu dispositivo Android.

Antes de usar o intervalômetro, é necessário parear o smartphone com o módulo Bluetooth. Para começar a utilizar o aplicativo, clique no botão do topo da tela e selecione o dispositivo Bluetooth corresponde ao módulo – geralmente chamado HC-05.

Placa de circuito impresso

Para tornar o projeto do Intervalômetro e Controle Remoto mais portátil, pode ser interessante produzir uma Placa de Circuito Impresso. O design da PCB para esse projeto está no arquivo Intervalometro.pdf.  Nela utilizamos um Arduino Pro Mini como microcontrolador e barra de pinos fêmea para conexão do módulo Bluetooth. Acesse o nosso post “Confecção de PCB de formar caseira” para instruções em como produzir a sua placa em casa a partir do design fornecido.

PCB do Intervalômetro e Controle Remoto

Gostou desse projeto Intervalômetro e Controle Remoto para câmeras DSLR? Não se esqueça de deixar um comentário contando o que achou.

Faça seu comentário

Acesse sua conta e participe

11 Comentários

  1. Olá Ítalo, achei muito legal sua postagem, venho procurando aplicativos para usar como intervalômetro, porém muitos deixam a desejar, gostaria de saber se é possível a adaptação da utilização do aplicativo para o uso de cabo p1 na Câmera e um P2 na saída de áudio do celular ao invés da utilização de uma placa Arduino por Bluetooth. Grato desde já. Parabéns pelo intervalômetro.

    1. Oi Rodrigo! Que bom que gostou! Acredito que seja possível sim, porém seria necessário um circuito eletrônico para fazer a comunicação entre os dois dispositivos. Não seria apenas uma questão de juntar dois cabos.

      1. Obrigado mais uma vez, vou procurar um meio de elaborar essa comunicação, com certeza irei me inspirar na sua postagem para isso. Te agradeço pela postagem e explicação, assim como pelo feedback rápido.

  2. Sensacional! Parabéns! Por um acaso é possível criar uma programação para time lapses mais longos, de vários dias, programando a câmera para tirar fotos apenas nos dias de semana das 7h às 19h, por exemplo?

    1. Fico feliz que tenha gostado, Eduardo! Você pode usar um RTC para marcar o dia e horário com precisão e alterar o código para tirar foto apenas nos horários desejados.

      1. ótimo! Obrigado pela pronta resposta

  3. Muito bom, mas onde está o código completo do arduino com todas as funções?

    1. Olá Jairo, que bom que gostou do Post! Já corrigimos e o código completo está disponível.

      1. Valeu!!!!

  4. Olá, tem que ser Arduino nano? O meu é o demilanueve!

    MARCELO DOS SANTOS COUTINHO
    1. Oi Marcelo, você pode utilizar o Arduino Duemilanove sem problemas já que esse é baseado no mesmo microcontrolador. Funciona também com Arduino UNO e Pro Mini.