超音波センサhc-sr04を使って入退室判定を行う

目的

 超音波センサを使って入退室の判定をする。

 

・使ったもの

 超音波センサhc-sr04

HC-SR04 超音波距離センサーモジュール For Arduino

HC-SR04 超音波距離センサーモジュール For Arduino

 

  ブレッドボード

 ジャンパワイヤ

 ノートパソコン(windows10)

 

・方法

 (1)回路作成

    TrigピンをArduinoのデジタルピン8に接続、Echoピンをデジタル9ピン

    に接続。回路図を図1に示した。また組み立てた回路の写真を図2に

    示した。

f:id:shangtian:20170408232852p:plain

図1:超音波センサの回路

f:id:shangtian:20170408232811j:plain

図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 と表示する。

f:id:shangtian:20170409001452p:plain

図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つしか

 無いため短い感覚で判定がころころ変わってしまうので改良が必要。

f:id:shangtian:20170408233651p:plain

図5:入退室判定結果

<参考文献>

みんなのArduino入門

みんなのArduino入門

みんなのArduino入門