树莓派拓展板------小车基本运动

电机原理图

  • PWMA和PWMB控制加++占空比 控制使能AB
  • AIN1  AIN2控制使能A对应接口输出输入-----高低电平
  • BIN1 BIN2控制使能B
  • 通过4个输入输出接口来控制小车转向----参考L298N电机模块
  • 使能A控制左轮
  • 使能B控制右边轮子

想调节速度---先设置PWMA和PWMB-----频率

在设置AB对应占空比----高电平占周期比---0~100

接线图:

 基本运动代码——自动驾驶

#!/home/pi/server
# coding=utf-8
#小车基本运动
#GPIO±àÂ뷽ʽΪBOARD£¡£¡
import  RPi.GPIO as GPIO
import time
#设置使能AB通道!!!
PWMA = 18
AIN1   =  22
AIN2   =  27

PWMB = 23
BIN1   = 25
BIN2  =  24
#前进函数
def t_up(speed,t_time):         #速度通过占空比控制0--100;加上运动时间
        L_Motor.ChangeDutyCycle(speed)#AIN左边轮子
        GPIO.output(AIN2,False)#AIN2####1高2低----前进
        GPIO.output(AIN1,True) #AIN1

        R_Motor.ChangeDutyCycle(speed)#BIN控制右边轮子转动
        GPIO.output(BIN2,False)#BIN2#3高4低正传
        GPIO.output(BIN1,True) #BIN1
        time.sleep(t_time)
#停止
def t_stop(t_time):
        L_Motor.ChangeDutyCycle(0)      #占空比为零
        GPIO.output(AIN2,False)#AIN2    #各个电机为低电平
        GPIO.output(AIN1,False) #AIN1

        R_Motor.ChangeDutyCycle(0)
        GPIO.output(BIN2,False)#BIN2
        GPIO.output(BIN1,False) #BIN1
        time.sleep(t_time)
        
def t_down(speed,t_time):       #后退
        L_Motor.ChangeDutyCycle(speed)
        GPIO.output(AIN2,True)#AIN2
        GPIO.output(AIN1,False) #AIN1

        R_Motor.ChangeDutyCycle(speed)
        GPIO.output(BIN2,True)#BIN2
        GPIO.output(BIN1,False) #BIN1
        time.sleep(t_time)

def t_left(speed,t_time):#左转########左边两个轮子后转。,右边前传
        L_Motor.ChangeDutyCycle(speed)
        GPIO.output(AIN2,True)#AIN2     #1低2高反转
        GPIO.output(AIN1,False) #AIN1

        R_Motor.ChangeDutyCycle(speed)#右边3高4低正转
        GPIO.output(BIN2,False)#BIN2
        GPIO.output(BIN1,True) #BIN1
        time.sleep(t_time)

def t_right(speed,t_time):
        L_Motor.ChangeDutyCycle(speed)##设置左边PWMA使能A的占空比
        GPIO.output(AIN2,False)#AIN2
        GPIO.output(AIN1,True) #AIN1
#1/0   True/False   GPIO.HIGH控制高低电平  ----转向
        R_Motor.ChangeDutyCycle(speed)
        GPIO.output(BIN2,True)#BIN2
        GPIO.output(BIN1,False) #BIN1
        time.sleep(t_time)    
        
GPIO.setwarnings(False) 
GPIO.setmode(GPIO.BCM)        #设置通道
GPIO.setup(AIN2,GPIO.OUT)
GPIO.setup(AIN1,GPIO.OUT)
GPIO.setup(PWMA,GPIO.OUT)

GPIO.setup(BIN1,GPIO.OUT)
GPIO.setup(BIN2,GPIO.OUT)
GPIO.setup(PWMB,GPIO.OUT)

L_Motor= GPIO.PWM(PWMA,100)#设置PWMA输出频率为100#左边PWMA使能
L_Motor.start(0)#使得频率一定,开始PWM

R_Motor = GPIO.PWM(PWMB,100)#右边PWMB使能频率
R_Motor.start(0)

try:
    while True:
        t_up(50,3)#前进速度50dc,三秒钟
        t_down(50,3)
        t_left(50,3)
        t_right(50,3)
        t_stop(3)#停止三秒
except KeyboardInterrupt:
    GPIO.cleanup()

二、控制基本运动 

#通过input()函数来进行输入操作,电脑按键控制小车前进
#!/home/pi/server
# coding=utf-8
#小车基本运动

import  RPi.GPIO as GPIO
import time
#设置使能AB通道!!!
PWMA = 18
AIN1   =  22
AIN2   =  27

PWMB = 23
BIN1   = 25
BIN2  =  24
#前进函数
def t_up(speed,t_time):         #速度通过占空比控制0--100;加上运动时间
        L_Motor.ChangeDutyCycle(speed)#AIN左边轮子
        GPIO.output(AIN2,False)#AIN2####1高2低----前进
        GPIO.output(AIN1,True) #AIN1

        R_Motor.ChangeDutyCycle(speed)#BIN控制右边轮子转动
        GPIO.output(BIN2,False)#BIN2#3高4低正传
        GPIO.output(BIN1,True) #BIN1
        time.sleep(t_time)
#停止
def t_stop(t_time):
        L_Motor.ChangeDutyCycle(0)      #占空比为零
        GPIO.output(AIN2,False)#AIN2    #各个电机为低电平
        GPIO.output(AIN1,False) #AIN1

        R_Motor.ChangeDutyCycle(0)
        GPIO.output(BIN2,False)#BIN2
        GPIO.output(BIN1,False) #BIN1
        time.sleep(t_time)
        
def t_down(speed,t_time):       #后退
        L_Motor.ChangeDutyCycle(speed)
        GPIO.output(AIN2,True)#AIN2
        GPIO.output(AIN1,False) #AIN1

        R_Motor.ChangeDutyCycle(speed)
        GPIO.output(BIN2,True)#BIN2
        GPIO.output(BIN1,False) #BIN1
        time.sleep(t_time)

def t_left(speed,t_time):#左转########左边两个轮子后转。,右边前传
        L_Motor.ChangeDutyCycle(speed)
        GPIO.output(AIN2,True)#AIN2     #1低2高反转
        GPIO.output(AIN1,False) #AIN1

        R_Motor.ChangeDutyCycle(speed)#右边3高4低正转
        GPIO.output(BIN2,False)#BIN2
        GPIO.output(BIN1,True) #BIN1
        time.sleep(t_time)

def t_right(speed,t_time):
        L_Motor.ChangeDutyCycle(speed)##设置左边PWMA使能A的占空比
        GPIO.output(AIN2,False)#AIN2
        GPIO.output(AIN1,True) #AIN1
#1/0   True/False   GPIO.HIGH控制高低电平  ----转向
        R_Motor.ChangeDutyCycle(speed)
        GPIO.output(BIN2,True)#BIN2
        GPIO.output(BIN1,False) #BIN1
        time.sleep(t_time)    
        
GPIO.setwarnings(False) 
GPIO.setmode(GPIO.BCM)
GPIO.setup(AIN2,GPIO.OUT)
GPIO.setup(AIN1,GPIO.OUT)
GPIO.setup(PWMA,GPIO.OUT)

GPIO.setup(BIN1,GPIO.OUT)
GPIO.setup(BIN2,GPIO.OUT)
GPIO.setup(PWMB,GPIO.OUT)

L_Motor= GPIO.PWM(PWMA,100)#设置PWMA输出频率为100#左边PWMA使能
L_Motor.start(0)#使得频率一定,开始PWM

R_Motor = GPIO.PWM(PWMB,100)#右边PWMB使能频率
R_Motor.start(0)

try:
    while True:
        res = input(" 输入: ")
        if res =="w"or res=="W":
                t_up(50,1.5)
        elif res =="s" or "S":  #输入后退
                t_down(50,1.5)
        if res == "a" or "A":
                t_left(50,1)
        if res == "r" or "R":
                t_right(50,1)
        if res == "p" or "P":
                t_stop(2)
        """
         t_up(50,3)#前进速度50,三秒钟
        t_down(50,3)
        t_left(50,3)
        t_right(50,3)
        t_stop(3)
       #停止三秒"""
except KeyboardInterrupt:
    GPIO.cleanup()


猜你喜欢

转载自blog.csdn.net/JLwwfs/article/details/126111784
今日推荐