新版HC-SR04,性能远超老版HC-SR04,US-015;在测距精度高于老版HC-SR04和US-015的情况下,测距范围更远,可达6米,远超一般超声波测距模块。采用CS-100A超声波测距SOC芯片,高性能,工业级,宽电压、低价格,成本击穿底价,只有普通超声波测距模块一半的价格,而性能远超普通超声波测距模块。性能与US-025A相同,均采用CS100A芯片,接口完全兼容。
触发信号:通过trig引脚提供一个超过10ms的高电平信号;
内部信号处理:内部会发出8个40HZ的脉冲信号并检测回波。
输出响应信号:从收到回波开始,输出信号线echo会输出高电平,高电平的时间长短与所测的距离成正比。
距离的计算公式:s=高电平时间*声速(340m/s)/2
代码:
import time, pyb
from pyb import Pin, LED
echo = Pin('P7', Pin.IN, Pin.PULL_NONE)
trig = Pin('P8', Pin.OUT_PP, Pin.PULL_DOWN)
led = LED(1) # 红led
t1 = 0
t2 = 0
t3 = 0
flag = 1
#外部中断配置
def callback(line):
global flag, t1, t2, t3
if(echo.value()):
t1 = time.ticks_us()
else:
t2 = time.ticks_us()
t3 = time.ticks_diff(t2,t1)/10000
flag = 1
extint = pyb.ExtInt(echo, pyb.ExtInt.IRQ_RISING_FALLING, pyb.Pin.PULL_NONE, callback)
while True:
if flag:
extint.disable()
trig.value(1)
time.sleep_us(20)
trig.value(0)
flag = 0
extint.enable()
time.sleep(0.5)
print(t3*340/2)
代码其实没啥讲的,硬件连接p7->echo,p8->trig,vcc->外加5v(老版超声波只能5v工作,而openmv只能提供3.3v,但要共地),要用中断,不然不方便以后添加其他功能。大家也可尝试用定时器做,思路类似
2023-4-23
import sensor, image, time, pyb
from pyb import UART
from pyb import Pin
class UltraSonic:
def __init__(self, trig_pin, echo_pin):
self.trig = machine.Pin(trig_pin, machine.Pin.OUT_PP)
self.echo = machine.Pin(echo_pin, machine.Pin.IN)
self.timer = machine.Timer(4)
def send_trigger_pulse(self):
self.trig.high()
time.sleep_us(10)
self.trig.low()
def get_pulse_time(self):
pulse_time = machine.time_pulse_us(self.echo, 1, 1000000)
return pulse_time
def get_distance(self):
self.send_trigger_pulse()
pulse_time = self.get_pulse_time()
distance = (pulse_time * 0.0343) / 2
return distance
us = UltraSonic('P8','p7')
while True:
print(us.get_distance())
调用内置函数time_pulse_us获得高电平时间,也是可以的,封装成类,看起来更吊一点,但是测试时有点小bug,待解决