マイクロビット(c_03)HC-SR04 用モジュール
HC-SR04 c_hcsr04_00.py
HC-SR04は超音波距離センサです。※詳細はデータシートを参照ください。
HC-SR04センサーモジュールで使う自作の’c_hcsr04_00.py’を作成しました。(※記事e_08を元にクラスにしました。)’c_hcsr04_00.py’は末尾にあります。使い方だけを記載します。
使い方
ファイル転送
micro:bitへ’c_hcsr04_00.py’を送った後でimportして使います。micro:bitに直接ファイルをアップロード出来ない場合(Thonny 3.1.12など)は、microfsなどを使ってアップロードします。
※microfsについては、当サイト内のこちらを参照ください。
※c_hcsr04_00.pyの末尾に、使用例(c_hcsr04_ex.py)の## example以降をコピペ追加しても動作確認できます。
メソッド
‘c_hcsr04_00’をimportすると「HCSR_dist」のメソッドが使えるようになります。
HCSR(r_pin=pin0)で初期化します。
HC-SR04のOUTと接続するmicro:bitのピンを指定します。defaultはpin0です。
(01)HCSR_dist(tc=25)
物体との距離を返します。気温を指定して距離補正が出来ます。defaultは25℃です。
使用例
1秒毎に測定した距離をThonnyのshellに表示します。
from microbit import *
from c_hcsr04_00 import HCSR04
## example ------------------
a=HCSR04() # instance pin0
while True:
dist=a.HCSR_dist(22) # 気温22℃ default 25℃
print('Distance= %4.1f(cm)'%dist)
sleep(1000)
実行結果
>>> %Run c_hcsr04_ex.py
Distance= 55.9(cm)
Distance= 55.9(cm)
Distance= 55.8(cm)
Distance= 57.1(cm)
========================= RESTART =========================
>>>
モジュール
c_hcsr04_00.py
from microbit import *
import machine
class HCSR04:
def __init__(self,r_pin=pin0):
self.pins=r_pin
# 1/500kHz=2.0us 10us=5bit(0xf8)
spi.init(baudrate=500000, bits=8, mode=1, sclk=pin13, mosi=pin15, miso=pin14)
# time_pulse_usを使うので予約
self.pins.set_pull(self.pins.NO_PULL)
def HCSR_dist(self,tc=25):
# micro:bit temperature
c_temp=tc
# TRG_PULSE 10usec baudrate=500000
spi.write(b'\xf8')
# ECHO TIME
d = machine.time_pulse_us(pin0,1) # usec
c=331.5+0.6*c_temp
dist=c*d/2*10**(-4) # cm
return dist
10usecトリガパルス
関連記事のe_08では、上手く10usecのパルスを作成できませんでした。いろいろやっているうちに、SPI通信の端子MOSIで作成できることがわかりました。前述済みですが補足しておきます。
マイクロビットV1のクロックは16MHzです。分周してspiのbaudrate=500khz、mode=1にすると2.0usec幅になります。この2.0usec幅を5個つなげればTonが10usec幅のパルスが出来ます。具体的には’0b11111000’を送ります。
その結果、Tonが10usec、Toffが6usecになります。HC-SR04センサーではトリガに使うので単発にします。
結局、spiの設定を
spi.init(baudrate=500000, bits=8, mode=1, sclk=pin13, mosi=pin15, miso=pin14)
にして、
spi.write(b'\xf8') #'0b11111000'
で送ればTonが10usecのトリガパルスになります。