人工智能-树莓派小车(3)——GPIO控制小车
2018-02-27 09:13
316 查看
上一个教程介绍了树莓派的GPIO接口,并且简单的利用这个接口控制了小灯的亮灭,详细见人工智能之我与树莓派(2),本次教程将更进一步,利用GPIO口实现控制智能小车的前进后退以及超声波避障、红外线探测等功能。
智能小车硬件
GPIO接口设置
引脚定义
通道配置
管脚类型设置及初始化
接口连线
控制代码
开关前大灯
机器人方向控制
超声波避障
红外线避障
效果演示
系列教程
使用BCM编号
通道配置<
智能小车硬件
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控制小车系列教程
相关文章推荐
- 人工智能-树莓派小车(5)——用微信控制智能小车
- 树莓派实现web控制GPIO教程(安装方法更简单,网页效果更好)
- 树莓派-通过Web控制GPIO针脚输出高低电平
- 树莓派gpio控制led闪烁频率
- 树莓派开发系列教程9——树莓派GPIO控制
- 树莓派通过GPIO控制步进电机(python)
- 通过Raspberry Pi(树莓派)的GPIO接口控制发光二极管
- 树莓派GPIO入门之控制LED灯
- 树莓派GPIO控制-yeeLink
- 人工智能-树莓派小车(6)——人脸识别
- [转]树莓派gpio口控制
- 继续树莓派GPIO:两片74HC595控制一个8x8LED点阵显示爱心
- 树莓派GPIO控制RGB彩色LED灯
- 树莓派通过GPIO控制步进电机
- 树莓派控制GPIO
- Ubuntu16.04虚拟机+ROS+树莓派控制小车
- 远程控制通讯——基于树莓派 Python gpiozero 远程控制LED灯并返回控制结果
- 树莓派开发系列教程9——树莓派GPIO控制
- 树莓派GPIO控制--C语言篇
- 树莓派GPIO控制--C语言篇