【嵌入式开发】基于树莓派实现超声波避障小车(Python)

本文介绍了如何使用树莓派4B和L298N电机驱动模块,配合超声波测距模块,组装并编程实现一个能够避障的小车。详细讲解了硬件组装、L298N模块的工作原理,以及超声波模块的连接方式。通过Python代码实现了超声波避障功能,但在实际应用中,单个超声波模块存在盲区,建议增加多路探测以提高避障准确性。
摘要由CSDN通过智能技术生成

1. 模块介绍与组装

1.1 所需硬件
(1)烧制好的树莓派4B
(2)小车车架(可在网上购买)。
(3)直流电机*4:用于驱动小车行驶。
(4)L298N电机驱动模块:用于实现对电机的控制。
(5)超声波测距模块:用于实时测距,以实现自主避障。
(6)其余辅助器件:包括充电宝(树莓派供电)、干电池组(电机供电)及杜邦线若干。
1.2 整体结构
整体结构

1.3 L298N电机驱动模块
该模块又叫L298N双H桥直流电机驱动模块,将模块的四个输出口(out1、out2、out3、out4)分别与直流电机正负极相连。供电口(12V、GND)分别与电池组正负极相连。四个输入口(IN1、IN2、IN3、IN4)分别与树莓派GPIO接口11、12、13、15相连。
L298N电机驱动模块

L298N电机驱动模块

L298N模块通过四个输入口电平信号的高低来实现对电机转向的控制。其中IN1、IN2控制out1、out2(即左侧电机),IN3、IN4控制out3、out4(即右侧电机)。下面是对电机进行控制的真值表:

IN1 IN2 电机
0 0 停止
0 1 反转
1 0 正转
1 1 停止

1.4 超声波模块
将超声波模块TRIG和ECHO分别连接到GPIO29和GPIO31上,TRIG负责发射超声波,ECHO负责接收超声波,VCC接树莓派5V接口以实现对模块的供电,GND接树莓派GND接口。利用发射和接收的时间差来计算距离。
超声波模块
超声波模块

2. 实现代码

2.1 超声波避障

#超声波测距函数
def Distance_Ultrasound():
    GPIO.output(TRIG,GPIO.LOW)		#输出口初始化置LOW(不发射)
    time.sleep(0.000002)
    GPIO.output(TRIG,GPIO.HIGH)		#发射超声波
    time.sleep(0.00001)
    GPIO.output(TRIG,GPIO.LOW)		#停止发射超声波
    while GPIO.input(ECHO) == 0:
        emitTime = time.time()		#记录发射时间
    while GPIO.input(ECHO) == 1:
        acceptTime = time.time()	
  • 28
    点赞
  • 156
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
对于树莓派超声波避障小车Python代码,你可以参考以下示例: ```python import RPi.GPIO as GPIO import time # 设置GPIO模式为BCM GPIO.setmode(GPIO.BCM) # 定义超声波的引脚 TRIG_PIN = 23 ECHO_PIN = 24 # 设置引脚为输入或输出 GPIO.setup(TRIG_PIN, GPIO.OUT) GPIO.setup(ECHO_PIN, GPIO.IN) def get_distance(): # 发送超声波信号 GPIO.output(TRIG_PIN, GPIO.HIGH) time.sleep(0.0001) GPIO.output(TRIG_PIN, GPIO.LOW) # 监听回波 while GPIO.input(ECHO_PIN) == GPIO.LOW: pulse_start = time.time() while GPIO.input(ECHO_PIN) == GPIO.HIGH: pulse_end = time.time() # 计算距离(单位:厘米) pulse_duration = pulse_end - pulse_start distance = pulse_duration * 17150 distance = round(distance, 2) return distance try: while True: # 获取距离 dist = get_distance() print("Distance: {} cm".format(dist)) # 判断是否需要避障 if dist < 20: # 停止小车的运动 # 这可以写控制小车停止的代码 pass else: # 小车继续前进 # 这可以写控制小车前进的代码 pass time.sleep(0.1) except KeyboardInterrupt: # 清理GPIO设置 GPIO.cleanup() ``` 这段代码使用了RPi.GPIO库来控制树莓派的GPIO引脚。在代码中,首先设置了超声波传感器的引脚,然后定义了一个函数`get_distance()`来获取超声波传感器测量的距离。在主循环中,通过调用`get_distance()`获取当前距离,并根据距离判断是否需要避障。你可以根据实际情况,添加相应的代码来控制小车的运动。最后,通过捕获`KeyboardInterrupt`异常,在程序退出前进行GPIO的清理工作。 请注意,具体的小车控制代码因硬件和具体需求而异,上述代码只是一个示例,你需要根据你的实际情况进行相应的修改和适配。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值