树莓派基础实验24:超声波测距传感器实验
一、介绍
超声波传感器使用超声波来准确检测物体并测量距离。他发出超声波并将它们转换成电信号,主要应用于汽车的倒车雷达、机器人自动避障行走、建筑施工工地以及一些工业现场。
二、组件
★Raspberry Pi 3主板*1
★树莓派电源*1
★40P软排线*1
★超声波传感器模块*1
★面包板*1
★跳线若干
三、实验原理
超声波传感器模块
该传感器有4个引脚: VCC,超声波模块电源脚,接5V电源即可 Trig,超声波发送脚,高电平时发送出40KHZ出超声波 Echo,超声波接收检测脚,当接收到返回的超声波时,输出高电平5V GND,超声波模块GND 注意:Echo 返回的是 5v信号,而树莓派的 GPIO 接收超过 3.3v 的信号可能会被烧毁,因此需要加一个分压电路,这里由于返回的脉冲时间非常短,我没有加,能正常运行,但还是冒险了!
超声波是指频率大于20 kHz的在弹性介质中产生的机械震荡波,其具有指向性强、能量消耗缓慢、传播距离相对较远等特点,因此常被用于非接触测距。声音是由振动产生的,能够产生超声波的装置就是超声波传感器,习惯上称为超声换能器,或者超声探头。超声波探头主要由压电晶片组成,既可以发射超声波,也可以接收超声波。
常用的是压电式超声波发生器,是利用压电晶体的谐振来工作的。超声波传感器探头内部有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。 超声波传感器就是利用压电效应的原理将电能和超声波相互转化,即在发射超声波的时候,将电能转换成超声波发射出去;而在接收时,则将超声振动转换成电信号。
超声波碰到杂质或分界面会产生显著反射形成反射成回波,碰到活动物体能产生多普勒效应。由于超声波对液体、固体的穿透本领很大,尤其是在阳光不透明的固体中,因此超声波测距对环境有较好的适应能力,此外超声波测量在实时、精度、价格也能得到很好的折衷。
超声波传感器工作原理
本实验中,HC-SR04超声波传感器通过发送声波,并计算声波返回超声传感器所需的时间来工作。通过往返时间检测法,它可以告诉我们物体相对于超声波传感器有多远。
HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能, 测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。基本工作原理:
(1)采用IO口TRIG触发测距,给至少10us的高电平信号;
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
(4)测试距离=(高电平时间*声速(340M/S))/2;
HC-SR04超声波模块工作原理
初始化时将trig和echo端口都置低,给Trig一个10US以上的高电平,模块开始工作,模块内自动发送八个40khz方波,并自主检测是否有电波返回。这时我们需要检测Echo处的电平,当为高电平的时候记一个时间;当Echo出为低电平的时候在记一个时间,这两个时间的差就是高电平持续的时间,然后用测距公式进行计算。
四、实验步骤
第1步:连接电路。
树莓派 |
T型转接板 |
超声波测距模块 |
---|---|---|
GPIO0 |
G17 |
Trig |
GPIO1 |
G18 |
Echo |
5V |
5V |
VCC |
GND |
GND |
GND |
超声波测距传感器实验电路图
超声波测距传感器实验实物接线图
第2步:编写控制程序。将手放在超声波测距模块上,观察屏幕上打印的距离数值。
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
TRIG = 11 #send-pin
ECHO = 12 #receive-pin
def setup():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(TRIG, GPIO.OUT, initial = GPIO.LOW)
GPIO.setup(ECHO, GPIO.IN)
def distance():
GPIO.output(TRIG, 1) #给Trig一个10US以上的高电平
time.sleep(0.00001)
GPIO.output(TRIG, 0)
#等待低电平结束,然后记录时间
while GPIO.input(ECHO) == 0: #捕捉 echo 端输出上升沿
pass
time1 = time.time()
#等待高电平结束,然后记录时间
while GPIO.input(ECHO) == 1: #捕捉 echo 端输出下降沿
pass
time2 = time.time()
during = time2 - time1
#ECHO高电平时刻时间减去低电平时刻时间,所得时间为超声波传播时间
return during * 340 / 2 * 100
#超声波传播速度为340m/s,最后单位米换算为厘米,所以乘以100
def loop():
while True:
dis = distance()
print dis, 'cm'
print ''
time.sleep(0.3)
def destroy():
GPIO.cleanup()
if __name__ == "__main__":
setup()
try:
loop()
except KeyboardInterrupt:
destroy()
- AI加持下的假肢将会越来越聪明
- 通过几个Hello World感受.NET Core全新的开发体验
- ASP.NET MVC三个重要的描述对象:ControllerDescriptor
- 基于自制数据集的MobileNet-SSD模型训练
- .NET Core采用的全新配置系统[1]: 读取配置数据
- ASP.NET MVC三个重要的描述对象:ActionDescriptor
- 升级比特币区块链后,以特币已叩响成功的大门
- .NET Core采用的全新配置系统[2]: 配置模型设计详解
- 采用双拼域名meicai.cn的美菜网融资4.5亿美元
- 区块链技术或将迎来突破性进展,以特币未来生机勃勃
- 配置多个网卡的OpenStack VM
- .NET Core采用的全新配置系统[3]: “Options模式”下的配置是如何绑定为Options对象
- 游戏用户中心开发
- .NET Core采用的全新配置系统[4]: “Options模式”下各种类型的Options对象是如何绑定的?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 暂未入坑记
- Python3脚本编程常用.md
- PS常用命令之文件和目录操作
- 快速掌握并发编程---synchronized篇(上)
- PS常用命令之WmiObject操作
- 『爬虫四步走』手把手教你使用Python抓取并存储网页数据!
- 快速掌握并发编程---synchronized篇(下)
- pivottablejs|在Jupyter中尽情使用数据透视表!
- 快速掌握并发编程---锁优化篇
- 弄懂这 6 个问题,拿下 Python 生成器!
- 快速掌握并发编程---线程阻塞与唤醒
- DOM优化之重绘和回流
- 本地储存之 Cookie、webStorage、indexedDB
- 使用DocumentFragment优化DOM操作
- 事件的防抖和节流