K210(SiPEED MaixBit)MicroPython使用参考(八、超声模块HC-SR04驱动)

news/2025/1/15 16:00:19/

1.HC-SR04是一款极其常见的超声测距模块,便宜又好买,探测距离短至2cm,远至4m。如图,有4个引脚,电源2个,目前新版本支持3.3和5V电压,Trig是触发引脚,Echo是回声(检测)引脚,可看作是数据引脚。

其时序图如下:

给Trig引脚一个10us以上的高电平,启动模块发出8个40kHz的超声脉冲,超声脉冲遇到物体会反射进入模块,而此时模块Echo会输出一个高电平,其持续时间即为超声波从发射到返回的时间,进而得到检测距离distance=(高电平时间tc*声速(340m/s))/2=tc(us)*0.017(cm)。

2.以下代码只有一个可被调用的函数getDistance(),用来获得检测距离。将该文件保存为HCSR04.py(注意是大写),并“发送文件到开发板”以备调用。

from time import sleep_us, ticks_us
class HCSR04():def __init__(self, trig, echo):self.trig = trigself.echo = echodef getDistance(self):distance = 0self.trig.value(1)sleep_us(11)self.trig.value(0)while self.echo.value() == 0:passif self.echo.value() == 1:ts = ticks_us()  # 开始时间while self.echo.value() == 1:passte = ticks_us()  # 时间结束tc = te - tsdistance = tc * 0.017  # 距离计算(单位: cm)return distance

分别将超声模块的Trig和Echo连接到开发板的6、7脚,接3.3V电源。运行以下代码,在“串口终端”里,按照1秒的周期打印距离值,单位是cm:

from fpioa_manager import fm
from Maix import GPIO
from HCSR04 import HCSR04
import time
#引脚配置
fm.register(6, fm.fpioa.GPIO0)
fm.register(7, fm.fpioa.GPIO1)Trig = GPIO(GPIO.GPIO0, GPIO.OUT)
Echo = GPIO(GPIO.GPIO1, GPIO.IN)HC = HCSR04(Trig, Echo)
while (1):distance = HC.getDistance()print( distance, 'cm')time.sleep(1)

3.MaixPy自带modules.ultrasonic,即超声波测距模块,代码要更简练一些,通过设置unit = ultrasonic.UNIT_INCH还可输出英制单位值,不管是cm和英寸,输出结果都是整数。特别要指出的是,原程序只适用于柴火的Grove模块,因其只有1个信号引脚SIG(即Echo),和HC-SR04并不相同,如果直接运行原程序,会出现OSError:time out错误(无数据时产生的错误),如下所示:

其原因就是未给Trig信号,导致模块没有发出超声波,为此,可采取变通的方法,在原程序中人为增加Trig控制信号,高电平持续11us后再次拉低:

    Trig.value(1)time.sleep_us(11)Trig.value(0)

同时将结果显示到屏上,先import lcd,随后lcd.init(),使用lcd.draw_string方法。好处是无需字库,但缺点是不能调整字体大小。全部代码如下:

from fpioa_manager import *
from modules import ultrasonic
from Maix import GPIO
import time
import lcd
lcd.init()
#引脚配置
fm.register(6, fm.fpioa.GPIO0)
fm.register(7, fm.fpioa.GPIO1)
Trig=GPIO(GPIO.GPIO0, GPIO.OUT)
device = ultrasonic(fm.fpioa.GPIO1)
Trig.value(1)
while True:Trig.value(1)time.sleep_us(11)Trig.value(0)distance = device.measure(unit =  ultrasonic.UNIT_CM, timeout = 30000)lcd.draw_string(120, 100, "{} cm".format(distance))print(distance,'cm')time.sleep(1)

官网上demo用的GPIOHS,即高速端口,其实大可不必,如上程序,改为GPIO亦可,已得以验证。

4.Roberto(rsc1975)在GitHub - rsc1975/micropython-hcsr04: Micropython driver for ultrasonic sensor HC-SR04

上发布了一个HC-SR04的驱动,是基于ESP866/ESP32的,比较规范严谨,里面的定时用到了time_pulse_us,这个是在machine包里面的,K210并不支持,相比来说,上面定时所用的ticks_us方法要更通用。

5.众所周知,超声模块测距精度不高,其中原因之一就是没有考虑到不同温度下声音传播速度并不相同,特别是距离较远时误差增大,因此所设参数应该适当调整,如下:

温度-20-10010203040
声速319325331337343349355
tc*参数0.0160.0160.0170.0170.0170.0170.018


http://www.ppmy.cn/news/536853.html

相关文章

MDC300上激光雷达的接入

目录 使用激光雷达抽象使用华为原生激光雷达抽象注意事项 模拟激光雷达抽象 采用透传模式注意事项 启动方法使用透传模式:使用传感器数据抽象模式: MDC300上接入激光雷达大致分为两种: 使用激光雷达抽象 使用华为原生激光雷达抽象&#xff08…

【虹科新品】HK-MR340系列增量式光纤编码器产品介绍合集

前言 HK-MR340系列产品很多?想要通过一篇文章迅速了解?那快点击本文进行浏览吧!本文将从一般特性、规格、应用三个角度讲解HK-MR340系列产品,让您快速对其具有框架性的了解。 01 一般特性 光纤传感器提供了电气和电子电路根本无…

稳定可靠 | 易加三维发布EP-M400四激光增材制造系统

易加三维金属增材制造系统添加新成员EP-M400。该设备是一款外形“小”、成型“大”、多光高效、稳定可靠、智能便捷的高性能工业级金属3D打印机。 成型室405x405x450mm 通用中大型成型室,体积>70L,可打印钛合金、铝合金、高温镍基合金、模具钢…

TI毫米波级联雷达评估板 MMWCAS-DSP-EVM 和MMWCAS-RF-EVM

1. 前言 本文主要是TI的MMWCAS-DSP-EVM 和MMWCAS-RF-EVM 两块评估板的一些使用心得和毫米波雷达的学习总结。 2. 相关原理 毫米波(mmWave)是一类使用短波长电磁波的特殊雷达技术。通过捕捉反射的信号,雷达系统可以确定物体的距离、速度和角度。毫米波雷达可发射波…

【mcuclub】超声波测距模块HC-SR04

一、实物图 二、原理图 编号名称功能1VCC电源正2TRIG触发控制信号输入3ECHO回响信号输出4GND电源地 三、简介 由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物体测量仪等都…

Markem imaje马肯依玛士喷码机维修9450E打码机维修

Markem imaje喷码机维修(马肯依玛士)常见型号有:9018;9020;9030;9450E等型号电源/触摸屏/电路板维修。 我们将不遗余力的在工业喷码机维修领域不断开拓进取(墨水喷码机、激光喷码机、手持喷码机…

第8章 模式匹配

第8章 模式匹配 基本概念和用法 模式守卫 package chapter08object Test01_PatternMatchBase {def main(args: Array[String]): Unit {// 1. 基本定义语法val x 5val y x match {case 1 > "one"case 2 > "two"case 3 > "three"ca…

Nginx配置https证书遇到的一个问题

前言 今天在给一个站点配置 HTTPS 证书的时候,遇到了一个问题,写此文章记录一下解决过程。 环境 Ubuntu 22.04 Nginx 1.18 过程 今天给一个站点申请了 HTTPS 证书,然后在 Nginx 中进行配置,Nginx 的 SSL 配置如下&#xff1a…