Arduino Mega 2560 LESSON:10 超音波センサーモジュール
概要
超音波センサーモジュールを接続するレッスンです。
接続図はTinkercadでは同じ超音波センサーモジュールが無いので作れませんでした。
完成図は以下のような感じです。
コードは以下のようなモノです。
//www.elegoo.com
//2016.12.08
#include "SR04.h"
#define TRIG_PIN 12
#define ECHO_PIN 11
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
long a;
void setup() {
Serial.begin(9600);
delay(1000);
}
void loop() {
a=sr04.Distance();
Serial.print(a);
Serial.println("cm");
delay(1000);
}
ライブラリの中身 SR04.h
Arduino Mega 2560 LESSON:10 超音波センサーモジュール SR04.h
ライブラリの中身 SR04.cpp
Arduino Mega 2560 LESSON:10 超音波センサーモジュール SR04.cpp
机から天井の高さ、机から床までの高さ、あわせて床から天井までの高さなど、短いメジャーで測れないような長さもおおよその距離が測れるのでいいですね。但し、コンピュータに接続しておかなければならず、LCDなどをMega2560に搭載して、電池駆動にしないと携帯性がないのでいろんなところを測るというのは難しい。あとは面との距離なので、測りたいところに板などを当ててあげないといけないですね。おおよその距離なので、実際に表示された距離を信じると誤差があるのでピッタリにおさまるような設計をしたいときなんかには使えない距離です。おおよそを測りたいときに向いてる。目に見えないところの距離を測っているので、どことどこの距離なのかがわからない謎仕様であるので、使い道はかなり限られると思うな。
ライブラリを使わなくても
#define TRIG_PIN 12
#define ECHO_PIN 11
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
digitalWrite(TRIG_PIN, LOW);
}
void loop() {
// ① 超音波の発射を指示 10μsecのHIGHパルスをトリガピンに信号を送る
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// ② 反射波の往復時間を測定(µs)
unsigned long duration = pulseIn(ECHO_PIN, HIGH, 30000UL);
// ③ 往復時間から距離を計算(cm)
if (duration == 0) {
Serial.println("測定できませんでした");
} else {
float distance = duration * 0.034 / 2.0;
//秒速340mなので秒速34000cmで1μ秒あたりだと0.034cm/μsecになる。これに掛かった時間を掛ける
//往復にかかった時間なので2で割ると片道の距離cmになる。
Serial.print("時間: ");
Serial.print(duration);
Serial.print(" us 距離: ");
Serial.print(distance, 2);
Serial.println(" cm");
}
delay(1000);
}
ライブラリのcm換算するときの計算式は
\[ t=\frac{2}{340}\times1000000 \]
\[ t \approx5882\ \mu s \]