稼働中

マイクロビット(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のトリガパルスになります。