アウトドア好きガジェット探求家

アウトドア好きガジェット探求家

アウトドアで使えるガジェットをメインに紹介します。

Ender3 + octolaps + 一眼レフでタイムラプス撮影してみた。

f:id:Fuu-min:20210815235511p:plain

3Dプリンターでタイムラプス撮影がしたい!

3Dプリンター「Ender3 V2」で印刷中にタイムラプス撮影をしたいなぁと思い、
あまっていたRaspberryPi3にOctoPritnを入れて、プラグイン「Octolapse」タイムラプ撮影をできるようにしました。

RaspberryPI用のカメラだと画質がイマイチだなぁ・・・

一眼レフを使いたいなぁ・・・

手持ちにNikonの一眼レフ「D3300」があるから、これでタイムラプス撮影したいなぁ・・・
調べるとプリンターのX軸にスイッチを取り付けてそれでシャッターを切る方法があるけど、
せっかくOctoPrintで3Dプリンターを制御してるんだからカメラのシャッターもRaspberryPiで制御したいなぁ・・・

Octolapseで一眼レフカメラを制御できる。。。だと!

なんとかOctolapseで一眼レフカメラを制御できないかなぁ、とOctolapseのページを眺めていると、Octolapseのカメラ設定のカメラタイプに外部カメラの項目を発見。
これは!?。。。と思い調べるてみるとなんと一眼レフカメラを制御できることを発見!!

f:id:Fuu-min:20210815234618p:plain
Octolapseの設定画面

RaspberryPiにgphoto2というアプリを入れることで対応の一眼レフカメラを制御できるらしく、それを利用してOctolapseでは外部カメラとして使うことができるとのことでした。

Octolapseで一眼レフを設定する手順

ここからは、Octolapseで一眼レフカメラを使ってタイムラプス撮影ができるまでの手順を下記の順で記載していきます。

  1. gphoto2のインストール
  2. カメラシャッターのスクリプト作成
  3. Octolapseの設定

参考サイト:https://github.com/FormerLurker/Octolapse/wiki/V0.4---Configuring-a-DSLR
前提としてOctoPirintを3Dプリンターに繋げ、OctolapseでRaspberryPiに接続したカメラを使用してタイムラプス撮影ができる状態であることとします。

1.gphoto2のインストール

OctoPrintをインストールしたRaspberryPiにSSH接続をします。
※何も変更していなければユーザー名:pi、パスワード:raspberryになっていると思います。
 パスワードは変更していなかったら変えておいたほうが良いでしょう。

f:id:Fuu-min:20210815234621p:plain
SSH接続

次のコマンドを実行します。

$ wget https://raw.githubusercontent.com/gonzalo/gphoto2-updater/master/gphoto2-updater.sh && chmod +x gphoto2-updater.sh && sudo ./gphoto2-updater.sh

インストールバージョンを聞かれるので「2」で最新の安定バージョンを選んでください。
インストールが完了したらカメラを接続して動作確認を行います。

カメラの接続認識

次のコマンドでカメラがRaspberryPiに接続されているかを調べます。

$ gphoto2 --auto-detect

カメラのシャッター操作

次はシャッターが切れるかを確認します。

$ gphoto2 --auto-detect --capture-image-and-download

撮った写真はRaspberryPiにダウンロードされるのでlsコマンドで保存されているか確認してください。

f:id:Fuu-min:20210815234625p:plain
カメラの接続確認

sudoersの設定

sudoなしでgphoto2を実行できるようsudoersファイルを編集します。

$ sudo visudo

最終行に以下の行を追加します。

# allow 'sudo gphoto2' to run without supplying a password
pi ALL = (root) NOPASSWD: /usr/bin/gphoto2

【重要】設定終了後、RaspberryPiを再起動させます。

2.カメラシャッターのスクリプト作成

Octolapseで実行するスクリプトを作成します。
スクリプトの内容は基本的にはgphoto2でカメラのシャッターを切り、RaspberryPiにダウンロードさせるものになります。
以下のパスにファイルを作成してください。

$ cd /home/pi/scripts
$ nano take-snapshot.sh

[take-snapshot.sh]

#!/bin/sh
# Put the arguments sent by Octolapse into variables for easy use
SNAPSHOT_NUMBER=$1
DELAY_SECONDS=$2
DATA_DIRECTORY=$3
SNAPSHOT_DIRECTORY=$4
SNAPSHOT_FILENAME=$5
SNAPSHOT_FULL_PATH=$6

# Check to see if the snapshot directory exists
if [ ! -d "${SNAPSHOT_DIRECTORY}" ];
then
  echo "Creating directory: ${SNAPSHOT_DIRECTORY}"
  mkdir -p "${SNAPSHOT_DIRECTORY}"
fi

# IMPORTANT - You must add gphoto2 to your /etc/sudoers file in order to execute gphoto2 without sudo
# otherwise the following line will fail.
sudo gphoto2 --auto-detect --capture-image-and-download --filename "${SNAPSHOT_FULL_PATH}"

if [ ! -f "${SNAPSHOT_FULL_PATH}" ];
then
  echo "The snapshot was not found in the expected directory: '${SNAPSHOT_FULL_PATH}'." >&2 
  exit 1
fi

作成したファイルの権限を変更します。

$ chmod +x take-snapshot.sh

作成したスクリプトが正しく動作するか確認します。

$ /home/pi/scripts/take-snapshot.sh 1 1 "" "/home/pi/scripts" "" "/home/pi/scripts/test.jpg"

Octolapseの設定

Octolapseのページを開き[Cameras]をクリックします。
f:id:Fuu-min:20210815234628p:plain
Octolapse設定のCameraタブで[Add Profile...]をクリックし新しいカメラ設定を追加します。
f:id:Fuu-min:20210815234634p:plain
以下のように赤枠の箇所を設定します。
f:id:Fuu-min:20210815234638p:plain
一度テストして正常に終了したらOKです。
f:id:Fuu-min:20210815234643p:plainf:id:Fuu-min:20210815234646p:plain

まとめ

Octolapseの使い方をまとめた日本語サイトが少なく、一眼レフを使えるように設定する手順をまとめたサイトは私の探した限りなかったので
このサイトが誰かの役に立てたら幸いです。
上記設定では一眼レフで撮った写真はRaspberryPiに保存されてカメラ本体には残らず印刷終了で自動で動画が生成されます。
もし、画像をのこして自分でタイムラプス動画を作成したい場合はgphoto2のコマンドのプロパティを変更してカメラ本体のSDにも保存されるようにすればいいと思います。
Octolapse側の設定を詰めれば単体でもクオリティーの高い動画が作成できると思うの外でも色々とイジって行きたいと思います。