《Arduino循迹小车设计与实现 循迹小车毕业论文正稿.pdf》由会员分享,可在线阅读,更多相关《Arduino循迹小车设计与实现 循迹小车毕业论文正稿.pdf(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、目录摘要.2引言.21 Arduino 智能小车设计方案与参数.31.1 Arduino 智能小车设计方案简介.31.1.1 功能要求.31.1.2 基本原理.31.2 循迹小车参数.42 Arduino 与 51 单片机的区别.52.1 Arduino 单片机.52.1.1 Arduino 单片机的介绍.52.1.2 Arduino 单片机的特色.52.1.3 Arduino 单片机的功能.52.2 51 单片机.62.2.1 51 单片机的介绍.62.2.2 51 单片机的功能.62.3 Arduino 比 51 更好的地方.73 循迹小车设计.83.1 硬件设计.83.1.1 单片机最小
2、系统.83.1.2 灰度传感器模块.93.1.3 电机驱动电路.103.2 软件设计.123.2.1 系统主程序.133.2.2 本系统编译器.133.3 实物展示.143.4 部分程序展示.15结论.20致.21参考文献.22Arduino 循迹小车设计与实现摘要:循迹小车是 Arduino 单片机的一种典型应用。本智能小车是由ardiuno单片机和外部电路组成,包括检测模块,控制模块,电源模块。循迹车设计采用Arduino单片机作为小车的控制核心,采用灰度传感器作为小车的检测模块来识别绿色路面中央的黑色引导线,采集信号并将信号转换为能被ardiuno 单片机识别的数字信号;采用驱动芯片L2
3、98N 构成双 H 桥控制直流电机。其中软件系统采用 C 程序。关键词:Arduino 单片机,自动循迹,驱动电路。引言自第一台工业机器人诞生以来,机器人的民展已经遍及机械、电子、冶金、交通、宇航、国防等领域。近年来机器人的智能水平不断提高,并且迅速地改变着人们的生活方式。人们在不断探讨、改造、认识自然的过程中,制造能替代人工作的机器一直是人类的目标。单片机是一种可通过编程控制的微处理器,虽其自身不能单独用在某项工程或产品上,但当其与外围数字器件和模拟器件结合时便可发挥强大的功能,现在单片机已广泛应用于众多领域。例如:工业自动化,智能仪器仪表,消费类电子产品,通信方面,武器装备等。作为与自动化
4、技术和电子密切相关的理工科学生,掌握单片机是最基础的要求。为进一步丰富和巩固单片机知识,也为能更好的联系实际应用,本次毕业设计选择了基于单片机Arduino 循迹车,并做出实物。鉴于电子技术、计算机技术以及各种更先进的仿真软件的出现,使用高级语言如C 代替汇编语言进行编程和控制已成为现实,单片机C 语言编程相对于 MC51 汇编语言编程有如下优点:对单片机的指令系统不需要有很深的理解就可以编程操作单片机。寄存器分配、不同存储器的寻址及数据类型等细节完全由编辑器自动处理。程序有规的结构,可分为不同的函数,可使程序结构化。库中包括许多标准子程序,具有较强的处理能力,使用方便。具有方便的模块化编程技
5、术,使已编好的程序便于移植,可极大缩短开发时间,增加程序的可读性和可维护性。事实上,当今许多硬件的开发都已开始用C 语言编程,如各种单片机、DSP、ARM 等,用 C 语言进行工业控制也已成为一种趋势,为了更好的适应当今社会形势,为了更好的面对挑战、把握机遇,此次毕业设计决定尝试用C 语言编程完成。也希望能在进一步熟悉单片机控制的同时,对数字电子技术、模拟电子技术、计算控制技术以及常用外围芯片有更深层次的了解,提高自己的综合能力。1 Arduino 智能小车设计方案与参数根据设计要求,Arduino 智能小车要沿着山道环山跑一圈。Arduino 智能小车主要由四部分组成:分别为大脑-微控制器
6、Arduino、眼睛-灰度传感器、躯体-电机驱动模块和心脏-电源模块。1.1 Arduino 智能小车方案简介依据所需功能的要求,设计计价器系统的结构图和硬件电路,绘制出智能小车的电路图,再绘制程序框图,之后编程并烧录到单片机;将各模块组合进行调试。1.1.1 功能要求小车以 Arduino为控制核心,用单片机产生 PWM 波,控制小车速度。利用灰度传感器对路面黑色轨迹进行检测,并将路面检测信号反馈给单片机。单片机对采集到的信号予以分析判断,及时控制驱动电机以调整小车转向,从而使小车能够沿着黑色轨迹自动行驶,实现小车自动寻迹的目的。1.1.2 基本原理智能小车系统主要由四部分组成:大脑-微控制
7、器 Arduino、眼睛-灰度传感器、手脚-电机驱动模块、能源-电源模块,智能车循迹行驶过程是:首先灰度传感器将检测到黑线的信号传送给单片机最小系统,然后通过单片机最小系统的控制算法对信号进行计算处理,将此信号在通过控制算法驱动电机,最后实现对智能车运动轨迹进行实时控制。微控制器-Arduino为部核心处理处理单元,将外部给予的电平信号通过以植入的 c 语言程序为主进行处理。灰度传感器为智能小车的眼睛,通过辨别地面的黑色线条的物理信号,灰度再将之转换为单片机能够处理的电平信号。单片机将信号传输给电机驱动模块,即我们小车结构的手脚接受指令运行。智能车总体模块设计图如图1-1 所示。电源模块灰 度
8、 传 感 器 模块直流电机路径小车图 1-1 循迹车总体模块设计图1.2 循迹小车参数系统参数如下表所示:微控制器路径检测模块俩轮驱动直流电机驱动模块电机电源Arduino灰度传感器车模配套直流电机芯片:LM298N9V 3A参数2 Arduino 与 51 单片机的区别2.1 Arduino 单片机2.1.1 Arduino 单片机的介绍Arduino 是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的 Arduino 板)和软件(Arduino IDE)。它适用于爱好者、艺术家、设ArduinoL298N驱动模块单片机计师和对于 互动有兴趣的朋友们。是一个基于开放原始码的软硬
9、件平台,构建于开放原始码simple I/O 介面版,并且具有使用类似Java、C 语言的Processing/Wiring开发环境。Arduino 包含两个主要的部分:硬件部分是可以用来做电路连接的Arduino 电路板;另外一个则是Arduino IDE,你的计算机中的程序开发环境。你 只要在 IDE 中编 写程序 代码,将程 序上传到Arduino 电路板后,程序便会告诉Arduino 电路板要做些什么了。2.1.2 Arduino 单片机的特色开放源代码的电路图设计,程序开发接口可以免费下载,也可依个人需求自己修改。而且低价格的微处理控制器(AVR 系列控制器),可以采用 USB接口供
10、电,不需外接电源,也可以使用外部9VDC 输入。Arduino 支持 ISP在线烧,可以将新的 bootloader 固件烧入 AVR 芯片。有了 bootloader 之后,可以通过串口或者USB to RS232 线更新固件。也可依据官方提供的Eagle格式 PCB 和 SCH 电路图简化 Arduino 模组,完成独立运作的微处理控制;可简单地与传感器,各式各样的电子元件连接(例如:红外线,超音波,热敏电阻,光敏电阻,伺服马达,等)支持多种互动程序,如:Flash、Max/Msp、vvvv、PD、C、Processing 等。应用方面:利用Arduino,突破以往只能使用鼠标、键盘、CC
11、D 等输入的装置的互动容,可以更简单地达成单人或多人游戏互动。2.1.3 Arduino 单片机的功能在功能上可以快速使用Arduino 与 Adobe Flash,Processing,Max/MSP,Pure Data,SuperCollider等软件结合,作出互动作品。Arduino 可以使用现有的电子元件例如开关或者传感器或者其他控制器件、LED、步进马达或其他输出装置。Arduino也可以独立运行,并与软件进行交互,例如:Macromedia Flash,Processing,Max/MSP,Pure Data,VVVV或其他互动软件等。Arduino 的 IDE 界面基于开放源代码
12、,可以免费下载使用,开发出更多令人惊艳的互动作品。在更多功能上有基于知识共享开放元源码的电路图设计,有基于知识共享开放源码的程式开发环境。Arduino可使用 ICSP线上烧入器,将bootloader 烧入新的 IC 晶片,可依据官方电路图,简化Arduino 模组,完成独立运作的微处理控制,可简单地与传感器,各式各样的电子元件连接(例如:红外线,超声波,热敏电阻,光敏电阻,伺服马达等),USB 接口上,不需外接电源。另外有提供9V 直流电源输入。2.2 51 单片机2.2.1 51 单片机的介绍 51 单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Int
13、el 的 8031 单片机,后来随着Flash rom 技术的发展,8031 单片机取得了长足的进展,成为应用最广泛的8 位单片机之一,其代表型号是 ATMEL 公司的 AT89 系列,它广泛应用于工业测控系统之中。很多公司都有 51 系列的兼容机型推出,今后很长的一段时间将占有大量市场。51 单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是 52 系列的单片机一般不具备自编程能力。2.2.2 51 单片机的功能51 单片机的功能特点分别有:8 位 CPU4kbytes 程序存储器(ROM)(52为 8K),128bytes 的数据存储器(RAM)(52 有 256bytes
14、的 RAM),32 条 I/O口线111 条指令,大部分为单字节指令,21 个专用寄存器,2 个可编程定时/计数器5 个中断源,2 个优先级(52 有 6 个),一个全双工串行通信口,外部数据存储器寻址空间为64kB,外部程序存储器寻址空间为64kB,逻辑操作位寻址功能双列直插40PinDIP 封装。51 单片机的部结构分别为CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;ROM:用以存放程序、一些原始数据和表格;I/O 口:四个 8 位并行 I/O 口,既可用作输入,也可用作输出;T/C:两
15、个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;五个中断源的中断控制系统;一个全双工 UART(通用异步接收发送器)的串行 I/O口,用于实现单片机之间或单片机与微机之间的串行通信;片振荡器和时钟产生电路,石英晶体和微调电容需要外接。最佳振荡频率为6M-12M。2.3 Arduino 比 51 更好的地方Arduino 与 51 单片机相比:变更人性化,编程相对人性化和直观,没有单片机基础的人也能很快上手。硬件性能上,Arduino 更加稳定,不会像51 一样时常出现跑飞的现象。Arduino 作为开源的一款的单片机,更重要的Arduino 无疑是在这个 4g是比 51 更适合新手
16、和用于比赛专用的。3 循迹小车设计3.1 硬件设计3.1.1 单片机最小系统主控机系统采用Arduino mega2560单片机,采用 USB 接口的核心电路板,它最大的特点就是具有多达54 路数字输入输出,特别适合需要大量IO接口的设计。Mega2560 的处理器核心是ATmega2560,同时具有 54 路数字输入/输出口(其中 16 路可作为 PWM 输出),16 路模拟输入,4 路 UART 接口,一个 16MHz 晶体振荡器,一个USB 口,一个电源插座,一个 ICSP header和一个复位按钮。单片机最小系统电路图如图3-1 所示。图 3-1单片机最小系统Arduino mega
17、2560的主要参数:处理器 ATmega2560,工作电压 5V,输入电压(推荐)7-12V,输入电压(围)6-20V,数字 IO 脚 54(其中 16 路作为 PWM 输出),模拟输入脚 16,IO 脚直 流电流 40 mA,3.3V 脚直流电流 50 mA,Flash Memory 256 K,(ATmega328,其中8 KB 用于 bootloader),SRAM 8 KB,EEPROM 4 KB,工作时钟 16 MHz。存储器:ATmega2560 包括了片上 256KB Flash,其中 8KB 用于 Bootloader。同时还有 8KB SRAM 和 4KB EEPROM。输入
18、输出:一共有数字输入输出口,4 路串口信号,6 路外部中断,14 路脉冲宽度调制 PWM(0-13),SPI(53(SS),51(MOSI),50(MISO),52(SCK)):SPI 通信接口,16 路模拟输入,特别LED(13 号):Arduino 专门用于测试 LED 的保留接口,和 TWI 接口(专门支持通信)。3.1.2 灰度传感器模块灰度传感器是利用黑线对红外线不同的反射能力通过光敏二极管或光敏三极管,接收反射回的不同光强信号,把不同光强转换为电流信号,最后通过电阻,转换为单片机可识别的高低电平。灰度传感器实现循迹的基本电路如 3-2 所示。图 3-2灰度传感器电路图(1)灰度传感
19、器工作原理传感器的红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,光敏三极管一直处于关断状态,此时模块的输出端为低电平,指示二极管一直处于熄灭状态;而当红外线被反射回来且强度足够大,光敏三极管饱和,此时模块的输出端为高电平,指示二极管被点亮。小车行驶过程中向地面发射红外光,当红外光遇到绿色路线,地板发生漫反射,安装在小型车的反射光接收器会接收;如果是遇到黑色路线,红外光将被黑线吸收,安装在小车上的接收管没有收到红外光。控制器会根据是否收到反射的红外光为判断依据来确定的黑线的位置和小车的路线。这种探测方法,即利用红外线在不同颜色的表面特征,具有不同的反射性
20、能。红外发射和接收红外线感应器,可以直接使用集成的红外探头,选择宽度为 3-5 厘米的黑线。该传感器的灵敏度是可调的,传感器有时遇到黑线却不能送出相应的信号,通过调节传感器上的可调电阻,适当的增大或减小可改变灵敏度。(2)传感器分布传感器通过信号采集,向单片机提供信息。因此传感器合理的布局很重要,传感器布局需要考虑小车行驶过程息检测的准确度和前瞻性,能使在相同数量的传感器下,获得更多的数据。而由于考虑到我们改造车的车座较窄、不平整,且车身较请,适合放多的传感器,最终决定选用对6 个传感器来进行布局,即在车子底座前端放6个传感器。这种布局是目前最适合我们改造车的布局方法。3.1.3 电机驱动电路
21、本设计采用 L298N 电机专用驱动芯片带动两个5V 的直流电动机。L298N 是一个部有两个 H 桥的高电压大电流全桥式驱动芯片,可以用来驱动直流电动机、步进电动机。使用标准逻辑电平信号控制,直接连接单片机管脚,具有两个使能控制端,使能端在不受输入信号影响的情况下不允许器件工作。L298N 有一个逻辑电源输入端,使部逻辑电路部分在低电压下工作。(1)L298N 引脚结构如表 3-1图 3-3 L298N驱动芯片表 3-1 L298N 引脚编号与功能:引脚编号1名称电流传感器 A功能在该引脚和地之间接小阻值电阻可用来检测电流23456789101112131415输出引脚 1输出引脚 2电机电
22、源端输入引脚 1使能端 A输入引脚 2逻辑地逻辑电源端输入引脚 3使能端 B输入引脚 4输出引脚 3输出引脚 4电流传感器 B置驱动器 A 的输出端 1,接至电机 A置驱动器 A 的输出端 2,接至电机 A电机供电输入端,电压可达 46V置驱动器 A 的逻辑控制输入端1置驱动器 A 的使能端置驱动器 A 的逻辑控制输入端2逻辑地逻辑控制电路的电源输入端为5V置驱动器 B 的逻辑控制输入端1置驱动器 B 的使能端置驱动器 B 的逻辑控制输入端2置驱动器 B 的输出端 1,接至电机 B置驱动器 B 的输出端 2,接至电机 B在该引脚和地之间接小阻值电阻可用来检测电流(2)电机驱动原理电路的形状很像
23、字母H。四个三极管就是H 桥的四条垂直线,而电机就是 H 中的横线,如图 3-4 所示。图 3-4 L298N 部 H 桥驱动电路H 桥电机驱动电路包含四个三极管和一个电机。电机运转,必须遵循导通对角线上的一对三极管。基于不同三极管对的导通情况可以控制电机的转向,电流可可以从左至右流过电机,也可以从右至左流过电机。当Q1 管和Q4 管导通时,电流就从电源正极经Q1 从左至右流过电机,然后再经Q4 回到电源负极,该流向的电流将驱动电机顺时针转动。下面分析另一对三极管Q2 和 Q3,当两个三极管同时导通的情况下,电流将从右至左流过电机。从而驱动电机沿逆时针方向转动。电机控制逻辑如下:以电机A 为例
24、,当使能端 ENA 为高电平时,如果输入引脚 IN1 为低电平而输入引脚IN2 为高电平,电机 A 反转;如果输入引脚IN1 为高电平而输入引脚IN2 为低电平,电机 A 正转。图 3-5 L298N 驱动芯片和直流电机接线图电机 B电机 A3.2 软件设计本设计的目的是以Arduino 单片机为控制核心,将红外光电传感器输出的电信号送至单片机电路,再由单片机向L298N 电机驱动模块发送指令,控制后轮电机驱动小车行进,控制前轮电机驱动小车转向,从而自动循迹。3.2.1 系统主程序在主程序模块中,需要完成对各参量和接口的初始化、检测黑线、前进或转向判断等工作。当小车探测到黑线后,根据检测到黑线
25、的传感器的编号不同,小车要做出相应的动作。当小车左边的传感器检测到黑线时,说明小车车头向右边偏移,这时主控芯片控制前轮电机反转,车体向左边修正;同理当小车的右边传感器检测到黑线时,主控芯片控制前轮电机正转,车体向右边修正;当黑线在车体的中间,中间的传感器一直检测到黑线,这样小车就会沿着黑线自动循迹。主程序流程如图3-6 所示。图 3-6循迹车程序流程图3.2.2 本系统编译器本设计采用 C 语言来编译程序。模块化结构程序的设计,可以使系统软件便于调试与优化,也使其他人更好地理解和阅读系统的程序设计。因此,软件的设计上,运用了模块化程序的结构对软件进行设计,使得程序变得更加直观易懂。随着单片机开
26、发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,ARDUINO IDE软件是目前Arduino 专用开发的软件,界面清晰整洁,编程简便。.ARDUINO IDE 开发系统可用于编辑C。由编译器编译可以生成目标文件(.ino)。3.2.3 实物展示图 3-7小车全景图3.4 部分程序展示unsigned int p_1=22;unsigned int p_2=24;unsigned int p_3=26;unsigned int p_4=28;unsigned int p_5=30;unsigned int p_6=32;#define l 1#defi
27、ne r 2#define rl 3unsigned intnum,co,c=0,mum,d=0;int t;void setup()pinMode(2,OUTPUT);/liftback pinMode(3,OUTPUT);/lift go pinMode(4,OUTPUT);/rightback pinMode(5,OUTPUT);/rightgo for(t=22;t3)/for(co=0;co3)c=c+1;if(c=ti)analogWrite(2,0);analogWrite(4,0);analogWrite(3,40);analogWrite(5,40);delay(350);r
28、eturn;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);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);analog
29、Write(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);analog
30、Write(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);p_3=digitalRead(26);p_4=digitalRead(28);p_5=digitalRead(30);p_6=digitalRead(3
31、2);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=
32、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 循迹小车设计与实现实务专题的毕业设计终于接近尾声。较好地实现了小车自动循迹行驶功能。但是仍旧有许多不足的地方,循迹车部分由于是遥控车改造所以无法进行大幅度的拐弯,循迹行驶的灵敏度不高,循迹部分的这两个问题造成拍摄视频时难度加大。以为学的知识
33、已经很完善,但是通过这次对Arduino 智能小车实务专题的毕业设计,让我认识到自己所学的东西不过是冰山一角,认识到理论和实践相合的重要性。之后,我会更加勤奋地去学习。如果说完成毕业设计是我们这几个月艰苦奋斗的“硬件”成果,那么能够激起我对知识的不断渴求则是这几月不懈努力的“软件”成果。通过这“最后一次的大学作业”,我深刻理解了理论和实践相结合的重要性,理论与实践相结合不仅可以巩固我们所学的的知识,还加深与巩固了原有的知识,更重要的是还拓宽了我们的知识面,学到了更多更深的东西,与此同时,自己的动手能力也大大的提高。在说明文的编写过程中,查阅了不少的相关资料,使我Arduino 单片机、L298
34、N 驱动芯片、灰度传感器、光电传感器等电子元器件有了更进一步的了解和掌握,同时也衬托出自己专业知识学得还不扎实。特别是在电路制作过程中,由于缺少实际经验,对单片机的很多功能还不能熟练的掌握。所以在今后的工作和学习过程中,应加强专业知识的学习,不段以理论和实践相结合,锻炼出具有突出的专业技能,不段完善自己,拓宽知识面,最终成为复合型人才,适应社会的挑战,实现人生的自我价值。致在此次设计中,童晓薇老师作为我的指导老师,至始至终都给予我了不少帮助,从下任务书开始,就帮我制定规划,提醒我应注意的问题;借给我资料,帮我联系硬件;和我一起调程序,并提出了很多的修改意见以及完善方案;此外还认真批阅了我的论文
35、,指出其中很多瑕疵和不清晰的地方;更重要的是在我遇到困难时对我的鼓励,让我不懈怠、不退缩、也让我更有信心;可以说我的每一点进展都与童老师的付出是分不开的。当然在此,我还要向身边关心我的老师、同学致以诚挚的意!最后感母校对我这几年的辛勤培养。还有其他老师和同学,都帮了我不少忙,在此不再一一述。谨祝老师们工作顺利,万事如意,桃满天下;同学们学业有成,前程似锦!参考文献1基于 Arduino 的趣味电子制作 Simon Monk、宝玲、吴兰臻、海昕 科学(2011-07 出版)22英)Simon Monk,ARDUINO 编程从零开始,科学3单成祥,牛彦文,传感器设计基础,:国防工业,20074窦振中,单片机外围部件实用手册输出通道器件分册,:航空航天大学,2003.5素行,模拟电子技术基础简明教程(第三版),:高等教育,20056阎石,数字电子技术(第五版),:高等教育,20067余凯,传感器应用电路300 例M,:电子工业,2008.8晓莉,俊涛,KEIL C51 单片机仿真器的设计第二版,科技大学,2006:19209 一斌,余建坤,单片机原理课程设计,:中南大学,2008