超声波测距驱动-HCSR04(增加温度补偿,误差极小)

micro:bit编程、教学、展示
STEM
回复
头像
shaoziyang
帖子: 1266
注册时间: 2019年 10月 21日 13:48

超声波测距驱动-HCSR04(增加温度补偿,误差极小)

#1

帖子 shaoziyang » 2019年 11月 25日 12:20

原帖作者:chpczx 发表于 2019-7-5

Code: Select all

from microbit import *
from time import sleep_us
from machine import time_pulse_us
from math import sqrt

class Hcsr04():
    def __init__(self, pin_trig, pin_echo):
        self.pin_trig = pin_trig
        self.pin_echo = pin_echo

    # 设置速度温度补偿
    def speed(self):
        t = temperature()
        sp = 331*sqrt(1+t/273)
        return sp

    # 距离返回单位为毫米
    def distance(self):
        self.pin_echo.read_digital()

        self.pin_trig.write_digital(1)
        sleep_us(10)
        self.pin_trig.write_digital(0)

        ts = time_pulse_us(self.pin_echo, 1, 30000)
        v = self.speed()
        if ts > 0:
            return ts * v // 2000
        return ts

if __name__== "__main__":
    while True:
        hcsr = Hcsr04(pin15, pin16)
        print(hcsr.distance())
        sleep(500)
说明:本驱动参照了邵子扬老师(我是邵老师在孝感培训的学员)对hc-sr04写的驱动,因为误差较大,增加温度补偿后,误差大大减小。

factor
帖子: 4
注册时间: 2020年 6月 6日 20:11

Re: 超声波测距驱动-HCSR04(增加温度补偿,误差极小)

#2

帖子 factor » 2020年 6月 6日 20:19

非常好,谢谢收下了 。

不知道为什么?显示的都是
-2
-2
​​​​​​​-2
​​​​​​​-2
​​​​​​​
上次由 factor 在 2020年 6月 6日 20:40,总共编辑 1 次。

头像
shaoziyang
帖子: 1266
注册时间: 2019年 10月 21日 13:48

Re: 超声波测距驱动-HCSR04(增加温度补偿,误差极小)

#3

帖子 shaoziyang » 2020年 6月 6日 21:11

time_pulse_us函数,返回-1代表测量超时(收到启动信号),-2代表未收到信号超时。

factor
帖子: 4
注册时间: 2020年 6月 6日 20:11

Re: 超声波测距驱动-HCSR04(增加温度补偿,误差极小)

#4

帖子 factor » 2020年 6月 7日 19:55

插在USB上测试,没有开电源,所有超声波模块没有通电,故显示-2

谢谢你的代码  ,测试正常。

不知道为什么?我的机子不需要除以2。

头像
shaoziyang
帖子: 1266
注册时间: 2019年 10月 21日 13:48

Re: 超声波测距驱动-HCSR04(增加温度补偿,误差极小)

#5

帖子 shaoziyang » 2020年 6月 7日 20:03

一般情况是测量从发射信号到接收反射信号的时间,因为是一去一回,所以距离需要除2.

回复

  • 随机主题
    回复总数
    阅读次数
    最新文章