#はじめに
超音波センサーといえば、HC-SR04が有名で、そっちのセンサーはいろいろと情報が日本語でもあるのですが、US-100はほとんど情報がなかったので、使ってみた感じを残そうと思います。
#US-100とは
US-100は見た目上はHC-SR04とほぼ同じですが、違う点が2つあります。[2]
・入力電圧が2.4V~5.5Vまで対応している
・「HC-SR04」モードと「シリアルUART」モードの2つがある
1点目に関しては、HC-SR04は5Vが基本的な入力電圧なので、RaspberryPiで扱おうと思うと、GPIOの電圧が3.3Vなので、減圧が必要になってくるのです。それが、US-100だと不要になります。
2点目に関しては、「HC-SR04」モードはHC-SR04と同じ方法で測定をするモードで、「シリアルUART」モードはUARTという通信を用いて、距離と温度をはかれるモードです。超音波センサーで距離を測るとき、音波の進むスピードは温度によって変わるため、温度を測ることによって距離をより正確に測ることができます。
今回はUARTモードにて測定しました。HC-SR04モードも試そうと思ったのですが、プログラムが作れなかったので、試していません。(配布されているPythonライブラリにHC-SR04モードの関数がない?)
#配線図
配線図は次の通りです。
赤線がVCC(3.3V)、黒線がGNDです。Raphberry Pi3B、US-100のTx、Rx同士を接続しています。本来、UART接続はTxに対してRx、Rxに対してTxを接続するのですが、このセンサーは例外となっています。[1]
実際に配線したものが次の画像になります。どこがどう繋がってるかわかりにくいですが。すみませぬ。(別のセンサーも同時につなげていますが、お気になさらず。ちなみに、こちらのセンサーも使ってみた感じを後日書く予定です。[追記:書きました。])
#プログラム
プログラムはPythonで記述しました。
import time
import serial
import adafruit_us100
uart = serial.Serial("/dev/ttyS0", baudrate=9600, timeout=1)
us100 = adafruit_us100.US100(uart)
try:
while True:
input("Press Enter to measure...")
print("-----")
print("Temperature: ", us100.temperature)
time.sleep(0.5)
print("Distance: ", us100.distance)
print("-----")
time.sleep(0.5)
except KeyboardInterrupt:
pass
基本的には参考サイト[1]に載っているサンプルをそのまま書いています。
uart = serial.Serial("/dev/ttyS0", baudrate=9600, timeout=1) でUARTのセットアップを、
us100 = adafruit_us100.US100(uart) でUS100のセットアップをしています。
try - except KeyboardInterruptはキーボード割り込み(Ctrl+C)をするまではtryの中をループするという文です。このtry文の中はサンプルから少し変更しています。Enterキーを押した後に測定をするようにしています。測定はus100.temperatureで温度を、us100.distanceで距離を測定しています。
#実行
このプログラムを動かしてみるとこんな感じになりました。
最初の測定結果は、動かし始めてすぐに測定したので、正常な結果が出なかったと思われます。それ以下の結果はそれっぽい値が出ています。巻き尺を用いて精度も確認してみました。それが以下の表になります。なお、5回測ったその平均を書いています。
距離(cm) | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100 |
---|---|---|---|---|---|---|---|---|---|---|
測定結果(cm) | 10.0 | 19.8 | 29.2 | 39.3 | 49.6 | 60.8 | 71.8 | 80.1 | 91.8 | 99.5 |
距離(cm) | 110 | 120 | 130 | 140 | 150 | 160 | 170 | 180 | 190 | 200 |
---|---|---|---|---|---|---|---|---|---|---|
測定結果(cm) | 111.5 | 121.6 | 131.4 | 141.0 | 152.4 | 159.1 | 169.5 | 182.0 | 192.0 | 199.8 |
これらを見るに、おおむね正確かな?と思います。ただ、170㎝以降を測定していた時、ときたま163㎝付近の値を出す時がありました。その付近を見てみると、物が置いてあったので、それに超音波が反射していたと思われます(ちなみに巻き尺から物までの距離は約29㎝でした)。障害物にはあまり強くないかも?
#感想
実はこれが初めての電子工作だったりするのですが、うまく測定できてよかったと思います。超音波センサーで距離を測ったわけですが、正直2センチ、3センチぐらいは誤差が出るかな?と思っていた部分もあったので、意外と精度がいいものなんだなと思いました(まあ2センチ以上誤差が出ているときもありますが)。また、US-100は幅広い電圧で動作するので、電圧についてあまり考えなくてもよい点もいいと思います。(厳密にはちゃんと考慮したほうがいいのかもしれませんが…)。ここまでご覧くださりありがとうございました。
#参考サイト
[1]Python & CircuitPython | Ultrasonic Sonar Distance Sensors | Adafruit
https://learn.adafruit.com/ultrasonic-sonar-distance-sensors/python-circuitpython
[2]US-100搭載 超音波距離センサ 3V/5V
https://www.switch-science.com/catalog/5512/