![]()
28.人感・防犯カメラ (2021.6.16-2023.11.6)
前項で人感センサー(HC-SR501)を使いましたが、なかなか面白いセンサーなので再び取り上げます。今回は人が接近すると、カメラで静止画または一定時間の録画を行う装置を作ります。と言っても、カメラはRasPi標準のコネクタが実装されていますし、人感センサーもGPIOを使って3本結線するだけなので、ハード的には極めて簡単に実現できます。最終的には防犯カメラとして活用したいので、まずは基礎的な技術をマスターしたいと思います。
人感センサーの電源はVCC=5VとGNDに、出力はGPIO23(16ピン)に接続します。手洗い装置と同じピン接続に合わせたので、検出プログラム部分をそのまま流用できます。検出すると端子が"H"レベルとなりプログラム上では値"1"が取得できます。
「18.カメラ(オプション)の使用」でPiカメラを使えるようにしましたが、今回は別のRasPi(バージョン3、モデルB)で実験する運びとなり、現時点の最新版Raspberry OS(Raspberri Pi Imager)をインストールしました。ところがCV2ライブラリを使いたくてpip3をインストールしたところ、バージョンの不整合が起きたようでPythonでプログラムを実行するとエラーが出る状況になりました。色々トライしても解決策が無く、最終的に少し古いNOOBSのバージョン3.2.1にしたのですが、それでもエラーは解消されませんでした。以前になぜうまくいったのかよくわかりませんが、とりあえずCV2を使うのはあきらめて、オーソドックスなpicameraのライブラリを使うことにします。静止画と動画のテストプログラムは以前に紹介したものと同じです。毎度のことで恐縮ですが、実行時の拡張子はtxt→pyにします。
1.静止画保存プログラム(jpg)
2.動画保存プログラム(H264)
撮影できることがわかったところで人感センサーをトリガーにして、一定時間(5秒間に設定)の映像ファイルを保存する度にタイムスタンプ付きのファイル名にして、どんどん保存していくようにします。そうすれば、いつ撮影が行われたか把握できるため、防犯用としての役割を果たすことができます。将来的には画像自体でも動きを検出できるような処理を加えたいところです。人感センサーでは赤外線によって人の動き等は捉えられますが単なるモノの動きは捉えられないので、双方の特長を活かして監視を強化できると考えています。
撮影中はセンサーの検知を無効にしておき、録画終了で再び検知を有効にしています。モーションを検知し続ける限り、次々に録画ファイルが増えていくわけです。このままでは際限無くファイルが増え続けて容量を圧迫していくので、上限を決めた上で最も古いファイルから消していく機能が必要です。その対策を施したのが次のプログラムです。
しかし、実際に運用するとなると、これでは機能が十分とは言えません。そこで追加すべき機能を考えてみます。
1.一連の録画取得において、最初に録画したファイルをメール添付でスマホ等に送る。(あまり多くなると困るので、連続して送らないよう制限する)
→ メールを送ってから10分間は録画はしてもメールは続けて送らない。(人感センサーが検知している間は、繰り返し録画は続ける)
2.不審者への警告のために光と音でアラームを発する。
→ 警告するかどうかを選択可能にする。
3.夜の闇の中や暗い場所でも撮影できるように、カメラを赤外線カメラに変更する。(赤外線投光器も必要)
→ 対応するカメラに変更する。できれば暗闇では赤外線での録画の後にライトを点灯し、モノクロでは無く鮮明なカラー映像録画に切り替えるモードも用意したい。
1.は他の方が作ったプログラムを参考にさせてもらい実装、2.は警告用のLED(パトライトのようなもの)とサイレン音をハードに追加して実現、3.は記載通り。努力目標は追って検討します。設定用のウインドウはTkinterを使うため、専用のスレッドを実行します。また、メール送付判定のためにも別のスレッドを立てます。スレッドによって並列処理させることで、今回の防犯カメラのソフトの機能を実現しようと思います。
3.ですが、100均でかなり強力なスイッチ付LEDライトを見つけたので、これを撮影用に利用することにしました。夜の暗闇で侵入者を検知した場合、まずは赤外線照射の中で相手の動きを録画します。赤外線での撮影はモノクロで鮮明さにも欠けますが、無防備で動く相手の全貌を捕らえやすいメリットがあります。しばらく撮影すると、このLEDライトを点灯して照明環境でのカラー撮影に切り替えます。突然のライトに侵入者は一瞬何が起こったかわからず、唖然とたたずむことでしょう。そこを動かぬ証拠としてしっかりと録画して残すわけです。その後、警告を発すべきかは慎重に検討する必要があります。もしかすると撮影されたことを知った侵入者は、証拠隠滅のため家に火を付ける等の暴挙に出るかもしれません。安全を考えれば、あまり刺激しない方が良いようにも思います。一方で積極的にアラーム等で撃退した方が良い場合もあるでしょう。本機能は使用時に判断するとして、念のため機能としては搭載しておこうと思います。
今回製作した防犯カメラの正面写真です。ケース付きのRasPi本体を活かし、2ミリ厚のプラスチック板から切り出したパネル(黒で塗装)にカメラと人感センサーを取り付けたものを、両面テープを使って貼り付けています。正面から見るとレイアウトが良くわかると思います。部品がむき出しなのは好みが分かれるところでしょう。カメラの左右の丸いものは赤外線LEDで、暗闇で発光して物体を照らすと、カメラはモノクロ映像として撮影します。カメラの左下に見える丸いものが人感センサーです。カメラはクッション付の両面テープでパネルに貼り付けています。
参考までにパネルは次のようなもので、各パーツに合わせて穴や切り欠けを加工してあります。
続いて上面から。照明用のライトをON/OFFするリレーユニットを、クッション付の両面テープでケースに貼り付けています。リレーはGPIO24(18ピン)に接続しています。これも手洗い装置と同じピンに合わせています。
後部から見た図です。カメラのフィルムケーブルは、パネルの切り欠きから表に取り出しています。
最後にLEDライトです。4連の白色LEDはかなり明るいものですが、これで光量が不足するならもう1基ライトを追加するつもりです。電池は単四を3本(4.5V)内蔵し、前面の透明窓を押すとLEDが点灯するようになっています。これを少し改造し、電源はACアダプタを使って外部から取れるようにしました。点灯スイッチからも並列にリードを取り出して、外部でLEDをON/OFFできるようにしておきます。本体上部に取り付けたリレーユニットは、RasPiでこの操作をするためのものです。LEDライトは普段は暗闇で手動点灯して利用すれば良いでしょう。
LEDライトの駆動回路は次の通りです。ユニット内にLEDを4個搭載しているため、実際のユニット部分の回路は図とは異なります。分解したところ抵抗は1キロオーム、LEDは並列に4個並んでいて、抵抗と直列に接続されていました。スイッチは電源+側に入っていて、今回のようにリレーでON/OFFするなら関係無いですが、FETでスイッチングするなら図のようにGND側に入るように改造する必要があります。
実は、このライトを暗闇で点灯してカメラ映像を確認したところ、赤外線モードのままになっていることがわかりました。明るいと思ってもこの程度では光量が全然足りないようです。恐らくダブルで点灯しても不足は補えないと予想されるため、ビデオ用の強力な投光器を導入することにしました。それが次に示すLEDビデオライトです。128個の白色LEDが一斉に点灯してかなり明るい印象です(まぶしくて直視は困難)。ただし、仕様によるとセンター光束で800ルクスとのことなので、近距離であれば目的を果たせそうですが、数メートル先となるとやや心もとない気もします(比較の参考までに、自宅室内の電灯の下で2000ルクス程度)。採用したビデオライトは9Vで駆動するもので、128個のLEDが並列と直列を組み合わせる形で接続されているものと思われます。回路は上記のものを踏襲する形になります。
このビデオライトは単三電池×6個=9Vまたはカメラ等に使用するリチウムイオンバッテリーで駆動できます。楽天市場で丁度半額セールをやっていて、たまたま目に留まった安価なものをポチりました(送料・税込989円)。これを外部電源で使用できるように電池端子の両端にリード線を取り付けます。手持ちのACアダプタ(9V、2A)で駆動できることを確認し、前に実験したLEDライトの代わりにリレーに接続します。光量はビデオライト側面のボリュームで可変できるので、適当なレベルで運用します(通常は光量最大で使用)。明るい環境では投光器が点灯しないよう、照度センサーによるモニタリングも追加しました。
警告灯はパトライトのような回転灯にしたかったのですが、点滅するだけの単純なタイプで安価なものがあったので採用しました(送料・税込480円)。それにしても、このところ部品類はほとんどamazonで買い付けているのですが、その価格の安さには驚きます。警告灯(品名:フラッシュライト)も送料・税を除けば200円程度なので、これで利益が出るのかと疑問になります。100円ショップで購入する感覚なので手軽ではありますが・・・。
投光器のオン/オフにはリレーモジュールを使いましたが、ちょうど前に仕入れた手持ちが無くなったので、警告灯用に新たにパワーMOS-FETを使用した電子式のスイッチングモジュールを入手しました。amazonで5個セッで800円程なので、リレーモジュールと同等かやや安い感じです。
警告灯の電流値はさほど多く無いし、短時間点灯するだけなので、このような放熱器の無いものでも大丈夫でしょう。小型で消費電力も小さいため、制御対象を完全にアイソレートしたい用途以外はMOS-FETのモジュールを積極的に採用するつもりです。
参考)フォトカプラによって完全アイソレートを実現したMOS-FETのモジュールもあります。
警告を更に強化するため、警告音も同時に鳴らすようにします。RasPiのアナログ音声出力を使うため、増幅するためのアンプを追加しました。これも安価なモジュールがamazonにあったので利用します。3W×3Wのステレオアンプで2個セット430円でした。警告用なのでモノラルで構わないのですが、丁度手頃なものが目に留まったので採用した次第です。電源の5Vはなるべくノイズを避けるため、投光器の9V電源から5Vの三端子レギュレーターで取り出しています。せっかくなので単独のステレオアンプとしても使えるように配慮しました。アンプモジュールはスイッチ付きのボリュームが付いているため、これだけで超小型のアンプが作れる優れものです。
最終的に投光器と警告関連装置の回路は次のようになりました。
周辺装置回路図
警告装置の全体像はご覧の通りです。スピーカーは100均のものなので高音質は望めませんが、そこそこの音で鳴ってくれます(価格を考えれば上々)。RasPiとはコネクタで分離できるようになっています。コネクタから電源供給すれば、上述したようにステレオアンプ単体として利用することができます。
警告音のファイルを再生するには、pygameモジュール(Pythonでコンピューターグラフィックスとサウンドを扱うもの)を導入します。
音声出力サンプルプログラム
音声再生部分のpygame.mixer.music.play(1)において、play(-1)にすると無限ループで再生を行います。本システムでは警告音を発する際に無限ループでの再生を実行して、録画終了と同時に再生停止を行います。初期の計画ではハードウェアで録音/再生機(あらかじめ警告音を録音)を追加するつもりでしたが、RasPiでPythonによる音声出力の方法が分かり、ソフトウェア方式を採用することにしました。
音声切り替えは、デスクトップ右上のスピーカーアイコンを右クリックし、出力先の選択肢からAV Jackを選びます。通常はHDMIが選択されていると思いますが、これでイヤホンジャックからサウンドが出力されるようになり、アンプを通して警告音を発することができます。
実は防犯カメラ本体部分のレイアウトには、欠陥があることに後から気付きました。人感センサーがカメラの両サイドにある赤外線投光器の熱(大電流を流すためにかなりの熱を放出する)を感知して、誤動作を起こす可能性があるのです。直接問題が発生したわけではありませんが、対策としてフレネルレンズの上にカバーを付け、センサーが余計な熱源を感知しないようにした方が良いかもしれません。
<追記(2023.11.6)>この人感・防犯カメラのプログラムは、仕様も含めて不完全な状態だったため、GARDEN-TECのプログラミングに並行する形で改修を進めました。GARDEN-TECの詳細は「42.庭の見張り番(GARDEN-TEC)」をご覧下さい。
![]()