树莓派小车————循迹篇

6 篇文章 30 订阅
1 篇文章 1 订阅

所谓的循迹就是让小车识别导引线,跟着导引线运行,在导引线组成的赛道上运行。循迹可以用红外传感器或者摄像头完成。我选择的是用红外传感器进行黑线循迹。

  • 该部分主要涉及到的硬件:两个红外循迹传感器(型号见准备篇)、树莓派。
  • 额外材料:准备点黑色电工胶布,制作一个跑道。
  • 两个红外传感器循迹缺点:无法完成对十字路线的正确识别。(如果你想让它可以识别十字路线,需要三个传感器,具体实现可以搜索)。下面我讲解两路循迹如何实现。
  • 电路连接:
    如果你用的循迹传感器和准备篇的中的一样,它共有四个引脚,分别是VCC、GND、A0、D0。其中A0和D0分别代码模拟信号和数字信号,这里我们选择连接D0引脚,因为我们给的是数字信号,0或1也就是False和True。传感器不需要特别的供电电源,和树莓派连接即可。电路连接图如下:
    在这里插入图片
    从上图中可以看到,两个传感器的VCC分别接了树莓派的2号和4号引脚,这两个都是+5V引脚。两个传感器的GND都接了树莓派的30号引脚(GND引脚),D0分别接了29和31号引脚(GPIO口)。当然还是一样,所有的引脚接线都不是固定的,你可以自己设计。
  • 循迹原理:
    红外循迹传感器有两个指示灯,当检测到黑色时,只有一个灯亮,此时为True。反之为False。所以我们可通过两个传感器的信号来处理小车如何转向,进而调整车身位置,保持跟着导引线行驶。循迹原理图:
    在这里插入图片描述
  • 设计重点
    在起初的设计中我有些“耿直”,看了资料后,直接开始设计赛道,两个传感器也是直接安在了小车前方,间距差不多和黑色电工胶布一样宽。当我一切都准备好了,代码跑起来后人傻了,一到弯道怎么就冲出赛道了,肯定小车太快,我将速度设计到最低,还是一样。就这样两天都没想明白该怎么解决。最后我就开始慢慢在赛道上试,我开始加宽弯道处的赛道,结果还是一样。
    最后我在不断尝试的过程中突然醒悟过来,小车在赛道直线部分冲的太快了,根本就不能让它做太久的前进动作,直接让它一开始就左转或者右转来调整自身,不就可以慢下来了,之后我便将两个传感器之间的距离调整到比黑色赛道略宽一点,也就是保证两个传感器一个可以检测到黑线,另一个检测不到黑线。调整到合适的距离之后,小车便可以完成循迹功能了。(可能你光看是体会不到的,所以要动手自己测试,你就明白其中的“奥妙”了)
  • 代码(程序中将之前基本运动的代码省略了,你在运行代码时。需要将其补上,这里只展示循迹相关的代码):
#coding=utf-8
import RPi.GPIO as GPIO
import time
#定义红外循迹传感器GPIO口
LSenso=29
RSenso=31
def init():
    #设置接触警告
    GPIO.setwarnings(False)
    #设置引脚模式为物理模式
    GPIO.setmode(GPIO.BOARD)
    #红外循迹传感器引脚初始化,设置为输入,接受红外信号
    GPIO.setup(LSenso,GPIO.IN)
    GPIO.setup(RSenso,GPIO.IN)

#红外循迹函数
def track():
    while True:
    	#接收两个红外传感器的信号
        LS=GPIO.input(LSenso)
        RS=GPIO.input(RSenso)
        #左右两个传感器都检测到黑色,小车在赛道上,前进
        if LS==True and RS==True:
            print "前进"
            turn_up(16,0.1)
        #左边的传感器没检测到黑色,说明小车车身偏离赛道靠左,右转将小车车身向右调整
        elif LS==False and RS==True:
            print "右转"
            turn_right(18,0.1)
        #右边的传感器没检测到黑色,说明小车车身偏离赛道靠右,左转将小车车身向左调整
        elif LS==True and RS==False:
            print "左转"
            turn_left(18,0.1)
        #两个传感器都没有检测到黑色,说明小车完全偏离赛道,停止
        else:
            print "停止"
            car_stop()
#主函数
if __name__=="__main__":
    init()
    L_Motor=GPIO.PWM(PWMA,100)
    L_Motor.start(0)
    R_Motor=GPIO.PWM(PWMB,100)
    R_Motor.start(0)
    try:
        track() #调用循迹函数
    except KeyboardInterrupt:   #Ctrl+C 程序停止
        GPIO.cleanup()      #清除GPIO占用
  • 15
    点赞
  • 188
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答1: 树莓派智能小车的红外循迹是基于C语言进行编写的。红外循迹是小车的一种自动控制技术,它利用红外传感器来检测地面上的黑线,从而实现小车在黑线上循迹移动。 首先,我们需要连接红外传感器与树莓派的GPIO引脚。然后,使用C语言编写程序,通过读取传感器返回的信号来确定黑线的位置。 红外传感器返回的信号通常是数字信号,我们可以使用树莓派的GPIO库函数来进行读取。根据传感器返回的信号,我们可以判断小车是否偏离了黑线,然后进行相应的控制。 如果小车偏离了黑线,我们可以通过调整小车的方向,使其重新回到黑线上。例如,如果小车偏离了黑线向左,我们可以通过左转马达使小车向左转动,直到重新感应到黑线为止。 这个循环过程会一直进行下去,直到小车到达预定的目的地或者停止运行的条件满足。 总之,通过C语言编程,我们可以实现树莓派智能小车的红外循迹功能。这让小车能够自主地在指定的路径上行驶,为我们提供了更多的控制自由度和便利性。它在应用于自动驾驶、遥控车等方面具有重要意义。 ### 回答2: 树莓派智能小车是一种基于树莓派单板计算机的智能小车,通过使用红外传感器实现循迹功能。循迹是指小车能够跟随预定的线路运动,并保持在该线路上行驶。 在C语言中,我们可以使用树莓派的GPIO库来控制红外传感器。首先,我们需要将红外传感器连接到树莓派的GPIO引脚上,并配置相应的输入模式。 接下来,我们可以使用GPIO库提供的函数来读取红外传感器的状态。当红外传感器检测到黑线时,它将输出低电平;当它检测到白色背景时,它将输出高电平。 我们可以使用一个循环来持续读取红外传感器的状态。当检测到黑线时,我们可以根据需要采取相应的动作,比如向左或向右转弯。当检测到白色背景时,我们可以继续直行。 除了红外传感器,还可以利用其他传感器来增强小车的智能化功能,比如超声波传感器来避开障碍物。 总之,树莓派智能小车红外循迹的C语言程序主要是通过读取红外传感器的状态来实现的。我们可以根据传感器输出的电平来判断小车所处的位置,并进行相应的控制。通过不断优化算法和传感器的使用,可以实现更高效、精确的循迹功能。 ### 回答3: 树莓派智能小车红外循迹是一个基于树莓派和红外传感器的项目,旨在通过使用红外传感器检测车辆行驶路径上的黑线,并通过编写C语言代码实现车辆的智能循迹功能。 通过在树莓派上连接红外传感器,我们可以将传感器放置在车辆底部,使其能够扫描行驶路径上的地面。当红外传感器检测到黑线时,会产生一个电信号,树莓派可以通过读取这个信号来判断车辆应该如何调整方向。 在编写循迹的C语言代码时,我们可以使用树莓派的GPIO库来读取红外传感器输出的信号。通过将传感器的输出引脚与树莓派的GPIO引脚连接起来,并设置引脚的输入模式,我们可以使用代码来读取该引脚上的高低电平状态。当传感器检测到黑线时,该引脚上会产生高电平信号,否则为低电平信号。我们可以通过逻辑判断,判断当前车辆是否需要调整方向。 在代码中,我们可以使用循环来不断读取红外传感器的信号,并根据信号的变化来调整车辆的方向。例如,当传感器检测到黑线时,我们可以使车辆保持直线行驶;当传感器检测到左侧无黑线时,我们可以使车辆右转;反之,当传感器检测到右侧无黑线时,我们可以使车辆左转。 除了循迹功能,树莓派还可以通过其他传感器和模块,如超声波传感器或摄像头,来实现更多的智能功能,如避障或图像识别等。 总之,树莓派智能小车红外循迹是一个有趣且实用的项目,它结合了树莓派的强大计算能力和红外传感器的高效感知功能,通过使用C语言编写代码,实现了智能的小车循迹功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值