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模块通过四个输入口电平信号的高低来实现对电机转向的控制。其中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()