yywudao 发表于 2019-5-9 16:07:58

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--往返)


先贴程序:



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

补一个出自台湾赵英杰《超图解Python物联网实作入门》里的超声波传感器的代码,引脚定义做了些许的修改:
# 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)

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

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

赞哈。{:5_193:}小豪老师有做项目写教程的天赋啊。

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的还是支持宽电压版本的?
页: [1]
查看完整版本: HC-SR04超声波模块掌控下应用