树莓派小车

您所在的位置:网站首页 循迹误差什么意思啊 树莓派小车

树莓派小车

#树莓派小车| 来源: 网络整理| 查看: 265

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

该部分主要涉及到的硬件:两个红外循迹传感器(型号见准备篇)、树莓派。额外材料:准备点黑色电工胶布,制作一个跑道。两个红外传感器循迹缺点:无法完成对十字路线的正确识别。(如果你想让它可以识别十字路线,需要三个传感器,具体实现可以搜索)。下面我讲解两路循迹如何实现。电路连接: 如果你用的循迹传感器和准备篇的中的一样,它共有四个引脚,分别是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占用


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3