ミニカメラと Seeeduino でタイムラプス撮影

 下記のミニカメラが面白そうだったので購入してみました。

www.switch-science.com

 基板部分のサイズが 28.5 mm x 17 mm x 4.2 mm、カメラ部分のサイズが 6.2 mm x 6.2 mm x 4.4 mm ととても小さいので、使い方によっては面白いものが作れそうです。今回はとりあえずタイムラプス動画を作る想定で、インターバル撮影を試してみました。

配線の準備

 今回はマイコンに Arduino Uno 互換の Seeeduino を使用します。ミニカメラのワイヤーは下記の写真のようにコネクタが接続されていますが、これだと Seeeduino やブレッドボードに配線することができません。

f:id:akanuma-hiroaki:20180507234443j:plain

 そこで思い切ってコネクタを切断してしまいます。

f:id:akanuma-hiroaki:20180507234517j:plain

 そして先端の被覆を剥がします。

f:id:akanuma-hiroaki:20180507234615j:plain

 次に錫メッキ線を半田付けします。

f:id:akanuma-hiroaki:20180507234812j:plain

 最後に熱収縮チューブでカバーすればひとまず準備完了です。これで Seeeduino やブレッドボードにも配線することができるようになりました。

f:id:akanuma-hiroaki:20180507235014j:plain

 ちなみにですが実は今回使っているミニカメラは2台目でして、1台目の時はコネクタをカットするのではなく基板に半田付けされている部分を外して他のケーブルを繋ごうと思い、下記の写真のような保護剤に覆われていた部分をカッターで削って半田ごてで加熱して外したのですが、細かく回路が密集しているところに結構力をかけてしまったりしたせいか接触の問題か、うまく動作しなくなってしまいました。保護剤を無理に削ったりはするものではないなと思った次第です。

f:id:akanuma-hiroaki:20180508075107j:plain

配線する

 それでは MiniCamera と Seeeduino を配線します。今回は単純にカメラでの撮影だけ試せれば良く、特に他のセンサーも使わないので、ブレッドボードも使わず、直接 Seeeduino に配線してしまいます。赤のケーブルは5V出力に、黒のケーブルは GND に、白のケーブルはトリガー用に13番ピンに接続します。

f:id:akanuma-hiroaki:20180507235619j:plain

 また、 Seeeduino は動作電圧を5Vにするか3.3Vにするかをスイッチで選べるようになっています。今回使用するミニカメラの動作電圧は 3.7V 〜 5V なので、 Seeeduino の動作電圧は 5V にしておきます。

f:id:akanuma-hiroaki:20180508000711j:plain

ファームウェア

 このミニカメラの撮影の仕様としては、トリガーを HIGH の状態から 0.5秒以内で LOW にして HIGH に戻すと写真が撮影され、その際に赤いLEDが短時間点滅します。撮影された写真は micro SD カードに保存され、ファイル名には連番が振られます。連番は999までで、そこに到達してしまうとそれ以降は写真が撮影されなくなります。

 また、動画の撮影も可能で、トリガーを HIGH の状態から 0.5秒以上 LOW にして HIGH に戻すと動画の撮影が開始され、撮影中は赤いLEDが点灯します。再度 0.5 秒以上 LOW にして HIGH に戻すと撮影が停止されます。

 インターバル撮影のコードは下記のようにシンプルなものです。 setup() でトリガーピンのピンモードを OUTPUT に設定し、 HIGH の状態にしておきます。 loop() では LOW にして 50ms 後に HIGH に戻して5秒間待つというのを繰り返します。つまり5秒間隔で写真を撮り続けるということになります。

int trig = 13;
int intervalMs = 5000;

void setup() {                
  Serial.begin(115200);

  pinMode(trig, OUTPUT);         
  digitalWrite(trig, HIGH); 

  Serial.println("MiniCamera is ready.");
}
 
void loop() {
  digitalWrite(trig, LOW);   

  delay(50);               
 
  digitalWrite(trig, HIGH);   
  
  Serial.println("Shoot.");
 
  delay(intervalMs);               
}

 写真の解像度は 1280 × 720 で、例えば下記のような写真が撮れます。

f:id:akanuma-hiroaki:20180508080631j:plain

 ちなみに動画の撮影は例えば下記のようなコードにすると、10秒撮影して10秒待つ、というのを繰り返すことになります。

int trig = 13;
int intervalMs = 10000;

void setup() {                
  Serial.begin(115200);

  pinMode(trig, OUTPUT);         
  digitalWrite(trig, HIGH); 

  Serial.println("MiniCamera is ready for video.");
}
 
void loop() {
  digitalWrite(trig, LOW);   

  delay(600);               
 
  digitalWrite(trig, HIGH);   
  
  Serial.println("Shoot.");
 
  delay(intervalMs);               
}

タイムラプス動画作成

 ミニカメラ + Seeeduino で今回行っているのは写真のインターバル撮影までなので、撮影された写真からタイムラプス動画を作成するには他のアプリなどを使う必要があります。詳細は割愛しますが、例えば Panolapse というアプリを使うと JPEG 画像からタイムラプス動画を作成できます。出力解像度1280×720 HDまでなら無料で使うことができます。

www.panolapse360.com

 例えば10秒間隔で55枚撮影した画像から作成したタイムラプス動画は下記のような感じになりました。

まとめ

 今回はとりあえず筐体もバッテリーもなしでインターバル撮影してみただけでしたが、バッテリーと一緒に小さい筐体に収めればかなりコンパクトになるので、例えばロボットのプラモデルとかに収めて目のところにカメラを配置したら面白そうかなと思いました。撮影枚数上限が1,000枚なのと、保存先がミニカメラの micro SD カードなので、ファームウェアから画像を操作することは難しそうなため、遠隔地に配置して色々やるみたいな用途には向かなそうですが、手元に置いておいて遊ぶデバイスに使う分には楽しそうです。