Capture Gotas d'Água em Ação com Arduino Nano – Fotografia de Alta Velocidade DIY
Componentes e Materiais
| Componente | Quantidade |
|---|---|
| Arduino Nano R3 | 1 |
| Módulo Laser KY-008 | 1 |
| Módulo Sensor de Luz LM393 | 1 |
| Transistor NPN Uso Geral | 3 |
| Potenciômetro Rotativo | 1 |
| Chave C&K PTS 645 Series | 1 |
Aplicativos e Serviços Online
- Arduino IDE
Sobre o Projeto
Este projeto nasceu da vontade de experimentar fotografia de alta velocidade. Abaixo, um setup simples baseado em Arduino para fotos de gotas d'água.
Equipamento Fotográfico Necessário
- Câmera com controles manuais e suporte a controle remoto (ex: Sony DSC-HX300)
- Flash externo com controle remoto (ex: GODOX SY8000) e cabo de sincronismo


Modificação do Controle Remoto
Adicionei um header de 3 pinos ao controle remoto da câmera.

Internamente, há três lâminas metálicas: 1 – obturador (+), 2 – GND, 3 – autofoco (+). Pressionar o botão curto-circuita 2-3 (autofoco) e depois 1-2 (obturador).

Com o header instalado, o Arduino emula o pressionamento do botão programaticamente. O cabo de sincronismo do flash funciona igual: curto-circuitar os contatos do conector PC dispara o flash.
Detecção da Gota
Objetivo: capturar o momento do respingo quando a gota atinge a superfície da água.
Usei partes de um conta-gotas medicinal montadas juntas.

O laser KY-008 e o sensor LM393 detectam a queda da gota.

Posicione-os para que a gota interrompa o feixe do laser. O sensor LM393 ajusta sensibilidade via resistor variável no módulo. Os módulos podem ficar distantes um do outro.
Princípio de Funcionamento
Fotografia no escuro com exposição longa (vários segundos). Apenas o flash curto importa para a imagem final.
Diagrama do Circuito:

Sequência de Operação
- Usuário pressiona o Botão antes da gota visível.
- Isso abre o obturador por alguns segundos: Arduino aciona Autofoco e depois Obturador no controle remoto.
- O botão também habilita o disparo do flash.
- Quando a gota cruza o feixe do laser, o Flash Trigger curto-circuita o cabo de sincronismo e o flash dispara.
- O atraso entre cruzamento do laser e disparo do flash é ajustado pelo Potenciômetro (1 a 500 ms, limites alteráveis no código). Assim, captura-se diferentes momentos do respingo.
- Gotás subsequentes não disparam o flash: pressione o botão novamente para reativar.
Montagem Final

Dica: Um acoplador óptico pode isolar o flash de alta tensão da eletrônica de baixa tensão.
Parâmetros Principais do Código

DBG_MODE: Descomente para teste sem câmera/flash. LED built-in indica: acende ao pressionar botão (simula obturador), apaga ao cruzar laser (simula flash).- Pinos Arduino para cada componente.
- Delays para curto-circuitar contatos de autofoco, obturador e flash.
- Limites do range do potenciômetro.
Resultados



Código (Arduino)
//#define DBG_MODE
const byte BUTTON_PIN = 2;
const byte FOCUS_PIN = 3;
const byte SHUTTER_PIN = 4;
const byte FLASH_PIN = 5;
const byte SENSOR_PIN = 6;
const byte RESISTOR_PIN = A5;
const unsigned int FOCUS_DELAY = 100;
const unsigned int SHUTTER_DELAY = 100;
const unsigned int FLASH_DELAY = 10;
const unsigned int FIRE_DELAY_MIN = 1;
const unsigned int FIRE_DELAY_MAX = 500;
boolean prevButton, currButton;
boolean prevSensor, currSensor;
boolean allowFlash;
unsigned long fireDelay;
void openShutter() {
#ifndef DBG_MODE
digitalWrite(FOCUS_PIN, HIGH); delay(FOCUS_DELAY);
digitalWrite(SHUTTER_PIN, HIGH); delay(SHUTTER_DELAY);
digitalWrite(SHUTTER_PIN, LOW); delay(FOCUS_DELAY);
digitalWrite(FOCUS_PIN, LOW);
#else
digitalWrite(LED_BUILTIN, HIGH);
#endif
}
void fireFlash() {
#ifndef DBG_MODE
digitalWrite(FLASH_PIN, HIGH); delay(FLASH_DELAY);
digitalWrite(FLASH_PIN, LOW);
#else
digitalWrite(LED_BUILTIN, LOW);
#endif
}
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(FOCUS_PIN, OUTPUT); pinMode(SHUTTER_PIN, OUTPUT);
pinMode(FLASH_PIN, OUTPUT); pinMode(SENSOR_PIN, INPUT);
#ifdef DBG_MODE pinMode(LED_BUILTIN, OUTPUT); #endif
digitalWrite(FOCUS_PIN, LOW); digitalWrite(SHUTTER_PIN, LOW); digitalWrite(FLASH_PIN, LOW);
prevButton = digitalRead(BUTTON_PIN);
prevSensor = digitalRead(SENSOR_PIN);
allowFlash = false;
}
void loop() {
currButton = digitalRead(BUTTON_PIN);
if (prevButton != currButton) {
prevButton = currButton;
if (currButton == LOW) {
allowFlash = true; prevSensor = HIGH;
fireDelay = map(analogRead(RESISTOR_PIN), 0, 1023, FIRE_DELAY_MIN, FIRE_DELAY_MAX);
openShutter();
} else { delay(50); }
}
currSensor = digitalRead(SENSOR_PIN);
if (prevSensor != currSensor) {
prevSensor = currSensor;
if (currSensor == HIGH && allowFlash) {
allowFlash = false; delay(fireDelay); fireFlash();
}
}
}
Esquemático

Processo de manufatura
- Mealheiro Inteligente: Controlar Aceitador de Moedas com Arduino Nano
- Monitoramento de Qualidade da Água IoT e IA Protege Vida Aquática
- Gerador de Ondas JX – Oscilador DDS Compatível com Arduino com Display OLED
- Controlar um LED via Bluetooth com Arduino – Guia DIY Simples
- Monitore a Temperatura da Sua Casa de Qualquer Lugar com Integração Arduino Cloud
- Conectando Arduino Mega ao Módulo GPS NEO‑6M: Guia Passo a Passo
- Módulo GPS u-blox LEA‑6H 02: Guia de Integração com Arduino e Python
- Integrando Sensor de Pulso MAX30100 com Arduino: Guia Passo a Passo
- Construa o App Fridgeye com Display Nextion: Guia Passo a Passo
- Guia Passo a Passo: Conectando Sensor de Umidade do Solo YL-39/YL-69 ao Arduino UNO