The Fool In The Valleyの雑記帳

-- 好奇心いっぱいのおじいちゃんが綴るよしなし事 --

撮影コントロール・システム 2

先日設計した回路で前提としたステッピングモータ・ドライバーのTB6600 を入手できたので、ステッピング・モーターとカメラをコントロールする回路を実装してRaspberry Piからテストをしてみました。

回路図中の黄色破線で囲った部分です。

テスト・プログラムはCW方向にモーターを4回転させた後フォーカスを合わせてシャッターを切る、次にCCW方向にモーターを4回転させた後フォーカスを合わせてシャッターを切る、という動作を2回繰り返すものです。本コントロール・システムが対象としているカメラは、レリーズの半押しでオート・フォーカスが働き、全押しでシャッターが切れるものですが、レリーズの半押しはレリーズ・ケーブルのGndとRを短絡すること、全押しはレリーズ・ケーブルのGndとLを短絡することに対応しているので、その2段階の動作を2個のリレーによって実現するようにしています。
テスト・プトグラムは下のリストのようにPythonで記述しました。

import RPi.GPIO as GPIO
import time

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)

PUL=12; DIR=10; ENA=8
L_RELAY=36; R_RELAY=38

GPIO.setup(PUL,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(DIR,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(ENA,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(L_RELAY,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(R_RELAY,GPIO.OUT,initial=GPIO.LOW)

DIR_SIG = 1; ENA_SIG = 1

pw = 0.00125  # pulse duration 2.5msec   400Hz
num_rev = 4
ang = num_rev * 360

cnt = int(ang / (360/200))  # 360deg  200pulse

GPIO.output(ENA,ENA_SIG)

for i in range(0,num_rev):
    GPIO.output(DIR,DIR_SIG)    
    for j in range(0, cnt):    
        GPIO.output(PUL,0); time.sleep(pw)
        GPIO.output(PUL,1); time.sleep(pw)
        
    time.sleep(0.5); GPIO.output(R_RELAY,1)
    time.sleep(1.5); GPIO.output(L_RELAY,1)
    time.sleep(0.5); GPIO.output(R_RELAY,0); GPIO.output(L_RELAY,0)
    time.sleep(1)
    
    if(i % 2 == 0):
        DIR_SIG = 0
    else:
        DIR_SIG = 1

GPIO.cleanup()


下のビデオはそのプログラムを実行した様子です。
www.youtube.com

問題なさそうです。
モーターの回転の速度、撮影のインターバルはパラメータで任意に設定できます。

                                                            • -

アイキャッチ用画像