HC-SR04超声波测距

什么是超声波

超声波是频率高于20000赫兹的声波。

超声波是一种特定频率范围内的声波,其特点在于频率高于人耳能够感知的上限,即超过20千赫兹(Hz)。这种高频率的声波具有一些独特的性质:

  • 方向性好:超声波几乎可以沿直线传播,这使得它们在定位和探测方面非常有用。
  • 穿透能力强:超声波能够穿透许多对于普通声波不透明的材料,例如金属或固体。
  • 能量大:在媒质中传播时,超声波能产生巨大的能量,有时足以引起材料的微小颗粒振动,甚至导致“破碎”现象。

HC-SR04硬件概述

HC-SR04超声波距离传感器的核心是两个超声波传感器。一个用作发射器,将电信号转换为40 KHz超声波脉冲。接收器监听发射的脉冲。如果接收到它们,它将产生一个输出脉冲,其宽度可用于确定脉冲传播的距离。该传感器体积小,易于在任何机器人项目中使用,并提供2厘米至400厘米(约1英寸至13英尺)之间出色的非接触范围检测,精度为3mm。
在这里插入图片描述

工作原理

超声波传感器使用声纳来确定与物体的距离。发生的情况如下:

  • 超声波发射器(trig 引脚)发出高频声音 (40 kHz)。
  • 声音在空气中传播。如果它找到一个对象,它会反弹回模块。
  • 超声波接收器(回声针)接收反射声(回声)。

超声波传感器模块使用两个I0口分别控制超声波发送和接收,工作原理如下:

1、给超声波模块接入电源和地;

2、给脉冲触发引脚(trig)输入一个长为10us的高电平方波;

3、输入方波后,模块会自动发射8个40KHz的声波,与此同时回波引脚(echo)端的电平会由0变为1;(此时应该启动定时器计时)

4、当超声波返回被模块接收到时,回波引 脚端的电平会由1变为0;(此时应该停止定时器计数),定时器记下的这个时间即为超声波由发射到返回的总时长;

5、根据声音在空气中的速度为340米/秒,即可计算出所测的距离。

温度对距离测量的影响

HC-SR04对于我们的大多数项目来说都相当准确,例如入侵者检测或接近警报;但是有时候您可能想设计一种要在户外或在异常炎热或寒冷的环境中使用的设备。在这种情况下,您可能要考虑到空气中的声速随温度,气压和湿度而变化的事实。

由于声音因素进入HC-SR04距离计算的速度,因此可能会影响我们的读数。如果已知温度(°C)和湿度,请考虑以下公式:

声速 m/s = 331.4 +(0.606 * 温度)+(0.0124 * 湿度)

HCSR04的开源脚本

micropython中没有集成HC-SR04模块,HCSR04的开源脚本:

import machine, time
from machine import Pin

class HCSR04:
    """
    Driver to use the untrasonic sensor HC-SR04.
    The sensor range is between 2cm and 4m.

    The timeouts received listening to echo pin are converted to OSError('Out of range')

    """
    # echo_timeout_us is based in chip range limit (400cm)
    def __init__(self, trigger_pin, echo_pin, echo_timeout_us=500*2*30):
        """
        trigger_pin: Output pin to send pulses
        echo_pin: Readonly pin to measure the distance. The pin should be protected with 1k resistor
        echo_timeout_us: Timeout in microseconds to listen to echo pin. 
        By default is based in sensor limit range (4m)
        """
        self.echo_timeout_us = echo_timeout_us
        # Init trigger pin (out)
        self.trigger = Pin(trigger_pin, mode=Pin.OUT, pull=None)
        self.trigger.value(0)

        # Init echo pin (in)
        self.echo = Pin(echo_pin, mode=Pin.IN, pull=None)

    def _send_pulse_and_wait(self):
        """
        Send the pulse to trigger and listen on echo pin.
        We use the method `machine.time_pulse_us()` to get the microseconds until the echo is received.
        """
        self.trigger.value(0) # Stabilize the sensor
        time.sleep_us(5)
        self.trigger.value(1)
        # Send a 10us pulse.
        time.sleep_us(10)
        self.trigger.value(0)
        try:
            pulse_time = machine.time_pulse_us(self.echo, 1, self.echo_timeout_us)
            return pulse_time
        except OSError as ex:
            if ex.args[0] == 110: # 110 = ETIMEDOUT
                raise OSError('Out of range')
            raise ex

    def distance_mm(self):
        """
        Get the distance in milimeters without floating point operations.
        """
        pulse_time = self._send_pulse_and_wait()

        # To calculate the distance we get the pulse_time and divide it by 2 
        # (the pulse walk the distance twice) and by 29.1 becasue
        # the sound speed on air (343.2 m/s), that It's equivalent to
        # 0.34320 mm/us that is 1mm each 2.91us
        # pulse_time // 2 // 2.91 -> pulse_time // 5.82 -> pulse_time * 100 // 582 
        mm = pulse_time * 100 // 582
        return mm

    def distance_cm(self):
        """
        Get the distance in centimeters with floating point operations.
        It returns a float
        """
        pulse_time = self._send_pulse_and_wait()

        # To calculate the distance we get the pulse_time and divide it by 2 
        # (the pulse walk the distance twice) and by 29.1 becasue
        # the sound speed on air (343.2 m/s), that It's equivalent to
        # 0.034320 cm/us that is 1cm each 29.1us
        cms = (pulse_time / 2) / 29.1
        return cms
    

我们将触发引脚(trigger_pin)连接到开发板的GPIO5,回声引脚(echo_pin)连接到GPIO4。
代码使用示例:

hcsr04=HCSR04(trigger_pin=5, echo_pin=4)

if __name__=="__main__":
    
    while True:
        distance=hcsr04.distance_cm()
        print("distance=%.2fCM" %distance)
        time.sleep(2)

实验结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/587218.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

托普利兹矩阵(T矩阵)及其应用(Matlab demo测试)

托普利兹矩阵(T矩阵)及其应用(Matlab demo测试) 1. 概念2. Matlab简单测试2.1 生成测试2.2 基本性质及原理2.3 性质验证 3. 其他应用总结3.1 其他性质3.2 文献阅读看到的 参考资料 1. 概念 托普利兹矩阵,简称为T型矩阵…

可视化大屏在真实场景的效果,绝对震撼,不要再嘲笑其作用了

hello,我是大千UI工场,本地带来一批可视化大屏现场效果图,非常震撼,给大家带来身临其境的感受,欢迎关注点赞,有需求请私信。 有人可能会认为可视化大屏没有太多价值,可能是因为以下几个原因&am…

npm 安装 pnpm 时 报错 npm ERR! Unexpected token ‘.‘

问题 一个项目用的是 pnpm 安装的依赖,node 的版本是 16.16.0,nvm 的版本是 1.1.7,然后全局安装 pnpm 报错如下: 解决 我看网上的一些解决方案是说 nvm 版本过低导致,下面我们按照这个方向处理。 实首先下载 nvm-up…

Linux 文件管理命令Lawk wc comm join fmt

文章目录 2.Linux 文件管理命令2.44 awk:模式匹配语言1.变量2.运算符3.awk 的正则4.字符串函数5.数学函数案例练习 2.45 wc:输出文件中的行数、单词数、字节数案例练习2.46 comm:比较…

康姿百德学生床垫价格合理,为孩子提供健康睡眠环境

康姿百德集团公司学生床垫,关爱孩子的睡眠和健康 每个孩子都是家长新中的宝贝,在孩子健康成长的道路上,良好的睡眠起着至关重要的作用。而选择一款优质的床垫,不仅能帮助孩子更快进入梦乡,还能促进他们的健康发育。在…

最好的数据恢复应用程序:哪个是您首选的最佳文件恢复软件?

如今,智能设备无处不在,导致我们中的许多人无可辩驳地被大量数据所包围。随着大量数据的涌入得到一致的处理,无意中删除重要文档或不同文件,存在丢失这些数据的迫在眉睫的危险。 最好的数据恢复应用程序 对于每一个最好的数据恢复…

Python 与 TensorFlow2 生成式 AI(三)

原文:zh.annas-archive.org/md5/d06d282ea0d9c23c57f0ce31225acf76 译者:飞龙 协议:CC BY-NC-SA 4.0 第七章:使用 GAN 进行风格转移 神经网络在涉及分析和语言技能的各种任务中正在取得进步。创造力是人类一直占有优势的领域&…

Stm32CubeMX 为 stm32mp135d 添加网卡 eth

Stm32CubeMX 为 stm32mp135d 添加网卡 eth 一、启用设备1. eth 设备添加2. eth 引脚配置2. eth 时钟配置 二、 生成代码1. optee 配置2. uboot 配置3. linux 配置 bringup 可参考:Stm32CubeMX 生成设备树 一、启用设备 1. eth 设备添加 我这里只启用一个eth设备&…

uniapp 桌面应用插件 Ba-Launcher

简介(下载地址) Ba-Launcher 可以让你的应用成为简单的桌面应用,如需扩展功能,请联系我。 截图展示 可关注博客,实时更新最新插件: uniapp 常用原生插件大全 使用方法 使用方法也很简单,在插…

GPT3 终极指南(一)

原文:zh.annas-archive.org/md5/6de8906c86a2711a5a84c839bec7e073 译者:飞龙 协议:CC BY-NC-SA 4.0 前言 GPT-3,或者说是 Generative Pre-trained Transformer 3,是由 OpenAI 开发的基于 Transformer 的大型语言模型…

LLama3最新医疗大模型安装与应用指南

为什么要介绍医疗模型,因为平时我们工作繁忙,可能身体不舒服也会,拖着到不得已的时候才到医院,特别是老年人怕麻烦,拖延更严重。如果有了这些模型,我们可以向这些模型提问,给一个初步的了解&…

openlayer 使用ol-ext插件实现凸显区域

使用ol-ext插件实现凸显多变形 效果如图 1、创建openlayer var map; var view; var tileLayer, source, vector;function init() {tileLayer new ol.layer.Tile({source: new ol.source.TileArcGISRest({url: "http://map.geoq.cn/arcgis/rest/services/ChinaOnlineStr…

算法:双指针题目练习

目录 题目一:移动零 题目二:复写零 题目三:快乐数 题目四:盛最多水的容器 题目五:有效三角形的个数 题目六:和为s的两个数字(剑指offer) 题目七:三数之和 题目八:四数之和 常…

有关CSS中排版常见问题(清除默认样式问题 + 元素居中问题 + 元素之间的空白问题 + 行内块的幽灵空白问题)

前言:在练习CSS排版的时候,我们经常会遇到一些排版上的问题,那么我们如何去解决这些问题呢?本篇文章给出了一些新手在练习排版时候可能会遇到的问题的解决方案。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我…

【Windows,亲测有效】手动激活Sublime Text

前言 Sublime Text 是一款非常好用的文本编辑器,但是免费版时不时会跳弹窗 本方法无毒无害,简单易上手 2023/12/22 更新:实测从 4143 支持到 4169 开始 先确保你用的是官方版本的 Sublime Text,还没下的可以去官方下载&#…

题目 2671: 推导部分和

题目描述: 对于一个长度为 N 的整数数列 A1, A2, AN,小蓝想知道下标 l 到 r 的部分和 是多少? 然而,小蓝并不知道数列中每个数的值是多少,他只知道它的 M 个部分和的值。其中第 i 个部分和是下标 li 到 ri 的部分和 &#xf…

类加载子系统之类的生命周期(待完善)

0、前言 文中大量图片来源于 B站 黑马程序员 0.1、类加载子系统在 JVM 中的位置 类加载器负责的事情是:加载、链接、解析 0.2、与类的生命周期相关的虚拟机参数 参数描述-XX:TraceClassLoading打印出加载且初始化的类 1、类的生命周期 堆上的变量在分配空间的时…

LiveCD镜像文件的定制化

最近想要定制化一款属于自己的LiveCD镜像文件,并且里边封装好所需要的软件程序,本文将会记录具体的操作步骤,供有需要的人参考借鉴。 环境说明: 环境配置说明配置参数编码环境Centos7.9LiveCD文件CentOS-7-livecd-x86_64.iso 附…

基础安全:CSRF攻击原理与防范

CSRF的概念 CSRF(Cross-Site Request Forgery)中文名为“跨站请求伪造”。这是一种常见的网络攻击手段,攻击者通过构造恶意请求,诱骗已登录的合法用户在不知情的情况下执行非本意的操作。这种攻击方式利用了Web应用程序中用户身份验证的漏洞,即浏览器在用户完成登录后会自…

2024 华东杯高校数学建模邀请赛(B题)| 自动驾驶转弯问题 | 建模秘籍文章代码思路大全

铛铛!小秘籍来咯! 小秘籍团队独辟蹊径,以偏微分方程,中心驱动等强大工具,构建了这一题的详细解答哦! 为大家量身打造创新解决方案。小秘籍团队,始终引领着建模问题求解的风潮。 抓紧小秘籍&…