1.引入包
import RPi.GPIO as GPIO
import time
GPIO控制树莓派的输入输出
time用来计时,后面超声波测距用
2.定义接口方式以及接口位置
17、18、27、22 定义4个驱动模块
9、10 定义超声波模块
GPIO.setmode(GPIO.BCM)
IN1 = 17
IN2 = 18
IN3 = 27
IN4 = 22
IN5 = 9
IN6 = 10
3.初始化:
L298N的接口设为输出
超声波模块接口设为输入,来控制发动机使小车移动
IN5:Trig超声波发送脚,高电平时发送出40KHZ超声波
IN6:Echo超声波接收检测脚,收到返回的超声波时,输出高电平
def init():
GPIO.setup(IN1,GPIO.OUT)
GPIO.setup(IN2,GPIO.OUT)
GPIO.setup(IN3,GPIO.OUT)
GPIO.setup(IN4,GPIO.OUT)
GPIO.setup(IN5,GPIO.OUT,initial = GPIO.LOW)
GPIO.setup(IN6,GPIO.IN)
4.基础方向行为:
通过控制轮子的转动,来实现前左右的移动,停车
def up():
GPIO.output(IN1,GPIO.LOW)
GPIO.output(IN2,GPIO.LOW)
GPIO.output(IN3,GPIO.LOW)
GPIO.output(IN4,GPIO.LOW)
def down():
GPIO.output(IN1,GPIO.HIGH)
GPIO.output(IN2,GPIO.HIGH)
GPIO.output(IN3,GPIO.LOW)
GPIO.output(IN4,GPIO.LOW)
def left():
GPIO.output(IN1,GPIO.HIGH)
GPIO.output(IN3,GPIO.HIGH)
GPIO.output(IN2,GPIO.LOW)
GPIO.output(IN4,GPIO.LOW)
def right():
GPIO.output(IN2,GPIO.HIGH)
GPIO.output(IN4,GPIO.HIGH)
GPIO.output(IN1,GPIO.LOW)
GPIO.output(IN3,GPIO.LOW)
5.超声波测距
初始化时将trig和echo端口都置低,首先向给 trig 发送至少10 us的高电平脉冲(模块自动向外发送8个40K的方波),然后
等待,捕捉 echo 端输出上升沿,捕捉到上升沿的同时,打开定时器开始计时,再次等待捕捉echo的下降沿,当捕捉到下降沿,读出计时器的时间,这就是超声波在空气中运行的时间,按照 测试距离=(高电平时间*声速(340M/S))/2 就可以算出超声波到障碍物的距离。
函数返回值即为小车超声波探测器到前面障碍的距离
def checkdist():
GPIO.output(IN5,GPIO.HIGH)
time.sleep(0.000015)
GPIO.output(IN5,GPIO.LOW)
while not GPIO.input(IN6):
pass
t1 = time.time()
while GPIO.input(IN6):
pass
t2 = time.time()
return (t2-t1)*340/2
参考资料:
1.树莓派 GPIO学习笔记(2)--HC-SR04超声波模块 https://blog.csdn.net/github_27696095/article/details/45274021
2.【树莓派】树莓派小车(三)Python控制小车 https://www.cnblogs.com/lihanxiang/p/8451818.html