超音波測距センサーとは
超音波測距センサーはソナー(Sonor)とも呼ばれる部品です。スピーカーから超音波を飛ばし、物に当たって跳ね返ってきた超音波をマイクで拾うことで距離を測ります。
回路図
回路を次のように接続します。5Vの位置が分かりにくいですが間違えないようにしてください。
ちなみにArduino Nanoのピン名は以下のとおり。
プログラム
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Arduino Nano and HC-SR04 Sonor | |
// created by aoica | |
// http://aoica.blogspot.jp | |
// D12: Trigピン | |
// D11: Echoピン | |
int trig = 12; | |
int echo = 11; | |
int duration = 0; // 音の往復時間(μs) | |
float distance = 0.0; // 距離 | |
void setup() { | |
Serial.begin(9600); // シリアル通信を開始 | |
pinMode(trig, OUTPUT); // trig(D12)ピンを出力に指定 | |
pinMode(echo, INPUT); // echo(D11)ピンを入力に指定 | |
} | |
void loop() { | |
// Trigに起動パルスを送る | |
digitalWrite(trig, LOW); | |
delayMicroseconds(1); | |
digitalWrite(trig, HIGH); | |
delayMicroseconds(11); | |
digitalWrite(trig, LOW); | |
// EchoがHIGHの時間をμsで測る | |
duration = pulseIn(echo, HIGH); | |
// 往復時間が0より大きいなら表示 | |
if (duration > 0) { | |
// 距離を計算 | |
distance = 340.0 * (duration/2) * 100 / 1000000; | |
// 距離をシリアルモニタに表示 | |
Serial.print(distance); | |
Serial.print("cm\n"); | |
// 音の往復時間を初期化 | |
duration = 0; | |
} | |
} |
説明
31行目
pulseIn()関数はピンの入力がHIGHかLOWになっている時間を返す関数です。上のプログラムではpulseIn(echo, HIGH)としているので、echo(D11)ピンがHIGHになるとHIGHになっている時間を計測してマイクロ秒で返してくれます。
37行目
この行では距離を計算しています。単位変換を行っているので謎の数字が入っていますが、本質は単純です。
このことを念頭に置いて時間と距離と速さの関係を考えてみます。音速は340 [m/s]で一定なので音の移動時間が判れば、音の移動した距離が分かることになります。
プログラムではduration/2となっていますが、これは距離を半分にするためです。音はスピーカーから出て壁に当たり、マイクに入るという経路を移動しているため、音が移動するのにかかった時間は実際には往復時間となるため半分しているわけです。
動作確認
測った距離を表示するためのディスプレイがArduino Nanoには無いので、今回のプログラムではシリアル通信を使ってコンピュータにデータを送っています。Arduino IDEにはシリアル通信で送られてきたデータを表示するためにシリアルモニタという機能が付いているので使ってみます。Arduino IDEのウィンドウの右上(下の画像の赤丸のところ)をクリックすると、データが表示されると思います。
以上です。訂正等は下のコメント欄へどうぞ。
0 件のコメント:
コメントを投稿