MicroPython 驱动 HC-SR04 超声波传感器

MicroPython相关代码、库、软件、工具
回复
头像
shaoziyang
帖子: 3919
注册时间: 2019年 10月 21日 13:48

MicroPython 驱动 HC-SR04 超声波传感器

#1

帖子 shaoziyang »

原帖作者:microCPyE  发表于 2018-4-27

主题:
MicroPython 驱动 HC-SR04 超声波传感器


演示环境:
  • 开发板 PYB Nano V1.1   
  • 固件版本: MicroPython V1.9.3
  • 传感器HC-SR04 超声波传感器
演示代码:
https://github.com/ELE-Clouds/ModuleSampleCode_MPY

代码: 全选

# -*- coding: UTF-8 -*-

u'''
******************************************************************************
* 文  件:HCSR04.py
* 概  述:HCSR04超声波传感器模块功能模块
* 版  本:V0.10
* 作  者:Robin Chen
* 日  期:2018年4月27日
* 历  史:         日期              编辑          版本      记录
                2018年4月27日      Robin Chen   V0.10    创建文件
******************************************************************************'''

from pyb import Pin
from time import sleep_us,ticks_us,sleep

trig = Pin('A0',Pin.OUT_PP)
echo = Pin('A1',Pin.IN)

u'''
*************************************************************************
* 功   能:获取距离值
* 说   明:获取并返回超声波传感器所测值(单位:米)
* 输入参数:None
* 输出参数:None
* 返 回 值:
          distance:距离(单位:米)

**************************************************************************'''
def getlang():
    distance=0
    trig.value(1)
    sleep_us(20)
    trig.value(0)
    while echo.value() == 0:
        pass
    if echo.value() == 1:
        ts=ticks_us()                   #开始时间
        while echo.value() == 1:
            pass
        te=ticks_us()                   #结束时间
        tc=te-ts                        #回响时间(单位us)
        distance=(tc*170)/1000000       #距离计算(单位为:m) 计算公式为:距离=(声波来回总时间×声波在空气中的传播速度)/2 = (t*340)/2    注:此处t的单位为秒,代码中为微秒。
    return distance

while True:
    a = getlang()
    print(u"与目标的距离:", a, u" m (约合:", a * 10, u"分米  ", a * 100, u"厘米   ", a * 1000, u"毫米)")
    sleep(1)
总结:
在这次代码编写的过程中,遇到了几个问题,从而浪费了不少时间。现在此总结一下,方便遇到同样问题的朋友有一个参考,同时也有一些发现,一起分享吧:
  • 为了方便标记文件名,我将文件名写成了与传感器型号一样的 HC-SR04.py,调用时始终报错,逐步排查,直到我将所有的代码都注释完,发现还是有问题,后尝试将文件名中间的 “-”去掉,问题解决;
  • 为了方便整理和管理,我在新建项目时,采用文件夹对文件进行分类的方式,在主目录下新建了一个文件,未来还会有好多,在调用的时候,始终不成功。后来虚心向度娘请教,终于找到了问题所在,及解决办法。共有三种或更多种解决办法,在此我就不一一介绍了,只说其中一种被推荐的,即在需要被调用的文件所在的文件夹下建新一个__init__.py文件,内容可以为空,也可以在此做一些声明类的操作。然后,凡是含有__init__.py文件的文件夹,都会被micropython(对Python应该也一样)解释器视为一个模块,使用方法与模块一样。你可以直接 import 文件夹名,也可以 from 文件夹名 import py文件名。程序成功调用并运行。
  • 当触发信号出现下降沿后,延迟4毫秒,出现回响脉冲上升沿,并且,当触发脉冲高电平持续时间超过或接近4毫秒时,将不会有回响脉冲出现(示波器测试结果,为防止有误,大家有机会可以复试一下,另外不知道其驱动芯片会有多少种);
  • 在网上查资料的时候,网友提醒,连续采集周期建议60毫秒以上,否则上一次的回响信号残留可能会影响下一次采集的结果。

回复

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