#見守りカメラが欲しい。
夜間にもオペレーターなしで(無人で)連続稼働してくれるロボットを業務で扱っています。夜間無人ロボットは便利ですが時々予期せぬトラブルで夜間に停止してしまいます。朝、出社したら、予定通りの仕事を完遂していなくて、「止まったら知らせてよ」とロボットに文句を言ってなぜ止まったかを調べ改善してから再稼働します。時間と材料費がロスします。単純に設定ミスで止まることもありますが、微妙な取り上げる部品の形状誤差や位置ずれなど「確率として仕方ないか」という時もあります。
止まったら知らせてほしいのですが、ロボットにはそのような社外に送信するような機能はありません。
せめて、夜間の稼働状況を、自分のスマートフォンや自宅のPCから見たいです。
##市販の普及している見守りカメラのセキュリティが不安
離れたところの様子をWIFIとインターネットを使って監視する見守りカメラは1万円から2万円あたりで商品として普及しています。ペットなどの見守り用途で家庭に置くのだったらこれでいいと思いますが、会社内の工場、管理室や実験室に置くカメラとしては以下の2つの欠点があります。
(1)IP監視カメラのサイバー攻撃を受けたら大変。会社の信用が損なわれる。
IP監視カメラは、サイバー犯罪者にとって最大の標的となっています。システムの脆弱性を悪用してデバイスへアクセスし管理者権限を得ようとしています。サイバー攻撃者は、ひとたびIP監視カメラの管理者権限を奪うと、悪意のあるスクリプトをデバイス上にダウンロードして実行したり、カメラ内の情報をコマンド&コントロール(C&C)サーバに送信したりします。このように管理者権限を奪われてしまったら、会社の信用が損なわれてしまいます。なおこれらのマルウェア感染要因の1つとして、“デフォルトのパスワードを使い続けている”ということが挙げられますが、IoTデバイスの中には、パスワードがハードコーディングされており、利用者が変更できないだけでなく、“利用者が知り得ない”“ユーザーを無効化できない”場合もあり得ます。
参考:
[IoTにおける監視カメラの安全性をどう確保するべきか【前編】]
(https://www.trendmicro.com/jp/iot-security/special/50189)
[IoTにおける監視カメラの安全性をどう確保するべきか【後編】]
(https://www.trendmicro.com/jp/iot-security/special/50192)
IoTデバイスを狙うマルウェア「Mirai」とは何か――その正体と対策
(2)見守りカメラは、指定のアプリをインストールしてアプリから見るタイプがほとんどで、機種ごとにアプリが何しているか理解するのが大変です。画像や動画がどこかのサーバーに保管されている場合もあるがよくわからないから不安になります。ペットの写真だったら許せますが、会社の業務工程の写真は、セキュリティ上、知らないサーバーに保管されることは禁止です。
#動作が把握できるシンプルなカメラを作ろう
写真を撮影してその写真をブラウザで見るだけの簡単な機能のカメラを作ることにしました。動画撮影なし。音声なし。人感センサーなし。音声認識なし。静止画をスナップショットで撮影して離れた場所のブラウザで見るだけのものを作る。単純だし、これで目的として必要十分だし、画像がメーカーが設定したサーバーに保管されることもないし、他人が画像を見れそうにないし、サイバー攻撃も受けそうにないし、これでよいです。
#作成方法
ObnizとOV2640使用の200万画素カメラで作ることにしました。現場でWifiのSSIDをPCなし専門スキルなしで切り替える場合があるという特殊環境にあっていたからです。
以下の記事を参考にさせていただきました。異なる点は、5V供給パーツのみです。
obnizのパーツライブラリを試す:JPEGカメラArduCAMMini
##パーツ説明
obniz ボード[ホビーライセンス90日間トライアル]
¥4,950(税込み)
https://obniz.myshopify.com/collections/devices/products/obniz-board-hobby-license-90-day-trial
または
https://www.amazon.co.jp/dp/B07X1K5392/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=wicket-22&linkId=153860add76ed4f4ac6c0577ee64da78&language=ja_JP
OV2640使用200万画素カメラ フレームバッファ付き M12ピンホール B0067
[B0067]
通販コード M-13199
メーカーカテゴリ Arducam
¥3,120(税込み)
http://akizukidenshi.com/catalog/g/gM-13199/
電源用マイクロUSBコネクタDIP化キット
[AE-MRUSB-DIP]
通販コード K-10972
メーカーカテゴリ 株式会社秋月電子通商
1キット ¥130(税込)
http://akizukidenshi.com/catalog/g/gK-10972/
購入後、はんだ付け作業が必要です。楽しいですね!
ミニブレッドボード BB-601(白)
[BB-601(White)]
通販コード P-05155
メーカーカテゴリ Cixi Wanjie Electronic Co.,Ltd(慈渓市万捷電子有限公司)
130円
http://akizukidenshi.com/catalog/g/gP-05155/
ブレッドボード・ジャンパーワイヤ 14種類×10本
[165-012-000(EIC-J-L)]
通販コード P-00288
メーカーカテゴリ E-CALL ENTERPRISE CO., LTD.
1セット ¥400(税込)
http://akizukidenshi.com/catalog/g/gP-00288/
両端ロングピンヘッダ 1×40 (40P 6.1)
[PH-1x40SG(6.1/6.1)]
通販コード C-09056
メーカーカテゴリ Useconn Electronics Ltd.
1個 ¥50
http://akizukidenshi.com/catalog/g/gC-09056/
1/4インチ マウントネジアダプタ 三脚ネジ フラッシュホットシュー部品
ノーブランド品 2ペア入り プロ
¥92
amazon 1/4インチ マウントネジアダプタ
はんだ付けしますので、はんだごてとはんだも必要です。
はんだごては30W以下のものがよいです。
たとえばamazonだったらこんな電子基板用はんだ付けセット30W
#組み立て
電源用マイクロUSBコネクタDIP化キットをはんだ付けします。
この+-の表示が上にくるようにしてください。(私は、はじめ反対向きにして、プラスとマイナスが逆になって失敗して、もう1回パーツを買い直して、2回目で正しい向きではんだ付けできました。)
ブレッドボードに、両端ロングピンヘッダ12本を挿し、obnizを挿す。
obnizのio0をブレッドボートの最も左に挿します。
さらにブレッドボード・ジャンパーワイヤを写真の通り挿します。
カメラの5V電源は右の電源用マイクロUSBコネクタDIP化キットから供給しています。
obnizのio5以外をArduCAMMiniに接続します。
obnizのio0とArduCAMMiniの左端のピン(CSピン)が合うように配線します。
カメラのピン(8本)を直接ブレッドボードにグッと挿す。えいっ!
1/4インチ マウントネジアダプタ 三脚ネジをブレッドボードの裏面の両面シールの表面を丸く切って粘着させます。
microUSBを2本接続して完成(ともに5Vを供給)
obnizのwifi設定(SSIDとパスワード指定)をしてください。
#遠隔監視
以下のsnapshot.htmlファイルを作成します。
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@latest/obniz.js"></script>
</head>
<body>
<div id="obniz-debug"></div>
<img id="image">
<script>
var obniz = new Obniz("xxxx-xxxx"); //obnizIDを入力する
obniz.onconnect = async function () {
var cam = obniz.wired("ArduCAMMini", { cs:0, mosi:1, miso:2, sclk:3, gnd:4, sda:6, scl:7 });
await cam.startupWait();
const data = await cam.takeWait('640x480'); //'160x120'or'176x144'or'320x240'or'352x288'or'640x480'or'800x600'or'1024x768'or'1280x960'or'1600x1200'を指定する
console.log("image size = " + data.length + " bytes");
const base64 = cam.arrayToBase64(data);
document.getElementById("image").src = "data:image/jpeg;base64, " + base64;
}
</script>
</body>
</html>
上記のsnapshot.htmlファイルを、スマートフォンのブラウザやPCのブラウザで開くと写真撮影してブラウザに表示されます。複数のブラウザや複数のスマートフォンやPCで同時に開くことはできません。ブラウザをリロードすると再度写真撮影して、新しい写真を見ることができます。
上のhtmlファイルに現在時間表示のJavascript(今回は略)を入れておいたら撮影した時間もわかってより便利です。
ブラウザ画面には以下のような緑のラインと実際の写真が表示されます。
クラウドやファイルサーバーにsnapshot.htmlファイルを置いて、複数の人が開いて見ることもできます。前述の通り、複数の人が各自のブラウザで同時に見ることはできませんが、ブラウザはすぐ閉じるなどルールを決めておけば、複数の人で遠隔監視できて便利です。なお、snapshot.htmlをAWSのS3に保管してブラウザに読ませたら緑のラインの右側がvia internetと表示されました。
それでは、セキュリティ的に安心でシンプルな遠隔監視ライフを!!