治安がよいといわれた日本でも近年では凶悪犯罪が増えてきました。住宅への空き巣や強盗も多く発生しています。そこで今回は窓に取り付ける、侵入防止の防犯センサーを作ってみました。それ自体は侵入を阻止する機能はありませんが、侵入を躊躇わせる効果が期待できます。何もしないよりはあったほうがいいですからね。


目次

概要
センサーのしくみ
デバイスの選定
消費電流の測定
プログラム (子機)
ケースの組み立て
設置
操作方法
親機の作成
最後に


概要

我が家ではすでに窓に開閉センサーが付いていて、窓を開けるとアラームが鳴るようになっています。しかし窓を開かずにガラスを割って侵入してきたら、この開閉センサーは何の役にも立ちません。今回重点的に警備したいのは、明かり取り用の小窓と勝手口のドアです。

小窓は外からは開けられない構造になっており、侵入するならガラスを割るほうが簡単です。勝手口のドアにも換気用の大きなガラスの開口部があり、ドアを開けなくてもガラスを割れば簡単に侵入できます。どうしてYK…住宅設備メーカーは玄関ドアは無駄に頑丈にするくせに、それ以外の場所はこんなにも脆弱なものを作るんでしょうね…。開閉センサーではカバーしきれない部分をカバーしていきたいと思います。

目次へ戻る▲


センサーのしくみ

検知方法

ガラスを破られたことを検知する必要があります。振動センサーで強い衝撃を受けるとアラームが鳴るセンサーもありますが、ガスバーナーで穴を開けられたら反応しない可能性があります。そこで窓の間にバーを設置して、そのバーが外れたらアラートを出す方法を考えました。

最初に電線でつなぐ方法を考えました。電線を切られれば導通しなくなるので検知もしやすいですね。しかしこの方法だと外観は最悪です。電線は微妙に垂れ下がり、窓は開けられません。

そこで考えたのがマグネット式のバーです。バーが落ちたらアラームが鳴るようにします。バーは1mmのステンレス線を使用するので垂れ下がることもなく、細いので目立ちにくく見た目も悪くありません。今回使用したバーは ユニホビー ステンレス線 SM400-10 です。これを固定するためのホルダーを3Dプリンターで作成しました。

上が壁側に取り付けるホルダーで、下がバーとそれを固定するクリップです。使用時は以下のようにホルダーにはめ込んで設置します。

右側のバーのクリップの中にはマグネットが埋め込まれています。一方、右側の壁に付けるホルダーにはリードスイッチが埋め込まれています。これによりバーが取り付けられている状態のときは導通がオンになります。これが外れるとオフになるので、オフになったらアラームを出すというのが基本的な動作です。

片側が先に外れるしくみ

ここには一つ工夫がしているところがあって、マグネットがある側が外れやすくなっています。ここは単にホルダーに乗っかってるだけではなくて、日常の使用で落ちないように内側に小さな突起が付いています。侵入者が外から入ってくるとこのバーが押されるわけですが、マグネットがある側だけが落ちずに反対側が外れてしまうとアラームが鳴りません。そこで片側を強くして、押されたときに先にマグネット側が落ちやすいようにしています。

引っ張れば両方とも外せるので、窓を開けたいときも手間がかかりません。これがワイヤー式だと窓を開けるたびに取り外さないといけないですからね。

目次へ戻る▲


デバイスの選定

次はコントローラーの選定を行います。外部電源を使わずに乾電池で駆動する仕様とします。電池交換も手間にならないように、最低1年以上持ち、2年の動作を目標とします。この時点で私が大好きなEPS32は脱落です。今回は以前にBLEキーボードの製作で使用したnRF52840にしました。

今回使用するのはSeeed Studioの XIAO nRF52840 (XIAO BLE) です。切手大の小ささで、1.7V~定電圧でも動作、消費電流はアイドル時で2.16uAという超省電力なマイコンです。mAじゃなくてuAです。これなら乾電池駆動で2年動作できそうです。

目次へ戻る▲


基板の設計

今回はオリジナル基板を作ることにしました。

回路設計

主要なパーツはXIAO (nRF52840)と電子ブザー、LEDです。ブザーは秋月電子で購入したPB03SD12で、中に発信回路が入っているので電圧を加えるだけで音が鳴ります。しかしどのくらいの音量なのかがわかりません。そこでいろいろな電子ブザーを買い集め、低い電圧でも一番音が大きくて周りに響いたこの製品を選びました。実際に聞いてみると音の響き方とか全然違うので、実際の使用環境で確かめるのがいいです。

LEDはアラーム時は点滅して威嚇し、通常時は数秒に一瞬だけ光って存在を知らせます。赤色の超高輝度タイプのOSR5PA5A33A-1MAにしました。このLEDは30mAまで流せるのですが、滅茶苦茶まぶしいです。侵入者がガラスを割ろうとしているとき、「中に何かあるぞ、この家やべーな」って思わせるのが狙いです。

LEDとブザーは電流値が大きいのでマイコンに直接接続することはできません。そこでN-ch MOSFETの2N7000TAを使って駆動しています。

そのほかの回路は操作用のボタン、最大4chのセンサー入力、BLEアドレス選択です。今回は1つのコントローラーに対して2つのセンサーを使用しますが、空いているところにセンサーが繋がってないとアラームが鳴ってしまうので、半田ジャンパーで無効化できるようにしました。BLEアドレスも半田ジャンパーがあります。BLEで親機と通信するようになっていて、このジャンパーで複数の子機を識別できるようになってます。

電源の検討

nRF52840は1.7V以上で動作するので、1.5Vの乾電池なら2本、3Vコイン電池なら1個で動作します。以前製作したCR2032で動作するキーボードはバッテリーが3か月くらいしか持ちませんでした。今回は2年を目指すのでコイン電池では難しそうです。そうすると選択肢は単3 x2か、単4 x2になります。

電池ケースのサイズは単3が31 x 57mm、単4が20 x 52mmでした。アルカリ乾電池の容量はAIによると、単3形は約1,700〜3,000mAh、単4形は約700〜1,200mAhだそうです。今回使用するブザーは大音量なタイプでサイズが大きく、基板を含めた高さが単3乾電池ほどになってしまいます。そうすると単4サイズで小さくするメリットがなくなります。容量も大幅に減るのなら単3でいいやって感じです。

設計ミス?

電流制限抵抗は回路図では100Ωになっていますが、これは計算ミスで、本当は30Ωくらいが狙いでした。秋月電子のLEDの抵抗値計算ツールで計算すると(こんなのあったんだ)、VF=2V、電源電圧2.9VでIF=30mAを流す場合、抵抗値は30Ωです。試しに抵抗を変えてLEDを点灯させてみたところ、100Ωでも33Ωでも明るさの違いは感じられませんでした。直視できないほどの爆光で、物に光を当てるとしっかり影ができるほどです。

一方で電流値は100Ωだと実測で8.7mAで、33Ωだと18mAくらいでした。明るさがほとんど変わらないなら無理に変えなくてもいいかな。むしろもっと抵抗値を大きくしてもいいかもしれません。とりあえず回路図通りで進めることにします。

PCB設計

次は基板の設計です。横幅30mmで電池ボックスとほぼ同じサイズにしました。縦は70mmです。これを電池ボックスと合わせると結構長くなってしまいますね。基板の製造はJLCPCBに注文しました。自分で面付けするか迷いましたが、注文ページで面付け設定するのが簡単そうだったので、1×3でVカットラインを入れてもらいました。

出来上がった基板

10日ほどで設計通りのきれいな基板が届きました。9x7cmの基板5枚で$6.6、送料$7.5、このクオリティのものがこの値段で作れるのってほんとにすごいですね。

部品の実装

基板に部品を実装しました。自作基板にパーツが実装される様子は何度見ても感動です。あんなに苦労して作った基板がやっとここまできたかぁ。電池ケースとリードスイッチの配線も接続します。

実はXIAOはバッテリー端子が背面にあって、電源は背面から給電しなくてはなりません。この仕様が基板に実装するときに厄介なのです。

今回はここにスルーホールを作って穴にはんだを流し込む作戦にしました。表面実装のXIAOをはんだ付けする際は、まず最初にこの位置を合わせてはんだ付けします。ちょっとこれは良くない設計でした。うまくはんだが流れず接触不良になりがちでした。温度変化で基板が収縮して外れる可能性もあります。本当はこの周辺に大きな穴を開けて、基板上に設けたランドと接続するほうがよさそうです。

増産

たくさん作ってみました。

めっちゃ疲れた…。途中で部品が足りないことに気づいて、開発用基板から拝借してきたり、間違えてXIAO BLEではなくXIAO BLE Senseを実装してしまったボツ基板を使ったり、電池ボックスも足りないし接触不良起こるしなんかもういろいろ大変でした。

KiCadファイルのダウンロード

今回作成した基板のKiCadのファイル(SchematicとPCB)は GitHub にアップしました。

目次へ戻る▲


消費電流の測定

目的

乾電池で2年間作動させるために、デバイスの消費電流を測定して、どのくらいの間隔で動作させたらいいかを決めたいと思います。XIAO BLE nRF52840の消費電流は 以前にも 測定しました。通常このような長期間作動させるデバイスではDeep Sleepを使います。しかしこのデバイスは無視できるほど消費電流が低いので、今回はdelay()関数を使ったLight Sleepを使用することにしました。

各動作をどのくらいの間隔で、どのくらいの期間実行するかを決めなくてはなりません。その値が大きいと乾電池で2年間作動できなくなるので、無駄なく効率的に決める必要があります。測定したい動作は以下の通りです。

調査項目

(1) アイドル時の平均消費電流
(2) センサーGPIOのプルアップから電圧が安定するまでの時間
(3) センサー測定時の消費電流
(4) LED点滅の平均消費電流
(5) BLE送信の平均消費電流

測定にはNordic SemiconductorのPower Profiler Kit II(通称PPK2)を使用しました。また、全てのテストにおいて消費電力の大きいQSPIはoffにします。(使用していないので問題なし)

  // オンボードQSPI Flash MemoryをDeep Power-downモードにして省電力化する
  flashTransport.begin();
  flashTransport.runCommand(0xB9);
  delayMicroseconds(5);
  flashTransport.end();

  // 充電モード選択(未設定だと600uA減るうえ、充電はされるのであえて設定しない)
  // pinMode(PIN_HICHG, OUTPUT);   // 充電モード
  // digitalWrite(PIN_HICHG, HIGH);  // HIGH=50mA充電モード LOW=100mA
  pinMode(PIN_INVCHG, INPUT_PULLUP);  // 充電中状態確認 プルアップにすると非充電時に60uA減る

測定結果

(1) アイドル時の平均消費電流

プログラムを delay(99999); で止めたLight Sleep自の結果です。この間に測定やLEDの点灯、BLEの送信はありません。

電流投入後は大きな電流が流れるので、少し経ったあたりの平均を見てみると 7.13uA でした。この電流値を2年流すと 7.13uA * 24 * 365 * 2 = 125mAh となり、CR2032でもいけそうな値ですね。アイドル時の部分を拡大して見てみましょう。

なんかギザギザしていてピークは30uAまで来ています。でも平均値では 7.13uA ですね。

(2) センサーGPIOのプルアップから電圧が安定するまでの時間

センサーの片側はGNDにつながっていて、通常時はリードスイッチがオンなので出力は常にLOWになります。接続先のGPIOはnRF52840の内蔵プルアップ抵抗でプルアップされているので、異常時にリードスイッチがオフになると出力はHIGHになります。これがバーが外れたことを検知する仕組みです。しかし常にプルアップしているとプルアップ抵抗に電流が流れ続けてしまいます。無駄な電流が流れることを防ぐため、測定してないときはLOWを出力設定にしていて、測定するときだけプルアップします。

  // 測定時
  pinMode(GPIO_SENSOR_1, INPUT_PULLUP);
  if (digitalRead(GPIO_SENSOR_1) == HIGH) val |= 1;

  // 待機時
  digitalWrite(GPIO_SENSOR_1, LOW);
  pinMode(GPIO_SENSOR_1, OUTPUT);

このとき問題となるのが、プルアップしてからHIGHになるまでの時間です。もしリードスイッチがオフで異常状態だったのに、プルアップした直後に読んだら値がまだLOWだった、では困ります。そこで実際にどのくらいの時間でHIGHになるのかを、実際の配線(長いほう)を繋いだ状態で測定してみました。

プルアップしてから 5us でHIGHになっていました。プルアップしてから5us以上時間をおいてからdigitalRead()すれば大丈夫そうですね。プログラムでは念のため100us空けています。

(3) センサー測定時の消費電流

1秒間に2回センサーの状態をチェックした場合の値です。以下は測定時だけプルアップした場合の結果で、平均 10.7uA でした。

ちなみに常時プルアップにした場合は平均 931uA でした。こんなに違うの!? プルアップ抵抗に流れる電流ってばかにできないんですね。これは4GPIOをプルアップした場合の結果なので、1GPIOで230uAも食っています。電池駆動する回路では気を付けないといいけません。

(4) LED点滅の平均消費電流

通常時はLEDは5秒ごとに点滅させています。存在がわかる程度に光ればいいので点灯時間はとても短くしています。

点灯時間電流値(平均)見た目
1ms13.38uAとてもよわい
2ms14.28uAよわい
5ms19.90uAふつう
10ms29.40uAふつう
20ms47.99uAまぶしい
50ms105.44uAまぶしい

LEDを直接見ると1msの点灯時間でも見えますが、照射された光がどのくらい明るく見えるかを比べっると全然違います。LEDから少し離れたところにコピー用紙に光を当てて比べたところ、10msあたりがちゃんと見えて消費電流も少ないポイントかなと思いました。5msでも大丈夫そうです。

ちなみに異常時は100ms間隔でLEDをオンオフしているので、このときの平均電流は4.79mAです。これにブザーが加わると5.19mAにもなります(実際にはBLEも加わるのでもっと多い)。異常時は本気出すときなので消費電流は気にしないようにします。

(5) BLE送信の平均消費電流

BLEのアドバタイズを送信する際の電波の出力強度と、信号の送信間隔によってどのくらいの消費電流になるのか調べてみました。送信出力を下げれば消費電流は下がりますが、電波が届きにくくなります。またアドバタイズの間隔を下げるとデータを取りこぼす可能性が出てきます。以下の実験はLEDとブザーを無効にした場合の結果です。センサーの読み込みは有効です。

通常時は60秒間隔で、3秒間のアドバタイズを送信しています。通常時はバッテリー残量や死活監視の情報しかなく重要度は低いので、たまに受信できればOKという設計です。一方で異常時はすぐに・確実に通知しなければならないので、アラーム解除まで止まることなく狂ったように送信します。

送信出力Adv間隔通常時平均電流異常時平均電流
0dB70ms19.39uA175.18uA
0dB140ms15.20uA99.30uA
0dB280ms13.35uA54.39uA
8dB70ms29.23uA376.56uA
8dB140ms20.20uA196.05uA
8dB280ms16.16uA106.60uA

この結果を見ると、通常時の平均電流はどのパターンでもそれほど大きな差はありませんでした。60秒間の平均ですから、そのうちの3秒間の差は平均されて小さくなってしまいます。

一方で受信時の感度に大きな影響が出ました。試しに1Fに子機を置き、2Fの親機で受信したところ、0dBだと受信できないケースがありました。面白いことにアドバタイズの送信間隔を上げても、効果が少ししか変わりませんでした。受信成功のカギは頻度ではなく出力の高さのようです。

最終決定した値

消費電流と機能性・実用性の観点から、以下のように設定することにしました。
・通常時のLED点滅 点灯時間 10ms、5秒間隔
・通常時のBLE送信 出力8dB、140ms間隔で3秒間、これを60秒ごと
・異常時のBLE送信 出力8dB、70ms間隔で連続

この条件でLED、ブザーも有効にした実際の使用時の消費電流を測定しました。

状態平均電流2年稼働時の電力量
正常時38.54uA675mAh
異常時5.56mA

基本的には正常時のみなので(そうであってほしい)、これで2年間稼働を続けても675mAhしか消費しないこととなります。こちらの乾電池の容量を調べたサイトを見ると、単4は400mAh前後、単3は1500mAh前後のようです。

電池もつ年数
単41.2年
単34.4年

こんなにも違うんですね。単4で少しでも小さく作りたいなぁと思ってたのですが、年1回何か所も電池を交換するというのはちょっと面倒に感じます。やっぱり単3が無難なところですね。

目次へ戻る▲


プログラム (子機)

主な機能

今回作成するプログラムには以下の機能を持たせます。
・センサーの開閉を検知
・LEDおよびブザーでのアラート
・BLEで状態を通知
・通常時に5秒ごとに一瞬だけLEDを光らせる
・バッテリー電圧低下をLEDで知らせる
・ブザーのミュート機能
・警備動作の一時停止機能

ダウンロード

今回作成した子機のプログラムは GitHub にアップしました。変更が必要な個所はこのへんです。

// 基本動作設定
#define DEBUG_USB 1   // デバッグ USB Serialでデバッグする

// 設定
const uint8_t XIAO[4] = { 0xFF, 0xFF, 0x12, 0x34 };   // XIAO nRF52840識別値(FFFFは固定)

本番運用時はDEBUG_USBを0にします。1のままでも使えますが、起動するまでちょっと時間がかかります。

XIAOの値は複数の機器が動いているときに区別するためのもので、上位2バイトは固定で、下位2バイトを好きな値にしてください。

BLEで送信する情報

窓に取り付けるコントローラーは「子機」として、BLEのアドバタイズを使用して以下のデータを送信します。親機は子機のデータを収集して処理します。

// 送信するデータの構造体(nRF52840では2バイト未満はパディングされるので順番に注意)
typedef struct {
  uint8_t maker[4]; // maker_id 子機(nRF52840)の識別用
  uint16_t seq;     // シーケンス番号
  uint8_t id;       // 子機ID(0~7)
  uint8_t sensor;   // センサー値(0b00000000~0b00001111)
  int16_t volt;     // 電圧データ
} AdvData;

maker[4] はデバイスを区別するためのマジックナンバーです。すべての子機で共通です。seqのシーケンス番号は新しいデータを送信するたびにインクリメントされます。idは子機を識別するためのIDで、基板上の3ビットのはんだジャンパーの値が入ります。

sensorのセンサー値はセンサーの開閉状態で、閉じているとき(正常)は0、開いているとき(異常)は1になります。本デバイスに接続できるセンサー数は4個なので、下位4ビット(0b00000000~0b00001111)が使用されます。1か所でもOPENならアラートを出すため、0なら正常、0以外は異常と扱います。

最後のvoltはバッテリーの電圧情報で、この値を親機が読み取って電池交換の必要性を判断します。

目次へ戻る▲


ケースの組み立て

ダウンロードと3Dプリント

今回作成したケースの3MFファイルは GitHub にアップしました。PLAだとすぐに劣化してしまうので、今回はPETGで3Dプリントします。色は建具と同じダークブラウンにものにしました。

このうちPlug Magnetだけは注意が必要です。Plug Magnet.stlの中にはマグネットを埋め込むため、途中で一時停止をする必要があります。あらかじめダイソーのネオジム磁石 Φ6mm x 3mmを用意して、すぐに入れられるように準備しておきましょう。

3Dプリントに磁石を埋め込む方法

プリント中に一時停止して磁石を埋め込んでいます。この埋め込むタイミングを今まで勘違いしてました。以下は19層まで穴があって、20層で穴が塞がるモデルです。穴の開いている状態で一時停止したいのだから、19層で止めると思うじゃないですか?

実は表示されている層をプリントする前に止まるのだそうです。実際に右側の画像の状態のところで一時停止を指定したところ、穴の開いた状態で止まり、再開するとすぐに穴が塞がりました。

組み立て

3Dプリントが終わったら組み立てていきます。

基板やケースはタッピングねじで固定します。

センサーのところは溝にリードスイッチを接着剤で固定します。最初はグルーガンで付けていましたが糸を引くし、余った部分がきれいに切れないんですよね。そこでハックルーという接着剤を使ってみました。

熱を加えると液状になるので細いところでも奥まで浸透しやすく、固まるとぶよぶよしないのでカットもしやすいです。はんだごての温度は250度ではなかなか溶けず、300度でいい感じにドロドロになります。350度だと水のような滑らかな液状になるので、奥に流し込みたいときは温度高めがいいです。はんだごてで熱を与えてもなかなか焦げないのも使いやすいです。

完成!

製作した基板をすべてケースに収めました。ここまで作ってから気づいたのですが、電池交換用に正面にネジがありますよね。このネジを外してもフタが外れないんです。そう、裏面からフタを固定してるのです。だから壁に固定した後、電池を交換するときは壁から本体をはがさないといけないんです。今さら修正するのも面倒なのでもうこのままいきます。

目次へ戻る▲


設置

センサーのホルダーを窓に取り付けます。窓の幅に合わせてステンレス線をカットしてクリップに固定すれば完成です。

もし窓から侵入しようとするとマグネット部分が外れてアラームが鳴ります。

この1mmのステンレス線を使ったアイディアは成功でした。細いので全く違和感がなく、真っすぐなので窓の一部のように見えます。窓ガラスに赤いLEDが反射していますが、外から見てもLEDが光っていることが確認できました。

目次へ戻る▲


操作方法

ボタン操作

ボタンは穴の奥にあり、細長い棒でないと押せないようになっています。これは侵入者がボタンを押して止めてしまわないように、ボタンだと気づかせないようにしています。一時的に窓を開けたいときなど、ボタンで警備動作を一時停止できます。

【ボタン1(右側)単押し】
アラートが出ているときにボタン1を押すとミュートモードになり、ブザーだけが鳴らなくなります。LEDの点灯とBLEの送信は行われます。再度押すか、3分経つと自動的にミュートモードが解除されます。

【ボタン2(左側)長押し3s】
通常時にボタン2を長押しするとポーズモードになり、センサーの状態をチェックしなくなります。窓を開けたい時などに使用します。再度押すと通常の警備状態に戻ります。

LEDの状態

LEDの点滅方法によって現在の状態を知ることができるようになっています。

頻度点滅回数意味
5秒間隔1回点滅通常の状態
1秒間隔1回点滅バッテリー電圧低下(2.3V以下)
5秒間隔2回点滅ポーズモード中 警備停止
連続高速点滅異常検知

nRF52840は1.7V以上で動作しますが、XIAOは実際には1.9V以上でないと動作しませんでした。そこである程度余裕をもって、バッテリー電圧が2.3V以下になったら交換を促すため、点滅頻度を上げて知らせるようにしています。

目次へ戻る▲


親機の作成

親機は未完成ですが、とりあえず今作ったところまで紹介していきます。USBポートに直接挿せる、M5Stack AtomS3Uを使用しています。

親機でできること

・アラームの連動(ブザー、LED)
・バッテリー電圧低下の通知(LED)
・未接続デバイスの通知(LED)
・スマート電球の連動
・Webで子機一覧表示・設定

親機は子機が送信してBLEのアドバタイズを受信して、子機の状態を一元管理します。1つでも異常を検知した子機があった場合はブザーやLEDで通知します。

スマート電球を制御する

異常を検知した場合はスマート電球をオンにします。これは家の中の電気がつくことで、侵入者に「家人に見つかった」と思わせることが狙いです。

侵入をあきらめさせる心理的トリック

(1) 侵入前: LED点滅 →窓に何かある?
(2) 侵入中: ブザー作動 →警報だ!
(3) 侵入後: 照明オン →見つかった!!

SwitchBot スマート電球 E26

今回はSwitchBotのスマート電球 E26を使用しました。このデバイスは仕様が公開されているので、アプリを使わずに独自に通信をして制御させることができます。ただこれを見てもよくわかりませんね。面倒なのでAIに丸投げします。

BLEでスマート電球のGATT通信を行うためには、スマート電球のMACアドレスが必要になので、MACアドレスを調べなくてはなりません。一番簡単なのはSwitbotアプリに登録して、設定画面のデバイス情報で確認する方法です。

プログラム

今回作成した親機のプログラムは GitHub にアップしました。変更が必要な個所はこのへんです。

// Wi-Fi(使用するアクセスポイントに合わせて変更)
static const char *WIFI_SSID = "****";
static const char *WIFI_PASSWORD = "****";

// Webサーバーの固定IPv4設定
static const uint8_t WIFI_LOCAL_IP[4] = {192, 168, x, x};
static const uint8_t WIFI_GATEWAY[4] = {192, 168, x, x};
static const uint8_t WIFI_SUBNET[4] = {255, 255, 255, 0};
static const uint8_t WIFI_DNS[4] = {192, 168, x, x};

その他の設定はWebから変更します。

Web画面

設定したIPアドレスにアクセスすると子機の一覧が表示されます。

このID 0~7が基板上のBLEアドレスのIDに対応しています。この画面を見ると警備の状態やバッテリー残量、最後に受信したデータの時間(何秒前)が表示されます。正常時は節電のため60秒に1回しか送信しないので、60~180秒程度の範囲内なら問題ありません。もし5分以上データが受信できない子機があった場合は、LEDが黄色点滅して知らせるようになってます。

親機の設定

設定画面では子機の識別値や子機の名前、スマート電球のMACアドレスを設定できます。

子機の識別値というのは、子機のプログラムで設定したこれです。

// 設定
const uint8_t XIAO[4] = { 0xFF, 0xFF, 0x12, 0x34 };   // XIAO nRF52840識別値(FFFFは固定)

スマート電球のMACアドレスは2個まで登録できます。

スマート電球を有効にした場合、異常発生時はブザーを鳴らしLEDを点滅し、その次にスマート電球をオンにしようとします。その時にアクセスできない場合はリトライを繰り返すので、データを取りこぼす恐れがあります。スマート電球を使う場合は常時使える状態にしておく必要があります。

今後追加したい機能

実際に使ってみて、やはりBLEだと遠くまで電波が届かないという問題がありました。そこで親機と子機の間に中継器があるとよさそうです。中継器はUSB Type Aポートに直挿しできるAtomS3Uが最適です。子機からBLEで受信したデータを中継器がWi-Fi経由で親機に送信するようにすれば、親機がどこにあっても使えるようになります。

ただ、中継器が2台以上になると管理が難しくなります。同じ子機のデータが別々の中継器で受信されることもあるので、重複したデータを正しく分類しなくてはなりません。親機も複数台ほしいですね。そうなるとメインの親機と、サブの親機、というか出力用子機を別途作る感じでしょうか。

いろいろとやりたいことはありますが、侵入を諦めさせるのがそもそもの目的なので、バッテリー電圧が低下したらLINEで通知するくらいでもいいかもしれません。

目次へ戻る▲


最後に

設計上は2年以上電池が持つはずですが、実際にはどのくらい持つのか気になりますね。窓の近くなので温度変化も大きいですし、湿度も高くなるので、基板の故障の方が先に来るような気もしています。

今回のプログラムはほぼ全てAIが作成したんですが、ほんと賢くなりましたね。ちょっと前までは自分で書いたほうが楽しいとか言ってたのに、今はもうめんどくさくて、自分でプログラムなんか書けないです

防犯センサーだけでは侵入を防ぐことはできませんが、少しでも侵入を躊躇わせることができれば良いと思います。この防犯センサーが鳴らずに済むことが一番ですね。

目次へ戻る▲