【ESP32 プログラム】人感センサ(HC-SR501)
人を感知するセンサを用いたESP32のプログラムを作成してみます。
人を感知することで、人がいるときはライトをつけるシステムや、防犯用に映像を記録するシステムなどに応用することができます。
今回はHC-SR501という安価な人感センサを使いますが、私の使った感想として個体差が大きいような気がしますし、調整が難しく感じます。
人を適切に感知しなければならない場合には少し高価なセンサを使う方がよいかもしれません。
とは言え、HC-SR501の調整方法についてちょっとだけ紹介しておきます。
図1を見てみてください。2つの調整ツマミがありますね。向かって左側はセンサが人を検知してから信号出力を出す時間を調整します。おおよそ2.5秒から220秒の調整ができることになっています。向かって右側は人を検知する距離です。およそ1.5mから6mの範囲で調整できます。一応はこういった仕様ですがシステムを構築した後で適宜調整するしかありません。
結線図
図2は結線図を示しています。HC-SR501は3つの端子があります。この向かって右側は電源(5V)と左側はGND、中央は信号(ON or OFF)です。電源とGNDはESP32のそれぞれのポートに接続します。信号ポートは今回はGPIO27に接続することにします。
今回は人を検知した時に発光ダイオードを発光させるようにします。
GPIO23をLEDのアノード(端子の長い方:+側)に接続します。カソード(端子の短い方:ー側)に1kΩの抵抗を接続しESP32のGNDに戻します。
プログラム
ESP32のプログラムを以下に示します。
HC-SR501が人を検知すると0.5秒間LEDを点灯します。人を検知し続ければ点灯し続けます。人を検知していないときはプログラムはガンガンサイクルを繰り返すのでセンサがちょっとでも検出すればLEDを点灯する仕組みにしています。
センサの設定の方でも出力の長さを調整しているため、気をつけてセンサ側での時間設定しないと点灯してばかりのシステムとなってしまいます。
// HC-SR501 の出力ピンを接続するGPIOピンを定義
const int pirPin = 27; // HC-SR501のOUTピンを接続したESP32のデジタルピン
void setup() {
// 人感センサーのピンを入力モードに設定
pinMode(pirPin, INPUT);
// LEDのピンを出力モードに設定
pinMode(23, OUTPUT);
}
void loop() {
// センサーからの出力を読み取る
int sensorValue = digitalRead(pirPin);
if (sensorValue == HIGH) {
// 動きが検知された場合 LEDを0.5s点灯させる
digitalWrite(23, HIGH);
delay(500);
} else {
// 動きが検知されない場合 LEDを消灯
digitalWrite(23, LOW);
}
}
購入部品
最新情報は「電子工作お買い物一覧」の記事を参照ください。
リンク切対応や代替部品の紹介もしています。