Tangkap Tetesan Air dalam Aksi Menggunakan Arduino Nano – Fotografi Kecepatan Tinggi DIY
Komponen dan Perlengkapan
- Arduino Nano R3 – 1 unit
- Laser Module KY-008 – 1 unit
- LM393 Light Sensor Module – 1 unit
- General Purpose Transistor NPN – 3 unit
- Rotary potentiometer (umum) – 1 unit
- C&K Switches PTS 645 Series Switch – 1 unit
Aplikasi dan Layanan Online
Tentang Proyek Ini
Proyek ini lahir dari keinginan untuk mencoba bidang fotografi ini. Di bawah ini Anda akan melihat pengaturan berbasis Arduino sederhana yang saya buat untuk membuat foto kecepatan tinggi dari tetesan air.
Pertama-tama Anda harus memiliki kamera foto dengan pengaturan manual dan lampu flash eksternal, keduanya harus mendukung pengendalian jarak jauh. Saya memiliki Sony DSC-HX300 (Gambar 1) dan GODOX SY8000 (Gambar 2) dengan kabel.
Pada Gambar 2 terlihat dua kabel Arduino yang diisolasi dengan hati-hati dan dipasang pada konektor PC dari SyncCable.
Saya memutuskan untuk memodifikasi pengendali jarak jauh dengan menambahkan header 3 pin sederhana (Gambar 3).
Di dalam pengendali jarak jauh (Gambar 4) terdapat tiga spring logam (1 – «+» dari shutter; 2 – GND; 3 – «+» dari autofocus) yang mencoret dua rangkaian («2–3», kemudian «1–2») saat tombol ditekan.
Karena header pin sekarang terpasang, kita dapat meniru tekanan tombol secara terprogram menggunakan Arduino.
SyncCable bekerja dengan cara yang sama: kontak di konektor PC harus dicoret untuk memicu flash.
Tujuan saya adalah menangkap momen percikan saat tetesan air jatuh ke permukaan air.
Untuk menyederhanakan pengaturan, saya menggunakan beberapa bagian dari tetesan obat yang disatukan bersama (Gambar 5).
Modul laser KY-008 dan modul sensor cahaya berbasis LM393 akan mendeteksi tetesan air yang jatuh (Gambar 6).
Modul-modul ini dapat diatur sehingga tetesan air yang jatuh akan menghambat sinar laser sehingga memutuskan rangkaian. Sensor cahaya dapat menyesuaikan sensitivitasnya terhadap daya laser dengan memutar resistor variabel pada modul. Selain itu, modul dapat diposisikan pada jarak yang jauh satu sama lain.
Pengambilan gambar dilakukan dalam kegelapan dengan paparan lama selama beberapa detik sehingga hanya lampu flash waktu singkat yang penting untuk hasil akhir.
Diagram rangkaian ditunjukkan pada Gambar 7.
Pengaturan ini belum sepenuhnya terotomatisasi. Sebelum pemisahan tetesan yang dapat diamati, pengguna menekan tombol. Ini membuka shutter selama beberapa detik melalui mencoret kontak secara berurutan di pengendali jarak jauh oleh Autofocus Trigger dan Shutter Trigger. Tekanan tombol juga memungkinkan memicu lampu flash. Saat tetesan melintasi sinar laser, Flash Light Trigger mencoret kontak di konektor PC dan lampu flash menyala. Waktu antara melintasi sinar laser dan mencoret kontak di SyncCable disesuaikan oleh Potensiometer dalam rentang 1 hingga 500 ms. (batas dapat diubah dalam kode). Dengan cara ini, momen berbeda dari percikan dapat ditangkap. Tetesan berikutnya tidak memicu lampu flash: untuk mengaktifkan fungsi ini tombol harus ditekan lagi.
Rangkaian ditunjukkan pada Gambar 8.
Pengikat optik dapat ditambahkan pada rangkaian di atas untuk memisahkan lampu flash tegangan tinggi dari elektronika tegangan rendah.
Parameter kode utama ditunjukkan pada Gambar 9. Proyek ini didasarkan pada Arduino Nano.
Flag «DBG_MODE» dimaksudkan untuk pengaturan dan penyesuaian awal baik modul laser maupun modul sensor cahaya. Dalam mode ini, kamera dan lampu flash tidak digunakan. LED built-in papan Arduino berfungsi sebagai indikator.
Untuk menyesuaikan pengaturan, nonaktifkan komentar flag, kompilasi kode dan flash Arduino. Jika pengaturan benar, LED akan menyala saat tombol ditekan (simulasi shutter) dan mati saat tetesan melintasi sinar laser (simulasi pemakaian lampu flash).
Jika pengaturan berfungsi dengan baik, aktifkan kembali komentar flag, kompilasi kode dan flash Arduino lagi.
Kode juga berisi konstanta berikut:
- Pin Arduino tempat komponen proyek ini terhubung;
- penundaan yang diterapkan saat kontak autofocus, shutter atau lampu flash dicoret;
- batas rentang waktu yang dapat disesuaikan oleh Potensiometer.
Beberapa hasil ditunjukkan pada Gambar 10 – 12.
Kode
Untitled file
//#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) { if (allowFlash) { allowFlash = false; delay(fireDelay); fireFlash(); } } } }
Skematik