ELEGOO:Lesson 17 & 18

Lesson 17 HC-SR501 PIR Sensor

PIR(Passive Infrared Ray) Sensor。近接センサーです。

スイッチサイエンス:PIRモーションセンサ
https://www.switch-science.com/catalog/2145/

周囲の赤外線放射の変化によって人間の接近を検知するセンサです。検出範囲内で動きがあると出力がHighになります。

とのこと。人(や動物)が近づくと、それらが放射している赤外線を検知します。

ドームパーツ外すとこんな部品。ピンアサインはドーム外さないと見えない場所に書いてあった!

裏側にはいろいろ部品付いてます。内部では複雑なことをしてそうですね。

ピンは5V / 信号出力ピン / GND の3本。出力は単純なデジタル High / Low です。

2つの半固定抵抗が付いていて、検知状態を継続する時間と、検知距離を調整することができます。
検知時間は5秒~5分、検知距離は3メートルから7メートル。

ジャンパーピンで「Single Trigger Mode」と「Repeatable Trigger Mode」に動作モード切り替えできます。

「Single Trigger Mode」:検知したら「High」になる。「検知時間」が終われば「Low」になる。
「Repeatable Trigger Mode」:検知したら「High」になる。検知が続くと、ずっと「High」のまま。検知されなくなってから「検知時間」が過ぎると「Low」になる。

人が来たらブザーが鳴るような仕組みは前者、トイレ電灯は後者を使うとよいのではないでしょうか。

出力で取得するのは High / Low データだけなので、スケッチは単純です。ライブラリの使用も無し。

int ledPin = 13; // LED on Pin 13 of Arduino
int pirPin = 7; // Input for HC-S501
int pirValue; // Place to store read PIR Value
void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(pirPin, INPUT);
  digitalWrite(ledPin, LOW);
}
void loop() {
  pirValue = digitalRead(pirPin);
  digitalWrite(ledPin, pirValue);
}

digitalRead(pirPin); で検出した結果(High / Low)をそのままオンボードのLEDに表示しているだけです。

近づくと、LEDが点灯!

「そしてこのスケッチを実行した後であなたはこう思うのです。「あれ…?これ Arduino 要らなくね?」 と。
https://ht-deko.com/arduino/hc_sr501.html

ああ~たしかに!


Lesson 18 Water Level Detection Sensor Module

シンプル…というか、地味な部品です。動作もシンプルで、水に漬けると、どれぐらい漬かっているかによって抵抗値が変化します。

int adc_id = 0;
int HistoryValue = 0;
char printBuffer[128];
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  int value = analogRead(adc_id); // get adc value
  if(((HistoryValue>=value) && ((HistoryValue - value) > 10)) || ((HistoryValue<value) && ((value - HistoryValue) > 10)))
  {
    sprintf(printBuffer,"ADC%d level is %d\n",adc_id, value);
    Serial.print(printBuffer);
    HistoryValue = value;
  }
}

接続はアナログ0番ピン。値を読み取って、前回と10以上差が出ていればコンソールに表示するだけです。
水位がある一定以上になれば動作するプログラムとか作れそうですね。

かなり「理科の実験」っぽい雰囲気。

結果はこんな。


同じ仕組みを使った土壌センサー(土中の水分量検出)っていうのもありますね。


M5Stack用土壌水分センサユニット
https://www.switch-science.com/catalog/4049/