2013年6月30日星期日

Arduino : 控制數位相機的快門

如果想以一般的小 DC 來拍縮時攝影,沒有快門線要如何進行?哈!發揮 DIY 的精神,拆機殼,找到相機的快門按鈕,自己拉兩條線出來吧!家裡有一台小舅子留給小孩當玩具的舊相機,先拿它來玩一下。有了「快門線」,再結合 Arduino 或是 Raspberry Pi 上的程式碼,就可以定時讓相機拍照囉!還滿好玩的。


準備材料

本次實驗所用到的材料如下:

  • 細導線 x 2
  • 電晶體:2N2222 x1
  • 電阻:470歐姆 x 1 (家裡找不到,以 220 歐姆代替)


拉「快門線」

這台 BenQ DC5330 算好拆,而且還有空間可以藏線。家裡找不到多芯的細導線,只能拿網路線來玩。本來應該要用兩對線來分別控制對焦和快門,由於只是實驗而已,就先焊了兩條線在快門開關上。

我家的第一台數位相機 Canon PowerShot A70 也拆了!它只要動到三根螺絲就可以。有經驗了,這一次找了一條滑鼠的線,端子也留著用,更完美。



Arduino 的配置及程式

有關 Arduino 的配線如下圖所示:
Arduino 的程式碼如下:
int shutterPin = 8;  // 控制快門的腳位
int ledPin = 13;
void setup() {
  pinMode(shutterPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
  digitalWrite(shutterPin, LOW);  // 快門按鈕放開
  digitalWrite(ledPin, LOW);
}
void loop()
{
  digitalWrite(shutterPin, HIGH); // 快門按鈕按下
  digitalWrite(ledPin, HIGH);
  delay(1000); // 等待 1 秒
  digitalWrite(shutterPin, LOW); // 快門按鈕放開
  digitalWrite(ledPin, LOW);
  delay(4000); // 等待 4 秒
}
上面的程式碼每隔五秒鐘會將指定的 shutterPin 腳位設為 HIGH,使得數位相機接在 2N2222 的兩條導線變成通路,模擬快門鈕按一下的狀態。


Raspberry Pi 的配置及程式

Raspberry Pi 的配線如下所示:

Raspberry Pi 所用的 Python 程式碼如下:
import wiringpi
from time import sleep
gpio = wiringpi.GPIO(wiringpi.GPIO.WPI_MODE_GPIO)
shutterPin = 17
gpio.pinMode(shutterPin,gpio.OUTPUT)
wiringpi.pinMode(shutterPin,1)
gpio.digitalWrite(shutterPin,gpio.LOW)
sleep(1)
for t in range(10) :
   gpio.digitalWrite(shutterPin,gpio.HIGH)
   sleep(1)
   print (t+1)
   gpio.digitalWrite(shutterPin,gpio.LOW)
   sleep(4)

上面的程式碼每隔五秒鐘讓 pin 11 (GPIO 17)變成 HIGH,模擬快門鈕按一下的狀態。因為「for t in range(10) 」裡的 range 只設為 10 ,所以拍 10 張後就會停止,這部份可以依需求自己設定。


拍完的照片可以利用 PhotoCap 主選單裡的「功能」→「批次變更檔名」,將照片的檔名改為「流水號」,這樣,就可以使用 FFmpeg 來製作縮時影片。


來看看用 Arduino + Canon PowerShot A70 拍照,再以 FFmpeg 製作好的測試影片:




相關文章




沒有留言:

張貼留言

 
© 2009. Design by Pocket