目的
超音波センサを使って入退室の判定をする。
・使ったもの
超音波センサhc-sr04
HC-SR04 超音波距離センサーモジュール For Arduino
- 出版社/メーカー: サインスマート(SainSmart)
- メディア: Wireless Phone Accessory
- この商品を含むブログを見る
ブレッドボード
ジャンパワイヤ
ノートパソコン(windows10)
・方法
(1)回路作成
TrigピンをArduinoのデジタルピン8に接続、Echoピンをデジタル9ピン
に接続。回路図を図1に示した。また組み立てた回路の写真を図2に
示した。
図1:超音波センサの回路
図2:組み立てた回路の写真
(2)プログラムコード
超音波センサで測定し距離(cm)の値を返す関数を作成。
超音波センサで距離を0.5秒ごとに測定し、0.5秒前の測定値と
現在の測定値を比較する。0.5秒前の測定値をa、現在の測定値を
bとしたとき、b-a<0であればセンサに人が近づいてきたことを
意味している。b-a>0であればセンサから遠ざかっていること
意味している。図3を参照。図3では、矢印方向に人がすすむこととする。
0を境界とすると誤判定が多くなったのでb-a<-2であれば入室判定。
b-a>2であれば退室判定とする。それ以外はout of range と表示する。
図3:判定
#define TRI 8 //trigをD8pinに設定
#define ECH 9 //echoをDピンに設定
void setup() {
Serial.begin(9600);
pinMode(TRI,OUTPUT);
pinMode(ECH,INPUT);
}
void loop() {
float a;
float b;
a = echo();
delay(500);
b = echo();
delay(500);
if(b-a<-2) {
Serial.println("Someone entered the room");
}else if(b-a>2){
Serial.println("Someone left the room");
}else {
Serial.println("out of range");
}
a = b; //aにbの値を代入する。
}
float echo() {
int dur;
float dis;
digitalWrite(TRI,HIGH);
delayMicroseconds(10);
digitalWrite(TRI,LOW);
dur = pulseIn(ECH,HIGH);
dis = (float) dur*0.017;
return floor(dis); //小数点以下を切り捨て、値を返す
}
図4:プログラムコード
*図2のコードをコンパイルしたときはコメントを消すとエラーを
解消できる。
・結果
入退室の判定をシリアル通信にて表示した。判定に使うデータが2つしか
無いため短い感覚で判定がころころ変わってしまうので改良が必要。
図5:入退室判定結果
<参考文献>
みんなのArduino入門