1 系统方案设计1.1 方案论证本设计对于实现自动寻迹的智能小车提出如下两套设计方案。方案一采用传统的51单片机进行整体的小车设计它有8位CPU4kbytes程序存储器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 项目硬件设计2.1 Arduino平台简介Arduino Uno是基于ATmega328P单片机的开发板。它有14个数字输入输出引脚6个模拟输入引脚一个16 MHz的晶体振荡器一个USB接口一个DC电源接口一个ICSP接口一个复位按钮。它包含了单片机最小系统的全部内容只用简单地连接到计算机的USB接口或者使用电源适配器甚至是电池就可以驱动[9]。在硬件方面选择了Arduino Uno这块开发板“Uno”在意大利语是“一”的意思这是Arduino平台的第一块开发板因此在功能反面这块开发板功能全、性能好此后的Arduino开发板都是基于“Uno”的衍生产品。在软件方面Arduino平台开发出一套自己专门的Arduino IDE这就完成了Arduino平台初版的开发标准也为后来的Arduino其他开发板奠定了基础。Arduino Uno的主要数据如表2.1.1所示。表2.1 Arduino Uno主要数据型号 Arduino Uno微控制器 ATmega328P工作电压 5 V输入电压推荐 7-12 V数字I/O引脚 14PWM通道 6模拟输入通道ADC 6Flash 32 KBSRAM 2 KBEEPROM 1 KB时钟速度 16 MHz板载LED引脚 13Arduino是一款方便上手、灵活便捷、效率极佳的开源电子技术平台包含硬件(各种型号的Arduino板)和软件(Arduino IDE)[10]。它构建于开源的simple I/O介面版并且具有使用类似Java、C语言的良好开发环境。Arduino包含两个主要的部分:硬件部分是可以用来做电路连接的Arduino平台;另外一个则是Arduino IDE你的计算机中只要安装了Arduino IDE用USB连接到它的平台选好对应的COM串口编写出你想要做事情把程序下载到Arduino当中。Arduino平台就会立刻执行它应该做的事情[11]。Arduino开发板的核心是ATMEGA328P单片机它是双列直插式28管脚的芯片其引脚连接Arduino微控制器的模拟端口和数字端口关系图如图2.1所示。0-13号为数字端口其中带有“”的具有PWM输出功能标有A0A5标号的是模拟端口。图2.1Arduino UNO端口与Atmal328P引脚对应图2.7 蜂鸣器提示电路的设计本设计需要一款当按钮按下时会警示按钮被按下的报警提示模块不需要过大的音量。通过蜂鸣器实现报警电路具有电路简单性能可靠、稳定等优点最重要的是低成本。本系统所采用的报警模块为5V有源蜂鸣器模块蜂鸣器直接与图2.4.3中A3引脚相连。打开电源开关当按钮被按下时程序会给A3口一个高电平使蜂鸣器响按钮松开时蜂鸣器停止。蜂鸣器电路图如2.14所示。2.14 蜂鸣器电路2.8 LED指示灯电路的设计本设计中每此探测到黑色循迹路线都应该对应的LED指示灯当小车一侧探测到黑线时指示灯亮反之熄灭。随着线路的不断变化指示灯的亮暗也应该随之变化。图2.15分别为LED左右指示灯电路。图2.15 LED指示灯电路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灯的程序其中pinMode(int,string)这个被封装好的接口需要两个参数第一个参数类型为整数主要是为了设置我接下来需要使用哪个引脚第二个参数为INPUT或者OUTPUT这样就设置好了引脚的模式这样就初始化为13号端口的引脚。digitalWrite(int,string)这个被封装好的接口需要两个参数第一个参数为定义好的接下来要用到的引脚第二个参数为我要给这个引脚输出的是高电平(HIGH)还是低电平(LOW)。通过这些简单的被封装好的接口我们就能进行快速的开发。3.2 寻迹小车端口初始化在Arduino平台中若想使用一个端口应该进行端口的定义及初始化操作如下图3.3为寻迹小车初始化操作。在主函数的外部定义Arduino控制小车的端口在setup()函数中初始化定义好端口的输出方式。图3.3寻迹小车初始化操作3.3 寻迹小车行进函数若想让小车按照规定的路线前进、转弯、停车等操作应该在不同的方法中对已初始化好的端口进行对应操作小车的直行停止前进函数如下图3.4所示。图3.4 小车的前进和停车函数3.4 单片机主程序介绍主程序流程图如图3.5所示打开转接板上的电源开关后系统进行初始化操作当按键没被按下时程序一直在循环检测按键是否被触发当按键被按下时蜂鸣器响动小车处于启动状态。把小车放在具有黑线的白色寻迹路线上若两侧均没有检测到黑色路线小车会直线行驶当小车一侧检测到黑线另一侧没有检测到黑线时小车会向有黑线的这一侧进行转弯当小车两侧传感器同时检测到黑线时小车停止。图3.5 程序主流程图文章底部可以获取博主的联系方式获取源码、查看详细的视频演示或者了解其他版本的信息。所有项目都经过了严格的测试和完善。对于本系统我们提供全方位的支持包括修改时间和标题以及完整的安装、部署、运行和调试服务确保系统能在你的电脑上顺利运行。