0
0

More than 3 years have passed since last update.

US-100超音波センサーをRaspberry Pi 3Bで使ってみる

Last updated at Posted at 2020-09-29

はじめに

超音波センサーといえば、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モードの関数がない?)

配線図

配線図は次の通りです。
image.png
赤線がVCC(3.3V)、黒線がGNDです。Raphberry Pi3B、US-100のTx、Rx同士を接続しています。本来、UART接続はTxに対してRx、Rxに対してTxを接続するのですが、このセンサーは例外となっています。[1]
実際に配線したものが次の画像になります。どこがどう繋がってるかわかりにくいですが。すみませぬ。(別のセンサーも同時につなげていますが、お気になさらず。ちなみに、こちらのセンサーも使ってみた感じを後日書く予定です。[追記:書きました。])
IMG_5678.JPG

プログラム

プログラムはPythonで記述しました。

Sample_US100_UART.py
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で距離を測定しています。

実行

このプログラムを動かしてみるとこんな感じになりました。
測定結果.png
最初の測定結果は、動かし始めてすぐに測定したので、正常な結果が出なかったと思われます。それ以下の結果はそれっぽい値が出ています。巻き尺を用いて精度も確認してみました。それが以下の表になります。なお、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/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0