1
目 录
摘要 (2)
引 言 ......................................................... 2 1 Arduino 智能小车设计方案与参
数 (3)
1.1 Arduino 智能小车设计方
案简介 (3)
1.1.1 功能要求 (3)
1.1.2 基本原理 (3)
1.2 循迹小车参数 (4)
2 Arduino 与51单片机的区别 (5)
2.1 Arduino 单片机 (5)
2.1.1 Arduino 单片机的介绍 .................................. 5 2.1.2 Arduino 单片机的特色 .................................. 5 2.1.3 Arduino 单片机的功能 .................................. 5 2.2 51单片机 .. (6)
2.2.1 51单片机的介绍 ....................................... 6 2.2.2 51单片机的功能 ....................................... 6 2.3 Arduino 比51更好的地方
(7)
3 循迹小车设计 ...........................
3.1 硬件设计 .........................
3.1.1 单片机最小系统 .................
3.1.2 灰度传感器模块 .................
3.1.3 电机驱动电路 ...................
3.2 软件设计 .........................
3.2.1 系统主程序 .....................
3.2.2 本系统编译器 ...................
3.3 实物展示 .........................
3.4 部分程序展示 .....................
结 论 ...................................
致 谢 ...................................参考文献 ................................. Arduino 循迹小车设计与实现
摘要:循迹小车是Arduino 单
片机的一种典型应用。本智能小车是由ardiuno 单片机和外部电路组
成,包括检测模块,控制模块,电
源模块。循迹车设计采用Arduino
单片机作为小车的控制核心,采用
灰度传感器作为小车的检测模块
来识别绿色路面中央的黑色引导
线,采集信号并将信号转换为能被ardiuno单片机识别的数字信号;
采用驱动芯片L298N构成双H桥控
制直流电机。其中软件系统采用C
程序。
关键词:Arduino单片机,自
动循迹,驱动电路。
引言
自第一台工业机器人诞生以来,机器人的民展已经遍及机械、电子、冶金、交通、宇航、国防等领域。近年来机器人的智能水平不断提高,并且迅速地改变着人们的生活方式。人们在不断探讨、改造、认识自然的过程中,制造能替代人工作的机器一直是人类的目标。单片机是一种可通过编程控制的微处理器,虽其自身不能单独用在某项工程或产品上,但当其与外围数字器件和模拟器件结合时便可发挥强大的功能,现在单片机已广泛应用于众多领域。例如:工业自动化,智能仪器仪表,消费类电子产品,通信方面,武器装备等。
作为与自动化技术和电子密切相关的理工科学生,掌握单片机是最基础的要求。为进一步丰富和巩固单片机知识,也为能更好的联系实际应用,本次毕业设计选择了基于单片机Arduino循迹车,并做出实物。鉴于电子技术、计算机技术以及各种更先进的仿真软件的出现,使用高级语言如C代替汇编语言进行编程和控制已成为现实,单片机C语言编程相对于MC51汇
编语言编程有如下优点:
对单片机的指令系统不需要有很深的理解就可以编程操作单片机。寄存器分配、不同存储器的寻址及数据类型等细节完全由编辑器自动处理。程序有规范的结构,可分为不同的函数,可使程序结构化。库中包括许多标准子程序,具有较强的处理能力,使用方便。具有方便的模块化编程技术,使已编好的程序便于移植,可极大缩短开发时间,增加程序的可读性和可维护性。
事实上,当今许多硬件的开发都已开始用C语言编程,如各种单片机、DSP、ARM等,用C语言进行工业控制也已成为一种趋势,为了更好的适应当今社会形势,为了更好的面对挑战、把握机遇,此次毕业设计决定尝试用C语言编程完
成。也希望能在进一步熟悉单片机控制的同时,对数字电子技术、模拟电子技术、计算控制技术以及常用外围芯片有更深层次的了解,提高自己的综合能力。
1 Arduino智能小车设计方案
与参数
根据设计要求,Arduino智能小车要沿着山道环山跑一圈。
Arduino智能小车主要由四部分组成:分别为大脑-微控制器Arduino、眼睛-灰度传感器、躯体-电机驱动模块和心脏-电源模块。
1.1 Arduino智能小车方案简介
依据所需功能的要求,设计计价器系统的结构图和硬件电路,绘制出智能小车的电路图,再绘制程序框图,之后编程并烧录到单片机;将各模块组合进行调试。
3
1.1.1功能要求
小车以Arduino 为控制核心, 用单片机产生PWM波,控制小车速度。利用灰度传感器对路面黑色轨迹进行检测,并将路面检测信号反馈给单片机内。单片机对采集到的信号予以分析判断,及时控制驱动电机以调整小车转向,从而使小车能够沿着黑色轨迹自动行驶,实现小车自动寻迹的目的。
1.1.2基本原理
智能小车系统主要由四部分
组成:大脑-微控制器Arduino、眼睛-灰度传感器、手脚-电机驱动模块、能源-电源模块, 智能车循迹行驶过程是:首先灰度传感器将检测到黑线的信号传送给单片机最
小系统,然后通过单片机最小系统的控制算法对信号进行计算处理,将此信号在通过控制算法驱动电机,最后实现对智能车运动轨迹进行实时控制。
微控制器-Arduino为内部核心处理处理单元,将外部给予的电平信号通过以植入的c语言程序为主进行处理。灰度传感器为智能小车的眼睛,通过辨别地面的黑色线条的物理信号,灰度再将之转换为单片机能够处理的电平信号。单片机将信号传输给电机驱动模块,即我们小车结构的手脚接受指令运行。智能车总体模块设计图如图1-1所示。
Arduino板)和软
。它适用于爱好
"互动"
介面版,并且具
、C语言的
开发环境。
个主要的部分:硬
来做电路连接的
;另外一个则是
的计算机中的程
IDE中编写
Arduino
Arduino 5
微处理控制器 (AVR系列控制器),可以采用USB接口供电,不需外接电源,也可以使用外部9VDC输入。Arduino支持ISP在线烧,可以将新的"bootloader"固件烧入AVR芯片。有了bootloader之后,可以通过串口或者USB to RS232线更新固件。也可依据官方提供的Eagle格式PCB和SCH电路图简化Arduino模组,完成独立运作的微处理控制;可简单地与传感器,各式各样的电子元件连接(例如:红外线,超音波,热敏电阻,光敏电阻,伺服马达,…等)支持多种互动程序,如:Flash、MaxMsp、vvvv、PD、C、Processing等。应用方面:利用Arduino,突破以往只能使用鼠标、键盘、CCD等输入的装置的互动内容,可以更简单地达成单人或多人游戏互动。2.1.3 Arduino单片机的功能
在功能上可以快速使用Arduino与Adobe Flash, Processing, MaxMSP, Pure Data, SuperCollider等软件结合,作出互动作品。 Arduino可以使用现有的电子元件例如开关或者传感器或者其他控制器件、LED、步进马达或其他输出装置。 Arduino也可以独立运行,并与软件进行交互,例如: Macromedia Flash, Processing, MaxMSP, Pure Data, VVVV或其他互动软件等。 Arduino 的IDE界面基于开放源代码,可以免费下载使用,开发出更多令人惊艳的互动作品。
在更多功能上有基于知识共享开放元源码的电路图设计,有基于知识共享开放源码的程式开发环境。Arduino可使用ICSP线上烧
入器,将「bootloader」烧入新的IC晶片,可依据官方电路图,简化Arduino模组,完成独立运作的微处理控制,可简单地与传感器,各式各样的电子元件连接(例如:红外线,超声波,热敏电阻,光敏电阻,伺服马达等),USB接口上,不需外接电源。另外有提供9V直流电源输入。
2.2 51单片机
2.2.1 51单片机的介绍
51单片机是对所有兼容Intel
8031指令系统的单片机的统称。该
系列单片机的始祖是Intel的8031
单片机,后来随着Flash rom技术
的发展,8031单片机取得了长足的
进展,成为应用最广泛的8位单片
机之一,其代表型号是ATMEL公司
的AT89系列,它广泛应用于工业
测控系统之中。很多公司都有51
系列的兼容机型推出,今后很长的
一段时间内将占有大量市场。51单
片机是基础入门的一个单片机,还
是应用最广泛的一种。需要注意的
是52系列的单片机一般不具备自
编程能力。
2.2.2 51单片机的功能
51单片机的功能特点分别有:8位CPU·4kbytes程序存储器(ROM)
7
(52为8K),128bytes的数据存储器(RAM) (52有256bytes的RAM),32条IO口线·111条指令,大部分为单字节指令,21个专用寄存器,2个可编程定时计数器·5个中断源,2个优先级(52有6个),一个全双工串行通信口,外部数据存储器寻址空间为64kB,外部程序存储器寻址空间为64kB,逻辑操作位寻址功能·双列直插40PinDIP封装。
51单片机的内部结构分别为CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊
功能寄存器;RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;ROM:用以存放程序、一些原始数据和表格;IO口:四个8位并行IO口,既可用作输入,也可用作输出;TC:两个定时记数器,既可以工作在定时模式,也可以工作在记数模式;五个中断源的中断控制系统; 一
个全双工UART(通用异步接收发送器)的串行IO口,用于实现单片机之间或单片机与微机之间的串行
通信;片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最佳振荡频率为6M-12M。
2.3 Arduino比51更好的地方
Arduino与51单片机相比:变更人性化,编程相对人性化和直观,没有单片机基础的人也能很快上手。硬件性能上,Arduino更加稳定,不会像51一样时常出现跑飞的现象。Arduino作为开源的一款的单片机,更重要的是在这个4g 时代可搜寻的学习资料是非常多的。综上所述,Arduino无疑是比51更适合新手和用于比赛专用的。
3 循迹小车设计
3.1 硬件设计
3.1.1单片机最小系统
主控机系统采用Arduino mega2560单片机,采用USB接口的核心电路板,它最大的特点就是具有多达54路数字输入输出,特别适合需要大量IO 接口的设计。Mega2560的处理器核心是ATmega2560,同时具有54路数字输入输出口(其中16路可作为PWM输出),16路模拟输入,4路UART接口,一个16MHz晶体振荡器,一个USB口,一个电源插座,一个ICSP ;
}
}
if(p_3)
{
analogWrite(2,0);
analogWrite(4,0);
analogWrite(3,90);
analogWrite(5,90);
}
else if(p_4)
{
analogWrite(2,0);
analogWrite(4,0);
analogWrite(3,90);
analogWrite(5,90);
}
9
else if(p_2)
{
analogWrite(2,30); analogWrite(4,0); analogWrite(3,0); analogWrite(5,40); }
else if(p_5)
{
analogWrite(2,0); analogWrite(4,30); analogWrite(3,40); analogWrite(5,0); }
else if(p_1) {
analogWrite(2,40); analogWrite(4,0); analogWrite(3,0); analogWrite(5,50); }
else if(p_6)
{
analogWrite(2,0); analogWrite(4,40); analogWrite(3,50); analogWrite(5,0); }
}
}
void TURN_90(unsigned char e)
{
stop(rl);
delay (500);
if(e==r)
{
delay (10);
analogWrite(2,0);
analogWrite(4,70); analogWrite(3,60); analogWrite(5,0);
delay (450);
do
{
p_1=digitalRead(22);
p_2=digitalRead(24);
p_3=digitalRead(26);
p_4=digitalRead(28);
p_5=digitalRead(30);
p_6=digitalRead(32);
if(p_4||p_3)
{
delay (3);
p_1=digitalRead(22);
p_2=digitalRead(24);
11
p_3=digitalRead(26);
p_4=digitalRead(28);
p_5=digitalRead(30);
p_6=digitalRead(32);
}
} while(!(p_4||p_3)); }
else if(e==l) {
delay (10);
analogWrite(2,70);
analogWrite(4,0); analogWrite(3,0);
analogWrite(5,60);
delay (450);
do
{
p_1=digitalRead(22); 读取12位灰度
p_2=digitalRead(24);
p_3=digitalRead(26);
p_4=digitalRead(28);
p_5=digitalRead(30);
p_6=digitalRead(32);
if(p_3||p_4)
{
delay (3);
p_1=digitalRead(22); p_2=digitalRead(24);
p_3=digitalRead(26);
p_4=digitalRead(28);
p_5=digitalRead(30);
p_6=digitalRead(32);
}
} while(!(p_3||p_4));
}
stop(rl);
delay (100);
}
void loop()
{
while(1)
{
FOLL_FINE(1);
结论
经过努力《Arduino循迹小车设计与实现》实务专题的毕业设计终于接
13
近尾声。较好地实现了小车自动循迹行驶功能。但是仍旧有许多不足的地方,循迹车部分由于是遥控车改造所以无法进行大幅度的拐弯,循迹行驶的灵敏度不高,循迹部分的这两个问题造成拍摄视频时难度加大。
以为学的知识已经很完善,但是通过这次对《Arduino智能小车》实务专题的毕业设计,让我认识到自己所学的东西不过是冰山一角,认识到理论和实践相合的重要性。之后,我会更加勤奋地去学习。如果说完成毕业设计是我们这几个月艰苦奋斗的“硬件”成果,那么能够激起我对知识的不断渴求则是这几月不懈努力的“软件”成果。
通过这“最后一次的大学作业”,我深刻理解了理论和实践相结合的重要性,理论与实践相结合不仅可以巩固我们所学的的知识,还加深与巩固了原有的知识,更重要的是还拓宽了我们的知识面,学到了更多更深的东西,与此同时,自己的动手能力也大大的提高。在说明文的编写过程中,查阅了不少的相关资料,使我Arduino单片机、L298N驱动芯片、灰度传感器、光电传感器等电子元器件有了更进一步的了解和掌握,同时也衬托出自己专业知识学得还不扎实。特别是在电路制作过程中,由于缺少实际经验,对单片机的很多功能还不能熟练的掌握。所以在今后的工作和学习过程中,应加强专业知识的学习,不段以理论和实践相结合,锻炼出具有突出的专业技能,不段完善自己,拓宽知识面,最终成为复合型人才,适应社会的挑战,实现人生的自我价值。
致谢
在此次设计中,童晓薇老师作为我的指导老师,至始至终都给予我了不少帮助,从下任务书开始,就帮我制定规划,提醒我应注意的问题;借给我资料,帮我联系硬件;和我一起调程序,并提出了很多的修改意见以及完善方案;此外还认真批阅了我的论文,指出其中很多瑕疵和不清晰的地方;更重要的是在我遇到困难时对我的鼓励,让我不懈怠、不退缩、也让我更有信心;可以说我的每一点进展都与童老师的付出是分不开的。
当然在此,我还要向身边关心我的老师、同学致以诚挚的谢意!最后感谢母校对我这几年的辛勤培养。还有其他老师和同学,都帮了我不少忙,在此不再一一陈述。谨祝老师们工作顺利,万事如意,桃李满天下;同学们学业有成,前程似锦!
参考文献
[1]基于Arduino的趣味电子制作 Simon Monk、张宝玲、吴兰臻、郑海昕科学出版 [2] (英)Simon Monk,ARDUINO 编程从零开始,科学出版社
[3] 单成祥,牛彦文,传感器设计基础,北京: 国防工业出版社,2007
[4] 窦振中,单片机外围部件实用手册输出通道器件分册,北京:北京航空航天大学出版社,2003.
[5] 杨素行,模拟电子技术基础简明教程(第三版),北京:高等教育出版社,2005
[6] 阎石,数字电子技术(第五版),北京:高等教育出版社,2006
[7] 孙余凯,传感器应用电路300例[M],北京: 电子工业出版社,2008.
[8] 陈晓莉,张俊涛,KEIL C51单片机仿真器的设计第二版,陕西科技大学出版社,2006:19-20
[9] 张一斌,余建坤,单片机原理课程设计,长沙:中南大学出版社,2008