基于Arduino的智能寻迹小车设计
摘 要
在21世纪的今天,科技不断的进步,机器人这个词不在陌生,其功能和实用性也逐渐被人们所了解和接受,无论在智能家居还是在物流运输等场合,移动机器人充当着许多不可或缺的角色,所以,在当代的科技发展中,此领域发展相对于传统制造业发展极其迅速。为了探索具有良好寻迹功能的智能小车在现代快节奏的生活中能给人们提供何种便利,及对智能小车的各个性质研究有着重要的实际意义[1]。
本设计利用Arduino平台和相关电路组成的智能寻迹小车,其中核心主要包括了寻迹模块、电源模块、驱动模块等。本课题主要的核心就是用红外寻迹模块来识别路面上的黑色指定路线,以性能强劲、上手容易的Arduino单片机为核心,红外模块采集到的信号能转换为能被Arduino单片机识别的数字信号。采用驱动芯片L293D用来操纵直流减速电动机。软件部分选择了以C语言为核心封装的Arduino的编程语言,其具有跨平台、开放性、简单清晰等优点。
结果表明,基于Arduino的智能寻迹小车设计是可行的,本设计表现出了对人们生产生活等方面的极大便利。
关键词:智能小车;Arduino单片机;自动寻迹;驱动电路;
1 系统方案设计
1.1 方案论证
本设计对于实现自动寻迹的智能小车提出如下两套设计方案。
方案一:
采用传统的51单片机进行整体的小车设计,它有8位CPU,4kbytes程序存储器,32条I/O口线,21个专用寄存器,2个可编程定时/计数器;5个中断源,2个优先级,一个全双工串行通信口[6]。
智能小车以STC89C51为主芯片,红外传感器作为检测信号的工具,红外传感器能识别地面反射的光信号,经过一个电压比较器,把光信号转换为单片机可识别的电信号,在把这个电信号给STC89C51单片机进行集中处理并传递给驱动模块控制电机的驱动,进而控制小车的前进方向。当小车两边的都处于白色路面时,红外传感器两都能接受到自己发射的红外光,这样小车就正常前进。当一侧的红外传感器检测不到发出的红外光时,会根据情况做出对应的行驶方向上的调整,当两侧红传感器都检测不到自己发射的红外光时,小车停止前进[7]。
方案二:
本设计采用以新型的Arduino UNO开发板为核心进行小车的整体设计,它由14个数字输入/输出引脚(其中6个可用于PWM输出)、6个模拟输入引脚、一个USB接口、一个16 MHz的晶体振荡器、一个ICSP接口、一个DC接口,一个复位按钮等组成。它的使用也非常简便,只需要把它连接到计算机或者用电池给它供电我们就可以使用它[8]。
本设计使用两轮驱动,用两个电机分别驱动左轮和右轮。通过小车底部的两个寻迹探头来检测地面的黑线。主要利用了黑色对光的反射能力很弱,白色对光的反射能力较强的原理。假如,放置车辆的时候小车偏左,小车底部的右边的探头就会检测到地面的黑线,小车就会执行右转弯的函数使小车在两个探头之间,小车的两侧都检测不到黑线。小车直行。需要转弯的时候,寻迹探头会首先感知到地面颜色的变化,这个变化会由寻迹模块传给Arduino单片机由单片机内执行一个向另一侧转弯的信号,小车整体就会向另一侧转弯。当转过弯后,循环此过程直到两侧都检测不到黑线小车直线前进。
经过资料查阅、与老师探讨、总结出了两种设计的优缺点如下:
(1)Arduino平台,作为新发展起来的平台,它摒弃了传统单片机繁杂的开发模式,在C语言的基础上进行简化,使得作为一个Arduino平台的开发者而言,效率更高。
(2)使用Arduino平台做项目,由于它的广大兼容性,完全可以按照自己的需求来丰富、扩展自己的使用模块,使得项目的成品功能更加丰富。而传统的单片机,依赖于硬件的设计,需要和单片机匹配的硬件模块和制作整块PCB开发板。Arduino平台的模块化方式使得开发更便捷。
(3)Arduino平台自诞生起,它就是一个开源的平台,我们可以从互联网上获取想要的任何信息,在互联互助的今天,传统的单片机限于书本上的学习内容变得枯燥乏味,而互联网的多样化时代使得Arduino这个新平台的学习更加愉快。
综上所述,作为新兴的开源Arduino平台,它的性能比51单片机更好且运行更加稳定,而且传统的51单片机在高电平输出方面会稍显无力,在保护电路方面,51单片机会经常出现被烧坏的情况。在这个信息多元化的时代,Arduino平台的学习成本更低,开发效率更高。因此,本设计采用方案二。
1.2 项目的总体设计
本项目基于Arduino单片机设计的智能寻迹小车由:Arduino UNO开发板、转接主控板、寻迹模块、电源模块等构成。单片机负责存储程序、打开电源开关首先程序会执行按键、端口初始化操作。等待下一步指令,当单片机检测到按键按下后,蜂鸣器会响起,寻迹程序开始。小车在白色的地面沿着黑色寻迹路线前进。系统的功能框图如1.1所示。
图1.1 系统功能图
小车前进时,两侧的传感器映射灯常亮。假如小车要右转弯时,小车的左侧红外传感器始终能检测到返回的红外光,小车的左轮始终前进,小车的左指示灯常亮。小车右侧的红外传感器在右转弯时会触碰黑线,检测不到返回的红外光,输出高电平,右前轮停止转动,这时候右侧传感器映射灯熄灭。小车的左前轮前进,右前轮由于检测到黑色路线,右轮停止转动,实现小车右转弯。左转弯功能相反。既此时完成整个寻迹功能。
2.3 寻迹模块的设计
本设计要想实现最基础的寻迹功能,首先需要的是寻迹模块,经过学习和材料的收集、查找。最终决定使用一个型号为LM393的双电压比较器、两个红外反射开关和两个10K可调电位器组成。
其中LM393多用于简单的数/模转换器、脉冲发生器、方波发生器、延时发生器、MOS时钟计时器灯。LM393被设计成能直接连接TTL和CMOS;当用双电源供电时,它能兼容MOS逻辑电路,即使是单电源供电,比较器的共模输入电压范围接近地电平。其主要特点如下:
(1)工作电源电压范围宽,单电源、双电源均可工作,单电源:2~36V,双电源:±1~±18V;
(2)消耗电流小,Icc=0.8mA;
(3)共模输入电压范围宽,Vic=0~Vcc-1.5V;
(4)输出可以用开路集电极连接“或”门[15]。
LM393的内部原理图如下图2.4所示。
图2.4 LM393 双电压比较器
如下图2.5两路寻迹模块电路所示:管脚2连接的电位器,整体提供的是一个比较参考电压。3、4管脚连接红外传感器红外接收二极管当接受到红外发射二极管发出的光时,其阻止就会降低(这是一个光电信号转换的过程,当电阻降低时,电压也随之降低,3管脚的电压小于2管脚的电压的时候,管脚1会输出低电平,把这个信号传给Arduino开发板,从而判断小车是否在黑线上行驶。
图2.5 寻迹模块整体电路
图2.6 寻迹模块实物图
2.4 驱动模块的设计
驱动模块主要用来接收单片机传来的信号,在本设计中我采用了恒压恒流桥式驱动芯片L293D,它来自于美国德州仪器公司。其支持4.5V-36V 的电压,最大输出电流为1A,在智能寻迹小车的应用很广,其内部构成的双H桥的双电机驱动电路很好的契合了我们小车所选用的双直流减速电动机。L293D内部的等效电路如下图2.7所示[16]。
图2.7 驱动芯片L293D内部等效电路图
H桥的工作原理,给定ENA使能端的信号为1,IN1为1,IN2为0时。T1和T4的NPN型三极管导通。T2和T3截止,电动机正转。构成的电流回路如下图2.8 H桥的工作示意图所示。当给定的IN1为0,IN2为1时,电动机反转,原理相同,这样就能控制电动机的正反转。
2.8 H桥的工作示意图
3 项目的软件设计
3.1 Arduino的开发环境
Arduino的编程语言是基于C语言开发的,不过后来又引入C++的了面向对象的变成思想,这使得现在的Arduino核心库文件采用了C和C++混合而成[18]。
Arduino的编程语言,是指Arduino的给广大开发者们提供的接口(英文名是API)的集合。在Java中接口是一系列方法的声明,可以被任何人实现这个接口,这和C++的面向对象的编程思想有着异曲同工之妙。因此,即使我们不懂在传统的开发方式中,不懂配置各个寄存之间的关系,只要我们调用的相应的接口,底层的代码直接就帮我们配置了各个繁杂的寄存器。如下图3.1所示就是一个最基本的Arduino开发环境。
图3.1 Arduino开发环境
在Arduino的开发环境中,最重要的两个方法或函数,就是setup()和loop()。其中setup()方法中主要用来做定义变量的操作,该方法仅会在Arduino平台通电时运行一次,相当于变量的初始化操作。loop()方法是一个不断循环的函数,主要用这个方法来控制setup()中已经初始化好的端口。
实现一个Arduino最简单的让Arduino开发板上的LED灯闪烁的功能如下图3.2所示[19]。
图3.2 点亮Arduino开发板上面的LED灯的程序
3.4 单片机主程序介绍
主程序流程图如图3.5所示,打开转接板上的电源开关后系统进行初始化操作,当按键没被按下时程序一直在循环检测按键是否被触发,当按键被按下时蜂鸣器响动,小车处于启动状态。把小车放在具有黑线的白色寻迹路线上,若两侧均没有检测到黑色路线,小车会直线行驶,当小车一侧检测到黑线,另一侧没有检测到黑线时小车会向有黑线的这一侧进行转弯,当小车两侧传感器同时检测到黑线时,小车停止。
图3.5 程序主流程图
4 项目调试
4.1 项目硬件调试
电路板焊接,按照元器件的判断方式按照长正短负的方式进行区分安装,逐一焊接。焊接好后,接通5V电源,首次通电需马上断电,检查指示灯提示,以防出现焊接错误造成器件损毁。焊接好的转接板和Arduino开发板如下图4.1所示。
图4.1 (左) Arduino开发板 (右)转接板
把转接板按照Arduino开发板上的孔位对齐,接到Arduino开发板上,如下图4.2所示。
图4.2 Arduino开发板和转接板对接图
硬件部分整体联调,将小车的电机、主板、寻迹模块等依次用L形固定架固定在小车上,最终小车的整体如下图4.3所示。
4.3 基于Arduino的智能寻迹小车整体图
文章底部可以获取博主的联系方式,获取源码、查看详细的视频演示,或者了解其他版本的信息。
所有项目都经过了严格的测试和完善。对于本系统,我们提供全方位的支持,包括修改时间和标题,以及完整的安装、部署、运行和调试服务,确保系统能在你的电脑上顺利运行。