大分前に届いていた超音波タイプの距離センサ(HC-SR04)。ずっと放置していて、すっかり忘れてた。なんでかっていうと、5Vデバイスなのでロジックレベルコンバーターが必要かなと思っていたけど・・・
他のサイトをみたらなんか、抵抗を使った分圧で測定できると書いてある。でも、これってEchoから出力する電圧は分圧でどうにかなるけど、Trigに入力する電圧は3.3vでもいいんすかね?まぁ、3.3v与えて動けば、ハイレベルを検出されていると考えられるからいいのか・・・。
先日、LCDの表示用に購入した4チャンネルのロジックレベルコンバーターがあるので、どうせなら、LCDに距離を表示させながら距離精度を確認したかったので、抵抗を使う分圧ではなく、LCDでSDA、SCLの2チャンネルを使い、残りの2チャンネルをHC-SR04のTrig、Echoで使って接続してみた。
いきなり接続済写真w。赤のブレッドボードが5V側、白のブレッドボードが3.3V側となります。LCDはI2C接続で5V電圧のシリアルインターフェースを使っていますので5V側につないであります。
Pythonのコードでコピペ参考にさせてもらったのは以下のサイト。ロジックレベルコンバーターを挟めてようが、基本ピンの接続は下のサイトと同じくつないだのでコードはそのままで動きました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import RPi.GPIO as GPIO import time from JLCD import JLCD as LCD ~ 中略 ~ if __name__ == "__main__": GPIO_TRIG = 26 GPIO_ECHO = 19 init_sensors(GPIO_TRIG, GPIO_ECHO) lcd = LCD(2,0x27,True) while True: lcd.message("キョリ",1) lcd.message("{0:.3f} cm".format(get_distance(GPIO_TRIG, GPIO_ECHO)),2) print("距離:{0} cm".format(get_distance(GPIO_TRIG, GPIO_ECHO))) time.sleep(2) |
while部にLCDへ表示させるライブラリで距離を表示させているだけ。LCDライブラリに関しては下の記事を参考にしてくれればいいとおもう。
ここまで、10分・・・。情報提供してくれているサイトの方々には感謝です!!。で早速、距離測定を行ってみた。
測り方にもよるとは思うけど・・・。10cm以下の精度はとても悪い気が・・・。15cm以上になると大体定規と同じ数値となるんですけどねぇ。10センチ以下の測距にはちょっと使えない気がします。あ・・・ちなみに気温は一応室温と合わせておいてますよ!!BME280とかから取得してもいいけど・・・今回はメンドクさかった検証なので
あと、超音波の反射を時間差で利用するので、反射する材質が布っぽい(下写真では雑巾w)だと、測距不能(2000cmとか)になるので、色々なシーンでの測距は、ほかのセンサーも併用したほうがよさそう。