IoT雷警報システム、サンダーガードLTEの開発について

## 背景

最近、ゴルフを始めました。
 始めたからにはホールインワンをしてみたいです。
 <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244155/88f5e373-31df-c88b-35ff-f2f215153a13.png" width=50%>  
そのためには、まずゴルフコースに行く必要があります。
ゴルフコースにはいろいろなリスクがありますよね。
 <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244155/ebc4d3f6-83b2-ea94-3ed6-bc50a8a8a532.png" width=50%>  
 **そう、雷です。**

この内容については2024年2月16日に、LINEヤフー株式会社大阪グランフロントオフィスで行われたLINE DC Frontend Meetup で発表を行いました。
 
 https://linedevelopercommunity.connpass.com/event/308139/
 
こちらがスライドです。

 https://speakerdeck.com/shinrinakamura/iotlei-jing-bao-sisutemusandagadolte

 動画もありますので、よろしければ御覧ください。

 https://youtu.be/wzXmvRM4mfw?si=8Wk8zxuX3V54W-JE

 この中でも発表しているように、通信の動作確認とLINEの連携ができることまで確認できました。センサの使いこなし方法の確認と検証はこれから行います。

## 目的
　雷警報システムで使用する予定のAS9395というセンサの使いこなし方の確認、どのようなセンサなのか確認するために、基礎的な検証を行います。
　調べてみると、国内でも複数の使用例があります。その中の一つに、香川高等専門学校宇宙開発研究部のINADUMA RULER3という報告書がありました。センサの動作検証の手始めとして、この報告書の中の一部の追試を行うことにしました。
 
 ## AS3935というセンサーについて
　落雷とは雲と地面の間に生じる放電現象のことです。雷が発生する時には電磁波が発生します。この電磁波を受信して分析することにより、雷の発生の把握と発生位置までの距離を推定できるセンサーがAS3935です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244155/582c84ca-cb98-9241-5d9c-5e3bc105b895.png)
このセンサーには
- 40km圏内の雷の位置推定ができる
- 雷のまでの距離が推定できる
- ライトニングアルゴリズムによる誤検出防止機能がある
- 屋外での使用を考慮した省電力設計になっている
という特徴があります。
## 雷センシングの原理
　検出用のコイルアンテナがアナログフロントエンド(AFE)に直接接続され、AFEで受信信号の増幅と復調が行われます。ウォッチドッグ回路で、連続的にAFEの監視を行い、信号が入ってきた際にはライトニングアルゴリズムで分析を行います。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244155/526caf05-9c99-1226-4ef9-00a11e8787b7.png)
### ライトニングアルゴリズムについて
　ライトニングアルゴリズムはセンサーにハードウェアとして実装されています。信号パターンをチェックすることによって、雷に起因する信号か、人工的なノイズ源に起因する信号かを区別することができます。信号が人工的と判断された場合には、検出イベントは中止されます。イベントが雷として分類されると、統計的距離推定アルゴリズムにより、雷雲の近端までの距離の推定を行います。
 ## 雷観測の流れ
 
マイコンとAS3935を利用しての雷検出の流れは、
1. センサーとの接続確認
2. アンテナのチューニング
3. 使用する発振周波数のチューニング
4. 雷の待ち受け
という流れになっています。

今回は②のアンテナのチューニングの動作確認まで行います。
## アンテナのチューニングについて
　AS3935を使用するには、周囲から発生する電磁波を受信するアンテナを搭載する必要があります。このアンテナが正しく設置されていることを確認し、誤差などの個体差を排除するために、チューニングを行う必要があります。センサのデータシートによると、共振周波数を500kHZ、品質係数(Q)を約15になるように設定しておく必要があります。
　品質係数は、アンテナの性能を表す数値の一つで、特定の周波数に対しての感度を表す。品質係数が高くなると、周波数選択性が高くなり、ノイズが少なくなります。品質係数は「共振周波数 / バンド幅」で求めることができますので、共振周波数を求めることで品質係数を求めることができます。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244155/93943a65-3eb0-6b3d-3d8b-1feb13047100.png)
データシートに記載されている、チューニングコンデンサのブロック図を見てみると、センサの中にチューニング用の可変コンデンサが並列に接続されていることが確認できます。この可変コンデンサの値をラジオのチューニングをダイヤルを回して調整するイメージで変更して周波数の調整を行います。実際にはレジスタの値をへっこうすることでコンデンサの値をどのように設定するか変更することができます。

レジスタとは、マイコンが作業をするときに一時的にデータを保存しておく場所のことです。
並列共振回路の共振周波数は

$f = 1/2π√LC$

で求めることができます。データシートより、共振周波数は500kHZに近づける必要がありますので、f=500に近づくようにコンデンサを調整していく必要があります。

　具体的には今回使用するアンテナとセンサを接続する回路は秋月電子から提供されている回路図より、以下のような値になっていることが分かります。チューニングコンデンサと共振周波数の関係を把握するには、この値を利用してシミュレーションを行う必要があります。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244155/926e281e-0b7a-aa56-db46-cba835f231d4.png)
## 使用する機器と材料
### 使用する材料
[AS3935](https://akizukidenshi.com/catalog/g/g108685/)
[ESP32S3](https://www.espressif.com/en/products/socs/esp32-s3)

### 使用する道具

[Tektronix TBS 1000C SHERIES DIGITAL OSCILOSCOPE](https://www.tek.com/ja/products/oscilloscopes/tbs1000-2-channel-digital-storage-oscilloscope?_bg=53310819036&_bk=tbs1000c&_bm=b&_bn=g&_bt=537115221031&gad_source=1&gclid=CjwKCAiAloavBhBOEiwAbtAJO6E33CyPmaRj85sPlXBg0htb8MHp54GL9r59n8iu6f6iy3TlN1d04xoCmtgQAvD_BwE&utm_campaign=tek-1k-basic_scopes&utm_medium=ppc&utm_source=google&utm_term=tbs1000c)

### 開発環境
Windows11
Arduino2.2.1
boardmanager esp32 by espressif 2.0.14
## 方法
- センサをマイコンから見つけることが出来るか確認する
- I2Cの信号が想定通りに出力されているか確認する
- レジスタの読み書きができるか確認する
- 初期設定を全部読みだして見て、データシートと照らし合わせて確認
- 周波数の分周比を確認して想定した値が出ているか確認する
- チューニングキャパシタと共振周波数の関係をシミュレーションして、実際の値と比較してどうなのか確認する
## 手順
1. マイコンでポートスキャンを行い、データシートで確認したセンサーのアドレスと一致しているか確認を行いI2Cでセンサが接続されているか確認します
2. センサを初期化した後に初期設定をレジスタの若い方から順番に読み出していきます。読み出したデータをデータシートと照らし合わせて、想定通りの値を読み出すことが出来ているか確認します
3. 実際にアンテナ周波数を読みだして、オシロスコープで確認して、分周比を考慮したうえで、妥当な値が返ってきているか確認します
4. チューニングコンデンサを0~120pFまで16段階で変化させたときの理論値をシミュレーションします
5. アンテナ周波数の実測を行い、シミュレーションした値と比較を行います
## 結果
マイコンでポートスキャンを行い、0x03を含むアドレスが検出できました。データシートに示されているアドレスが0x03ので、マイコンとセンサがI2Cで接続されていることが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244155/69fee1f9-21be-ac77-0732-87df42d7df5d.png)
センサを初期化した後に、レジスタを読み出しました。データシートのデフォルト値と比較して一致していることが確認できました。
| レジスタアドレス | 想定される値 | 実測値 | 役割 |
| --- | --- | --- | --- |
| 0x00[0] | 0b0 | 0b00 | パワーダウン |
| 0x00[5:1] | 0b10010 | 0b10010 | AFEゲイン |
| 0x00[7:6] | 0b0 | 0b00 | 予約 |
| 0x01[6:4] | 0b010 | 0b010 | ノイズフロアレベル |
| 0x01[3:0] | 0b0010 | 0b0010 | ウォッチドッグスレッショルド |
| 0x02[7] | 0b1 | 0b1 | 予約 |
| 0x02[6] | 0b1 | 0b1 | 距離測定アルゴリズムのメモリクリア |
| 0x02[5:4] | 0b00 | 0b00 | minimum number of lightning |
| 0x02[3:0] | 0b0010 | 0b0010 | スパイクリジェクション |
| 0x03[7:6] | 0b00 | 0b00 | アンテナ共振周波数 |
| 0x03[5] | 0b0 | 0b0 | マスクディスターバー |
| 0x03[4] | 0b0 | 0b0 | 予約 |
| 0x03[3:0] | 0b0000 | 0b0001 | 割り込み |
| 0x04[7:0] | 0b00000000 | 0 | エネルギ―LSBYTE |
| 0x05[7:0] | 0b00000000 | 0 | エネルギ―MSBYTE |
| 0x06[7:5] |  |  | 予約 |
| 0x06[4:0] | 0b00000 | 0 | エネルギ―MMBYTE |
| 0x07[7:6] |  | 0b00 | 予約 |
| 0x07[5:0] | 0b000000 | 0b11111 | 距離 |
| 0x08[7] | 0b0 | 0b0 | Display LCO on IRQ pin（分周比） |
| 0x08[6] | 0b0 | 0b0 | Display SRCO on IRQ pin |
| 0x08[5] | 0b0 | 0b0 | Display TRCO on IRQ pin |
| 0x08[3:0] | 0b0000 | 0b0000 | チューニングコンデンサ |

アンテナのチューニングの章で記載した条件で理論値の計算を行い、実測値との比較を行いました。その際に理論値は、二つ使用しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244155/dc904e39-0f49-1fe4-864d-292165315cff.png)
## 考察

　I2Cのアドレス、読み出したレジスタの値と、デフォルト値が一致していることから、マイコンとセンサの接続、通信が正常に行えていると考えました。

 チューニングコンデンサと共振周波数の関係を確認すると、理論値と実測値の間で周波数のずれが確認できました。この結果が妥当か確認するために、データシートの誤差の範囲を確認しました。
 　誤差の生じやすいコイルに誤差が集中していると仮定して、誤差の最小値側に振った値を使用して検証したところ実測の近い周波数の出力されることを確認しました。
  また、周波数が500kHzになる設定が、設定可能な範囲の中央近辺になっています。以上のことより、このデバイスは妥当な構成であることが確認できたと考えています。
  
　INADUMA RULER3の報告書ではセンサをうまく動かせていないように見えますが、それは他人が開発したプログラムをそのまま利用しているためだと考えられます。当プロジェクトでは、データシートを参考に検証用のプログラムを自ら開発し、検証を行っています。そのため、より細かい検証、より最適な観測プログラムの開発が可能になると考えています。

## 今後の展開
　今回の検証では、センサの接続から初期設定までの動作が検証できました。次は、実際に雷の検出、距離の推定を3月の中旬を目標に行いたいと考えています。感想やアドバイス等いただけますと幸いです。他にもご意見ご要望があれば可能な限り内容を反映させたいので、コメント等いただけると幸いです。
## 参考情報
[AS3935データシート　](https://www.embeddedadventures.com/datasheets/AS3935_Datasheet_EN_v2.pdf)
[秋月電子通商 AS3935使用　雷センサーモジュール](https://akizukidenshi.com/catalog/g/g108685/)
[INADUMA RULER3 ](https://www.wxbunka.com/cms/wp-content/uploads/2021/02/10-01.inaduma3_kagawa1.pdf)
[Designing truly portable lightning detectors  ](https://www.electronicproducts.com/designing-truly-portable-lightning-detectors/)
[Development of a Low-Cost IoT System for Lightning Strike Detection and Location](https://www.mdpi.com/2079-9292/8/12/1512)
[MA5332-AE](https://www.coilcraft.com/en-us/products/rf/rfid-transponders/x-y-axis-transponder-coil-2mhz/ma5532/)
[アンテナの特性と原理](https://www.oit.ac.jp/elc/~kumamoto/radio/03.pdf)
[Q値と周波数特性を学ぶ](https://www.aps-web.jp/academy/ec/191/)
[基礎から理解する小型アンテナの動作原理　](https://www.ieice.org/cs/ap/jpn/ws/ws62/WS-62_text_sample_r.pdf)
[アナログ・フロントエンド(AFE)](https://edn.itmedia.co.jp/edn/articles/1305/20/news010.html)
[AMS社 AS3935 雷距離センサー　秋月ボードのデモプログラム[ESP32] ](https://tom2rd.sakura.ne.jp/wp/2021/03/23/post-12029/)
[AS3935「雷」センサーを制御する　](https://www.ne.jp/asahi/shared/o-family/ElecRoom/AVRMCOM/AS3935/AS3935_test.html)
[IoTを活用した落雷位置標定ネットワークの構築による気象災害防止](https://kaken.nii.ac.jp/ja/grant/KAKENHI-PROJECT-18K13971/)