RaspberyPi 3B+でOSOYOOのセンサーセットに含まれている人感センサーの動作確認をしてみました。
動作確認として、人感センサーが感知した時にLEDを点灯させることをやってみようと思います。
それでは、説明していきたいと思います。
1.人感センサーとは
人感センサーは、人が近づくと検知するセンサーです。PIRセンサーとも言います。
実物は、こんな感じです。
白いカバーは簡単に外すことができ、外してみるとこんな感じです。
型番は、HC-SR502です。
ネットでデータシートを検索しても見つからなかったのですが、
HC-SR501のデータシートがあったので参考にしました。
2.人感センサーの詳細
人感センサーのピンは下図の赤枠で、左から5V、OUT、GNDになっています。
そして、調整ツマミが2つあります。
・左側が検知したときのGPIO線のHighの保持時間で、半時計回りでMIN値(3秒)、時計回りでMAX値(5分)。
・右側が検知する距離の長さを調整で、半時計回りでMIN値、時計回りでMAX値(7m)。
これらを人感センサーの用途によって調整します。
例えば、人が来た時に電灯を点ける仕組みで、保持時間が短いと人がいてもすぐ消えてしまいます。
なので、長めにするために反時計回りに回して調整します。
この画像の角度で大体1分ぐらいでした。
具体的な値を指定してツマミ調整できないので、自分の設定したい値を感覚で調整して、
あとは動作確認しながら決めるしかありません。
3.RaspberryPi 3B+ ボードと人感センサーの接続
RaspberryPi 3B+ ボードと人感センサーとLEDの接続は、こんな感じです。
人感センサーのOUTにGPIO17に接続していて、LEDは、GPIO18に接続しています。
接続自体は、全然簡単なのですぐに動作確認できると思います。
4.人感センサーの動作確認
人感センサーで検知したときにLEDを点灯させるサンプルコード(C言語)が、
下記になります。コンパイルする際には、-lwiringPiを追加する必要があります。
#include <wiringpi.h> #include <stdio.h> #include <stdlib.h> #define LEDPin 1
#define PIRPin 0 int main(){
int bright; if(wiringPiSetup()==-1){ printf("setup wiringPi failed!\n"); exit(1); } pinMode(LEDPin, OUTPUT);
pinMode(PIRPin, INPUT);
while(1){
if( !( digitalRead( PIRPin ) ) ){
digitalWrite( LEDPin, LOW );
printf("| no alarm... |\n");
delay(1000);
}
else{
digitalWrite( LEDPin, HIGH );
delay(500);
printf("| alarm... |\n");
}
} return 0; }
人を検知すると、GPIO17がHighになるので、その時にLEDを点灯させています。
whileループでGPIO17を監視していますが、CPUが高負荷にならないように、delayで間隔をあけています。
また、一度検知すると人がセンサーから離れても、
調整ツマミによって決めた時間の間GPIO17がHighになっているので、その間はLEDがずっと点灯します。
5.最後に
人感センサーは、接続や検出の動作確認が簡単です。
しかし検知距離や検知してからのGPIO線のHighの時間の調整が少し面倒ですが、
動作確認を繰り返していると組み込みをやっているなあと楽しくやれました。
<関連・おすすめ記事>
Raspberry Pi (ラズパイ)の購入後すぐにやっておきたい設定を解説 - 水瓶座列車
Raspberry Pi (ラズパイ)で役に立つ書籍のおすすめランキングベスト5 - 水瓶座列車
Bluetoothでマルチペアリング(複数台接続)できるマウスのおすすめランキングベスト5 - 水瓶座列車
RaspberryPi (ラズパイ)の購入時に最低限必要なものとおすすめセット - 水瓶座列車
Raspberry Pi 3B+ でI2CキャラクタLCD(1602) の動作確認 - 水瓶座列車
Raspberry Pi(ラズパイ)のOSをバックアップ・リストアする方法 - 水瓶座列車