●Arduinoで超音波距離センサーモジュールを使う

Amazonで200円以下で購入できるHC-SR04 超音波距離センサーモジュールを手に入れたので超音波距離計を作成したいと思います。
EasyWordMall HC-SR04 超音波距離センサーモジュール For Arduino [並行輸入品]

センサーを見ると送信と受信の二つの部品が付いています。
裏面はこのような感じです。

超音波距離計の表示部分は、 Arduinoで1602 I2C液晶モジュールを使う で作成した表示部分を流用します。


▼ハードウエアの接続

超音波距離センサーモジュールのVccはArduinoの5Vに、GNDはGNDに接続します。
超音波距離センサーモジュールのTrigはArduinoのD2(DIGITALピン2番)
超音波距離センサーモジュールのEchoはArduinoのD3(DIGITALピン3番)に接続しました。

VccとGNDは変更できないですが、TrigとEchoはDIGITALピンの好きな所に接続すればいいと思います。
今回はただ単に小さい順番で2番3番が空いていたという理由だけで接続しています。
もし他のピン番号に変えたい場合にはプログラムで対応してください。


▼ソフトウエアの作成

このセンサーの説明書きを読むと。

電源:5VDC 待機時消費電流:<2mA 有効な角度:<15° 測定可能距離:2cm〜450cm 分解能:0.3cm
トリガー(TRIG)を10μ秒以上HIGHにすると、距離の測定を始めます; 測定後、距離に応じた長さの信号が、ECHOに返されます。
測定結果から距離への換算は、つぎのように計算します(単位ミリ)。 距離=(ECHOがHIGHの時間 X 340)/2;
範囲の最小さ:2cm

説明書きから考えると、
、 トリガーを引いたら開始するよ、
超音波を発信してから受信するまで、ECHOラインがONになるからその時間を計測して距離を測ってね!
という意味で理解しました。
そこで次のプログラムを作成しました。
#include <LiquidCrystal_I2C.h>

//アドレス0x27 16文字2行の液晶
LiquidCrystal_I2C lcd(0x27, 16, 2);

void wait_microsec(long wait) {
   long start = micros();
   while (( micros() - start) < wait);
}

void setup() {

  pinMode( 3, INPUT);
  pinMode( 2, OUTPUT);

  lcd.init();
  lcd.backlight();

}

void loop(){

  digitalWrite( 2, HIGH);
  wait_microsec( 11);
  digitalWrite( 2, LOW);
  
  unsigned long range = pulseIn( 3, HIGH ,1000000);
  if ( range ) {
    range = ( ( range * 340) / 2) / 1000;
  
    lcd.setCursor( 0 , 0);
    lcd.print( range / 10 , DEC);
    lcd.print( ".");
    lcd.print( range - ( ( range / 10) * 10) , DEC);
    lcd.print( " cm           ");
  }
  delay( 200);
}

実際に作成してみました。
プログラム中で小数点一桁まで表示するようにしています。
値段の割にちゃんと動作するセンサーでした。



▲トップページ > マイコンなど