2023/07/10
2023/07/12
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