今回は、pythonを用い超音波センサーであるHC-SR04を使用します。今回Ubuntu16.04でプログラムを実行しましたが、おそらくUbuntuでなくても無事動くと思います!
詳細をここに置いておきますね。
http://akizukidenshi.com/catalog/g/gM-08762/
こいつのドキュメントを読むと、Trigに10us以上信号を送ると超音波を送り出すようです。
2つ目のURLに書いてある説明がわかりやすかったです。
仕様
- 電源電圧 5V
- 待機電流 2mA未満
- 信号出力 0-5V
- センサ角度 15度以下
- 測定可能距離 2cm-450cm
- 分解能 0.3cm
- 端子間隔 2.54mm
使い方
- トリガ端子を10us以上Highにしてください。
- このセンサモジュールが40kHzのパルスを8回送信して受信します。
- 受信すると、出力端子がHighになります。
- 出力端子がHighになっている時間がパルスを送信してから受信するまでの時間です。
- 出力端子がHighになっている時間の半分を音速で割った数値が距離です。
配線の仕方
HC-SR04には端子が4本ありますが、それぞれをどのようにBeagleBoneに配線したかを記します。
-
GND
グランドはBeagleBoneのグランドに接続していきます。 -
Vcc
P9_5のVDD_5Vに接続します。理由としては、HC-SR04の使用電圧は5Vのため5Vを提供するPINに接続します。 -
TRIG
トリガーはGPIOに接続します。今回はP8_16
を使用します。 -
ECHO
エコーもGPIOに接続します。今回はP8_11
に接続します。
注: HC-SR04で使用される電圧は5Vです。しかし、BeagleBOneのGPIOの電圧は3.3Vです。そのため、ECHOからの信号を受け取る際は電圧を分圧してあげる必要があります。その際、カラー抵抗などを用いると思います。わたしは底らへんの知識がなく、抵抗値の見分け方、分圧の仕方などまったくわからなかったので、以下に回路を組む際に参考にしたサイトを複数挙げておきます。今回、同じ抵抗が3本ないし、1:2の関係も築けそうになかったので、参考サイトにあったように1kオームの抵抗をつなぎました。
雑談:
ラズベリーパイとかは電流制限されているらしいからあんまり考慮しなくてもいいというふうに書いてたりもしたので、beagleboneでも同じことが言えるのかもっと調べる必要がありそうです。
参考サイト
-
http://www.hisatomi-kk.com/Information/resistance/calculation.html
-
http://make.bcde.jp/circuit/5v%E3%81%8B%E3%82%893-3v%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B/
コード
import time
import Adafruit_BBIO.GPIO as GPIO
TRIG = "P8_16"
ECHO = "P8_11"
print "Distanc Measurement In Progress"
GPIO.setup(ECHO, GPIO.IN)
GPIO.setup(TRIG, GPIO.OUT)
GPIO.output(TRIG, GPIO.HIGH)
time.sleep(0.00001) #10us
GPIO.output(TRIG, GPIO.LOW)
while GPIO.input(ECHO) == 0:
pulse_start = time.time()
while GPIO.input(ECHO) == 1:
pulse_end - time.time()
pulse_duration = pulse_end - pulse_start
distance = pulse_duration * 17150
distance = round(distansce, 2)
print "Distance:", distance, "cm"
GPIO.cleanup()
参考サイト
- http://make.bcde.jp/raspberry-pi/%E8%B6%85%E9%9F%B3%E6%B3%A2%E8%B7%9D%E9%9B%A2%E3%82%BB%E3%83%B3%E3%82%B5hc-sr04%E3%82%92%E4%BD%BF%E3%81%86/
- https://github.com/luigif/hcsr04
余談
はじめて上記のプログラムを動作させた際、なんと動きませんでした。なんでだろうと思って、後日配線を別のものに変え動作させてみたところ無事動きました。なので、動かないぞって思ったらだれにか配線の仕方があってるのか、配線を変えて実行してみるなど試してみてください!もちろん、プログラムの間違いがないかも確認してください!