嵌入式系统(2)- 树莓派DIY小车 - python控制小车

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

猜你喜欢

转载自blog.csdn.net/Game_Builder/article/details/83351011