見出し画像

雷センサーでKaminariBotを作る

はじめに

以前から雷センサーなるが気になっていた。秋月電子に雷センサーが販売されていて、Amazonで販売されている雷センサーよりも格段に安い。

そこで予備も含めて雷センサーを2個購入してみた。

AS3935搭載の雷センサー

送られてきたのがこちらでピンヘッダー付。¥1,480とかなりお安め。このセンサーで最大40km先までの雷の検出ができるという。

雷センサー

既にこちらの雷センサーについては使った先人がHPに詳しくまとめられている。今回は主に下記のHPを参考にしながら進めさせてもらった。ググってみると思ったより多くのサイトで紹介されている。

余談だが、参考サイトはかなり興味深い。気象観測をはじめ地震計などさまざまな環境データ収集をされている。自分も他に屋外で観測した項目はあるのだが、電源の確保に課題があるなどできていないことが多い。

このセンサーはI2C接続でアドレスは0x03となっている。雷を検出するとIRQピンから割り込み信号が上がり、それをトリガーにI2Cでデータを読み出す。

ブレッドボードでテスト

話を戻して、このセンサーだが屋内でも観測できる。屋内でも鉄筋だと観測に影響しそうだが、実家は木造住宅なので影響は小さいのではないだろうか。今回は屋内に設置することにする。

リアルタイムにデータを読み出す必要があるので、実家に常時稼働のRaspberry Pi3 Model B+があるのでここに雷センサーを接続して観測することにする。

雷センサーはRaspberry Pi 3 Model B+に接続

下記コマンドでI2Cのアドレスは0x03となっていることが確認できる。-aオプションを付けないとアドレス0x00〜0x07は表示されない。

$ sudo i2cdetect -y -a 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- 03 -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

コード実装における注意

コードの実装には下記のライブラリーを使用させてもらう。

ライブラリーは古いようでPython 2.xをターゲットに実装されているようだが、Python 3.x系でも使用できそうだ。ただし、デモ用コードはPython 2.xで実装されているので必要に応じてPython 3.x用に修正しながら参考にして実装していく。

参考HPにも記載されているが、ライブラリーに不具合があるようなので合わせて修正をして使用する。

雷センサーのアンテナ・キャリブレーション

このセンサーはアンテナのキャリブレーションを実施する必要があり、参考HPにある方法で測定しながらtun_capというパラメーターを決定する。

実施するにあたりテスターで周波数を計測する必要があるのだが、手持ちのテスターが¥1,000ちょっとで購入した安物なので周波数の測定ができない。

そこでAmazonで周波数の計測ができる¥3,000台のテスターをで購入した。

購入したテスター

キャリブレーション用コードを使いtun_capを値を決定した。

プログラム

使用したライブラリーのGitHubにあるデモ用のプログラムを参考にして実装した。

AmbientやThingSpeakなどのクラウドにデータをアップしたいところだが、一定時間空けずに次のデータを送信した場合には破棄されてしまう。

雷の特定上、記録できないデータが発生することがあり得るのでローカルのInfluxDBとログに記録することにした。また、LINEに雷検知を通知するようにした。

最後にプログラムはデーモン化し自動起動できるようにする。

観測してみるが…

観測を始めた日、午後から雷鳴がなり少し雨が降ったが雷を検出しなかった。最初ライブラリーの修正をしていなかったので修正をして翌日以降に備える。

翌日も午後から雷が鳴り始めるが、検出しない状態が続いていた。参考HPに書かれているが、センサーは金属から遠ざける必要があるという。この影響もあるのかなあと前日から考えていた。

しばらく悩んでいると、ふと気づいた。
IRQに接続しているGPIOがプログラムと一致していない気がする…。
確認してみるとやっぱり間違えていた。

プログラムを修正して再度起動すると下記のログが出力されて、割り込みが上がってきていることは確認できた。

2024-08-15 14:55:13,233 INFO:KaminariBot:Starting KaminariBot...
2024-08-15 14:55:13,283 INFO:KaminariBot:Interrupted: reason = 1
2024-08-15 14:55:13,292 INFO:KaminariBot:Noise level too high - adjusting
2024-08-15 14:55:13,393 INFO:KaminariBot:Interrupted: reason = 4
2024-08-15 14:55:13,397 INFO:KaminariBot:Disturber detected - masking
2024-08-15 14:55:13,692 INFO:KaminariBot:Interrupted: reason = 1
2024-08-15 14:55:13,699 INFO:KaminariBot:Noise level too high - adjusting

ただ、気象庁のHPで10〜20kmくらいのところで雷を観測しているが、KaminariBotは反応しない。そう思っているうちに雨雲が遠ざかってしまった。

その後雷を検知したログは残るのだがDBには記録されず、LINEに通知が来ない。原因を調べているとモジュールのimportが不足して例外が発生していることが判明した。

ようやく正しく動作した

大人の夏休みの自由研究のつもりだったけど、気づいたら9月も半ばになってしまった。

仕事が終わって会社帰りに電車を待っていると雷検知のLINE通知が送られてきた。その後も何度か通知が送られてきた。

帰宅後ログを確認すると5回検知されている。

2024-09-12 17:10:17,615 INFO:KaminariBot:Interrupted: reason = 8
2024-09-12 17:10:17,621 INFO:KaminariBot:Lightning detected!!
2024-09-12 17:10:18,198 INFO:KaminariBot:Detected - Distance: 12km Energy: 49894
2024-09-12 17:27:22,726 INFO:KaminariBot:Interrupted: reason = 0
2024-09-12 17:59:58,403 INFO:KaminariBot:Interrupted: reason = 8
2024-09-12 17:59:58,404 INFO:KaminariBot:Lightning detected!!
2024-09-12 17:59:58,773 INFO:KaminariBot:Detected - Distance: 14km Energy: 32019
2024-09-12 18:17:03,119 INFO:KaminariBot:Interrupted: reason = 0
2024-09-12 18:18:03,579 INFO:KaminariBot:Interrupted: reason = 8
2024-09-12 18:18:03,579 INFO:KaminariBot:Lightning detected!!
2024-09-12 18:18:04,021 INFO:KaminariBot:Detected - Distance: 12km Energy: 38447
2024-09-12 18:19:06,105 INFO:KaminariBot:Interrupted: reason = 8
2024-09-12 18:19:06,105 INFO:KaminariBot:Lightning detected!!
2024-09-12 18:19:06,137 INFO:KaminariBot:Detected - Distance: 12km Energy: 23629
2024-09-12 18:19:08,633 INFO:KaminariBot:Interrupted: reason = 8
2024-09-12 18:19:08,634 INFO:KaminariBot:Lightning detected!!
2024-09-12 18:19:08,669 INFO:KaminariBot:Detected - Distance: 12km Energy: 11829

12〜14kmの雷を検知した。ただ気象庁のHPでは当時遠方でも雷が鳴っていたようだし、検知できてもいいような気がするができていない。

要因が0という謎の割り込みが不明だが今は気にしないことにする。

InfluxDBにも問題なく記録されていた。とりあえずコード上は問題なさそうだ。

> select * from KaminariBot
name: KaminariBot
time                distance energy sensor
----                -------- ------ ------
1726128617628081000 12       49894  KaminariBot
1726131598410166000 14       32019  KaminariBot
1726132683586090000 12       38447  KaminariBot
1726132746111852000 12       23629  KaminariBot
1726132748640654000 12       11829  KaminariBot

今後の課題

まだ正常に検知ができていない雷があると思う。そのためいくつか設定値を変えて確認して精度を上げたい。

またInfluxDBに書き込んだデータをGrafanaで可視化したい。


よろしければ、サポートをお願いします。 より多くの方に役立つnoteを書けるよう頑張ります!!