雷センサーでKaminariBotを作る
はじめに
以前から雷センサーなるが気になっていた。秋月電子に雷センサーが販売されていて、Amazonで販売されている雷センサーよりも格段に安い。
そこで予備も含めて雷センサーを2個購入してみた。
AS3935搭載の雷センサー
送られてきたのがこちらでピンヘッダー付。¥1,480とかなりお安め。このセンサーで最大40km先までの雷の検出ができるという。
既にこちらの雷センサーについては使った先人がHPに詳しくまとめられている。今回は主に下記のHPを参考にしながら進めさせてもらった。ググってみると思ったより多くのサイトで紹介されている。
余談だが、参考サイトはかなり興味深い。気象観測をはじめ地震計などさまざまな環境データ収集をされている。自分も他に屋外で観測した項目はあるのだが、電源の確保に課題があるなどできていないことが多い。
このセンサーはI2C接続でアドレスは0x03となっている。雷を検出するとIRQピンから割り込み信号が上がり、それをトリガーにI2Cでデータを読み出す。
ブレッドボードでテスト
話を戻して、このセンサーだが屋内でも観測できる。屋内でも鉄筋だと観測に影響しそうだが、実家は木造住宅なので影響は小さいのではないだろうか。今回は屋内に設置することにする。
リアルタイムにデータを読み出す必要があるので、実家に常時稼働のRaspberry Pi3 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で可視化したい。