树莓派怎样进行超声波测距自动避障
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,树莓派怎样进行超声波测距自动避障,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。超声波测距的原理很简单,发射一个声波,反弹
千家信息网最后更新 2025年12月03日树莓派怎样进行超声波测距自动避障
树莓派怎样进行超声波测距自动避障,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
超声波测距的原理很简单,发射一个声波,反弹回来,然后接受反弹回来的这个声波。 利用这个时间差,就可以算出距离了。 首先,连接超声波模块,我的连接在GPIO20和GPIO21上,所以相应的代码如下
# 超声波引脚TRIG = 20ECHO = 21
TRIG这个名称也可以换,但是模块上用的这个名字,用这个更好记忆。 TRIG负责发射超声波,ECHO负责接收超声波。
1、初始化超声波模块,也就是把它不让他发射,置于低电平
GPIO.output(TRIG, 0)
很多在后面追加了如下代码:
time.sleep(0.000002)
应该是为了防止错误,因为紧接着,就需要把发射端置为高电平。
2、发射超声波
GPIO.output(TRIG, 1)time.sleep(0.00001)GPIO.output(TRIG, 0)
一定要 用GPIO.output(TRIG, 0)来把超声波发射关闭,否则将会一直发射,也就没有办法测距了。 现在发射结束。
3、接收超声波
while GPIO.input(ECHO) == 0: passemitTime = time.time()while GPIO.input(ECHO) == 1: pass acceptTime = time.time()
通过该代码,获取ECHO的状态,一开始发射的时候,ECHO输入为低电平,此时获取一个时间emitTime,发射结束以后,接收启动,接收到信号,获得一个时间 acceptTime。
4、计算距离
totalTime = acceptTime - emitTimedistanceForReturn = totalTime * 340 / 2 * 100
这里之所以乘以100,是因为获得的距离是微米,乘以100就是厘米了。
5、整合代码
现在把上面的代码整合起来,放在一个distance函数里面,并且返回距离的值。 完整代码如下:
# 超声波测距函数def distance(): GPIO.output(TRIG, 0) time.sleep(0.000002) GPIO.output(TRIG, 1) time.sleep(0.00001) GPIO.output(TRIG, 0) while GPIO.input(ECHO) == 0: pass emitTime = time.time() while GPIO.input(ECHO) == 1: pass acceptTime = time.time() totalTime = acceptTime - emitTime distanceForReturn = totalTime * 340 / 2 * 100 return distanceForReturn
6、循环发射超声波并检测距离
拿到了距离,需要让超声波按照要求不断发射和接收,小车也需要做出相应的反应,因此还需要一个循环的函数。 代码很难用文字解释,但是很好理解。如下:
def loop(): while True: dis= distance() if dis<40: while dis<40: backword(50, 0.2) dis=distance() else: forward(50, 0)
7、运行函数
if __name__ == '__main__': try: forward(50, 0) loop() except KeyboardInterrupt: GPIO.cleanup()
8、写在文章外
forward()和backword()等函数均是之前定义的小车运动的函数。 以下是整个文件的所有代码:
import time# 绑定对应的引脚,来自于图纸PWMA = 18AIN1 = 22AIN2 = 27PWMB = 23BIN1 = 25BIN2 = 24# 超声波引脚TRIG = 20ECHO = 21GPIO.setmode(GPIO.BCM)GPIO.setwarnings(False)# 设置引脚为输出GPIO.setup(PWMA, GPIO.OUT)GPIO.setup(AIN1, GPIO.OUT)GPIO.setup(AIN2, GPIO.OUT)GPIO.setup(PWMB, GPIO.OUT)GPIO.setup(BIN1, GPIO.OUT)GPIO.setup(BIN2, GPIO.OUT)GPIO.setup(TRIG, GPIO.OUT)GPIO.setup(ECHO, GPIO.IN)# 电机leftMotor = GPIO.PWM(PWMA, 100)rightMotor = GPIO.PWM(PWMB, 100)leftMotor.start(0)rightMotor.start(0)##小车的前进函数def forward(speed, runtime): leftMotor.ChangeDutyCycle(speed) GPIO.output(AIN1, True) # AIN1高电平则正转 GPIO.output(AIN2, False) # 如果为True则翻转 rightMotor.ChangeDutyCycle(speed) GPIO.output(BIN1, True) GPIO.output(BIN2, False) time.sleep(runtime) # 维持状态的时间,如果不给命令执行其他,将会继续执行# 后退函数def backword(speed, backtime): leftMotor.ChangeDutyCycle(speed) GPIO.output(AIN2, True) GPIO.output(AIN1, False) rightMotor.ChangeDutyCycle(speed) GPIO.output(BIN2, True) GPIO.output(BIN1, False) time.sleep(backtime)# 左转弯函数def turnLeft(speed, lefttime): leftMotor.ChangeDutyCycle(speed) GPIO.output(AIN1, False) GPIO.output(AIN2, True) rightMotor.ChangeDutyCycle(speed) GPIO.output(BIN1, True) GPIO.output(BIN2, False) time.sleep(lefttime)# 右转弯函数def turnRight(speed, righttime): leftMotor.ChangeDutyCycle(speed) GPIO.output(AIN1, True) GPIO.output(AIN2, False) rightMotor.ChangeDutyCycle(speed) GPIO.output(BIN1, False) GPIO.output(BIN2, True) time.sleep(righttime)# 超声波测距函数def distance(): GPIO.output(TRIG, 0) time.sleep(0.000002) GPIO.output(TRIG, 1) time.sleep(0.00001) GPIO.output(TRIG, 0) while GPIO.input(ECHO) == 0: pass emitTime = time.time() while GPIO.input(ECHO) == 1: pass acceptTime = time.time() totalTime = acceptTime - emitTime distanceForReturn = totalTime * 340 / 2 * 100 return distanceForReturndef loop(): while True: dis= distance() if dis<40: while dis<40: backword(50, 0.2) dis=distance() else: forward(50, 0)if __name__ == '__main__': try: forward(50, 0) loop() except KeyboardInterrupt: GPIO.cleanup()```这样,遇到障碍物,就会后退。通过转弯可以躲避障碍物,这里没有写躲避的代码。其实就是转向就可以了。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
超声
超声波
发射
函数
代码
时间
电平
小车
模块
声波
就是
文章
状态
障碍
障碍物
帮助
循环
整合
树莓
清楚
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
黄石网络安全培训机构
神级数据库小说最新章节
停车场 数据库
福州中睿网络技术有限公司
服务器的管理节点是什么
莱州商城软件开发解决方案
中金互联网科技怎么样
中概互联网与恒生科技互联网
家庭用刀片服务器合适吗
数据库 stmt
同花顺金融精准数据库
数据库一张表200万条数据
数据库启动过程及文件
公安部女处长网络安全
阳泉农行软件开发社招
宁夏办公软件开发哪家专业
软件开发部管理
服务器管理器中nginx在哪
r510服务器蓝灯亮不开机
嵌入式软件开发博客
中国知网与维普数据库比较
网络安全专业知识大全
代码托管到本地服务器
福建定制网络技术服务套餐
青少年网络安全的表现
国内数据中心服务器供应商
ebsco数据库是什么搜索引擎
网络技术客服是做什么的
魔兽世界查看服务器人数
如何对数据库进行基线扫描