インカゼブログ - 中風博客

興味のあるものを紹介していきます

Arduinoでパノラマ撮影用カメラ回転ステージを作る その1

Arduinoでカメラのパノラマ撮影用ステージを作ってみました。

Arduinoを使って、といってもやってることはサーボを回転させてるだけなのですが電源の問題、回転させるステージの作成、といくつか解決すべき課題もあって、おもしろかったです。

Arduino_GoPro_Panorama0

Arduino制御のサーボが白い回転ステージを30秒間隔で90°回転させます。カメラはカメラ本体の機能を使って30秒間隔で撮影します。ので2分間で90°ずつ位置がずれた4 枚の写真が撮影されます。つなげれば時間差はありますが、360°パノラマ写真ができるということになります。

・カメラについて

GoPro HERO 2にはインターバル撮影機能(Time Lapse)がついていて、0.5~60秒の間隔ごとに写真撮影する機能がついています。このモードで30秒間隔で撮影させます。

・サーボについて

S125-1Tを購入しました。いろんなサイトで使い方が紹介されていますし、360°以上回転するものでもあったので、パノラマ撮影には最適かなと。回転させるステージは付属の白いパーツが使えそう。これにプラスチックの板をかぶせて1/4Wねじをつけました。このネジはカメラの三脚の穴にフィットするサイズなのだそうです。*2  サーボと三脚のアタッチメントも作ってもよかったのですが、秋葉原にあったスマホを固定する三脚用パーツが安かったので(500円)こちらを使用。

Arduino_GoPro_Panorama1

・電源

サーボ側はエネループ直列 x4(5.5V出てました。ってあれ1本1.2Vなのになぁ、おかしい・・・)。さらにArduino側に5.2V 700mAのスマホ用バッテリーを使いました。

Arduino_GoPro_Panorama2

Arduino

30秒間隔で90°ずつサーボでカメラ台を回転させるプログラムです。Servoライブラリを使用。6番ピンをサーボに接続しています。これでステージ90°回転→カメラ撮影(GoPro)→Arduino撮影・・・と交互に行います。

[java]

#include <Servo.h>

Servo servom;

void setup(){

servom.attach(6);

Serial.begin(9600);

}

void loop(){

servom.writeMicroseconds(700); //基準位置より90°回転からスタート

delay(30000);

servom.writeMicroseconds(700+700/3);

delay(30000);

servom.writeMicroseconds(700+700*2/3);

delay(30000);

servom.writeMicroseconds(1400);

delay(30000);

Serial.println("end");

}

[/java]

プログラム自体はシンプルなのですが、2つ問題が。

1. このサーボではwrite(angle)では角度と値が一致しないので、

writeMicroseconds(uS)  で、値と角度の対応を調べました。正確に測ったわけでなく、おおよその値ですが、233くらいの値で90°に対応していることが分かりました。

2. 0~500くらいではsleep中でもわずかに振動しながら動いてしまうため、ぶれる可能性がありました。そこで0からではなく700uS以上の値を使っています。きっとなにか理由があるのだと思います。詳しい方、どなたか教えていただけるとありがたいです。

・撮影

セットして撮影開始。3時間後、先にGoProの方がバッテリー切れしており、意外なことにサーボの方はまだ動き続けていました。

11Mピクセルで391枚、約200分の撮影でした。日没はダメだったのですが、月の方は出現してから上っていくまでの様子がばっちり撮れました。

Arduino_GoPro_Panorama4

撮れた写真、どう加工しようかな。というお話は別のエントリーで。

*1 サーボについてはこちらを参考にしました。またサーボの原理についてはこちらが非常に分かりやすかったです。

*2 この方法であれば三脚穴があるカメラなら何でもいけるということになります。GoProはハウジング入れて170g。パナのHX-WA10 230gもいけました。ところが本命だったD40は、重すぎてダメ。おそらくもっと大きなサーボを使う必要があります。カメラと回転ステージの接続については、こちらの記事を参考にさせていただきました。

* 2012.01.06 記事その2を作成しました。