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?
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:
- Arduino Nano/Pro Mini
- Módulo Bluetooth HC-05
- Plug P1 2,5mm
- Resistores de 220Ω, 510Ω e 1kΩ
- LED da cor de sua preferência
- Protoboard
- Jumpers
- Clip para bateria de 9V
- Bateria de 9V
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.
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
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.
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.
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.
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.
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.
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?
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.
ótimo! Obrigado pela pronta resposta
Muito bom, mas onde está o código completo do arduino com todas as funções?
Olá Jairo, que bom que gostou do Post! Já corrigimos e o código completo está disponível.
Valeu!!!!
Olá, tem que ser Arduino nano? O meu é o demilanueve!
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.