树莓派怎样进行超声波测距自动避障
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,树莓派怎样进行超声波测距自动避障,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。超声波测距的原理很简单,发射一个声波,反弹
千家信息网最后更新 2026年11月01日树莓派怎样进行超声波测距自动避障
树莓派怎样进行超声波测距自动避障,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
超声波测距的原理很简单,发射一个声波,反弹回来,然后接受反弹回来的这个声波。 利用这个时间差,就可以算出距离了。 首先,连接超声波模块,我的连接在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安全错误
数据库的锁怎样保障安全
互联网科技
喔噻互联网科技有限公司
山东特亿宝互联网科技有限公司
卓越科技(互联网 )
江苏南京365互联网科技
互联网教育科技公司vipkid
华夏互联网科技业
互联网科技和信息
国大互联网教育科技有限公司工作
如何创新互联网科技
乌鲁木齐新华智原互联网科技学校
科技大学互联网
徐州市互联网科技有限公司
上海京穆互联网科技有限公司
杭州披云加互联网科技有限公司
风投北京互联网科技
互联网科技包装股
万物互联网智能科技
互联网高科技绘画
互联网科技创业有什么好项目
中智农互联网科技
河南云网互联网络科技有限公司
狮子座互联网科技
互联网科技教育视频
互联网公司科技股
未来五年的互联网科技
工业互联网山东科技大学
互联网金融科技元年
半导体是互联网高科技吗
卡尔迅互联网科技有限公司