Arduinoでエアコンの1時間タイマーを自作する

Arduino搭載基板で雷センサーAS3935を使ってみる

秋月電子で取り扱っているAE-AS3935

数年前に購入してたまに使って遊んでいましたが、今回回路を描いて基板を発注してみました。

回路図です。汚いですが雰囲気だけ伝われば…

回路図を元に基板を起こします。


JLCPCBで基板を発注、今回レジストの緑が薄いような??


組み立ててプログラムを書き込み早速起動。
問題なく動いているようです。
見ての通りQFP32パッケージのATMEGA328Pを使用していますが、ICSP端子を備えているのでUSBTinyなどを使ってすぐにプログラムを書き換えられます。


まだ実際の雷が身近で発生していないので起動ルーチンのみですが動画です↓


プログラムについては秋月電子のサンプルプログラムをベースにしているので公開できませんが、距離レベルゲージに使用しているシフトレジスタの関数のみ公開しようと思います。

#define RCK 2 //ラッチピン
#define SI  3 //データピン
#define SCK 4 //クロックピン

String level[16] = { //距離表示LEDのパターン
  "0000000000000001",
  "0000000000000011",
  "0000000000000111",
  "0000000000001111",
  "0000000000011111",
  "0000000000111111",
  "0000000001111111",
  "0000000011111111",
  "0000000111111111",
  "0000001111111111",
  "0000011111111111",
  "0000111111111111",
  "0001111111111111",
  "0011111111111111",
  "0111111111111111",
  "1111111111111111"
};

void setup(){
  SendBit(level[0]); //シフトレジスタリセット
}

void loop(){
  for (int i = 0; i < 16; i++) {
    SendBit(level[i]);
    delay(150);
  }
}

//シフトレジスタ関数↓
void SendBit(String level) { //判定した距離に対応したパターンをシフトレジスタに送信
  digitalWrite(RCK, LOW); //ラッチピンをLOWにしてシフトレジスタの出力を無効にする
  int BitLength = level.length(); //データのビット数を取得

  for (int a = 0; a < BitLength; a++) { //ビット数分繰り返す
    if (level.substring(a, (a + 1)) == "1") { //"substring"で1文字抜き出し、1であればデータピンをHIGHに、0ならLOWにする
      digitalWrite(SI, HIGH);
    }
    else {
      digitalWrite(SI, LOW);
    }
    digitalWrite(SCK, HIGH); //クロックピン
    digitalWrite(SCK, LOW);
  }

  digitalWrite(RCK, HIGH); //ラッチピンをHIGHにしてシフトレジスタを有効にする
  delay(3);
}

実際に雷が鳴ったらまた動画貼ります。
※追記
山の向こうだったので雷鳴や光は撮れませんでしたが雷検知の様子を撮れました。
ピカピカっと光っているのは背面に搭載しているNeoPixelLEDを光らせているだけで雷の光ではありません。