Top/Devel/電子工作/Arduino/超音波距離センサ

超音波距離センサはてなブックマーク

ultrasonic3.jpg

Maker Faire Tokyo 2013のFabxFab様のブースで購入した超音波距離センサを使ってみます。

必要なもの

ultrasonic1.jpg
ultrasonic2.jpg
  • 超音波距離センサ(今回はSDM-IO)

秋月で販売しているパララックス社のセンサも似たような感じで使えると思います。

手順

  1. SDM-IOのV5.0ピンをArduinoの5Vピンに接続する。
  2. SDM-IOのGNDピンをArduinoのGNDピンに接続する。
  3. SDM-IOのTRIGピンをArduinoのデジタル8ピンに接続する。
  4. スケッチを書き込む。
  5. シリアルモニタを表示させ、超音波センサの前に手をかざしてみる。

スケッチ

fileMeasureDistanceByUltraSonic.ino
#define TRIG_PIN 8 // TRIGピンの接続先DIGITAL端子

#define SPEED_OF_SOUND 340.29 // 音速[m/s]
#define INTERVAL 200 // 時間間隔[ms]
#define ADJUSTMENT 3 // 調整定数[cm]
#define TIMEOUT 18000 // タイムアウト時間[μs]
#define INIT_PULSE_WIDTH 10 // 初期化パルスの幅[μs]

unsigned long beginTime;
unsigned long endTime;
unsigned long elapsedTime;
unsigned int echobackPulseWidth;

float distance;

void setup()
{
  Serial.begin(9600);
  pinMode(TRIG_PIN, OUTPUT);
  digitalWrite(TRIG_PIN, HIGH);
}

void loop()
{
  // 初期化パルス出力
  pinMode(TRIG_PIN, OUTPUT);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(INIT_PULSE_WIDTH);
  digitalWrite(TRIG_PIN, HIGH);
  beginTime = micros(); // 開始時刻取得

  // エコーパルス取得
  pinMode(TRIG_PIN, INPUT);
  echobackPulseWidth = pulseIn(TRIG_PIN, LOW, TIMEOUT);

  if (echobackPulseWidth == 0) {
    Serial.println("distance: -");
  } else {
    endTime = micros(); // 終了時刻取得
    elapsedTime = endTime - beginTime - echobackPulseWidth;
    
    // 往復なので、2で割る
    distance = elapsedTime * SPEED_OF_SOUND / 10000 / 2 - ADJUSTMENT;
    Serial.print("distance: ");
    Serial.print(distance);
    Serial.println("[cm]");
  }
  delay(INTERVAL);
}

備考

公式のデータシートを見つけられなかったので、下記サイトを参考にしました。

参考

Amazon

差分 一覧