記事内に広告が含まれています

M5Stamp Picoと雷センサー”AS3935”を使用してハンディタイプ雷検知器 〜かみなりおやじ〜 をプロトタイピング

M5STACK

はじめに

電子部品通販業者で買い物をしていると、雷センサーモジュールというデバイスが目につきました。
雷鳴も聞こえない遠く離れた雷を検知できる雷センサーモジュールに心をビビッと撃ちのめされてしまい早速購入して雷検知器を工作してみました。

雷センサーについて

秋月電子で発売している雷センサーモジュールは秋月電子の自社製品のようですが、モジュールの肝となるデバイスは、AMS社製の AS3935 Franklin Lightning SensorというICです。

雷センサーについてネットで調べてみるとAS3935を使用したセンサーモジュールは秋月電子以外にもSparkfun製Seeed製のモジュールがスイッチサイエンスやマルツオンライン、共立エレショップ、マウザーなどの通販業者から購入することができます。

私が調べたところでは秋月オリジナル製品が最安値でしたが、AmazonでもSparkfun製を含めて数種類の製品が購入できるようです。ただし、ご自身で使用したい通信方式(I2CまたはSPI)に対応しているか注意して下さい。

なお、このセンサーICは、2020年1月にAMS社とWise Road Capital社で設立した合弁会社ScioSense社の取り扱い製品となっているようです。
ICについての詳しくは、ScioSense社のWEBサイトにあるデータシートやアプリケーションノートを参照頂くとして、自身の場所から雷の発生までのおおよその距離(P)は、稲妻が光ってから、雷鳴が聞こえるまでの時間(S)から算出できる事が知られています。

P(km) = 0.34 (km/s) × S (sec)

AS3935を搭載したセンサーでは、40km先の雷の発生を検出することができるので、上式を使い時間に換算すると、雷光が見えてから約117秒後に聞くことができるであろう雷鳴を事前に検出することができるということになります。

40kmというように、人間では気付けないような、かなり離れた離れた雷の発生を検出できるのであれば、自分の身に危険が迫る前に安全な場所に避難するには十分な時間があると思います。

どうでしょうか?雷センサーって、かなり気になるデバイスだと思いませんか!?

センサーモジュールの動作確認

今回、私が購入した秋月電子さんが提供しているArduino用サンプルプログラムを使用して実験をしましたので、秋月電子さんのサイトに記載の情報もご参照下さい。
このセンサーを使用するに当たって、雷から発生するという500kHz周波数の電磁波を捕らえるべく、IC外付けのアンテナ(コイル)とIC内部にある同調用コンデンサで500kHzに共振するようなコンデンサ値をレジスタに書き込むイニシャライズが電源投入後に必要となっています。

コンデンサ値を調整するレジスタは1ステップ当たり8pFの容量が割り当てられており、全16ステップの0~120pFの間で調整が可能となっています。
サンプルプログラムではレジスタ値“0”から“15”までを順番に設定する事で最適値を探し出すようになっています。私の手元のモジュールの最適値はレジスタ値 “8” が示す64pFとなりました。周波数調整が終わると、雷の観測モードに遷移します。

このモジュールで計測できる数値データは雷の発生場所までの距離と雷のエネルギーとなります。
なお、エネルギーはIC内部で使用する相対的な数値であって、実際の雷エネルギーを意味するものではないようです。

上述した秋月電子さんのArduino用サンプルプログラムでの周波数調整方法は、AS3935のIRQ端子から500kHz付近の波形を出力するレジスタ設定をした後、周波数カウンタ機能のあるライブラリを使用してIRQ端子からの周波数を計測し最適値をICのレジスタに書き込む方式となっています。

ここで周波数カウンタのライブラリはArduino向けとなっていますが、もしArduinoを所有していない場合は、レジスタ設定値を1ステップずつ変化させる毎に、IRQ端子から出力される波形の周波数を実際にオシロスコープで計測することでも設定値を確定することもできます。

とは言え、電子工作を趣味としてる方は、オシロスコープを所有していてArduinoを所有していないことはあまりないように思いますが・・・。

ハードウェアの準備

部品の購入

「雷おやじ」を作成するにあたり使用したパーツを紹介します。
AS3935 雷センサーモジュール
上記紹介した通りで複数の業者より購入できますが、今回使用したモジュールは秋月電子さんから入手できます。参考)秋月電子さんの販売コード 108685

M5Stamp Pico
センサーと接続するマイコンです。今回は「M5Stack Japan Creativity Contest 2024」に参加するために、ESP32マイコン搭載のM5Stamp Picoを使用しました。

ユニバーサル基板
使用する筐体に適したサイズの基板を使用します。今回は配線も少ないためユニバーサル基板を使用しました。

パッシブブザー
警告音を鳴らすために使用します。

配線:各部品間を接続する配線です。エナメル線などの適当なものを準備します。

電解コンデンサセラミックコンデンサ
電源ノイズの除去用に使用します。今回は470uFの電解コンデンサー1個と10uFのセラミックコンデンサーを2個使用しました。

筐体
3Dプリンタでオリジナルを作成しようと思いましたが、ハンディサイズでデザインも良く使いやすいタカチ製のハンドタイププラスチックケース LC135-M3-W を使用しました。

単4電池
M5Stampへの入力電圧は1.5V×3本の4.5Vとしました。
M5Stampに使用しているDCDCコンバータIC(AN_SY8089)の動作電圧範囲は2.7V~5.5Vであり、
ESP32マイコンは3.3V動作となるため、M5Stampへの入力電圧は4.5Vでも問題ありません。

部品レイアウトと回路ブロック図

下のスライドに図示した通りの部品レイアウトと回路ブロックとなっています。

複雑な回路ではありませんので、部品配置はシンプルです。配線は全てユニバーサル基板の裏面で接続しています。

動作シーケンスは次の通りです。
・雷センサーとM5stamp picoはI2Cで通信します。
・レジスタの設定が完了後、M5stamp picoは”light sleep mode”に入ります。
・センサーが雷を検知するとセンサーのIRQ端子がHighになり、M5stamp picoをGPIO33経由で起こしにいきます。
・GPIO25を使用して、雷までの距離に従って、3種類のブザー音を鳴らします。
・ブザー警告の終了後、再度 ”light sleep mode” に入るループを繰り返します。

かみなりおやじの全体写真

M5Stamp PicoのLEDを活用するために上部の筐体蓋に雷マークを描いてインジケータとして使用しました。雷センサーモジュールとM5Stampのおかげで非常にシンプルに仕上げることができました。
実動作については、ご想像通りと思いますが、ブログの最後に紹介する動画をご覧いただけると嬉しいです。

ソフトウェアの準備

Arduino IDEを使用しています。seeed社が発売しているGrove Lightning Sensor AS3935モジュールのWikiページに記載されているサンプルプログラムが分かり易かったので、そちらを参照させていただき作成したプログラムをgithubに保存しています。
ここでは、サンプルプログラムから追加した雷との距離が10km以下、20㎞以下、40㎞以下で分岐させて音を変化させる条件文のみをご紹介しておきます。

if (Distance <=10)  // 危険
  {
    leds[0] = CRGB::Red;
    FastLED.show();
    Serial.print("LED TURN RED\n");
    delay(1000);
            
    unsigned char i;
    unsigned char j;
    
    for ( j = 0; j <8; j++)
      {
       // BEEP ON
       for (i = 0; i < 20; i++) 
         {
          digitalWrite(buzzer, HIGH);
          delay(1);   // 1ミリ秒待機
          digitalWrite(buzzer, LOW);
          delay(1);   // 1ミリ秒待機
         }
       // BEEP off
       for (i = 0; i < 20; i++) 
         {
          digitalWrite(buzzer, LOW);
          delay(2);   // 2ミリ秒待機
          digitalWrite(buzzer, LOW);
          delay(2);   // 2ミリ秒待機
         }
      }
    leds[0] = CRGB::Black;
    FastLED.show();
    Serial.print("LED TURN Black\n");
    delay(50);
  }

else if ((Distance > 10)&&(Distance <= 20))  // 警戒
  {
   leds[0] = CRGB::Tomato;
   FastLED.show();
   Serial.print("LED TURN Tomato\n");
   delay(1000);

   unsigned char i;
   unsigned char j;
    
   for ( j = 0; j <5; j++)
     {
      // BEEP ON
      for (i = 0; i < 100; i++) 
        {
         digitalWrite(buzzer, HIGH);
         delay(1);   // 1ミリ秒待機
         digitalWrite(buzzer, LOW);
         delay(1);   // 1ミリ秒待機
        }
      // BEEP OFF
      for (i = 0; i < 80; i++)
        {
         digitalWrite(buzzer, LOW);
         delay(3);   // 2ミリ秒待機
         digitalWrite(buzzer, LOW);
         delay(3);   // 2ミリ秒待機
        }
     }
   leds[0] = CRGB::Black;
   FastLED.show();
   Serial.print("LED TURN Black\n");
   delay(50);
  }
              
else if ((Distance > 20)&&(Distance <=40)) // 注意
  {
   leds[0] = CRGB::Yellow;
   FastLED.show();
   Serial.print("LED TURN Yellow\n");
   delay(1000);

   unsigned char i;
   unsigned char j;
   
   for ( j = 0; j <3; j++)
     {
      // BEEP ON
      for (i = 0; i < 200; i++)
        {
         digitalWrite(buzzer, HIGH);
         delay(2);   // 1ミリ秒待機
         digitalWrite(buzzer, LOW);
         delay(2);   // 1ミリ秒待機
        }
      // BEEP OFF
      for (i = 0; i < 20; i++)
        {
         digitalWrite(buzzer, LOW);
         delay(5);   // 2ミリ秒待機
         digitalWrite(buzzer, LOW);
         delay(5);   // 2ミリ秒待機
        }
     }
   leds[0] = CRGB::Black;
   FastLED.show();
   Serial.print("LED TURN Black\n");
   delay(50);
  }

おわりに

実験的にコイルに突入電流を流して疑似的に雷が発生した状況を作り出して動作試験してみた動画をご紹介します。

実際に雷鳴が聞こえた際にも見事に警告音が鳴っていたことも確認できましたので、フィッシングや登山、ゴルフやサッカーなどのアウトドアスポーツや電気工事のような高所作業時において、落雷から身を守るための携帯型危険予知ガジェットが完成しました。気象庁の天気予報などの信頼のおける情報と合わせて活用できればと思います。

コメント

タイトルとURLをコピーしました