超音波センサモジュールをArduinoで動かす①チュートリアル通りに動かす

2022/04/03

Arduino HC-SR04 Ultrasonic Sensor Module 超音波センサモジュール

t f B! P L

超音波センサモジュール「HC-SR04」をArduinoで動かします。

 目次:

今回の目的

ELEGOOのチュートリアル「超音波センサモジュール」(英語版の「Ultrasonic Sensor Module」)を今回はチュートリアル通りに動かします。

※チュートリアルの文章(PDF日本語版含む)もスケッチもELEGOOのサイトから無料でダウンロードできました。

Download ⇒「Arduino Kits & ~」⇒「UNO R3 Starter Kits」⇒ 「ELEGOO UNO R3 The Most Complete Starter Kit」 からダウンロードリンクに辿り着けます。


超音波センサモジュール「HC-SR04」

「HC-SR04」は超音波による距離測定モジュールです。

対象物に向けて超音波を送信し、対象物から反射して戻ってくるのを検出します。

この、送信-検出間の時間に応じた時間をモジュールから受け取り、Arduinoで対象物との距離を算出できます。

(1)裏(?)面
IC3つ。抵抗、コンデンサらしき面実装部品。4本のリード端子

(2)表(?)面
中央上に水晶振動子らしきもの。左右に超音波送信("T"?)・受信("R"?)器

(3)側面

図1.HC-SR04単品

裏(?)面実装のICの1つ(写真左)だけはTI(Texas Instruments)らしきロゴと「LM324」の刻印が読めました。4チャネル入りオペアンプのようです。

端子は4つ「Vcc」「Trig」「Echo」「Gnd」。
チュートリアルの記述によれば、測定距離2cm〜400cm、精度 3mm。

距離測定の動きは以下の通り。
端子「Trig」に10us以上のHigh入力を与えると測定開始
→40kHzの超音波8パルスを送信する
→反射して戻ってきた超音波を検出する
→端子「Echo」のHigh出力期間から距離を算出する
 ※距離=(端子「Echo」の”H”期間×音速(340m/s)÷2

「HC-SR04」は超音波センサとして定番の品らしく、ネットで情報を見つけることができました。
ただ、その中にはデータシートもあったのですが、ELEGOOのチュートリアル同様に情報は乏しいものでした。

定格5V、動作電流15mA、測定角度15°

微妙な傾斜や傾斜の程度をアナログ的に検知することは出来なさそうです。


器材接続

モジュールはArduino直結です。

今回はシリアルモニタをパソコン画面で表示するため、USBをバッテリーではなくパソコンにつなぎます。

図2.機材接続


スケッチ

スケッチ本文は短いものです。

問題はライブラリ「SR04」ですが、内容が多すぎたので読解は置いて起きます。


#include "SR04.h"    // 問題のライブラリ

#define TRIG 12    // モジュールのTRIG端子をArduinoの12pinに設定

#define ECHO 11    // モジュールのECHO端子をArduinoの11pinに設定

SR04 sr04 = SR04(ECHO,TRIG);

long dist;


void setup() {

   Serial.begin(9600);    // 9600bpsでシリアルポートを開く

   delay(1000);

}


void loop() {    // 以下延々と繰り返す

   dist=sr04.Distance();    // 距離測定結果を変数distに代入

   Serial.print(dist);    // 変数dist(の中身)をシリアルポートへ出力

   Serial.print("cm");    // 文字列「cm」をシリアルポートへ出力

   Serial.print("\n");    // 改行をシリアルポートへ出力

   delay(1000);

}



なお「Serial.print("cm");」で「cm」、「Serial.print("\n");」で改行を出力しましたが、これは「Serial.println("cm");」とすれば一行で済みます。オリジナルではそうしてました。


Serial.println(data, format)

  data:出力するデータ

  format:dataの表示形式(HEX、OCT、DEC、BINなど。省略可)


動作

動作させました。

人間の可聴周波数上限は20kHz程度。40kHzの超音波は何も聴こえません。

図3.超音波センサと対象物

パソコンのArduino IDEの「ツール」→「シリアルモニタ」でウインドウを立ち上げると、そこに距離の測定結果が1秒ごとに連続表示されます。

図4.シリアルモニタ

対象物との距離「19cm」と表示され(20cmを狙っておりました)、ほぼほぼ正しそうです。


所感

このモジュールを使うことは簡単。測定原理もわかります。

が、これを回路的、ソフト的にどう実現しているのかとなると今のところさっぱりです。

使えさえすれば良し、では実力つかなさそうですし、かといってライブラリ「SR04」や、モジュールの中味を調べるのは大変そうです。


ELEGOOのチュートリアルは全33Lesson。今回の超音波センサモジュールはLesson10。

この先も中身のわからないモジュールを動かす内容が続きそうです。


。。。深入りしているとタイムパフォーマンス悪そうです。

なにしろ「チュートリアル」です。立ち止まらずにLessonを先に進めることにします。

このブログを検索

ブログ アーカイブ

自己紹介

にほんブログ村

QooQ