ESP32で人体赤外線感応モジュールを試してみたいと思います。
前回、明るさを計測するセンサ(CdSセンサ)を試してみて、「夜に人が近づくと点灯するライトを再現したいな~」と思ったので、今回は、CdSセンサと人感センサを組み合わせて実際に作ってみたいと思います。
ESP32と人感センサの接続
ESP32と人感センサモジュールを接続していきます。
準備するもの
今回使用するものは、以下になります。
- ESP32
- ブレッドボード
- ジャンパーワイヤー
- 人感センサモジュール(HC-SR501)
- LED
- 抵抗(220Ω)
人感センサモジュール
人感センサは、Amazonから「HC-SR501 人体赤外線感応モジュール」を購入しました。
白いケースは簡単に外すことができます。
主な仕様は以下になります(Amazonより)。
- 動作電圧範囲:DC4.5V~20V
- ドレイン電流:50uA
- レベル出力:ハイレベル:3.3V、低レベル出力:0V
- 遅延時間:0.5~300秒(調整することができます)
- ブロッキング時間:2.5秒
- 外形寸法:32 x 24mm
- 検出範囲:100度
- 作業温度:-15 ~ +70度
- 誘導レンズサイズ:直径:23mm
- 感知距離:センター 3〜7m サイド 3〜4m
接続
部品を以下のように接続していきます。
人感センサの裏側は、以下のようになっていますので、接続には注意して下さい。
- 遅延時間調整ボリューム
- 反応距離調整ボリューム
- 再検知切替スイッチ
プログラム作成
人感センサーの入力を監視して、LEDをON・OFFするプログラムを作成します。
プログラム
const int HUMAN_IR_SENSOR = 5; // 人感センサ
const int LED = 22; // LED
void setup() {
pinMode(HUMAN_IR_SENSOR, INPUT_PULLUP);
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
Serial.begin(115200);
Serial.println("Sensor Start");
}
void loop() {
int val = digitalRead(HUMAN_IR_SENSOR); // 人感センサ値 読込
Serial.println(val);
digitalWrite(LED, val); // LED制御
delay(100);
}
プログラムを簡単に説明します。
5行目で今回使用する人感センサを入力設定で定義しています。
12~17行目のloop()関数で人感センサの入力値を監視して、センサが人を検出したらLEDをONする処理を行っています。
また、センサのON・OFFがどのように制御されているか確認するために、シリアル通信でデバッグ出力しています。
動作確認
実際に接続して動作を確認してみます。
センサに手を近づけるとLEDが点灯することが確認できました。
しばらく待っていると、LEDが自動で消灯します。そして、再度手を近づけるとLEDが点灯しました。
シリアル通信の出力を確認すると、何もしない状態では「0」が出力され、手を近づけると「1」が出力されて、しばらくするとまた「0」が出力されます。
でも、いまいちLEDが消灯するタイミングと、再度点灯するタイミングがつかめませんでした。Amazonで購入した製品のページを見ていると、説明資料があったので、そちらをダウンロードしてみました。
ダウンロードした資料によると、遅延時間と反応距離を調整できるようです。この遅延時間が、どうやらLEDの点灯と消灯のタイミングに影響しているみたいです。
左側のボリュームが遅延時間になっていて、人感センサがONになってからOFFになるまでの時間が調整できます。
また、右側のボリュームでセンサの反応距離を調整できるようです。
- 遅延時間調整(左側):0.5 ~ 300 秒
- センサ反応距離(右側):3 ~ 7 m
さらに「ブロッキング時間」があり、センサが再検知するまで「2.5秒」かかっているようです。むずかしい・・・。
さらにさらに、再検知ON・OFFをジャンパーピンで切り替えることが出来るようです。
再検知がOFFの場合は、人感センサがONしてから、遅延時間が経過するまで再度センサが検知しないようになります。再検知をONにすると人感センサがONになった状態でもセンサが検知するようになり、最後にセンサが検知したタイミングから遅延時間が経過するまで、センサがONの状態になります。ちょっと、ややこしいです。
ここまで調査してわかったことは、人感センサを用いてLEDを点灯させるという用途では、ESP32というかプログラム自体が不要なようです。なるほどです。
ちなみに遅延時間のボリュームは、中間点で「200秒」ぐらい、最大にしたら「400秒」を超えるぐらいで、センサがOFFになりました。調整が難しいです。
センサ反応距離は狭い室内で確認していたので、いまいち正確に計測できなかったため、断念しました。
CdSセル追加
人感センサモジュール(HC-SR501)は、CdSセル(フォトレジスタ)を追加することで、簡単に感光性制御、日中、または光検知を設定できるようです。
試しに、CdSセルを追加してみました。
上の図の部分にCdSセルをはんだ付けします。
CdSセルを追加すると明るいところでは、LEDが点灯しなくなりました。
暗くした状態で手を近づけるとLEDが点灯します。なかなかの優れものです。
まとめ
ESP32で人体赤外線感応モジュールを試してみました。
結論から言うと人感センサモジュール(HC-SR501)は、ESP32やプログラムが不要で、人を検知してLEDのON・OFF制御ができる優れものでした。
さらに、感光性センサ(CdSセル)を追加できる拡張性まで備えていました。便利です。
実際に使用する場合は、人感センサモジュールとトランジスタを組み合わせて、ライトをON・OFFできるようして、夜間に人が近づくと点灯するライトが簡単に作れるようです。
「人が近づくと反応するセンサ」というだけで楽しいので、いろいろな遊び方を考えていきたいと思います。
【参考図書】