Arduinoで3ピン超音波距離センサPing)))を使ってみた

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る
       

Parallax社から発売されている超音波距離センサPing)))を使ってみたのですが,なかなか調べても使い方が見つからなかったので,書き残しておきたいと思います.

使うもの

Arduino UNO

Ping)))(Parallax社 超音波距離センサ(3ピン))

Ping)))は3cm~3mの距離を計測することができます.

使い方

配線

図のように配線します.Ping)))センサのピンに「5V」とか「GND」と書かれているので,間違える事はほとんどないかなと思います.

プログラム

Arduino側のプログラムは以下のとおりです.I/Oピンが1つなのでpinModeのINPUTとOUTPUTを切り替えて使うところがミソです.

const int pingPin = 11;
unsigned int duration, distance;

void setup() {
  Serial.begin(9600);
}

void loop() {
  pinMode(pingPin, OUTPUT);          // 11番ピンをOUTPUTにセットする
  digitalWrite(pingPin, LOW);        // 11番ピンからLOWの信号を送る
  delayMicroseconds(2);              //  2マイクロ秒待機
  digitalWrite(pingPin, HIGH);       //  測定を始める(パルスを送る)
  delayMicroseconds(5);              //  5マイクロ秒のパルス
  digitalWrite(pingPin, LOW);        // 測定を終わる
  pinMode(pingPin, INPUT);           // 11番ピンをINPUTにセットする
  duration = pulseIn(pingPin, HIGH); // 返ってきたパルス信号を測定する
  distance = duration * 0.01724;        // センチメートルに変換する
  Serial.println(distance);            // シリアルモニタに結果を表示する
  delay(50);              // 50msのディレイ
}

センチメートルに変換するところは,このプログラムでは0.01724を掛けていますが,厳密に測定するにはこの値を気温によって変えなければいけません.

超音波センサの値と距離の変換式の求め方

超音波がある時間内に移動する距離sは,音速cと時間tの積になります.超音波センサで計測した時間は往復の時間となり,2倍の時間がかかっているので,結果を2で割ると,

s = c × t ÷ 2

となります.

音速cは気温Tc(摂氏温度)によって変動します.cを求める式は,

c = 331.5 + ( 0.6 × Tc )

です.

最後に単位合わせのために,100/100万を掛けます.

1m=100cm,1s=100万㎲です.

上の式の音速cは単位が[m/s],センサが計測した時間tは[㎲]なので,これを[cm]に変換するには,音速cの単位を[cm/㎲]する必要があります(これでc×tをすると[cm]が残る).

そのために,100/100万を掛けます.

すると,距離sを求める式は,

s = (c × t ÷ 2) × (100 ÷ 1,000,000)

となるので,上のプログラムの0.01724の場所を求める式は

(331.5 + 0.6 × Tc) ÷ 20000

になります.

Tips:処理速度を求める方へ

0.01724という数字は,室温(22℃)の場合の値になります.

0.01724は1/58とかなり近い値を取るため,0.01724を掛けるよりも58で割った方が処理速度が速くなります.

この理由は,整数演算の方がメモリを使わないので,浮動小数点演算よりも高速に処理できるからです.

まとめ

日本語で,ArduinoとPing)))を使った距離の計測のウェブページが見当たらなかったので,今回記事にしてみました.

どなたかの参考になれば幸いです.

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る