Arduino Nanoで水滴を高速撮影 – DIYハイスピードフォトグラフィ
概要
水滴が水面に衝突する瞬間の「冠(クラウン)」や「柱」といった微細な現象を、Arduino Nanoでタイミング制御して撮影する装置を自作します。カメラのバルブ撮影(長秒露光)中に、レーザー光線を遮断した水滴をトリガーとしてストロボを発光させ、瞬間を凍結させる仕組みです。市販の高速撮影キットを買わず、手持ちのカメラ・ストロボ・Arduinoで実現できます。
必要な機材・パーツ
| 項目 | 詳細 | |
|---|---|---|
| カメラ | マニュアル露出・リモートシャッター対応(例:Sony DSC-HX300) | |
| ストロボ | PC端子またはシンクロコード対応(例:Godox SY8000) | |
| Arduino Nano R3 | 1個 | |
| レーザーモジュール KY-008 | 1個 | 赤色レーザー、5V駆動 |
| LM393 光センサーモジュール | 1個 | レーザー受光側、感度可変VR内蔵 |
| 汎用NPNトランジスタ(2N2222等) | 3個 | カメラAF・シャッター・ストロボ駆動用 |
| 可変抵抗 10kΩ | 1個 | ストロボ発光遅延(1〜500ms)調整用 |
| タクトスイッチ(C&K PTS645等) | 1個 | 撮影シーケンス開始トリガー |
| リモートシャッターケーブル | 1本 | カメラ側コネクタに合わせて改造 |
| PCシンクロコード | 1本 | ストロボ側、先端をArduino接続用に加工 |
| 点滴セット(注射器・チューブ・針) | 1式 | 水滴生成用、高さ調整可能なスタンド推奨 |
仕組みと回路
光学トリガー
レーザーモジュールとLM393モジュールを向かい合わせに配置し、水滴がレーザー光を遮断するとセンサー出力が変化(LOW→HIGH)するのを検知。モジュール上の半固定抵抗でレーザー出力に合わせた感度調整を行います。
カメラ・ストロボ制御
- AF端子(フォーカス):トランジスタでGNDに落としてAFロック
- シャッター端子:AFロック後、ショートしてバルブ開放
- ストロボPC端子:水滴検知後、可変抵抗で設定した遅延時間経過でショートして発光
全てトランジスタのコレクタ・エミッタ間でショートさせる「ドライ接点」駆動のため、カメラ/ストロボ側の電圧に依存せず安全です。高電圧ストロボ対策としてフォトカプラ(PC817等)を入れるとより安心。
撮影シーケンス
- 暗室でカメラをバルブモード(例:f/16、ISO100、数秒露光)に設定
- タクトスイッチを押す → AF ON → シャッター開放(バルブ開始)
- 水滴が落ち、レーザー遮断検知
- 設定遅延時間(1〜500ms)後、ストロボ発光
- 露光終了、次の撮影は再度スイッチを押すまで待機
コードのポイント
// デバッグモード(カメラ/ストロボなしでLED点滅で確認)
// #define DBG_MODE
const byte BUTTON_PIN = 2; // タクトスイッチ
const byte FOCUS_PIN = 3; // AFトリガー
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; // AF待ち ms
const unsigned int SHUTTER_DELAY = 100; // シャッター開放保持 ms
const unsigned int FLASH_DELAY = 10; // ストロボパルス幅 ms
const unsigned int FIRE_DELAY_MIN = 1; // 最小遅延 ms
const unsigned int FIRE_DELAY_MAX = 500; // 最大遅延 ms
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
}
map(analogRead(RESISTOR_PIN), 0, 1023, FIRE_DELAY_MIN, FIRE_DELAY_MAX) で可変抵抗の値を1〜500msの遅延に変換。水滴検知後のこの遅延を変えることで、「衝突直前」「冠が広がった瞬間」「柱が立った瞬間」など狙ったフェーズを撮影できます。
調整・撮影のコツ
- 暗室必須:環境光が入るとストロボ光以外も写り込むため、完全暗闇で作業
- レーザー光軸合わせ:センサーモジュールのVRを回し、レーザーが当たっている状態で出力がLOW、遮断でHIGHになるギリギリに設定
- 水滴サイズ・落下高さ:点滴セットの高さと流量で水滴径・落下速度が変わるため、遅延時間のスイートスポットを探す
- ストロボ光量・距離:ガイドナンバーと絞りで適正露出を計算、必要ならNDフィルターやストロボ出力調整
- ピント合わせ:予想衝突点にペン先等を置き、AFロック後MFに切替、またはマニュアルフォーカスで固定
撮影例
添付画像(Fig.10〜12)のように、冠が綺麗に開いた瞬間、二重冠、柱状のリバウンドなど、遅延時間を変えるだけで多彩な表情が撮れます。
参考ファイル
- 完全なスケッチ:添付コード欄(Arduino)
- 回路図:添付画像2枚(ブレッドボード図・回路図)
製造プロセス
- スマート貯金箱を作ろう:Arduino Nanoでコインアクセプターを制御
- IoTとAIで水質監視し水生生物を守るシステム
- JX Wave Generator – Arduino互換DDS発振器(OLEDディスプレイ搭載)
- ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
- Arduino Cloud連携でどこからでも家の温度を監視
- Arduino MegaとNEO-6M GPSモジュールの接続:ステップバイステップガイド
- u-blox LEA-6H 02 GPSモジュール: Arduino & Python 統合ガイド
- MAX30100脈波センサーをArduinoで活用:ステップバイステップガイド
- NextionディスプレイでFridgeyeアプリを構築:ステップバイステップガイド
- YL-39/YL-69土壌湿度センサーをArduino UNOに接続するステップバイステップガイド
- Arduino UNOとEthernetシールドで太陽放射を測定する自作ピラノメーター