部品屋根性(31) HC-SR04 超音波センサ、3.3V信号接続

Joseph Halfmoon

HC-SR04 超音波センサは、Arduino業界?では定番の測距センサであるようです。Arduino環境では簡単な操作で距離を測定できます。5V電源、5V信号レベルのモジュール。5V系のArduino UNOに直結して動作確認した後、3.3V系のWio TerminalのGroveコネクタに接続してみます。前回製作のレベル変換器活用。

※「部品屋根性」投稿順Indexはこちら

今回、部品箱からとりいだしたるHC-SR04センサは、お楽しみの中華部品キットKuman社K4キットからの一品。実は「またパチモンかよ」などと邪なことを考えてしまったんであります。どうもすみません。それというのも上のアイキャッチ画像にかかげましたる表面はともかく、裏面がちょっと怪しかったから。下をご覧ください。ICが3チップ搭載されているうち、2つのマーキングが消されています。残り一つは「TI(元はナショセミ)の」LM342オペアンプに見えますが、なんかTIのロゴのiの字が潰れてないかい。。。 まあでも、よく使われているセンサだけに、WebをあさるとHC-SR04の写真は大量に出てまいります。秋月電子通商殿でも売っているし。それらの写真拝見しても皆マーキング消されているっぽい。昔はそういうボードもたまにあった気がします。とにかくこれがHC-SR04標準?HC-SR04 back

超音波で距離を測る原理は分かり易いです。

    1. 超音波トランスミッタで40kHzの超音波(8周期分)を送信する
    2. 送り出した超音波が物体で跳ね返って戻ってくる
    3. 超音波レシーバで受信する。
    4. 送信から受信までにかかった時間をホスト(マイコン)側が測定しやすい信号にして出力

ホスト側からするとデジタル信号2本で制御可能。送信をトリガするための信号(上の写真のTrig端子)にHighパルス10μs与える。その後、Echo端子のパルス幅を測定する。パルス幅の時間は往復の時間であることを考慮した上で空気中の音速(約340m/s)で時間を距離に換算する、という具合。(K4キットには”HC-SR04_ultrasonic_module.pdf”なる「データシート」が付属していて、その「7. Module Timing」で上の説明がタイミングチャート化されているのだけれど、残念なことにEcho端子の波形タイミングの記載、誤っているように思われます。)ぶちゃけArduinoでは

pulseIn(端子番号、幅を測るパルスの極性)

という関数でマイクロ秒単位のパルス幅が測定できるので、Echo端子のHigh期間をこれで測ればよい、と。温度とか無視すれば、得られた値を定数58で割ってやればcmに換算できる。

HC-SR04センサは5V電源、5V信号レベルなのでArudino Uno(今回使用は互換機だけれども)には直結できます。Kuman社の例題プログラムどおりに接続したところがこちら。

Uno and HC-SR04計測単位(レゾリューション)はμ秒、1μ秒に超音波が進む距離は0.34mmくらいなので、cm単位で小数点以下2桁まで出力していても下の方は鵜呑みにしてはいけないこと(さらにいえば温度とかも加味されていない)を念頭において結果を見てみると下のような感じ。反射させる物体の位置を変化させている様子です。

Uno HC-SR04 results物理的には温度で音速変わる筈なのでその辺も気になります。ネット情報探したら、以下のサイトが分かり易い上に「計算機」も使えるようになっていてよかったです。あちゃぴー様ありがとうございます。

音速の計算

最近寒いので0℃くらいだと330m/s、夏場30℃を越えると350m/sくらいまで変わるようです。温度でプラマイ数パーセントくらいは変わるなあ。でももっと気になるのが、反射する相手の材質とか角度であります。昔、この手の超音波センサを使ったことあるのですが、

    • 超音波を吸収するような素材だと上手く距離が取れない
    • 超音波を良く反射する素材でも、正面からでなく角度が付くとうまく取れないことがある

です。今回も、綿入れの布地では距離が出鱈目にでるようでした。

まあ、5V系IFのArduino UNO(互換機だけれども)では動作したので3.3V系インタフェースのWio Terminalに接続を試みます。

HC-SR04、Wio Terminal の3.3V系Groveポートとの接続

早速、前回作成したGroveインタフェース用3.3V信号-5V信号変換器に登場願い、Wio Terminalのデジタルポート側のコネクタに接続しました。電源の5Vはブレッドボード用のものからHC-SR04に与え、変換器内の5Vプルアップにはそちらから電圧がかかります。以下の写真で、Wio Terminalの右下にナナメっているボードが変換器です。

Wio Terminal and HC-SR04端子番号こそ、GroveポートにあわせてArduino Unoの時とは変更しましたが、単なる pulseIn()関数にてそのまま動作いたしました。(SeeedStudio社からも超音波センサ搭載のGroveモジュールが提供されていて、そちら用には専用のソフトウエアパッケージがあるようですが、そちらにお出ましいただく必要はありませんでした。)

例によってDigilent社Analog Discovery2を使い、波形も見ておきました。黄色がTrig信号(10μS幅)、青がEcho信号です。黄色が立ち下がってから青が立ち上がるまで約200μSの時間がありますが、40kHzの音波x8周期は200μSなので、この期間に超音波トランスミッタから音波が放たれているものと推測されます。

3cm付近に反射板置いたとき

distance 3cm

6cm付近に反射板置いたとき

distance 6cm

9cm付近に反射板置いたとき

distance 9cm距離に応じてEcho信号の幅が広がっているのが観察できましたです。

今回は、信号変換器、活躍したな。よかった。

部品屋根性(30) Groveモジュール 信号レベル変換の罠? に戻る 

部品屋根性(32) マイクロチップ MCP23017、IO Expander へ進む