ハードウエアプロトタイピングーGIFカメラを作る(1)ー
- 電子工作
今回から全3回の予定で、今までの電子工作シリーズの経験を活かして「GIFカメラ」の制作をしていこうと思います。
3回を通して作る物
最終ゴールは、GIFカメラで撮ったGIF画像をスマホでダウンロードしSNSでシェアする事です。
今回、GIFカメラを作る目的
前々回までの電子工作シリーズでは、Arduinoを用いて電子工作に入門してきました。最初はLチカすらままならないレベル(酷いですね。。。)からのスタートでしたが、最終的にはBluetoothモジュールを使ってMacと通信しプレゼン用のスライドを操作することができるスイッチを作る事ができました。
今回はもう一つ上を目指します。ブレッドボードむき出し状態で終わりにしないで、ガワを作り1つの物を完成させていこうと思います。
今回の制作
今回はGIF画像を生成する所まで制作していきます。
制作で使うもの
- Raspberry Pi 1 Model B+(以前購入した物を使用。セットアップ済み)
- 小型TTLシリアルJPEGカメラ(秋月より購入)
- ブレッドボード
- ジャンプワイヤー
- L字ピン
今回はスマホから画像をダウンロードするためにサーバー機能が必要となるためにRaspberry Piを使用します。
なおRaspberry PiはOSのインストールが済んでいる前提ですすめます。
カメラはいつもお世話になっている秋月電子さんからこちらを¥3850で購入しました。
iPhone5Sと比べてみました。かなり小さいです。
どのようにGIFを生成するか
今回は連続撮影をして、そこから生まれた復数のJPEG画像からGIF画像を生成します。
制作手順
- カメラをRaspberry Pi に接続
- GIF画像生成のためにImageMagickをRaspberry Piにインストール
- カメラで撮影し、画像をGIF画像に変換するコードを書く
- 実行
1.カメラをRaspberry Pi に接続
秋月電子さんから購入したカメラは、そのままだとジャンプワイヤーで接続できません。L字ピンをハンダ付けし、ジャンプワイヤーを接続できるようにします。その際に、L字ピンとカメラのピッチ(穴の幅)が合わなかったため、L字ピンを少し曲げてハンダ付けをしました。
次に、カメラの基盤に印字してある通りにRaspberry Piにジャンプワイヤーを用いて接続します。ただ、いつもRaspberry Pi のGPIOのピン番号を忘れてしまうんですね。基盤に印字してくれればいいのになぁ。。。今回はこちらのサイトさん(Raspberry PiのGPIOの配置図と基本的な説明ーものづくりエクスペリメントー)を参考にしました。
- GND -> GND(Pin:06)
- RX -> TX(Pin:08)
- TX -> RX(Pin:10)
- 3.3v -> 3.3v(Pin:01)
- CVBS -> 今回は使用しません
2.GIF画像生成のためのImageMagickをインストール
ImageMagickをRaspberry Piにインストールします。
Raspberry Piのターミナルで以下のコマンドを実行するとインストールできます。
% sudo apt-get install imagemagick
もしうまくいかないようでしたら以下のコマンドでアップデートしてからもう一度試してみてください。
% sudo apt-get update
3. カメラで撮影し、画像をGIF画像に変換するコードを書く
ここまでで接続関係は終了です。つづいて、処理のコードを書いていきます。
カメラに関しては、メーカーのサイトを探していたらライブラリーが公開されているのを見つけました。Arduino向けなども用意されています。今回はこのPythonで書かれたコードを使います。
このコードのままだと1枚のJPEG画像しか撮れないので、コードを参考にしながら新たに関数を定義したコードがこちらです。
160行目にgeneratePhotos関数を定義しました。引数に連写回数を指定して使います。
ImageMagickを使ってGIF画像を生成するコードがこれです。
makeGif関数を呼ぶことでImageMagickのコマンドを実行しています。
generatePhotos・makeGif、2つの関数を使ってGIF画像を生成します。
4. 実行
この中にあるmain.pyを以下のコマンドで実行すると撮影が始まります。
% sudo python main.py
できました!!順調です!、と言いたいのですが、
上のGIF画像を生成するのに撮影含めトータルで3分弱ほどかかってしまいました。。。。(長っ)
上のGIF画像は10枚のJPEG画像から作られているのですが
- 1枚JPEGを撮るのに10秒強(カメラからRaspberry Piにデータを送るのに時間がかかってしまう)
- さらにGIF画像を生成するのに約1分
それぞれ時間がかかっていました。
処理スピードを全く考えていませんでした。(うぅ。。。)今回は比較的安価なカメラと(メーカーサイトには連写向きじゃないってちゃんと書いていました。。。)Raspberry Pi 1 を使用したのが原因のようです。
今回の結果を踏まえて、連射向きカメラの使用とRaspberry Pi 3の使用を視野に入れた解決策を考えていこうと思います。
まとめと次回に向けて
GIFカメラを作るために、今回はGIF画像の生成をする所まで作りました。
その過程でJPEG画像生成時とGIF画像生成時それぞれの処理に時間がかかるという課題が出てきました。
次回は今回出た課題を解決をしつつ、カメラのガワを3Dプリンターを使って作っていきます。
今回の制作を終えて
今回はハードウエアというよりソフトの部分が多かったですね。
それではまた次回に!