kimagre inrash

感想を書きます

Raspberry Pi Zero W + カメラモジュール でネコ観察カメラ2代目を作る

time 2018/05/19

ネコカメラ

前回のネコカメラより2ヶ月経過。
システム的にはほぼ完成出来てますが、
    • 各部屋に設置したい
    • もっと近くで撮りたい
という欲求が出てきたため、2代目の構築を開始です。

Raspberry Pi Zero W

IMG_7042.JPG
今回は Raspberry Pi Zero W にしてみました。
Raspberry Pi Zero WH という1文字違いの製品もありますが、GPIOは当分使う予定はないのでWを選択。
製品的には一通り必要なモノがセットになってる以下の商品を選択。
Raspberry Pi Zero W Starter Kit

Raspberry Pi Zero W Starter Kit

posted with amazlet at 19.01.26
ケイエスワイ
売り上げランキング: 29,586
IMG_7045.JPG
Raspberry Pi Zero W は Raspberry Pi 3 と比較して相当ちっちゃくなってます。
スターターキットについてたケースにカメラモジュールの穴もついているのでそのまま実装出来るのもいい点ですね。
では、早速やってみましょう。
◆OSセットアップ
capture2563.jpg
まずはOS。
スターターキットに入っていたSDカードにOSインストールマネージャNOOBSが入ってます。
なので差し込んで起動させればこの画面になります。
私はOSをRaspbianにしました。(前回と一緒のOSの方がやりやすいので)
ちょっと引っかかったのはUSBポートが1つしかないのでUSBハブで拡張してキーボードとマウスを挿しましたが、対応していないのか反応せず。
しょうがないのでキーボードだけでセットアップしました。
    • TABキー押せばカーソル位置変えてSpaceでチェック
    • wキーでwifiセットアップ
    • iキーでインストール開始
capture2564.jpgcapture2565.jpg
1時間くらいで終わってました。
◆VNCセットアップ
OS起動出来たし、マウス使えるようにしようと思ってUSBハブを挿してみると、リブートがかかる。
何回やってもダメ。
うーん・・
電力が足りてないのかこのUSBハブが対応していないのか・・?
しょうがないので早々にVNCをセットアップして遠隔でマウス使えるようにすることに。
[設定]->[Raspbery Piの設定]
[インターフェイス]
VNC 有効
これでOK。
起動後、ターミナルで
$ ip a
これでIPアドレスがわかります。(真ん中あたりに記載がある)
あとはWindowsPCなどで接続すればOK。
初回接続時にパスワード聞かれるので注意。
デフォなら
ユーザー名:pi
パスワード:raspberry
もちろん早々に変えたほうがいいです。
$ sudo raspi-config
このコマンドからパスワードは変えれます。
◆IP固定
ルータ側でIP割り振りを固定するか、OS側から設定も可能です。
今回OS側からやったんですが、既に割り振っていたIPにふってしまってちょっとしたトラブルに。
最終的にルータが不安定になってしまったのでリセットしました。
◆日本語文字化け
ラズパイ画面の豆腐文字を撲滅する
ここを参考に対応。
私の環境だとCPUのパーセンテージが正しく表示されてませんでした。
もちろんインストール後、reboot。
◆カメラモジュールのセットアップ
IMG_7054.JPG
今回、カメラはUSBではなくカメラモジュールにしました。
USBカメラなら前回実装したので実績ありますが、ケース内に入れれるというのがとても利点が高い気がしましたので。
セールで40%OFFになってて1,800円ぐらいで買えました。
純正じゃないっぽいけど、まあお試しだしこの前のWEBカメラよりスペックいいのでいいかな。
初期ではzero以外のラズパイで使用するフラットケーブルになっているので付け替える必要あります。
最初このカメラモジュールに付属されているケーブルを使いましたが、長すぎるのでケース側に付属してたものにしました。
◆撮影
撮影の前にカメラを使えるようにします。
[設定]->[Raspbery Piの設定]
[インターフェイス]
カメラ 有効
設定後、リブートしたら使えます。
ターミナルで以下のコマンドを入力。
$ raspistill -o image.jpg
これだけで撮影完了。
◆カメラが認識しない
このカメラモジュール、問題があってケースにはめこむとケーブルが外れることみたいです。
そのせいでカメラが認識しなくてちょっと困りました。
(ケーブル側の問題、というよりはケースの作りに問題ありそう)
なんとかはめるものの、次は以下のようなエラーが発生。
$ raspistill -o image.jpg
mmal: No data received from sensor. Check all connections, including the Sunny one on the camera board
調べてみると以下のサイトにヒントが。
PiCam異常時の現象
電源が安定していなかったり、ケーブルがしっかり刺さっていないと出るっぽい。
何回か刺しなおしたら撮れるようになった。
でも撮れたり撮れなくなったり、かなり不安定。
image20.jpg
◆googleDrive や IFTTTセットアップ
セットアップ方法は前回と一緒。

まとめ

2度目の構築だったのですんなり出来ましたが、
カメラモジュールがかなり不安定で前回のUSBカメラ以上に苦労しました。
最終的に撮影できるようになりましたが、これは手間。
前回同様USBカメラ採用したほうが早かったな・・
Raspberry Pi Zero W はサイズが小さいので設置場所に困らないのがいいですね。
あとはgooglePhotoに上げたときにタイムゾーンが狂ってるのが気になるなあ。

追記(2018.05.22)

3日ほど運用してみての感想。
7時~23時をカメラ運用タイムにしてますが、朝チェックするとハング?してることがありました。
(厳密にはハングじゃなくてVNCが繋がらない、写真がアップされていない状態でした)
ちょっとまで原因は追えてないんですが、ネットをみたところwifiの省電力機能が働いてるんじゃ?という感じです。
一方、カメラモジュールはもう本当に安定して1分毎にしっかり撮影してくれてます。
(USBカメラは2回に1回撮影失敗するので結果的に2分毎になってしまっていた)
前回作ったネコカメラは場所を取る関係で上空に設置してましたが、今回はZEROなので地面近くに設置してます。
ネコが大きく映るのでとても満足してます。
下の写真は留守の間のネコたち。
キャットファイトが始まる??
raspi0.jpg

追記(2018.05.23)

いくつか問題が出てきたのでその対策を考えました。
    • googleDriveの容量を圧迫する
    • Zero側も撮影に失敗、もしくはアップロードに失敗している可能性
◆googleDriveの容量を圧迫する
なるべくいい品質でネコを撮りたいため、圧縮率は低めにしてます。
その結果、1枚あたりだいたい1MBぐらい消費してます。
1分毎に撮影する形にしているので日中12時間稼働させておくと・・
1MBx60分x12時間=720MBになってしまう。
CD-ROM1枚分ぐらいですね。
これが10日分となると7200MB≒7.2GB、googleDriveの保存容量15GBの半分を消費してしまうことになります。
これでは続けられない。。。
今まではgoogleDriveのファイルを【手動】で消していました。
ただ、フォルダ以下のファイルを全て選択して削除というのが出来なくて
1つずつファイル選択しながらスクロールしてまたファイル選択して・・
というのを繰り返してました。
一応これでも容量を削ることは可能です。
でも時間の無駄・・
次にフォルダごと削除してしまえば実現出来るだろうとやってみますが、
IFTTTと連携していることもあってそちらにも手を加えなくてはなりません。
(※googleDriveの特定のフォルダにアップロードがあったことを検知してgooglePhotoに飛ばすレシピを使ってます)
(※IFTTT側はパス指定なので同じ名前にすれば修正無しで一応いけます)
もっと簡単に出来る方法ないかな、ということで探したらありました。
今まではgdriveのuploadを使ってドライブに上げていましたが、普通に同期すればうまくいくんじゃない?てことです。
$ gdrive sync upload --delete-extraneous [path] [fileID]
--delete-extraneous は不要なリモートファイルを削除するオプションです。
ローカルディレクトリ内で削除されていたら、リモート上の該当ファイルも消してくれます。
これで同期が取れました。
あとはフォルダ以下のjpgをまとめて削除するシェルを作成して、撮影していない時間にcronで定期的に実行すればOK
delsync.sh
#!/bin/bash
# この.shがある箇所をカレントディレクトリにする
cd `dirname $0`
# ファイル削除
rm -f -v *.jpg
# googleDriveに同期
gdrive sync upload --delete-extraneous [path] [fileID]
注意点は2つ。
1つめは上のカレントディレクトリ変えている場所。
これがないと通常シェルを実行した場所がカレントディレクトリになるので実行した場所のjpgがまるっと消えてしまう。注意。
2つめは goodleDriveに同期する箇所のパス。
上記でカレントディレクトリが変わっているので注意。(絶対パスで入力しちゃえばOK)
◆Zero側も撮影に失敗、もしくはアップロードに失敗している可能性
googleDriveにアップされている画像の時間を見ると、1分ごと実行しているハズなのに間が抜けてたりします。
まずはアップロードに失敗している可能性を考えます。
現在、raspberry Pi 2台でネコカメラを実現していますが、cronで自動実行している関係上アップロードするタイミングが近いタイミングになることが考えられます。
googleDriveのAPIは一定時間内に同じコマンド呼ばれると弾かれるっぽいのでこれによって失敗している可能性が考えられます。
この対策として上の解決方法と同じ、同期による対応で試してみます。
その瞬間はダメでも1日のうちのどこかで同期は出来るでしょうという考え。
(今までアップロードはほぼ同時でも出来ているタイミングあったしいけるんじゃねというかなり雑な実装)
ただ、これも同期のタイミングが一定時間内に呼ばれるとダメかもしれません。
コチラはまだ実験出来ていないので結果が分かり次第。
心配なのが、今後ネコカメラが増えていった場合にエラー発生回数が増える可能性があること。
根本的に対処法考えておかないと困りそう。

追記(2018.05.28)

上記手順で対応しましたが、Zero側で問題発生。
単純に数が多くなってくるとsyncに時間がかかる、そしてハングする。
さらにIFTTTでgoogleDriveからgooglePhotoに転送する機能を使ってる兼ね合いでファイルに修正が入るっぽく、sync時にコンフリクト起こすようになりました。
致命的過ぎるので一旦前の状態に戻しました。
安定性と容量削減の両方を考えるなら別の方法を考える必要がありそうです。

追記(2018.05.31)

元に戻して数日。
今のところ、ハングするようなこともなく、ネコカメラ稼働してます。
現在、ネコカメラはraspi3とraspi0の2台で運用してますが、比較的安定しているraspi3を実験的にGooglePhotoAPIに差し替えました。
導入手順は以下参照。
たまにエラーが出ていますが、今のところ安定してる感じ。
週末にraspi0もこっちに載せ換えようと思います。

前後記事

Raspberry Pi 3 と LOGICOOL C270 でネコ観察カメラを作る
Raspberry Pi ネコ観察カメラの運用をGooglePhotoAPIsに移行する