《树莓派项目实战》第六节 使用超声波模块测距

news2025/7/9 23:51:51

目录

6.1 引脚介绍

6.2 工作原理

6.3 使用注意

6.4 连接到树莓派

6.5 编写代码输出距离


在本节,我们将学习如何使用HC-SR04超声波模块测量前方障碍物的距离,该项目设计到的材料有:

  1. 树莓派 * 1
  2. 面包板 * 1
  3. 杜邦线若干
  4. HC-SR04超声波模块* 1

6.1 引脚介绍

从上图我们可以看到超声波模块的4个引脚,它们的作用罗列如下:

1. VCC: 电源引脚,超声波模块工作电压为5伏。

2. Trig: 是Trigger(触发)这个单词的缩写,该引脚用于触发超声波脉冲。

3. Echo: 该引脚会在高电平和低电平之间转换,当检测到障碍物时,在高电平保持的时间就表示信号发射出去并反射回来的时间。

4. GND: 接地引脚。

6.2 工作原理

如果超声波模块前方没有障碍物,约4米),那当Trig引脚发射10μs的超声波脉冲后,Echo引脚会开始产生一个高电平并持续38毫秒,之后就会处于低电平状态,所以当得到38ms这个值时,我们就知道前方没有检测到障碍物了。

如果前方有障碍物,那在Trig引脚发射10μs的超声波脉冲后,信号就会反射回来,Echo引脚就会在接收到信号时立即切换到低电平状态,此时Echo引脚在高电平状态保持的时间就是信号发射并返回的所花的时间。

我们知道距离=速度 * 时间,要求出超声波模块到障碍物之间的距离,我们就需要知道速度和时间。速度就是340m/s,也就是声音在空气中传播的速度,转换城cm/μs单位就是0.034 cm/μs。时间的话,由于我们得到的是信号从发射到返回的时间值,所以需要除以2。

最终得到的计算公式为距离 =  0.034 cm/μs * 时间(μs) / 2

6.3 使用注意

以下情况可能会导致距离检测失败:

1. 目标障碍物太小。

2. 目标障碍物距离太远,超过13英尺(大约4米)。

3. 发射的信号以一定倾斜角度(小于45°)接触目标障碍物,导致信号无法被反射回来,如下图所示。

4. 目标障碍物材质特殊(比如毛绒玩具),可能会吸收信号,而不是将反射回来。

6.4 连接到树莓派

我们将超声波模块插到面包板上,然后连接引脚:

  • VCC引脚连到树莓派的2号5V引脚。
  • Trig引脚连到树莓派的16号GPIO引脚。
  • Echo引脚连到树莓派的18号GPIO引脚。
  • GND引脚连到树莓派的14号Ground引脚。

6.5 编写代码输出距离

import time
import RPi.GPIO as GPIO


# 设置编码方式
GPIO.setmode(GPIO.BOARD)

# 设置Trig和Echo的引脚编号
Trig = 16
Echo = 18

# 设置引脚模式
GPIO.setup(Trig, GPIO.OUT)
GPIO.setup(Echo, GPIO.IN)

def get_distance():
    # Trigh引脚发射10μs的超声波脉冲
    GPIO.output(Trig, GPIO.HIGH)
    time.sleep(0.1)
    GPIO.output(Trig, GPIO.LOW)

    # Echo引脚检测反射信号
    while GPIO.input(Echo) == GPIO.LOW:
        start_time = time.time()

    while GPIO.input(Echo) == GPIO.HIGH:
        end_time = time.time()
    
    # 持续时间大于38毫秒的话
    # 就表明前方无障碍物或者障碍物太远
    duration = (end_time - start_time)
    if duration * 1000 > 38:            # 将秒转换成毫秒
        return
    
    # 返回以cm为单位的距离值
    return 0.034*duration*1000000/2    # 将秒转换成微秒


if __name__ == "__main__":
    try:
        while True:
            distance = get_distance()
            if distance:
                print(f"障碍物距离是{distance:.2f}cm")
            else:
                print("前方无障碍物或障碍物离得太远!")
    except KeyboardInterrupt:
        print("停止检测")
        GPIO.cleanup()

我们重点来看下get_distance()函数。在发射了10μs的信号后,我们就分别通过start_time和end_time两个变量记录Echo引脚处于高电平状态的开始和结束时间。接着,将start_time减去end_time得到信号从发射到回来的时间间隔(单位:秒),保存到duration变量中。如果duration的值大于38毫秒,那么就表明前方没有障碍物或者障碍物离得太远;否则的话就通过0.034*duration*1000000/2计算得到目标障碍物的距离(单位:厘米)。

运行截图如下:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql进阶之索引与视图和三大范式

1、索引(index) 1.1、什么是索引? 索引是在数据库表的字段上添加的,是为了提高查询效率存在的一种机制。 一张表的一个字段可以添加一个索引,当然,多个字段联合起来也可以添加索引。 索引相当于一本书的…

redis搭建主从、redis搭建集群、redis中StrictRedis()、RedisCluster()方法与python交互

一、StrictRedis方法 创建对象,指定host、port、db与指定的服务器端口连接,其中默认host为localhost、port为6379、db为0,不同类型调用的实例方法不同,与redis命令一致,方法需要的参数与命令参数一致 from redis imp…

Xavier(8):Xavier使用速腾聚创激光雷达运行a-loam算法部分报错与解决方案

文章目录1 速腾聚创激光雷达驱动报错:Project cv_bridge specifies /usr/include/opencv as an include dirProject grid_map_cv specifies /usr/include/opencv as an include dir2 a-loam算法报错: fatal error: opencv/cv.h: 没有那个文件或目录报错&…

无线社工基础

无线社工基础 一些社会工程学密码生成器(百度) Crunch工具 /usr/share/crunch/charset.lstcrunch 最短长度 最长长度 字符集 选项crunch 8 12 -f /usr/share/crunch/charset.lst ualpha -o /root/pass.txt Windows下对附近无线网络进行扫描 WirelessMon…

MySQL事务/事务与数据库底层数据/多点回滚/隔离级别/悲观锁和乐观锁/锁模式和分类/相关锁总结/JDBC事务实现

文章目录MySQL事务概述事务事务与数据库底层数据事务控制语句事务处理基本测试多点回滚相关日志问题redo logundo log隔离级别常见问题事务隔离性隔离级别的范围总结隔离等级读未提交读已提交可重复读串行化并发写问题幻读问题悲观锁和乐观锁锁模式锁分类按加锁方式分类按照算法…

基于贝叶斯推理估计稳态 (ST) 和非稳态 (NS) LPIII 模型分布拟合到峰值放电(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

ShardingSphere笔记(一): 经验和踩坑总结

ShardingSphere笔记(一): 使用经验总结 文章目录ShardingSphere笔记(一): 使用经验总结一、背景框架选择二、ShardingSphere-jdbc 只是一个帮助你路由的框架(踩坑总结)1. 它默认会认…

支持末尾携带标签的多行TextView

项目开发过程中,遇到个UI上的需求,本着不重复造轮子、敏捷开发的原则,于是乎网上找寻了一番,发现还是自己搞吧,搜不到这样的需求,先看下我们的效果。 总结有以下三点需要注意: 末尾vip部分是…

$19服务:DTCStatusMask和statusofDTC bit 定义

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,当ECU产生DTC时,我们只知道有故障发生了,并不清楚该故障什么时候发生,现在是否已经恢复、发生过几次,恢复过几次等信息,基于此ISO发布的14229-1使用DTC状态…

[附源码]SSM计算机毕业设计志愿者管理系统论文2022JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【VTK+有限元后处理】可视化结果云图

构建vtkUnstructuredGrid对象 为了读取不同格式的有限元计算结果文件,我们先写一个FEDataModel类来管理有限元的几何拓扑和属性信息。 class FEDataModel:"""有限元数据模型类"""def __init__(self):self.nodes [] # 节点几何坐标…

斐波那契数列和斐波那契数

一、什么是斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这…

【考研复试】计算机专业考研复试英语常见问题三(个人选择/学业规划篇)

相关链接: 【考研复试】计算机专业考研复试英语常见问题一(家庭/家乡/学校篇)【考研复试】计算机专业考研复试英语常见问题二(研究方向/前沿技术/本科毕设篇)【考研复试】计算机专业考研复试英语常见问题三&#xff0…

C++---哈希

目录 1. unordered系列关联式容器 1.1 unordered_map 1.1.1 unordered_map的介绍 1.1.2 unordered_map的接口说明 1.2 unordered_set 2. 底层结构 2.1 哈希概念 2.2 哈希冲突 2.3 哈希函数 2.4 哈希冲突解决 2.4.1 闭散列 2.4.2 开散列 3. 封装unorder_map和unord…

MySQL增删改查进阶 — 表的设计

文章目录表的设计1.设计思路2.实体固定关系的套路2.1 一对一关系2.2 一对多关系2.3 多对多关系3.总结表的设计 表的设计实际上要做的工作就是明确一个程序里,需要使用几个数据库,几个表,表里都有哪些列。 1.设计思路 先明确实体再明确实体…

6. Design A Web Crawler

title: Notes of System Design No.10 — Design a Web Crawler description: ‘Design a Web Crawler’ date: 2022-05-13 18:01:58 tags: 系统设计 categories: 系统设计 00. What is Web Crawler? Q :uh just for now lets just do html pagesbut your web cr…

Explaining Deepfake Detection by Analysing Image Matching 翻译

点击查看对应的代码 摘要 本文旨在解释深度伪造检测模型在仅由二进制标签做有监督时如何学习图像的伪迹特征。为此,从图像匹配的角度提出如下三个假设。1、深度伪造检测模型表明基于视觉概念的真/假图片既不与源图片相关也不与目标图片相关而是与伪迹图片相关。2、…

全链路压测效能10倍提升的压测工具实践笔记

背景 创业型公司或创新型项目往往团队资源有限,人员能力水平有限,难以投入专业自动化压测人员; 同时部分业务(tob/toc场景)长期有中小型活动场景带来小规模流量并发,需要产研能长期保障并及时感知和解决网…

GitHub Star70K登顶,字节内部数据结构与算法笔记,限时上线

为什么学算法 不得不说,现在几乎所有的大厂,比如Google、字节、BAT,面试的时候都喜欢考算法、让人现场写代码,那你有没有真正地想过,为什么这些大公司都喜欢考算法呢? 经常有人说,程序员35岁之…

Java毕业设计MVC:基于SSM实现计算机硬件评测交流平台

作者主页:编程千纸鹤 作者简介:Java、前端、Pythone开发多年,做过高程,项目经理,架构师 主要内容:Java项目开发、毕业设计开发、面试技术整理、最新技术分享 收藏点赞不迷路 关注作者有好处 项目编号&…