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

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
ArduinoHC-05Bateria220Ω510Ω1kΩLEDConector P1
5VVCC
GNDGNDNegativoTerminal 1NegativoComum
D2Obturador
D3Foco
D5Terminal 1
D10TX
D12Terminal 1
RAWPositivo
RXTerminal 2Terminal 2
Terminal 2Positivo

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.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

5 Comentários

  1. 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.

  2. 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!!!!