稼働中

Raspberry Pi Pico(s_15)HC-SR04 用モジュール

HC-SR04 HC-SR04c.py

HC-SR04は超音波距離センサーです。※詳細はHC-SR04のデータシートを参照ください。
Raspberry Pi PicoでHC-SR04センサーモジュールを使う自作の’HC-SR04c.py’を作成しました。
記事d_19を元に作成しています。使い方だけを記載します。’HC-SR04c.py’は末尾にあります。

使い方

■ ファイル転送
Raspberry Pi Picoへ’HC-SR04c.py’を送った後でimportして使います。
※HC-SR04c.pyの末尾に、使用例(HC-SR04_ex.py)の## example以降をコピペ追加しても動作確認できます。
■ メソッド
‘HC-SR04c’をimportすると「core_T、m_Dist」のメソッドが使えるようになります。
HC-SR04(num=1,tx=15)で初期化します。
num:SPI0、SPI1の番号です。デフォルトは1(SPI1)
tx:SPI_TXのGPIO番号です。デフォルトは15(GP15)
ECHOの入力は使用するSPIに応じたSPI_CSnを使います。
(01)core_T()
コア温度を返します。
(02)m_Dist()
音速をコア温度で補正した測定距離を返します。

使用例

HC-SR04で距離を測定します。


HC-SR04c_ex.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from machine import Pin, SPI, ADC
import time
from HCSR04c import HCSR04
#Ultrasonic ranging module HC-SR04 2cm-400cm
## example
a=HCSR04(1,15)
t=a.core_T()
print('core_temp={:>5.1f}c'.format(t))
L=a.m_Dist()
print('distance ={:>5.1f}cm'.format(L))

実行結果

実行すると以下のようになりました。※Thonnyのshellに表示されます。


>>> %Run -c $EDITOR_CONTENT
core_temp= 24.7c
distance = 20.1cm

HC-SR04モジュール用


HC-SR04c.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from machine import Pin, SPI, ADC, time_pulse_us
import time
#Ultrasonic ranging module HC-SR04 2cm-400cm
class HCSR04:
    def __init__(self,num=1,tx=15): 
        # spi.init
        self.spi = SPI(num, baudrate=500_000,sck=Pin(tx-1), mosi=Pin(tx),
                       miso=Pin(tx-3))
        # ECHO  CSnを入力モード
        self.c_pin=Pin((tx-2), Pin.IN, Pin.PULL_DOWN)
        # ADC4(CORE_TEMP)設定
        self.adc=ADC(4)  # Core Temop
    
    # 温度算出
    def cov_T(self,r_adc):
        cof = 3.3/2**16    #16bit ADC   3.3V/65536
        vs = r_adc*cof
        temp = 27 - ( vs - 0.706) / 0.001721
        return temp
    
    # Core温度測定
    def core_T(self):
        # コア温度測定
        r_adc=self.adc.read_u16()
        c_temp=self.cov_T(r_adc)
        return c_temp
    
    # 距離測定 Core温度で音速を補正
    def m_Dist(self):
        r_temp=self.core_T()
        #print('%5.1f'%c_temp)
        c=331.5+0.6*r_temp
        # 10usec Trigger
        # baudrate=500_000 2usec/bit * 5bit(0xf8)=10usec '0b11111000'
        self.spi.write(b'\xf8')
        # distance measurement Echo Pulse 'H'time
        dt = time_pulse_us(self.c_pin, 1)

        # L=C x T/2 (m)  音速C=331.5 + 0.6xt(℃)  (m/s)
        # 温度補正 20℃ 343.5m/s 
        # L_cm = 0.017*echo(usec)
        a_dist=0.017*dt
        dist= c * dt/2 * 10**(-4) # cm        
        return dist