今回は Arduino に超音波センサ HC-SR04 (ELEGOO社製) を接続する方法について述べます。まずは、データシートを探してみます。早速、ありました。秋月電子通商のページにリンクされています。また、スイッチサイエンスのページにはサンプルプログラムが掲載されています。ただ、赤い文字で何やら気になる記述があります。。。気にせず行きます。
スイッチサイエンスのサンプルプログラム、何の苦労もなしに動きます。シリアルモニターに測定距離が表示されます。超音波の反射する素材により大きな誤差が出ます。金属製の障害物にすると誤差の少ない値が出てきます。
https://www.switch-science.com/catalog/1606/ より
では、プログラムを見ていきましょう。
int Trig = 8;
//8番ピンをTrig端子とする
int Echo = 9;
//9番ピンをEcho端子とする
int Duration;
//Echo端子の出力に現れるパルス幅(データシート参照)
float Distance;
//測定距離
setup()
Serial.begin(9600);
//シリアル通信の初期化
pinMode(Trig, OUTPUT);
//Trig端子を出力端子として使う
pinMode(Echo, INPUT);
//Echo端子を入力端子として使う
loop()
digitalWrite(Trig, LOW);
//Trig端子にLOW電圧を出力する
delayMicroseconds(1);
//1us動作を停止する
digitalWrite(Trig, HIGH);
//Trig端子にHIGH電圧を出力する
delayMicroseconds(11);
//11us動作を停止する
digitalWrite(Trig, LOW);
//Trig端子にLOW電圧をかける
//ここまでの5行で11us幅のパルスを出力する
Duration = pulseIn(Echo, HIGH);
//Echo端子に入力されるパルスを検出します
if (Duration > 0)
//もし、パルスが検出されたら
Distance = Duration / 2;
//計測対象までの時間を半分にする(データシート参照)
Distance = Distance*340*100/1000000;
//距離は時間×速度
Serial.print(Duration);
//伝達時間差
Serial.print(" us ");
//usと表示
Serial.print(Distance);
//距離
Serial.println(" cm");
//cmと表示
delay(500);
//500ms待って新たなトリガを発生
では、ArduinoといえばLED(?)ですから、「超音波センサにより測定した距離が6cm以下になったらLEDが点灯する」というプロジェクトを遂行します(そんな大げさなものではない、6cmにしたのは本日のラッキーナンバーだったから)。
プログラムの変更点としては、Distanceが6より小さくなったら、digitalWriteでLEDを点灯するだけで行けそうです。プログラムは以下のように変更します。
int Trig = 8;
int Echo = 9;
int LED = 13;
int Duration;
float Distance;
void setup() {
Serial.begin(9600);
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
pinMode(LED, OUTPUT);
}
void loop() {
digitalWrite(Trig,LOW);
delayMicroseconds(1);
digitalWrite(Trig,HIGH);
delayMicroseconds(11);
digitalWrite(Trig,LOW);
Duration = pulseIn(Echo,HIGH);
if (Duration>0) {
Distance = Duration/2;
Distance = Distance*340*100/1000000;
Serial.print(Duration);
Serial.print(" us ");
Serial.print(Distance);
Serial.println(" cm");
}
if (Distance < 6.0) {
digitalWrite(LED, HIGH);
}
else {
digitalWrite(LED, LOW);
}
delay(500);
}
プログラムの説明は省略します。質問はコメントのほうへお願いします。完成した回路は次の写真のようなものです。
今回は以上です。次回は、超音波センサを利用してモーター制御をしたいと思います。