树莓派(2):L298电机驱动模块和超声波测距连接和测试

1.L298N电机驱动模块:
模块的电池盒与12V和地极相连,模块的地极再和树莓派共地
IN1-4接口和GPIO11,12,13,15相连

树莓派(2):L298电机驱动模块和超声波测距连接和测试_第1张图片

import RPi.GPIO as GPIO   #GPIO引脚定义方式
import time
GPIO.setmode(GPIO.BOARD) 
#针脚编号,就是树莓派1-40号引脚,还有一种更底层BCM,但是版本变化也变化
GPIO.setwarnings(False)  #忽略针脚占用警告?
INT1 = 11
INT2 = 12
INT3 = 13
INT4 = 15

GPIO.setup(INT1,GPIO.OUT)  #将连接IN1的GPIO引脚设置为输出模式
GPIO.setup(INT2,GPIO.OUT)
GPIO.setup(INT3,GPIO.OUT)
GPIO.setup(INT4,GPIO.OUT)

GPIO.output(INT1,GPIO.HIGH)
GPIO.output(INT2,GPIO.LOW)
GPIO.output(INT3,GPIO.HIGH)
GPIO.output(INT4,GPIO.LOW)

time.sleep(2)

GPIO.output(INT1,GPIO.LOW)
GPIO.output(INT2,GPIO.HIGH)
GPIO.output(INT3,GPIO.LOW)
GPIO.output(INT4,GPIO.HIGH)

time.sleep(1)
GPIO.output(INT1,GPIO.LOW)
GPIO.output(INT2,GPIO.LOW)
GPIO.output(INT3,GPIO.LOW)
GPIO.output(INT4,GPIO.LOW)

小车应该会前进2S,倒退1S然后停止,
GPIO.HIGH=1=True
GPIO.LOW=0=False
树莓派(2):L298电机驱动模块和超声波测距连接和测试_第2张图片
2.使能通道ENA和使能通道ENB:控制马达输出电压从而实现控速。
拔掉跳线帽后每个EA有两个引脚,外面1根连接树莓派的GPIO针,里面一根输出的是5V电压。一般情况下只要连接外面的就行
ENA:GPIO16;ENB:GPIO18

import RPi.GPIO as GPIO   #GPIO引脚定义方式
import time
GPIO.setmode(GPIO.BOARD)
#针脚编号,就是树莓派1-40号引脚,还有一种更底层BCM,但是版本变化也变化
GPIO.setwarnings(False)  #忽略针脚占用警告?
INT1 = 11
INT2 = 12
INT3 = 13
INT4 = 15
ENA = 16
ENB = 18
#初始化
GPIO.setup(INT1,GPIO.OUT)  #将连接IN1的GPIO引脚设置为输出模式
GPIO.setup(INT2,GPIO.OUT)
GPIO.setup(ENA, GPIO.OUT)

GPIO.setup(INT3,GPIO.OUT)
GPIO.setup(INT4,GPIO.OUT)
GPIO.setup(ENB, GPIO.OUT)

speed = 0
i=0
pwmA=GPIO.PWM(ENA,500) # 设置向ENA输入PWM脉冲信号,频率为500并创建PWM对象
pwmB=GPIO.PWM(ENB,500)
pwmA.start(speed)       # 以speed的初始占空比开始向ENA输入PWM脉冲信号
pwmB.start(speed)       #括号内speed范围在0到100,0不动,100最大

while True:
    GPIO.output(INT1, 1)
    GPIO.output(INT2, 0)
    GPIO.output(INT3, 1)
    GPIO.output(INT4, 0)
    for i in range(0,4):
        speed=60+i*10
        pwmA.ChangeDutyCycle(speed)
        pwmB.ChangeDutyCycle(speed)
        time.sleep(1)
    GPIO.output(INT1, 0)
    GPIO.output(INT2, 1)
    GPIO.output(INT3, 0)
    GPIO.output(INT4, 1)
    for i in range(0,4):
        speed=60+i*10
        pwmA.ChangeDutyCycle(speed)
        pwmB.ChangeDutyCycle(speed)
        time.sleep(1)
    GPIO.output(INT1, 0)
    GPIO.output(INT2, 0)
    GPIO.output(INT3, 0)
    GPIO.output(INT4, 0)
    pwmA.stop()  # PWM控制结束
    pwmB.stop()
    GPIO.cleanup()  # 清理释放GPIO资源,将GPIO复位

3.超声波测距模块:HC-SR04
有效测距:3cm-4m
持续10微秒的脉冲信号
4个引脚:VCC,Trig,Echp,GND,分别接2,38,40,39
时间间隔=接收时间-发送时间
测得距离=v*t/2
超声波模块对松软介质容易误报
红外线模块对透明反射介质容易误报
简单测试代码:如果有物体(手)在20cm内,会倒退 2S,再前进
经过测试,小于8mm左右感觉准确率不高

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
INT1 = 11
INT2 = 12
INT3 = 13
INT4 = 15

Trig= 38
Echo = 40
#初始化
GPIO.setup(INT1,GPIO.OUT)  #将连接IN1的GPIO引脚设置为输出模式
GPIO.setup(INT2,GPIO.OUT)
GPIO.setup(INT3,GPIO.OUT)
GPIO.setup(INT4,GPIO.OUT)

GPIO.setup(Trig,GPIO.OUT)
GPIO.setup(Echo,GPIO.IN)

def forward():
    GPIO.output(INT1, 1)
    GPIO.output(INT2, 0)
    GPIO.output(INT3, 1)
    GPIO.output(INT4, 0)
def back():
    GPIO.output(INT1, 0)
    GPIO.output(INT2, 1)
    GPIO.output(INT3, 0)
    GPIO.output(INT4, 1)
def left():
    GPIO.output(INT1, 0)
    GPIO.output(INT2, 1)
    GPIO.output(INT3, 1)
    GPIO.output(INT4, 0)
def right():
    GPIO.output(INT1, 1)
    GPIO.output(INT2, 0)
    GPIO.output(INT3, 0)
    GPIO.output(INT4, 1)
def stop():
    GPIO.output(INT1, 0)
    GPIO.output(INT2, 0)
    GPIO.output(INT3, 0)
    GPIO.output(INT4, 0)
def distance():
    GPIO.output(Trig,1)
    time.sleep(0.00001)
    GPIO.output(Trig,0)
    # 记录发送超声波的时刻1
    while GPIO.input(Echo)==0:
        starttime=time.time()
    # 记录接收到返回超声波的时刻2
    while GPIO.input(Echo)==1:
        stoptime=time.time()
    # 声波的速度为 343m/s, 转化为 34300cm/s
    distance=(stoptime-starttime)*34300/2
    return distance

if __name__ == '__main__':
    try:
        while True:
            dist = distance()
            print("Measured Distance = {:.2f} cm".format(dist))
            if dist > 20:
                forward()
                time.sleep(1)
            else:
                back()
                time.sleep(1)

    except KeyboardInterrupt:
        print("Measurement stopped by User")
        GPIO.cleanup()

如果会python应该看得懂代码,就不做详述了

你可能感兴趣的:(树莓派(2):L298电机驱动模块和超声波测距连接和测试)