RaspberryPi 3 Model B+でIoT監視カメラをつくる(その1ハードウェア関連) | そう備忘録

RaspberryPi 3 Model B+でIoT監視カメラをつくる(その1ハードウェア関連)

RaspberryPi(ラズパイ)でIoT監視カメラ

RaspberryPi 3 Model B+とカメラ(Raspberry Pi Camera Module V2)とモーションセンサー(HC-SR501)で監視カメラを作成したときの備忘録。

似たような機能を持った市販の監視カメラも幾つか販売されているが、それぞれちょっとずつ機能的に惜しい所がありそれならばと思い自作してみる事にした。

特に実現したかったのは、

  1. 動きがあるときだけ撮影する
  2. 撮影した画像をインターネット経由でクラウドにアップする
  3. 撮影したことをLINEで通知する

の3点。

1.は普通の監視カメラは24時間365日撮影をしているが、それをすると動画ファイルが直ぐにいっぱいになってしまうのでモーションセンサーを使って何らかの動きがあるときだけ撮影をする仕様にしたかった。

2.と3.については録画ファイルをラズパイ内に保存するだけでは無く、インターネットに接続して録画ファイルをクラウドにアップロードする同時に通知する機能を付けたかった。

いわゆるIoT(Internet of Things)を実現したいと思っていた(IoTカメラ)

同じようなことをしたい人の参考になれば幸いです

またこのページの最後に記事に関する動画を載せているので参考にしてみて欲しい。

2020/01/13 追記

風の強い日などモーションセンサーが検知してしまって何も写っていない映像を撮ってしまう事があったので機能追加を行っている。

TensorFlow(機械学習)を使って物体(人や車)が写っている時だけ映像をクラウドにアップロードする仕様にした。

またその際にLINEに画面ショットを添付する様に改良を加えた。

その時の記事はこちら

全体構成図

監視カメラシステムの全体構成図は以下の通り。

監視カメラ全体構成図

モーションセンサー(HC-SR501)にてモノの動きを感知する

動きがあるときだけRaspberry Pi Camera Module V2にて撮影する

ローカルディスクに撮影した動画を一旦保存する

尚、ファイル形式は.h264とする

GoogleDriveにファイルをUp Loadした後、ローカルディスクのファイルは削除する

Up Load処理は時間が掛かるのでファイルのコピー中に監視カメラが停止してしまうのも困るので別スレッドで処理する

監視カメラが撮影したことをLINEで知らせる

必要なハードウェア

RaspberryPi本体

RaspberryPi 3 B+本体とクリアケース、SDカード、スイッチ付き電源等必要な物が一通り揃ったセットを購入した。

自分が以前に購入したセットは既に販売終了していたので別セットのリンクを貼っておく。

尚、自分はRaspberry Pi 3B+で作成したが今ならRaspberry Pi 4Bで構築しても良いと思う。

カメラ

RaspberryPi用のカメラモジュールを購入した。

撮影場所はセンサー付きポーチライトが付いていて夜間でも明るいので通常のカメラにしたが、状況によっては夜間撮影用の赤外線カメラにした方が良いのかも知れない。

同一の商品はリンク切れになっていたので同型の商品のリンクに変更している。

モーションセンサー

モーションセンサー(HC-SR501)

2個で350円で購入しており(2019年7月時点)並行輸入品らしく10日程掛かったが無事に届いた。

また動作確認をしたが今の所2つとも正常に動いている。

同一の商品はリンク切れになっていたので同型の商品のリンクに変更している。

カメラの接続

RaspberryPi本体にカメラを接続する。

赤枠の位置にあるコネクタにカメラのフラットケーブルを方向を間違えないように接続する。

フラットケーブルのコネクタ(金属面)がある方を USB コネクターの反対側に向けて差し込む。

※青い方が USB コネクター側になる。

コネクタは両側の爪を持ち上げてケーブルを差し込んだ後に爪を下げることにより固定される。

カメラと本体との接続

左右の爪を持ち上げてからケーブルを差し込む。

左右の爪を持ち上げる

モーションセンサー

モーションセンサー(HC-SR501)の基盤の説明。

モーションセンサー HC-SR501

詳細はこちらのデータシートを参照。

コネクター

GND

GNDに接続する

Oputput

GPIO5に接続する

  • 検知:High
  • 未検知:Low

が出力される

Power

5Vに接続する

感度調整

感度を3m~7mまで調整可能

時計回りに回転させると感度が最大(7m)になる

感度、遅延時間調整

遅延時間調整

遅延時間を5秒~300秒までの間で調整する

時計回りに回転させると時間が最大(300秒)になり、反時計回りに回すと最小(5秒)になる

遅延時間とは最後にモノを検知(Output=High)してから未検知なるまでの時間

最後に動きを検知してから遅延して(少し時間を置いてから)未検知状態になるので遅延時間と表現している

ジャンパースイッチ

ジャンパープラグによって2種類のモードが指定可能

  1. シングルトリガー:上記の遅延時間が過ぎると検知範囲内に動きがあっても未検知(Output=Low)が出力される
  2. リピートトリガー:検知範囲内に動きがある限り検知(Output=High)が出力される

初期設定時はシングルトリガーになっていたのでプログラミングしやすいリピートトリガーにジャンパスイッチを変更した

シングルトリガー

シングルトリガー

リピートトリガー

リピートトリガー

CdS

CdS(光センサー)を取り付けることが出来る模様(未確認)

「暗い時だけライトを付ける」などの制御に使用することが出来る

その他の方法

尚、今回の構成ではモーションセンサーでモノの動きを感知しているがモーションセンサーを使わずにカメラの映像の前後比較から”動き”を感知するやり方もある。

具体的にはPythonのOpenCVのライブラリーでcv2.absdiffで画像の差分を取ってcv2.bitwise_andで差分画像の論理積が一定のしきい値を超えた場合に動きがあるとプログラミングで判定する方法だ。

もちろんその方法でも良いのだが色々と検証して見たかったこともあり今回はモーションセンサーを使ったやり方にしている。

接続図

RaspberryPiとカメラモジュール、モーションセンサーとの接続は以下の通り

監視カメラの接続図

カメラの有効化と試し撮り

有効化

RaspberryPiの設定を変更してカメラを有効化する。

左上のメニューー>設定ー>RaspberryPiの設定

RaspberryPiの設定

インターフェイスタブでカメラを”有効”にして再起動する。

カメラを有効にする

尚、SSHとVNCは開発中の為に有効にしている。

開発が終了したらそのままにしておくと危険なのでもとに戻すつもり。

試し撮り

この段階でカメラが正常に動作するかの確認の為、試し撮りをしてみる。

LXTerminalを起動する。

LXTerminal

コマンドラインから、

raspistill -o camera.jpg

で静止画(camera.jpg)が撮影される。

同様に、

raspivid -o video.h264 -t 10000

で10秒間の動画(video.h264)が撮影される。

動画はRaspberryPi上で再生した所、コマ落ちしてしまったがパソコン上では問題なく再生された。

尚、パソコンでの再生はVLCメディアプレーヤーをインストールして使わせてもらった。

フリーソフトで様々な環境、ファイル形式の動画が再生できるのでありがたく使わせてもらっている。

フォーカスの調整

2019/11/20追記

今回のIoT監視カメラではフォーカスは工場出荷時の状態で変更をしていないが1m以内の近距離を撮影したい時にはフォーカスを調整する必要がある。

フォーカスの調整方法を別記事でまとめた。

その他初期設定

その他、初期状態のOSから以下の変更を行った。

パッケージの更新

sudo apt-get update
sudo apt-get upgrade

上記のコマンドにてパッケージ類を最新の状態にした

ホスト名の変更

メニューから設定ー>RaspberryPiの設定、システムタブでホスト名を変更した

ホスト名の変更

デフォルトユーザpiの変更

デフォルトのユーザpiはそのままにしておくとセキュリティ上問題があるので別ユーザ名に変更した

piを変更した時の記事はこちら

固定IPの割当

無線LANのIP Addressを固定IPに変更した

再起動の度にDHCPから異なるIP Addressを割り当てられるとVNCやSSHで接続する時に面倒なのでIP固定にした

固定IPを設定した時の記事はこちら

Python3をデフォルトにする

pythonのデフォルトが2.7だったので(Kernel version:4.19)python3をデフォルトに変更した

変更した時の記事はこちら

Python IDEのインストール

OSはプリインストールされていたNOOBSからイメージファイルをダウンロード&コピーしてのインストールに変更している

その時の記事はこちら

Version:June 2019、Kernel version:4.19ではpython IDLE(Integrated DeveLopment Environment)が未インストールだったのでインストールしている

sudo apt-get install idle-python3.7

でインストールした

ハードウェアの設定、接続や初期設定についてはこれで終了。

記事が長くなったので一旦終了する。

次回以降でGoogleDriveにアクセスするための設定やLINEにメッセージを送信するための設定、pythonでのプログラミングなどを扱う予定。

次回の記事はこちら

尚、記事と同内容を動画にしているので実際の機器の接続の様子などは動画で確認して欲しい。

RaspberryPiで監視カメラ動画

カメラモジュール、モーションセンサー、RaspberryPiの初期設定などの動画

souichirou

やった事を忘れない為の備忘録 同じような事をやりたい人の参考になればと思ってブログにしてます。 主にレゴ、AWS(Amazon Web Services)、WordPress、Deep Learning、RaspberryPiに関するブログを書いています。 仕事では工場に協働ロボットの導入や中小企業へのAI/IoT導入のアドバイザーをやっています。 2019年7月にJDLA(一般社団法人 日本デイープラーニング協会)Deep Learning for GENERALに合格しました。 質問は記事一番下にあるコメントかメニュー上部の問い合わせからお願いします。

おすすめ

9件のフィードバック

  1. おと より:

    同じ様なモノを作りたかったのでPythonのプログラムなど参考になりました。ありがとうございます。

    • souichirou より:

      おとさんコメントありがとうございます。
      稚拙なプログラムで恥ずかしいのですが参考にして頂ければ幸いです。?

  2. 岡野 より:

    こんにちは!
    似た様な仕様のカメラを作成していらっしゃる方がたくさんですが、貴殿のプログラムが一番参考になりそうなので熟読しています。
    私は庭にカメラを仕込んで、動物が来た時にだけ録画でき、さらにラインで通知がくる様に組んでみたいと思っています。
    まだカメラを買っていないので、質問なんですが、↓このネットワークカメラでも設定可能でしょうか?
    https://www.amazon.co.jp/dp/B07GPLM91F/ref=cm_sw_em_r_mt_dp_PXEnFbGX3V6CN

    また、私は容量に制限のあるワイファイ環境なんですが、結構パケット食うもんですか?
    夜間、家にいる時だけ作動して観察してみたいんですが・・・・。

    お時間のある時で結構です、ご教示頂けると嬉しいです。
    どうぞよろしくお願い申し上げます。

    • souichirou より:

      岡野さん
      コメントありがとうございます。
      リンク先のカメラをラズパイのプログラムで制御するのはちょっと大変そうですね。
      カメラ本体に付いてるSDカードをラズパイから何らかの方法で参照することが出来れば
      良いのですがネットワーク越しに見ることになるのと暗号化されているみたいなので
      難しそうですね。

      有料でクラウドのストレージに映像を保管する機能もあるみたいなので、このカメラを
      使用するのであればその方法の方が良さそうです。

      パケット量に関しては解像度に寄ります。
      記事中のカメラでは1920×1080で1分間で24MByte前後です。

      また夜間であれば自分の記事のPiCameraは不向きで真っ暗になってしまいます。
      自分は使った事がまだ無いのですが「Raspberry Pi用 夜間 赤外線可視カメラ」もあるようです。
      https://amzn.to/3kMg86I
      赤外線LEDが3Wでどの程度の距離まで撮影できるかが、いまいち分かりませんが10mとか
      離れると無理なように思います。

      • 匿名 より:

        souichirou様

        回答ありがとうございます。
        なるほどそうですか….、うーん、正直なこといっていいですか、全然ピンと来ないです、はははは!!!
        でも!なんとかして作ってみます!なんとなくプログラム不要な感はありますが….
        また作成の過程で疑問がありましたら、質問させてください!
        よろしくお願い申し上げます。
        岡野

  3. Zeppeli より:

    Raspberry Piを先日初めて購入してみた19才学生です。普段はDeep learningの勉強をしているのですが、ずっとRaspberry Piやってみたくて今はとってもワクワクしています。こんな素敵なブログを書いてくださり、本当にありがとうございます!

    • souichirou より:

      Zeppeliさん
      嬉しくなるコメントありがとうございます。
      このRaspberry Piで監視カメラを作るシリーズはその8まであって、最終的にはDeep Learning(モデルはcoco)でObject Detection(物体検知)までやっていますので是非挑戦してみて下さい。
      何か分からないことがあったらコメントに書いてもらえるとありがたいです。
      今はJetson Nano 2GB Devキットで遊んでいます。
      こちらもそのうちに記事にしたいと思っていますので良ければ見て下さい。

      • Zeppeli より:

        Youtubeのほうでも拝見させていただいております。どんどん見て楽しく勉強させていただきます!

匿名 へ返信する コメントをキャンセル

名前、メール、サイト欄は任意です。
またメールアドレスは公開されません。