树莓派小车之前进和后退(创乐博套件)

树莓派小车之前进

买了一个树莓派小车的配件,当然,有二次开发板板,不过原理相同。
买的板子是创乐博的智能小车套件。
以下代码来自其指导文件,但是文件都是英文,没有代码讲解,导致很难看得懂。本人重新写了,并给出自己的理解,代码也是略有不同,但是从零写起,可以让自己真正明白原理。

1、首先,根据电路图设置需要使用的树莓派引脚

import RPi.GPIO as GPIO
import time
#绑定对应的引脚,来自于图纸
PWMA=18
AIN1 = 22
AIN2 = 27
PWMB=23
BIN1= 25
BIN2 = 24

18引脚控制的是左侧两个电机
23引脚控制的右侧两个电机
AIN1、AIN2、BIN1、BIN2控制的是左右两侧电机的正转和翻转
2、设置引脚模式和输入输出

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
# 设置引脚为输出
GPIO.setup(PWMA, GPIO.OUT)
GPIO.setup(AIN1, GPIO.OUT)
GPIO.setup(AIN2, GPIO.OUT)
GPIO.setup(PWMB, GPIO.OUT)
GPIO.setup(BIN1, GPIO.OUT)
GPIO.setup(BIN2, GPIO.OUT)
#电机
leftMotor = GPIO.PWM(PWMA, 100)
rightMotor = GPIO.PWM(PWMB, 100)
leftMotor.start(0)
rightMotor.start(0)

这样,设置基本完成,电机就处于待命状态了。

3、前进和后退函数

要使得小车前进,我们需要让四个电机转动起来,既然是前进,当然是电机正转

def forward(speed,runtime):
    leftMotor.ChangeDutyCycle(speed)
    GPIO.output(AIN1, True)#AIN1高电平则正转
    GPIO.output(AIN2, False)#如果为True则翻转
    rightMotor.ChangeDutyCycle(speed)
    GPIO.output(BIN1, True)
    GPIO.output(BIN2, False)
    time.sleep(runtime)#维持状态的时间,如果不给命令执行其他,将会继续执行

当四轮正转的时候,实现了基本的前进功能。
后退当然也是同理,只需要反向设置就好了。

def backword(speed, backtime):
      leftMotor.ChangeDutyCycle(speed)
      GPIO.output(AIN2, True)  # AIN2
      GPIO.output(AIN1, False)  # AIN1
      rightMotor.ChangeDutyCycle(speed)
      GPIO.output(BIN2, True)  # BIN2
      GPIO.output(BIN1, False)  # BIN1
      time.sleep(backtime)

至此,前进和后退的功能就实现了。
最后通过调用函数,来实现小车运行。

if __name__ == '__main__':
    try:
         while True:
             forward(50,3)
    except KeyboardInterrupt:
         GPIO.cleanup()

一定要调用 GPIO.cleanup()函数来清空引脚上的相关设置,否则引脚将被占用,对程序的下次运行可能会有影响。

4、大致的思路

电机连接在电路板上,ChangeDutyCycle可以让我们来设置速度,通过改变占空比来实现。
速度设定好了,设定其正转或者翻转,则是通过连接的AIN1和AIN2接口来实现。(这里是电路模块的名字,实际操作中也可以起不同的名字,或者接入不同的接口)

你可能感兴趣的:(Python,树莓派)