AS3935の雷センサーモジュールを、WiFiモジュールESP-WROOM02(ESP8266)との組み合わせで動かすプロジェクトについての備忘。
まず、AS3935の動作を確認するために、秋月のサイトにAruduinoを使ったサンプルhttp://akizukidenshi.com/download/ds/akizuki/AE_AS3935DEMO_a.zipを試してみた。Aruduino UNOとI2C液晶を使いテストハードを作成。AruduinoIDE1.6.5を使ってサンプルスケッチを手順通りにコンパイルし、まったく問題なく動作確認できた。
次に同じサンプルスケッチを、IDEのボードの選択をESP8266にした環境でコンパイルしてみたが、当然そのままではうまくいかないので、以下の項目を変更した。
・ヘッダファイルESP8266WiFi.hをincludeする。
・EPS8266はハードタイマーが使えないようなので、FreqCounterが動かないようだ。そこでFreqCounter.hを外す。関連の関数CALIB_LCD() とFREQ_COUNT()を呼び出さないようにする。
・AS3935からのIRQ受信ピンをpin12に設定する。
・液晶を3.3V設定に変更する。
・loopのwhile(1)ループにdelayを入れる。入れないとwdtエラーが出て再起動を繰り返してしまった。
問題は、受信周波数の設定。この雷センサーの仕組みは500KHzをバーアンテナで受信して空電ノイズを解析するというものだが、同調回路のコンデンサーはソフトで設定するようになっている。センサーのチップに指定のコマンドを送ると、IRQpinに同調周波数を分周したパルスが出力されるようになっている。
秋月のサンプルスケッチは、そのコマンドを送った後、Aruduino自身の周波数カウンタでセンサーからのパルスを測定し、センサーのコンデンサの容量を1ステップずつ変更して、もっとも500KHzに近くなるコンデンサの値を設定する、という仕組みが付いている。
ESP8266はハードウェアタイマーが無いようで周波数を簡単にカウントする方法がなさそうなので、同調周波数を分周したパルスを出力するコマンドを出してコンデンサの値を1ステップずつ変更するループを作り、センサー出力にオシロスコープを接続して周波数測定するという方法で最適なコンデンサの設定値を求めることにした。1/16分周の場合、500KHzに同調しているときのクロック31.25KHzである。設定は固定になるが電源電圧や温度によって受信周波数がどう変わるか実験してみたいところだが、今回はこれで良しとする。
次はWiFi機能を活かすために、以下の機能をスケッチに追加。この辺はトランジスタ技術9月号の特集を参考にした。
・自宅のルーターにWiFi接続する設定をする。DHCP使用。
・NTPcliantを使えるようにし、液晶に時刻表示するようにした。
・雷の距離、強度のデータは、udpで送信かつIOT用シンプルグラフ化サイトAmbientに送るようにした。
ここまでやって、さて動作確認となるが、発雷のシミュレーションが難しい。本物の雷なんて、そうしょっちゅう来るものでもない。
そこで今回は、少々乱暴だがDC12Vの安定化電源の出力をショートさせて、火花を発生させてみた。
安定化電源の保護回路には酷だが何度かバチバチやってみる。
空電のノイズのイメージはラジオの受信や無線の経験から、バチバチバチではなく、ガリっ、しばらくしてガリ、という感じである(笑)
AMラジオも使って、それっぽいノイズの再現を試す。
イメージが合ったのか、めでたくLIGHTNING DETECTが出た。検出したデータは自宅ネットワーク内にudpでブロードキャストされたことと、Ambientにもアップロードできたことを確認した。
ここまで来たら、次の目標が見えてきた。
・せっかくワイヤレスなのだからノイズレベルの低い屋外か窓際で常時稼働させたいので太陽電池による充電機能のついた電池駆動とする。
・雷なんて毎日検出するものではなく、それだけで常時稼働はもったいない気がするので、何か別のセンサーを同居させる。
続く