5611浏览
查看: 5611|回复: 4

[入门教程] HC-SR04超声波模块掌控下应用

[复制链接]
本帖最后由 yywudao 于 2019-5-9 16:15 编辑

掌控板的编程IDE mPython X最近放出来 0.3.0版本(https://mpythonx.readthedocs.io/zh_CN/latest/mPythonX.html
这次更新,内置了HC-SR04超声波模块的编程积木块。掌控的固件也相应的更新到了2019-5-5的版本。
昨天也体现下了HC-SR04在掌控下的应用,分享下使用心得。

超声波的使用原理简单说就是 Trig引脚给持续10us的高电平,模块就会发出8个40KHz的超声波信号。一旦模块发出超声波信号,Echo引脚就会产生高电平,直到接接收到遇见障碍物反射回来的超声波,高电平才会变成低电平。通过这个Echo引脚高电平到低电平的持续时间,可以换算出超声波行走的路程,即超声波与障碍物之间的距离:

distance=time×340m/s÷2 (340m/s--超声波在空气中的传播速度,2--往返)
HC-SR04超声波模块掌控下应用图2


先贴程序:
HC-SR04超声波模块掌控下应用图1


手头是没有“印堂”(smd贴片晶体)的宽压超声波模块(今天听到的年度梗),实测无需外接5V电源,VCC可以直接接掌控的3.3V引脚供电,echo引脚也无需接分压电阻,直接连接掌控的数字输入引脚。
此次mPython X 超声波积木还未完全支持所有数字引脚,已反馈,后续会进行完善。对应的编程代码会用到一个名为“hcsr04”的模块,此模块还未内置到掌控的固件中,需要手动下载掌控的hcsr04.py文件到掌控板根目录下,后期也会内置到固件中。
(手动hcsr04.py 代码路径:https://raw.githubusercontent.co ... er/hcsr04/hcsr04.py)

补一个出自台湾赵英杰《超图解Python物联网实作入门》里的超声波传感器的代码,引脚定义做了些许的修改:
[mw_shl_code=python,true]# HC-SR04 for mPython
# 原代码出自赵英杰《超图解Python物联网实作入门》
# http://swf.com.tw
# 如引用,请注明原出处--赵英杰

from machine import Pin
import machine
import time

echoTimeout = 23200 # 58*400 = 23200
trigPin = Pin(Pin.P8, mode = Pin.OUT)
echoPin = Pin(Pin.P9, mode = Pin.IN)
trigPin.value(0)

def distance():
    trigPin.value(1)
    time.sleep_us(10)
    trigPin.value(0)
    pulseTime = machine.time_pulse_us(echoPin, 1, echoTimeout)
    if pulseTime > 0:
        return round(pulseTime / 58)
    else:
        return pulseTime

while True:
    cm = distance()
    if cm> 0:
        print('Distance: ', cm, 'cm')
    else:
        print('Out of the detection range.')
    time.sleep(1)[/mw_shl_code]

rzyzzxw  版主

发表于 2019-5-9 19:56:42

本帖最后由 rzyzzxw 于 2019-5-9 20:40 编辑

赞哈。小豪老师有做项目写教程的天赋啊。
回复

使用道具 举报

yywudao  高级技师
 楼主|

发表于 2019-5-10 17:16:49

rzyzzxw 发表于 2019-5-9 19:56
赞哈。小豪老师有做项目写教程的天赋啊。

分享下学习心得。哈哈
回复

使用道具 举报

Nplus实验室  高级技师

发表于 2019-5-14 14:41:00

请问为什么我打印出来的只有-1?
回复

使用道具 举报

yywudao  高级技师
 楼主|
来自手机

发表于 2019-5-17 08:21:08

Nplus实验室 发表于 2019-5-14 14:41
请问为什么我打印出来的只有-1?

你用的是图形模块,还是纯代码?

machine.time_pulse_us(引脚,0/1,等待时间)  0/1表示测量的是低电平或高电平。如果脉冲信号没有在等待时间内出现,time_pulse_us()将返回 -2,如果脉冲长度超过等待时间,则返回 -1。
还有一点,你手头的HC-SR04超声波是普通5V的还是支持宽电压版本的?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail