锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

【方案一】 光电反射传感器跟随

时间:2023-05-28 10:37:00 光电式的传感器

思路:光电反射传感器检测到左侧有物体就左转,右侧检测到物体就右转,前方检测到物体就前进。

优点:低成本光电反射传感器(约2元);简单。

缺点:检测距离:2~30cm 无法区分物体或人物。

核心代码

#!/usr/bin/python  # coding=utf-8  import RPi.GPIO as GPIO  import time  import sys  #SensorRight = 16#SensorLeft  = 12Lpin_avoid_obstacle=12Rpin_avoid_obstacle=16PWMA   = 18AIN1   = 22AIN2   = 27PWMB   = 23BIN1   = 25BIN2   = 24BtnPin  = 19Gpin    = 5Rpin    = 6#智能汽车运动函数 def t_up(speed,t_time):        L_Motor.ChangeDutyCycle(speed)        GPIO.output(AIN2,False)#AIN2          GPIO.output(AIN1,True) #AIN        R_Motor.ChangeDutyCycle(speed)        GPIO.output(BIN2,False)#BIN2          GPIO.output(BIN1,True) #BIN        time.sleep(t_time)        def t_stop(t_time):        L_Motor.ChangeDutyCycle(0)     GPIO.output(AIN2,False)#AIN2          GPIO.output(AIN1,False) #AIN        R_Motor.ChangeDutyCycle(0)     GPIO.output(BIN2,False)#BIN2          GPIO.output(BIN1,False) #BIN        time.sleep(t_time)        def t_down(speed,t_time):        L_Motor.ChangeDutyCycle(speed)        GPIO.output(AIN2,True)#AIN2          GPIO.output(AIN1,False) #AIN        R_Motor.ChangeDutyCycle(speed)        GPIO.output(BIN2,True)#BIN2          GPIO.output(BIN1,False) #BIN        time.sleep(t_time)def t_left(speed,t_time):        L_Motor.ChangeDutyCycle(speed)        GPIO.output(AIN2,True)#AIN2          GPIO.output(AIN1,False) #AIN        R_Motor.ChangeDutyCycle(speed)        GPIO.output(BIN2,False)#BIN2          GPIO.output(BIN1,True) #BIN        time.sleep(t_time)def t_right(speed,t_time):        L_Motor.ChangeDutyCycle(speed)        GPIO.output(AIN2,False)#AIN2          GPIO.output(AIN1,True) #AIN        R_Motor.ChangeDutyCycle(speed)        GPIO.output(BIN2,True)#BIN2          GPIO.output(BIN1,False) #BIN        time.sleep(t_time)        def keysacn():    val = GPIO.input(BtnPin)    while GPIO.input(BtnPin) == False:        val = GPIO.input(BtnPin)    while GPIO.input(BtnPin) == True:        time.sleep(0.1)        val = GPIO.input(BtnPin)        if val == True:            GPIO.output(Rpin,1)               while GPIO.input(BtnPin) == False:                GPIO.output(Rpin,0)         else:            GPIO.output(Rpin,0)             def setup():    GPIO.setwarnings(False)    GPIO.setmode(GPIO.BCM)       # 按物理位置给予GPIOs   GPIO.setup(Gpin,GPIO.OUT)     # 设置绿色Led引脚模式输出   GPIO.setup(Rpin,GPIO.OUT)     # 设置红色Led引脚模式输出   GPIO.setup(BtnPin,GPIO.IN,pull_up_down=GPIO.PUD_UP)    # 设置输入BtnPin将模式提高到高电平(3).3V)         #GPIO.setup(SensorRight,GPIO.IN)    #GPIO.setup(SensorLeft,GPIO.IN)        GPIO.setup(Lpin_avoid_obstacle,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)    GPIO.setup(Rpin_avoid_obstacle,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)	    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)    if __name__ == '__main__    setup()    keysacn()    L_Motor= GPIO.PWM(PWMA,100)    L_Motor.start(0)    R_Motor = GPIO.PWM(PWMB,100)    R_Motor.start(0)        try:        while True:            SL_2 = GPIO.input(Lpin_avoid_obstacle)            SR_2 = GPIO.input(Rpin_avoid_obstacle)            if SL_2 == True and SR_2 == True:                print              t_stop(0.3)3)                #t_down(50,0.4)                  #t_up(50,0)          elif SL_2 == True and SR_2 ==False:                print(右侧检测)           t_right(30,0)          elif SL_2==False and SR_2 ==True:                print(从左侧检测到)          t_left(30,0)          else:                print           t_up(20,0)          time.sleep(0.5)    except KeyboradInterrupt:        GPIO.cleanup()

注:调整运动速度。

实验视频

【红外跟随-比利比利】

红外跟随

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章