あらいさん日記(仮)

あらい日記

活動の記録

Arduinoで動かすEFレンズ

*レンズの改造には、レンズやカメラの故障といったリスクを伴います。当ブログの記事を利用することによって生じるいかなる損害についても、当ブログは一切の責任を負いかねます。

概要

Arduinoを使ってCanonのEFレンズを動かしてみました。レンズの電子接点にArduinoを接続して、信号を送ることでフォーカスリングを回転させたり、絞りの開閉を行うことができます。

電子接点

EFレンズおいて、レンズとカメラを電気的に接続している電子接点は7点あります。このうち、2点がレンズのモータの電源、5点がレンズ内のデジタルロジックの電源と通信線です。

f:id:raccoon15:20180922224930j:plain

EFレンズの電子接点のピンアサイン

SPI通信

レンズとの通信にはSPI通信を使います。 レンズにコマンドを送信することでレンズを動作させることができます。コマンドは下の表のようになります。

f:id:raccoon15:20180922194307p:plain

Canon EF-S Protocol and Electronic Follow Focus | Pick and Place

器具

使用するレンズはCanonのEF50mm F1.8 IIです。 レンズにコマンドを送信するマイコンArduino Uno R3です。

f:id:raccoon15:20180922164312j:plain

レンズの分解と電線の接続

レンズの電子接点とArduinoを接続しやすいように、レンズを少し改造します。

レンズ内の電子回路基板に手を加えれるように、電子接点がある側のネジを外して、フタをしている部品を外します。

f:id:raccoon15:20180922164315j:plain

f:id:raccoon15:20180922164319j:plain

 

次に、電線をレンズ内に入れるために、レンズの側面に穴を開けます。このとき、レンズ内の部品まで穴を開けないように注意します。

f:id:raccoon15:20180922164322j:plain

 

穴が開いたら、電線をレンズ内の電子回路基板にはんだ付けしていきます。リボンケーブルをめくると、基板とリボンケーブルがはんだ付けされている箇所があります。この箇所に電線をはんだで接続します。使用した電線は5本です。モータGND(P-GND)とロジックGND(D-GND)は電気的に繋がっているようなので1本にまとめています。また、レンズからカメラにデータを転送する信号線(DLC)は使わないので配線していません。

f:id:raccoon15:20180922164325j:plain

f:id:raccoon15:20180922164329j:plain

 

分解した部品を元に戻したら完成です。

f:id:raccoon15:20180922204530j:plain

Arduinoとの接続

EFレンズとArduinoを接続します。回路は下の図のようにしました。P-GNDとD-GNDはレンズ内部で接続しています。DLCはどこにも接続していません。レンズのモータには6Vの電源が必要なので、1.5Vの乾電池を4本使いました。

f:id:raccoon15:20180922212214j:plain

f:id:raccoon15:20180922164332j:plain

プログラム

ArduinoでEFレンズを動作させるためのプログラムを下に示します。このプログラムではレンズのフォーカスリングを回転させます。

#include<SPI.h>

void SPIWrite(byte cmd){
  SPI.transfer(cmd);
  delayMicroseconds(250);
}

void setup(){
  SPI.begin();
  SPI.setBitOrder(MSBFIRST);
  SPI.setDataMode(SPI_MODE3);
  SPI.setClockDivider(SPI_CLOCK_DIV128);
  delay(100);
}

void loop(){
  SPIWrite(0x05); //Turn focus ring to AF min
  delay(1000);
  SPIWrite(0x06); //Turn focus ring to AF max
  delay(1000);
}

結果

レンズのフォーカスリングを回転させることができました。


EF-Lens Control via Arduino

参考