您的位置:首页 > 大数据 > 人工智能

人工智能-树莓派小车(3)——GPIO控制小车

2018-02-27 09:13 316 查看
上一个教程介绍了树莓派的GPIO接口,并且简单的利用这个接口控制了小灯的亮灭,详细见人工智能之我与树莓派(2),本次教程将更进一步,利用GPIO口实现控制智能小车的前进后退以及超声波避障、红外线探测等功能。

智能小车硬件

GPIO接口设置

引脚定义

通道配置

管脚类型设置及初始化

接口连线

控制代码

开关前大灯

机器人方向控制

超声波避障

红外线避障

效果演示

系列教程

智能小车硬件

硬件包括小车底盘套装(底盘、车轮、电机)、超声波探测模块、红外线感应模块、树莓派、开发板(提供电机外部供电线路、扩展GPIO口等)、电池。

GPIO接口设置

引脚定义

GPIO.setmode(GPIO.BCM)


使用BCM编号

通道配置<
4000
/h3>

########LED口定义#################
LED0 = 10
LED1 = 9
LED2 = 25
LED_L = 11
LED_R = 8
LED_F = 7
LED_CTR = 5

########电机驱动接口定义#################
ENA = 13    #//L298使能A
ENB = 20    #//L298使能B
IN1 = 19    #//电机接口1
IN2 = 16    #//电机接口2
IN3 = 21    #//电机接口3
IN4 = 26    #//电机接口4

########舵机接口定义#################

########超声波接口定义#################
ECHO = 4    #超声波接收脚位
TRIG = 17   #超声波发射脚位

########红外传感器接口定义#################
IR_R = 18   #小车右侧巡线红外
IR_L = 27   #小车左侧巡线红外
IR_M = 22   #小车中间避障红外
IRF_R = 23  #小车跟随右侧红外
IRF_L = 24  #小车跟随左侧红外


管脚类型设置及初始化

##########忽略警告###############
GPIO.setwarnings(False)

#########led初始化为000##########
GPIO.setup(LED0,GPIO.OUT,initial=GPIO.HIGH)
GPIO.setup(LED1,GPIO.OUT,initial=GPIO.HIGH)
GPIO.setup(LED2,GPIO.OUT,initial=GPIO.HIGH)
GPIO.setup(LED_L,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(LED_R,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(LED_F,GPIO.OUT,initial=GPIO.LOW)

#########电机初始化为LOW##########
GPIO.setup(ENA,GPIO.OUT,initial=GPIO.LOW)
ENA_pwm=GPIO.PWM(ENA,1000)
ENA_pwm.start(0)
ENA_pwm.ChangeDutyCycle(50)
GPIO.setup(IN1,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(IN2,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(ENB,GPIO.OUT,initial=GPIO.LOW)
ENB_pwm=GPIO.PWM(ENB,1000)
ENB_pwm.start(0)
ENB_pwm.ChangeDutyCycle(50)
GPIO.setup(IN3,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(IN4,GPIO.OUT,initial=GPIO.LOW)

#########红外初始化为输入,并内部拉高#########
GPIO.setup(IR_R,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(IR_L,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(IR_M,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(IRF_R,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(IRF_L,GPIO.IN,pull_up_down=GPIO.PUD_UP)

##########超声波模块管脚类型设置#########
GPIO.setup(TRIG,GPIO.OUT,initial=GPIO.LOW)#超声波模块发射端管脚设置trig
GPIO.setup(ECHO,GPIO.IN,pull_up_down=GPIO.PUD_UP)#超声波模块接收端管脚设置echo


接口连线



控制代码

开关前大灯

####################################################
##名称 Open_Light()
##功能 开大灯LED_F
##入口参数 :无
##出口参数 :无
####################################################

def Open_Flight():#开大灯LED_F
GPIO.output(LED_F,GPIO.HIGH)#大灯正极接IO  负极接GND

####################################################
##名称 Close_Light()
##功能 关大灯LED_F
##入口参数 :无
##出口参数 :无
####################################################

def Close_Flight():#关大灯
GPIO.output(LED_F,GPIO.LOW)#大灯正极接IO  负极接GND


机器人方向控制

def Motor_Forward():
print ( 'motor forward' )
GPIO.output(ENA,True)
GPIO.output(ENB,True)
GPIO.output(IN1,True)
GPIO.output(IN2,False)
GPIO.output(IN3,True)
GPIO.output(IN4,False)

def Motor_Backward():
print ( 'motor_backward' )
GPIO.output(ENA,True)
GPIO.output(ENB,True)
GPIO.output(IN1,False)
GPIO.output(IN2,True)
GPIO.output(IN3,False)
GPIO.output(IN4,True)

def Motor_TurnLeft():
print ( 'motor_turnleft' )
GPIO.output(ENA,True)
GPIO.output(ENB,True)
GPIO.output(IN1,True)
GPIO.output(IN2,False)
GPIO.output(IN3,False)
GPIO.output(IN4,True)

def Motor_TurnRight():
print ( 'motor_turnright' )
GPIO.output(ENA,True)
GPIO.output(ENB,True)
GPIO.output(IN1,False)
GPIO.output(IN2,True)
GPIO.output(IN3,True)
GPIO.output(IN4,False)

def Motor_Stop():
print ( 'motor_stop' )
GPIO.output(ENA,False)
GPIO.output(ENB,False)
GPIO.output(IN1,False)
GPIO.output(IN2,False)
GPIO.output(IN3,False)
GPIO.output(IN4,False)


超声波避障

def checkdist():
GPIO.output(17,GPIO.HIGH)
time.sleep(0.000015)
GPIO.output(17,GPIO.LOW)
while not GPIO.input(4):
pass
t1 = time.time()
while GPIO.input(4):
pass
t2 = time.time()
return (t2-t1)*340/2
try:
while True:
ds = checkdist()
if ds > 0.15:
print 'Distance: %0.3f m' %ds
Motor_Forward()
else:
Motor_Stop()
time.sleep(0.1)
except KeyboardInterrupt:
GPIO.cleanup()


红外线避障

def Avoiding():#红外避障函数
if GPIO.input(IR_M) == False:
Motor_Stop()
else:
Motor_Forward()
try:
while True:
Avoiding()
time.sleep(0.1)
except KeyboardInterrupt:
GPIO.cleanup()


效果演示

GPIO控制小车

系列教程

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: