找回密碼
 註冊

DIY 高速摄影 延時控制器 水滴水花 ARDUINO SHIELD 套件

fotogearhk 發表於 2012-2-28 14:49:51 | 顯示全部樓層 |閱讀模式
使用Arduino控制板 DIY高速摄影: 高速觸發單反相機、閃光燈,觸發時間小至1ms。

可以精確控制電磁閥以產生您所需要的水滴及水滴的碰撞,輕鬆拍攝精彩異常的高速水滴圖片。

水滴水花的拍攝簡介
1、拍攝環境
在一個環境光線稍微暗一些的地方,不用是全黑,只要周圍的環境光線暗一點,沒有光源直射進相機鏡頭就可以了。
例如:書房裡,關掉其他燈光,只在遠處開一下盞檯燈,且不直射鏡頭,就可以了。

2、拍攝原理
設置相機的模式為B門。在B門模式下,相機會進行持續曝光,就像我們拍攝夜空中的星星或長時間曝光拍攝夜景一樣。
相機在長時間曝光過程中,若周圍沒有可用光線的話,就什麼也拍不下來(一片黑)。利用了這個B門功能,通過控制閃光燈的閃光時間,讓閃光燈在水花濺得最美麗的那一瞬間才閃光,這時相機就會捕捉到光線,完成曝光,所拍攝的畫面也就定格在了閃光燈閃光的那一瞬間(即水花最美麗的那一瞬間)。

3、開始拍攝
第一步:預先對焦,將鏡頭對焦到水花濺起的地方(建議手動對焦)
第二步:設置延時時間,這個時間可能要先試拍幾張後才能找出最合適的延時時間(即水花達到最美麗的那一刻所花費的時間)
建議固定每次水滴滴落的高度,這樣才好確定延時時間。
第三步:設置相機模式為B門,然後按下快門,這時相機就開始持續曝光了。
第四步:滴落水滴,控制器在經過先前設置好的延時時間後,就會通知閃光燈閃光。
閃光燈閃光後,相機獲得光線,完成曝光。
第五步:再次按下相機快門按鈕(之前千萬別開燈,避免雜光),完成拍攝。


Arduino sample 源代碼

#define CAMERA_FLASH_PIN 4  // Flash pin
#define CAMERA_PIN 5 // Camera pin
#define SOLENOID_PIN 6 // Solenoid pin

int drop1Size = 0;
int flash1Delay = 0;
int drop2Delay = 0;
int drop2Size = 0;
int flash2Delay = 0;

void captureFunc(int flag, int  numOfValues)
{
    Serial.println("captureFunc: ");
   
        digitalWrite(CAMERA_PIN, HIGH);
        delay(100);
        digitalWrite(CAMERA_PIN, LOW);
  
        digitalWrite(SOLENOID_PIN, HIGH);
        delay(drop1Size);
        digitalWrite(SOLENOID_PIN, LOW);
        
        delay(drop2Delay);
        
        digitalWrite(SOLENOID_PIN, HIGH);
        delay(drop2Size);
        digitalWrite(SOLENOID_PIN, LOW);
        
        delay(flash2Delay);
        digitalWrite(CAMERA_FLASH_PIN, HIGH);
        delay(1000);
        digitalWrite(CAMERA_FLASH_PIN, LOW);
        
   
}

void setup()
{
  pinMode(CAMERA_FLASH_PIN, OUTPUT);
  digitalWrite(CAMERA_FLASH_PIN, LOW);
  
    pinMode(CAMERA_PIN, OUTPUT);
  digitalWrite(CAMERA_PIN, LOW);
  
  pinMode(SOLENOID_PIN, OUTPUT);
  digitalWrite(SOLENOID_PIN, LOW);

  Serial.begin(115200); // open serial
  

}

void loop()
{
//  receive(); return;

  while (Serial.available() > 0)
  {
    int cmd = Serial.read();

    switch (cmd)
    {
    case ' ':
      {
        
        // assign the value to suit your needs.
        drop1Size = 40; // how long the valve is open. ( milliseconds (ms) )
        drop2Delay = 90; // the number of ms from the end of the first drop till the start of the second drop.  
        drop2Size = 30; //  the second drop size.
        flash2Delay = 400; // the number of milliseconds from the end of the second drop until the flash is triggered.
        
        captureFunc(0,0);
      
        break;
      }
   
    default:
      {
        Serial.println("Press the spacebar to trigger the flash");
      }
    }
  }
}

[ 本帖最後由 fotogearhk 於 2012-3-3 02:40 PM 編輯 ]
h0.jpg
h1.jpg
h2.jpg

評分

參與人數 4威望 +4 收起 理由
cckjim + 1 精彩內容
660 + 1 有心機
dcoloane + 1 精彩內容
man100716 + 1 精彩內容

查看全部評分

hon829 發表於 2012-2-28 17:10:54 | 顯示全部樓層
是否要在電腦上輸入delay time 即只控制電磁閥放水,而不是用sensor偵測有野落下
回復 支持 反對

使用道具 舉報

fotogearhk  樓主| 發表於 2012-3-1 00:06:51 | 顯示全部樓層

回覆 #2 hon829 的帖子

Arduino板是可堆疊的,所以你可以很容易地添加sensor。此外,多過一個電磁閥可在同一時間觸發。

你可以添加一個藍牙模塊,並使用Android設備 (eg. 我用三星手機)來無線控制延遲時間。

[ 本帖最後由 fotogearhk 於 2012-3-1 12:12 AM 編輯 ]
回復 支持 反對

使用道具 舉報

fotogearhk  樓主| 發表於 2012-3-3 14:39:51 | 顯示全部樓層

Arduino sample 源代碼

Arduino sample 源代碼

#define CAMERA_FLASH_PIN 4  // Flash pin
#define CAMERA_PIN 5 // Camera pin
#define SOLENOID_PIN 6 // Solenoid pin

int drop1Size = 0;
int flash1Delay = 0;
int drop2Delay = 0;
int drop2Size = 0;
int flash2Delay = 0;

void captureFunc(int flag, int  numOfValues)
{
    Serial.println("captureFunc: ");
   
        digitalWrite(CAMERA_PIN, HIGH);
        delay(100);
        digitalWrite(CAMERA_PIN, LOW);
  
        digitalWrite(SOLENOID_PIN, HIGH);
        delay(drop1Size);
        digitalWrite(SOLENOID_PIN, LOW);
        
        delay(drop2Delay);
        
        digitalWrite(SOLENOID_PIN, HIGH);
        delay(drop2Size);
        digitalWrite(SOLENOID_PIN, LOW);
        
        delay(flash2Delay);
        digitalWrite(CAMERA_FLASH_PIN, HIGH);
        delay(1000);
        digitalWrite(CAMERA_FLASH_PIN, LOW);
        
   
}

void setup()
{
  pinMode(CAMERA_FLASH_PIN, OUTPUT);
  digitalWrite(CAMERA_FLASH_PIN, LOW);
  
    pinMode(CAMERA_PIN, OUTPUT);
  digitalWrite(CAMERA_PIN, LOW);
  
  pinMode(SOLENOID_PIN, OUTPUT);
  digitalWrite(SOLENOID_PIN, LOW);

  Serial.begin(115200); // open serial
  

}

void loop()
{
//  receive(); return;

  while (Serial.available() > 0)
  {
    int cmd = Serial.read();

    switch (cmd)
    {
    case ' ':
      {
        
        // assign the value to suit your needs.
        drop1Size = 40; // how long the valve is open. ( milliseconds (ms) )
        drop2Delay = 90; // the number of ms from the end of the first drop till the start of the second drop.  
        drop2Size = 30; //  the second drop size.
        flash2Delay = 400; // the number of milliseconds from the end of the second drop until the flash is triggered.
        
        captureFunc(0,0);
      
        break;
      }
   
    default:
      {
        Serial.println("Press the spacebar to trigger the flash");
      }
    }
  }
}
回復 支持 反對

使用道具 舉報

keefai87 發表於 2012-8-31 14:14:55 | 顯示全部樓層
睇完都唔知點整
回復 支持 反對

使用道具 舉報

retina3c 發表於 2012-12-10 11:01:08 | 顯示全部樓層
回復 支持 反對

使用道具 舉報

2cckeung 發表於 2012-12-25 04:55:57 | 顯示全部樓層
高科技達人, 勁....
回復 支持 反對

使用道具 舉報

660 發表於 2013-1-5 01:45:44 | 顯示全部樓層
好想試整,但太難了
回復 支持 反對

使用道具 舉報

cl7 發表於 2013-1-5 07:52:29 | 顯示全部樓層

勁!!
回復 支持 反對

使用道具 舉報

暉暉sam 發表於 2013-3-6 00:36:25 | 顯示全部樓層
真係好有心機
回復 支持 反對

使用道具 舉報

skcwhs 發表於 2013-5-23 05:53:07 | 顯示全部樓層
回復 支持 反對

使用道具 舉報

cookiemerry 發表於 2013-7-19 11:59:18 | 顯示全部樓層
用連拍14fps 或video 25fps 加高快門好似易一點
回復 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

登錄 發佈 快速回復 返回頂部 返回列表