さて、次は超音波で距離を測定するセンサーHC-SR04を使って、距離を測定してみたいと思います。
この機能の実装には、私は GPIO Zero というプログラムを使いました。
ラズパイ工作の楽しさは、こういった先人たちの知恵と遺産を活用できることにあります。GPIO Zeroには、非常にたくさんの基本的なライブラリが入っているので、ラズパイを使う場合は、まずインストールしておきたいライブラリの1つです。
インストールの方法は、ここに書いてありますが、ここでも紹介しますね。
sudo apt update
sudo apt install python3-gpiozero
距離センサーの仕組みは、片方のスピーカーから超音波を出して、それが何かにぶつかって跳ね返ってきた音波をもう片方のスピーカーから検知し、超音波の往復にかかった時間から距離を割り出しています。従って、気温や気圧などの環境に影響されるため、正確さには欠けますが、何よりセンサーが安いので、まずこれを使っちゃいますよね。
さて、ライブラリのベーシックレシピの中にサンプルプログラムと、センサーの物理的な接続方法が書いてあるので、それを参考に接続します。
HC-SR04は5vのvccが必要です。
Trigerは、ラズパイからそのまま信号を送って大丈夫です。
Echoは、5vの信号です。これをそのままラズパイに入力するとラズパイを壊す危険があるので、ラズパイのロジック電圧である3.3vに下げなければいけないのです。5v出力を3.3vと1.7vに分けて、3.3v分をラズパイのGPIOへ、残りの1.6vの方はGNDへ流してやります。具体的には、抵抗値が1:2になる二つの抵抗を用意して、参考記事のように接続します。
私は、手元にあった1kΩと2kΩを使い、次の写真のように接続しました。
ミニブレッドボードはかなりごちゃごちゃしていますが、次のように使っています。
- GND
- Vcc用5v(レギュレーターから受けて、ラズパイの5vピンへ)
- 7.2v(バッテリー直で、モータードライバーへ渡している)
- HC-SR04 Echoから
- HC-SR04 Echoを分圧してラズパイへ
- GND(分圧の残り受け用。1. のGNDからジャンパーで。)
- SDA(今後他にもIC2通信をする予定なので、ブレッドボード経由でPCA9685へ)
- SCL(同上)
それでは、サンプルプログラムをまずそのまま走らせてみます。(トリガーがGPIO23で、エコーがGPIO24です。)
from gpiozero import DistanceSensor
from time import sleep
sensor = DistanceSensor(23, 24)
while True:
print('Distance to nearest object is', sensor.distance, 'm')
sleep(1)
少数以下が細かすぎw
ところで、form A import B っていう構文は、AっていうライブラリのBっていうクラスをインポートするっていう意味なんです。
ただ単に import A とすれば、Aのライブラリを全てimportするので楽なのですが、その場合Aライブラリの全てのクラスをimportするので、クラスのインスタンスを作る際に、そのクラスがどのライブラリにあるのかを指定しなければいけないのです。
importを単純に書く場合、上記サンプルプログラムはこうなります。
import gpiozero
import time
sensor = gpiozero.DistanceSensor(23, 24) #ここで、gpiozero. をつけてライブラリを指定。
while True:
print('Distance to nearest object is', sensor.distance, 'm')
time.sleep(1) #ここでも、time. をつけてライブラリを指定。
ただ、こうするとメモリーを余計に使うので、from A import B の方がシンプルなんでしょうね。
では、次はこれを使って、自動ブレーキを実装したいと思います。
コメント