Высокоскоростная фотография капель воды на Arduino Nano — DIY-триггер для вспышки
Компоненты и материалы
| Компонент | Количество |
|---|---|
| Arduino Nano R3 | 1 |
| Лазерный модуль KY-008 | 1 |
| Модуль светового датчика LM393 (с компаратором) | 1 |
| Транзисторы NPN (например, 2N2222 или BC547) | 3 |
| Потенциометр (вращающийся, 10 кОм) | 1 |
| Тактильная кнопка C&K PTS 645 | 1 |
| Камера с ручным режимом и разъемом для пульта (Sony DSC-HX300 в примере) | 1 |
| Внешняя вспышка с PC-синхроразъемом (Godox SY8000 в примере) | 1 |
| Кабель синхронизации (Sync Cable) с PC-разъемом | 1 |
| Пульт дистанционного управления камерой (модифицированный под 3-pin header) | 1 |
| Капельница / медицинский капельный счетчик (для капельницы) | 1 |
Принцип работы
Цель — зафиксировать момент разбрызгивания капли о поверхность воды. Съемка ведется в темноте на выдержке несколько секунд: образ формирует только короткая вспышка.
- Пользователь нажимает кнопку перед падением интересующей капли.
- Arduino замыкает цепи автофокуса и затвора пульта — камера открывает шторку на долгую выдержку.
- Капля падает, прерывая луч лазера, падающего на фоторезистор LM393.
- После задержки (настраиваемой потенциометром 1–500 мс) Arduino замыкает контакты PC-разъема вспышки — вспышка срабатывает.
- Следующие капли не вызывают вспышку — нужен повторный нажатие кнопки.
Модификация пульта камеры
Внутри пульта три пружинные контактные полоски: 1 — затвор (+), 2 — GND, 3 — автофокус (+). При нажатии замыкаются 2–3, затем 1–2. Добавлен 3-pin header для подключения к Arduino (транзисторные ключи эмулируют нажатие).
Оптическая схема детектирования
Лазер KY-008 и модуль LM393 устанавливаются напротив друг друга так, что падающая калина прерывает луч. Чувствительность LM393 регулируется встроенным подстроечным резистором. Модули можно разнести на большое расстояние.
Электрическая схема
Три транзистора NPN работают как ключи для: автофокус, затвор, синхровспышка. Потенциометр на A5 задает задержку вспышки. Кнопка на D2 (INPUT_PULLUP) стартует цикл. Датчик LM393 на D6.
Код (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); // Встроенный LED = шторка открыта
#endif
}
void fireFlash() {
#ifndef DBG_MODE
digitalWrite(FLASH_PIN, HIGH); delay(FLASH_DELAY); digitalWrite(FLASH_PIN, LOW);
#else
digitalWrite(LED_BUILTIN, LOW); // LED гаснет = вспышка
#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; // Ждем срабатывания датчика (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();
}
}
}
Режим отладки (DBG_MODE)
Раскомментируйте #define DBG_MODE, прошейте. Встроенный LED Arduino:
- Загорается при нажатии кнопки (эмуляция открытия шторки).
- Гаснет, когда калина прерывает луч (эмуляция вспышки).
Так можно отрегулировать позицию лазера/датчика и задержку потенциометром без камеры. Потом закомментируйте DBG_MODE и прошейте снова.
Результаты
Примеры фото (капли, коронки, столбы) приведены в оригинале (Fig. 10–12). Настройка задержки позволяет ловить разные фазы брызг.
Советы по безопасности
Внешние вспышки могут иметь высокое напряжение на синхроконтактах. Рекомендуется добавить оптопары для гальванической развязки Arduino от цепи вспышки.
Производственный процесс
- Умная копилка: управление монетоприёмником на Arduino Nano
- IoT и ИИ для мониторинга качества воды: защита водных экосистем
- JX Wave Generator — Генератор сигналов на Arduino с DDS AD9833 и OLED-дисплеем
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- Мониторинг температуры дома из любой точки через Arduino IoT Cloud
- Подключение Arduino Mega к GPS-модулю NEO‑6M: пошаговое руководство
- Модуль GPS u-blox LEA-6H 02: Интеграция с Arduino и Python
- Подключение датчика пульса MAX30100 к Arduino: Пошаговое руководство
- Создание приложения Fridgeye с дисплеем Nextion: пошаговое руководство
- Пошаговое руководство: подключение датчика влаги почвы YL-39/YL-69 к Arduino UNO