基于51单片机的WIFI智能视频小车的设计与实现
摘 要
当代的电子工业方面的发展特别迅猛,因此智能技术就变得越来越热门并得到广泛应用,无论是在工业上,还是在科学探索和紧急抢险中,总是有些区域由于比较危险会对人类造成伤害而导致人类不能直接进入,这时就需要用智能小车来完成。随着互联网+时代的兴起,在智能家居中智能小车的应用也是越来越受到人们的关注。
本设计的控制核心选用了STC89C52单片机,通过单片机的串口与WIFI模块进行AT指令的通讯,使小车和手机连接在同一WIFI热点。然后利用相同热点这个特点,根据WIFI智能视频传输原理将智能小车摄像头拍摄到的画面实时传输给终端设备,利用终端设备,控制小车的运行躲避障碍物,并且可以进行拍摄以便于获得需要的数据。这样即实现了无线控制功能,又实现了监控功能,达到了使小车代替人类去完成那些有风险性的工作的目的,有效的降低了人类安全危险性,促进了人与机器合作时代的发展,为世界科技创造了更多的可能性。
Design and Implementation of WIFI SmartVideo Car Based on 51 Single Chip Microcomputer
Author:Wang Shuai
Tutor:WangHuanhuan
Abstract
The modern electronic industry development especially rapidly, so theintelligent technology has become more and more popular and widely used,whether in industry or in scientific exploration, and emergency rescue in someareas due to the more dangerous, always will cause harm to humans causeddirectly into the human can not, then you need to use the intelligent carcomplete. With the rise of Internet plus times, Home Furnishing in intelligentvehicle in intelligent application is also more and more attention.
The design of the control core uses the STC89C52 microcontroller, throughthe microcontroller serial port and WIFI module AT command communication, sothat the car and mobile phone connected to the same WIFI hotspot. Then use thesame characteristics of hot spots, will screen in real-time smart car camera tothe terminal device based on WIFI intelligent video transmission principle, theuse of terminal equipment, control the operation of car to avoid obstacles, andcan be taken to obtain the data for. This is to realize the wireless controlfunction, and realize the monitoring function, to make the car to replace humanto complete those objective risks at work, reduce the risk of human security,promote the development of human and machine cooperation era, create morepossibilities for the world science and technology.
Keywords: Intelligence,Singlechip,WIFI, Video Transmission
目 录
1 绪论………………………………………………………………………………... ……1
1.1 课题背景和意义.............................................................................................. ……..1
1.2 国内外发展现状.............................................................................................. ……..1
1.3 主要研究内容.................................................................................................. ……..2
2 系统总体设计方案................................................................................................... ……..3
2.1 系统方案的选择.............................................................................................. ……..3
2.2 整机系统.......................................................................................................... ……..4
3 硬件设计…………………………………………………………………………………..5
3.1 主控部分.......................................................................................................... ……..5
3.2 驱动模块.......................................................................................................... ……..6
3.3 WIFI无线收发模块........................................................................................ ……..7
3.4 图像采集处理模块.......................................................................................... ……..8
3.5 终端显示模块.................................................................................................. ……..8
3.6 电源模块.......................................................................................................... ……..9
4 软件系统................................................................................................................... ……12
4.1 软件开发环境.................................................................................................. ……12
4.1.1 Android的APP软件的开发............................................................... ……12
4.1.2 单片机程序开发环境........................................................................... ……13
4.2 软件工作流程图.............................................................................................. ……13
5 设备调试................................................................................................................... ……17
5.1 系统调试.......................................................................................................... ……17
5.2 硬件设备调试.................................................................................................. ……17
5.2.1 驱动模块调试....................................................................................... ……17
5.2.2 WIFI模块调试..................................................................................... ……17
5.2.3 图像采集处理模块调试....................................................................... ……17
5.2.4 电源模块调试....................................................................................... ……17
5.2.5 STC89C52RC单片机连线................................................................... ……17
5.3 程序调试.......................................................................................................... ……18
5.3.1 Keil软件简介........................................................................................ ……18
5.3.2 程序调试................................................................................................. ……18结论…………………………………………………………………………………………..20致谢…………………………………………………………………………………………..21参考文献……………………………………………………………………………………..22附录…………………………………………………………………………………………..23
1绪论1.1 课题背景和意义
智能作为现代社会的新发明,在未来丰富的多元化的发展方向中带领着各个行业迅猛的发展,所以起的是决定性作用。而智能化设备早已在不知不觉中充满了我们生活的每一个角落,譬如在智能家居系统的研究方面,西方的各个发达国家一直是作为世界的领头羊。今年来,以美国微软公司为代表的国外著名的优秀大企业,都渐渐加入到了智能家居的研发潮流中。此外,像日本和韩国这样的新国的龙头企业也渐渐的把注意力放在了家居智能化研发上,使家居市场的争夺变得更激烈和沸腾[1]。智能化设备对工业的发展也起到积极作用,比如在汽车工业技术各方面的开展十分迅猛,对于智能汽车的钻研就变得越来越火爆抢手。智能化设备对于教育的影响也很明显,比如全国电子类的设计大赛几乎每一届都会出一道与智能小车相关的题目,因此全国所有电子类的高校也开始特别重视智能小车发面的相关研究。所以智能化设备在将来无论是工业还是日常生活中都会成为必不可少的成分之一。
智能小车就是智能化设备的代表之一,作为一门刚刚沸腾的综合性技术,不仅可以在固定场地搬运中起到很大的作用,而且在自动料车等领域也是起到的特别大的作用。
它以自己独特的魅力引领着智能时代的发展,为人类与机器合作的世界创造了更多的可能性。
1.2国内外发展现状
国外在智能小车的发展上比我国起步的早很多。从历史上看,它的发展大概分为三个阶段[2][3][4]:
第一阶段,1950年前后的时期智能车的研究属于初始阶段。这一阶段主要代表是美国BarrettElectronics 公司,这个公司历史开创性的研发出一台自主引导车系统。这个系统可以在无人的情况下在固定路线上运行。这个系统也为人类在智能车的发展上做了一个很好的表率作用。
第二阶段,1985年前后各个发达国家也渐渐融入到智能车研究行列。这个阶段的主要代表有欧洲的普罗米修斯项目和美国的自动高速公路系统。这些研发的主要目的是增加智能车的实用性,让智能车不只是概念车,而成为人们生活中的元素之一。
第三阶段,1990年后,智能车规模性发展的势头就开始锐不可当了。这一阶段的主要代表是美国的Navlab系列自主车。它们将人类的智能车研究带入了高潮。
在我们国家,智能车的研究开始比较晚。并且大多数研究的范围也比较窄。跟国外发达国家比起来,存在着一定的差距。但是我国研究者还是做出了一些卓越的成绩[5],主要有:
我国第一辆自主驾驶智能车的诞生开启了新时代的潮流。这个智能车是由第一汽车集团公司与国防科技大学共同合作研究的,可以以正常速度在高速公路上行驶,各项指标和性能已经可以与世界上先进的小车相媲美。
于连国、李伟等[6]设计出具有自动往返功能的智能车。他们以51单片机为核心,用红外接收管作为传感器,利用红外接收管的特点识别预先设置好的路线,将接收到的信号给单片机进行处理,使小车可以在规定路线上自动行驶。
姜宝华、齐强等[7]设计出具有遥控功能的智能车。他们也是以51单片机作为核心,研发出既有自动行驶功能又可遥控的智能车。遥控模式下可以用遥控设备进行1公里的控制,自动模式则可以让智能车到达任意指定位置。这种创新性的研发给中国研发者扩宽了研发思路,让他们的眼界更为远见,发展之路更长。
1.3主要研究内容
本设计要设计一种WIFI智能视频小车,该小车能根将智能小车摄像头拍摄到的画面实时传输给终端设备,并能利用终端设备控制小车的运行躲避障碍物,并且可以进行拍摄以便于获得需要的数据。本文第一章介绍了研究背景和国内外发展现状,了解智能车的发展历程和相关的原理知识。第二章通过思考设计方案,进行了总体设计方案的择优选取。第三章进行了硬件设计,电路连接和器件组装。第四章为软件系统设计,根据要实现的功能,用keil进行程序的设计与编写。第五章是设备调试,对小车的硬件和软件分别进行调试,调试成功后,把软件程序烧写到单片机里,完成整个小车的设计和制作。最后,对本设计进行了总结。
2 系统总体设计方案
2.1系统方案的选择
经过查阅资料和思考后,构思出两种方案的选择,两种方案都是利用单片机与WIFI模块的结合,实现WIFI智能视频传输的功能。
方案1:通过自己的学习去了解单片机原理,小车原理以及WIFI模块的原理。然后应用所学知识,制作相应的带有WIFI模块的单片机组件。接着组装小车车架,把制作的单片机组件安装到小车车架上。最后调试程序,完成用手机控制小车的功能。
下图是根据方案1设计的构想图,如图2.1所示。
图2.1方案1设计图
方案2:通过自己的学习去了解单片机原理,小车原理以及WIFI模块的原理。接着制作普通单片机智能小车,然后通过外接一个WIFI模块与单片机相连,再编写相关的程序,最终实现用手机控制小车的目的。
下图是根据方案2设计的构想图,如图2.2所示。
图2.2方案2设计图
这两种方案用到的知识都是一样的,都是通过单片机开发板和WIFI模块来实现想要的功能。两种方案的不同之处在于所思考的方式不同,所用到的原料也就不同了。方案1和方案2涉及的相关知识大致相同,两种不同思路的选择,所需要的材料也不同。考虑到自身知识的限制和实验室条件的限制,本课题选用了方案2,先制作出普通单片机智能小车,再外接WIFI模块等组件,完成具有WIFI视频传输的智能小车。
2.2整机系统
根据本课题研究目的,智能小车大体构架如图2.
图2.3智能小车大体构架
总设计方案可分为如下5个模块:单片机模块、动力驱动模块、WIFI无线收发模块、终端显示模块、电源模块。其中,单片机模块负责核心的信息处理工作;动力驱动模块负责小车运动的数据处理;WIFI模块负责信号的发送与接收;终端显示模块负责显示传输的视频;电源模块为其他各模块的正常工作提供的电压保证。
在以上设计方案中,51单片机通过单片机的串口与WIFI模块进行AT指令的通讯,让WIFI模块连接到预先准备好的路由器上,然后进行手机操作,使手机连接WIFI热点,达到手机和智能小车连接在同一个热点的目的。然后利用在同一个WIFI热点的特点,进行手机与路由器之间信息的传递与沟通,路由器与智能小车之间的指令通讯,实现手机控制小车的目的,从而控制小车的运动等功能。
3硬件设计
3.1主控部分
主控部分选用了STC89C52单片机。现在这个时代的单片机已不是以前那样功能简易的单片机了,现在的单片机集合了特别多的功能,所以种类也随着功能的变化而不同。每一种单片机适用的环境也随着单片机种类的不同而各有所异,所以当用单片机同一功能下就可以用多种单片机来实现,因而必须通过多面相比,抉择出最合适的单片机。
STC89C52单片机是一种51系列单片机,它以低功耗、高性能的特点为大多电子发烧友的青睐,储存器的内存是8k。这种单片机之所以深受广大电子发烧友的热爱是因为其内核为经典的MCS-51内核,而且在此根底上有更多性能的选择。在单芯片上,它的CPU是8位的,而且还能在系统可编程Flash[8]。这样,就让STC89C52单片机高灵活和高效的特点展现的淋漓尽致。
STC89C52单片机芯片引脚图如图3.1所示。
图3.1 STC89C52芯片引脚图
VCC和GND是电源引脚;P0-P3是双向I/O口;RST是复位引脚;XTAL是时钟引脚;EA、ALE、PSEN是控制引脚。
综合要实现功能的各种因素,本设计选用了STC89C52为中心的芯片,尽管这个单片机的I/O端口不是无限多的,但是进行每个端口功能扩充,完成视频传输,运动等控制功能还是能够实现的。所以在跟其他众多单片机比起来,这种单片机也最适合本设计的研究。
3.2驱动模块
驱动模块使用的是一般的直流电机。直流电机很容易就掌握它的用法,性能也是可以匹敌其他的电机,直流电源更是电源中最常见的。本设计使用的是L293D,L293D是一种单片芯片,并且高度集成,其中不仅有高电压、高电流,还有4通道电机驱动[9]。
L293芯片采用16脚封装。主要特点是:L293芯片的工作电压很高,当工作时,最大能到46V;L293芯片工作时输出电流也很大,当正常工作时,瞬间峰值能到3A,持续工作电流能到2A;L293芯片工作时的额定功率是25W[10]。使用L293芯可以驱动一台两相步进电机或四相步进电机,以实现小车的驱动程序,包括前进,后退,调速,转向等。
L293芯片引脚图如图3.2所示。
图3.2 L293芯片引脚图
INPUT1:输入电机1的引脚A。
INPUT2:输入电机1的引脚B。
INPUT3:输入电机2的引脚A。
INPUT4:输入电机2的引脚B。
GND:电源地接口。
VSS:输入电机驱动电压接口。
OUTPUT1:输出电机1的引脚A。
OUTPUT2:输出电机1的引脚B。
OUTPUT3:输出电机2的引脚A。
OUTPUT4:输出电机2的引脚B。
L293 电机驱动板的特点决定了它的优异性。因为它可以驱动起来四个直流电机。在本设计中,我们把L293 的每一路输出引出了两个端口,这样就可以控制四轮小车的所有电机。
驱动板原理图如图3.3所示。
图3.3 驱动板原理图
3.3 WIFI无线收发模块
无线收发模块,因为视频的数据量都是很大的,所以为了可以正常的进行视频数据的传输我们就要提供足够大的带宽才可以。Open-WRT的特点就是能进行多次拨号,而且还是在一条线路上,再加上能够叠加带宽,所以进行数据的高速传输就显得轻而易举了。因此,我们将路由器刷成openwrt系统用于视频的传输。
openwrt管理提供了文件系统,这个系统是一个完全可写的,从应用程序供应商提供的选择和配置,设备也是可以自定义的,这样就可以适应任何应用程序通过使用包。
WIFI无线收发模块实物图如图3.4所示。
图3.4 WIFI无线收发模块实物图
3.4图像采集处理模块
本设计使用的摄像头选用的是30W像素的高清摄像头,这种摄像头区别于一般的普通摄像头,它本身就带有具有图像处理压缩功能的驱动程序。驱动程序可以将拍摄到的图像转换为二进制信号,这样视频信号就能在设备间进行传输了。把摄像头的驱动程序处理好的数据直接传输给WIFI模块,然后再通过热点把数据无线传输给单片机处理。无线局域网可实现54Mbp/s的数据传输,因此,在进行视频的实时传输时,不会感到有时间上的延长。
摄像头实物图如图3.5所示。
图3.5 摄像头实物图
3.5终端显示模块
本设计的终端显示模块使用的是安卓智能手机。用手机界面上的触控按键来控制小车的运行,用拍照键来进行的画面的拍摄。使用前需要先设置好相关参数,把手机控制端的IP与WIFI热点的IP设置成一致的,视频分辨率设置成320*240,小车控制端口设置成2001,小车视频端口设置成8083,小车前进和后退的动力设置成255,转弯动力设置成200,FPS值设置成15。这样就可以实现用安卓手机来控制小车的运动。
手机显示界面图如图3.6所示。
图3.6 手机显示界面图
3.6电源模块
电源模块使用的是3.3V降/稳压模块。此模块是通过降压和稳压的过程,使设备可以在一个比较稳定的工作环境中运行,如果不同工作电压的设备想在一起工作的话,降/稳压模块也能让这些不同的设备都稳定到同一个电压下一起让它们工作,由于降/稳压模块的这个特点,单片机上就能添加不同工作电压的设备,都加在一起来完成所需的功能。
降/稳压模块图如图3.7所示。
图3.7 降/稳压模块图
可以使单片机上原来的5V电源变为3.3V稳压电源,这样其他电子设备也可以在正常电压下正常工作了。实现给5V和3.3V电压之间的转换,提供了能和单片机同时工作且电压值可以不同的电子设备。
下图是降/稳压模块的原理图,如图3.8所示。
图3.8 降/稳压模块原理图
如上图3.8所示,D1的作用是可以避免电源出现反接的情况。C01、C02为电源输入滤波。VDD3.3为3.3V电源,是给数字电路提供电源的。L1、L2是隔离滤波电感。VCC3.3为3.3V电源,是给模拟电路提供电源的。通过降/稳压电路后,电压就从5V变为了3.3V,这样需要3.3V电压才能正常工作的电子设备就可以正常运转了。
将以上各个模块综合在一起,焊接好的小车实物图如图3.9所示。
图3.9 小车实物图
整体电路图如图3.10所示。
图3.10 整体电路图
4 软件系统
4.1软件开发环境
软件工具无疑是最重要的,在软件开发环境中它的地位是毋庸置疑的。软件工具所使用的是一种交互式对话系统,进行用户和软件之间的数据交互。软件环境的数据库是软件开发环境的后端数据支持,它有着不可替代的地位。软件数据库主要存储了运动数据,而这些数据来源于各种软件工具的加工。
4.1.1 Android的APP软件的开发
Android开发需要用到Eclipse、ADT和SDK三个组件整合开发。
1、Eclipse 是一种可扩展的开发平台。它不仅仅是开放源代码,还是基于Java开发的。Eclipse 有一个很标准的插件集,其中就有Java开发工具。
下面就是开发环境的界面,如图4.1所示
图4.1 安卓开发环境界面
2、ADT:如今的工程师们开发所用的工具主要有Android Studio、Eclipse,可以用Eclipse编译IDE,安装ADT,为Android开发提供开发工具的升级[11]。
3、SDK:如今的工程师们用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合[12]。在Android中,它既可以给开发者提供了库文件又能够给它开发所用。
4.1.2 单片机程序开发环境
Keil 是美国Keil Software公司制造一种51系列编程软件,这个软件的优势数不胜数,它不仅可以完美兼容单片机C语言,而且在功能上、结构性上也比其他软件表现优异,因而很容易上手,也很容易深入研究。Keil的开发方案也是特别齐全,其中不仅有C编译器、宏汇编、链接器、库管理,还有一个很厉害的仿真调试器。
下面是Keil编程界面,如图4.2所示。
图4.2Keil编程界面
4.2软件工作流程图
系统主程序模块主要的工作就是初始化。初始化就是初始配置,如果进行不同的功能使用,就要用不同的初始配置。首先进行串口中断的初始化,设置特定波特率。然后进行外部中断初始化,启动外部中断,设置参数,包括计数器和定时器。接着是判断是否执行终端设备所发送的命令,如果需要执行,就等待外部中段,然后执行相应的动作以实现需要的功能。
下面是主程序流程图,如图4.3所示。
图4.3主程序流程图
单片机首先设置好串口初始化。然后单片机会向已经设置好的WIFI模块指挥让其反应,做出相应动作后WIFI模块就可以和路由器连接在一起。路由器会发出一个WIFI热点,用手机连接到这个热点上,这样就保证了手机和小车连接在了同一个热点上,也就可以通过手机向单片机发出指令,发出的指令由WIFI信号给到WIFI模块,这样单片机就得到了手机发出的数据,接着马上开始中断函数来执行接收数据的模式。单片机从已经储存好指令的寄存器中读取指令。手机发送的指令不同,单片机接收的指令就不同,根据不同指令做出的反应也就不同。
单片机对串口进行初始化的软件程序界面图,如图4.4所示
图4.4 串口初始化软件程序界面图
单片机假如想和WIFI模块之间进行数据通信,那么两端的波特率就必须是一致的,由于WIFI模块的波特率是115200,所以单片机端的波特率也必须是115200。只有这样才会有两端之间正常的数据通信。如上图,我们要先设置T1(TMOD)选择工作模式,然后设置TH1和TL1赋初始值,接着启动T1和T2(TR2位),确定串口工作方式。
接收到信号后的单片机会继续做出反应,它会驱动电机模块,从而使小车做出相应的运动,如图4.5所示。
图4.5 单片机驱动小车前进的程序图
无线WIFI模块把数据传输给单片机,接着通过调用switch语句的方法来进行小车模式的选择。单片机假如收到前进的指令,然后会马上进行小车模式的选择,对收到的指令进行判断,如果与小车预先设置的值相同,则小车就进入那种模式,直到等待新的指令的发出。
5 设备调试
5.1系统调试
本次设计思路是让WIFI模块与路由器相连,由路由器散发出一个WIFI热点,然后用手机连接到这个热点,这样就可以用手机来控制小车的各种运行动作。
具体的步骤是由硬件设备调试和软件调试两部分组成。经过一系列连线操作,将硬件的各个设备连接好,确保每一部分在单独情况下都能够正常工作,然后再把每一部分连接在一起,成为一个整体,这样就能实现WIFI智能小车的各种功能。
5.2硬件设备调试
由于本次设计的工作量还是很大的。所以在电路安装完成后,第一要进行的就是检查有没有焊接的问题。然后再对电路各个模块进行分级调试,逐步实现系统的整体功能。
5.2.1 驱动模块调试
将车架组装完成后,把电机固定在车架上,并安装好车轮,将电机线分别接到驱动模块的对应的接口上,然后分别给驱动模块和电机供电,查看小车车轮是否正常运转,如果小车车轮运转方向不一样,就把驱动模块上接电机的线反接,直至车轮运转方向一致,则表示驱动模块调试成功。
5.2.2 WIFI模块调试
单独给WIFI模块供电,等待大约一分钟时间,用手机搜索WIFI,成功连接到WIFI模块发出的信号,用手机给WIFI模块发送任意指令,如果小车接收到指令,则表示WIFI模块调试成功。
5.2.3 图像采集处理模块调试
将摄像头的USB口插入电脑中,等待驱动自动安装完成。打开聊天软件进行视频聊天功能,摄像头可以正常工作。接着打开手机控制软件,设置相关参数,则摄像头图像采集处理功能调试成功。
5.2.4 电源模块调试
将3.3V降/稳压模块单独供5V电源,用电压表测量输出端的电压,测量结果为3.3V稳定电压,则电源模块调试成功。
5.2.5 STC89C52RC单片机连线
单片机上不仅有有RXD口,还有TXD口,将单片机与WIFI模块连接到一起时,属于交叉连线。当然除此之外,单片机上还要接复位电路和时钟(晶振)电路,晶振电路用来设置单片机的波特率,以达到和WIFI模块的波特率一致。
下图是单片机的接线图,如图5.1所示。
图5.1 单片机引脚接线图
各模块与单片机连线完成后,检查确认没有虚焊或者断路的情况后,打开小车可以按照规定要求正常工作,而且手机显示端也可以正常显示图像,则单片机连线部分调试成功。
5.3程序调试
5.3.1 Keil软件简介
如果需要编写源代码,就在编辑器中进行,之后添加到C51编译器中生成OBJ文件,然后连接定位库文件后生成HEX文件。
5.3.2 程序调试
用Keil软件进行程序调试时,首先新建个工程,在建好的工程里选择所使用的主控芯片,接着添加一个空白的C语言文档,保存好C语言文档后把编写好的程序输入到C语言文档里,保存好后就可以编译,若出现错误,软件下方的Build Output框里会出现错误警告。然后进行错误修改,当修改到没有错误后,Build Output框里会显示错误警告为零个,则程序就被编译成功,编译成功的画面如图5.2所示。
最后还要生成Hex文件,打开TargetOptions功能,选择Output的界面,然后勾选创建Hex文件选项,再进行一次编译,成功后Build Output框里会提示Hex文件创建成功。创建Hex文件的界面如图5.3所示。
图5.2 Keil编译成功
图5.3 创建Hex文件界面
结论
本设计选择了主控芯片STC89C52单片机,用高清摄像头拍摄图像,进行WIFI无线数据的传输,利用WIFI模块的串口将无线收到的数据给单片机进行数据处理,达到用手机无线控制小车并显示监控内容的目的。经过一系列的硬件设计,把单片机与WIFI模块、驱动模块、电源模块等外围电路结合起来,然后又经过一系列的软件设计,主控芯片的控制程序使用C语言编写而成,简洁而注释充分条理,完成了课题的要求。
最终的WIFI智能视频小车系统设计成品具有以下功能:精准的让小车进行前进、后退、转向和拍照等功能,使智能小车在无人控制情况下,安全自动化行驶。实现复杂地形内危险源的准确定位。
本设计的智能小车还有待提升的空间,未来可以将温度测量功能,烟雾测量报警功能,危险气体检测功能,智能清扫功能,自动灭火功能等加入到小车中。使小车的用处更广泛,更好的造福于人类。
致谢
本次设计的智能小车是基于WIFI的一种智能小车,经历了两个多月的努力,终于将本设计完整的呈现给大家。在这期间,身心经历也是极其丰富 ,从刚开始的茫然不知所措,到一点一点探索其中的奥秘,直至后来完整的做出本设计。其中,最重要的就是得到我的指导老师——王缓缓老师的帮助,王老师牺牲了很多业余的时间来指导我,使我一点一点的看清整个系统的真面目,而且我的问题也很多,但是王老师总是不厌其烦的指导我、激励我,使我在整个过程中充满信心。王老师仔细认真的工作态度也是深深影响我,致使我在整个过程中也一直抱着仔细认真的态度。除此以外,图书馆的各位老师也是帮助我很多,使我更容易的找到相关的参考书籍。我还要感谢我的同学朋友的帮助,是他们专业的帮助才让我解决了安卓软件的问题。
同时也很感谢在本篇论文中涉及到的各位学者。是他们的文章开启我整个制作的方向,通过他们的一点一滴的启蒙,才让我打开了眼界和思想,以至于成功完整的完成本次设计。
但是由于我的学术水平有限,所写的论文难免有不足之处,所以诚心的恳请各位老师和学友批评和指正!
参考文献
[1]赵海兰.基于单片机的红外遥控智能小车的设计[J]. 无线互联科技,2007,56(8A):332-335.
[2]Dickmanns ED,etc.The Seeing Passenger Car “Vamors-P” Proc 1994IEEE Symposia on Intelligent Vehicles[J]. IEEE Press Piscataway,1994,10(5):68-73.
[3]Maurer M.Vamors-p——An Advanced Platform for Visual AutonomousRoad Vehicl Guidance[J]. In:SPIEConfonMobile Robots IX.Boston,1994,12(3):239-248.
[4]Broggi A, Bertozzi M, Faseioli A et al.Automatic vehicleguidance:the experience of the ARGO autonomous vehicle.Singapore[J].WorldScientific PubllshingCo, 1998,56(9):23-24.
[5]尹念东.智能车辆的研究及前景[J].上海汽车,2002,56(15A):241-246.
[6]赵振德.多功能遥控智能小车的制作[J]. 电子制作, 2011,29(12A):739-741.
[7]黄建能等.无线遥控小车[J].现代电子技术,2012,35(23):126-129.
[8]于连国,李伟,王妍玮.基于单片机的智能小车设计[J].林业机械与木工设备,2011,39(4A):39-41.
[9]姜宝华,齐强.基于单片机的无线遥控智能小车的设计与制作[J].计算机测量与控制, 2013,12(2A):24-25.
[10]董涛,刘进英,蒋苏.基于单片机的智能小车的设计与制作[J].计算机测量与控制,2009,17(2):380-382.
[11]葛广军,杨帆.基于单片机的智能小车控制系统设计[J].河南城建学院学报,2011, 20(3):47-50.
[12] 周淑娟. 基于单片机智能寻迹小车的设计方案[J]. 工业技术与职业教育,2011,,32(20A):112-118.
附录
部分程序代码:
//Wifi小车
//小车增加调速功能
//名称:TANTIC7428
//单片机采用22.1184M晶振
//加入红外线避障
//加入超声波测距模块
#include <STC12C5A.h> //包含STC12C5A系列单片机的头文件
#include"1602.h"
#include <intrins.h>
sbit LED1=P3^0; //定义两只LED到P3^0,P3^1
sbit LED2=P3^1;
//sbit Light_F=P3^2;
sbit Light_B=P2^3; //控制车身的LED
sbit beed=P2^7;
sbit KEY1=P3^6;
sbit KEY2=P3^7;
//电机控制端
sbit EN1=P1^0;
sbit IN1=P1^1;
sbit IN2=P1^2;
sbit EN2=P1^3;
sbit IN3=P1^4;
sbit IN4=P1^5;
#define sensor_IROA P3
//超声波模块
sbit Ult_TX=P1^6;
sbit Ult_RX=P1^7;
//红外避障传感器
sbit IROA_R=P3^3;
sbit IROA_M=P3^4;
sbit IROA_L=P3^5;
unsigned long PWM_cnt=0;//
unsigned int PWM_G1=33; //初始化中心值
unsigned int PWM_G2=33; //
int speed_R=0; //定义两个电机的速度,有正负之分,为正是,正转。(范围-100~100)
int speed_L=0;
int pre_RS=0;
int pre_LS=0;
int set_RS=0;
int set_LS=0;
int speed_A=0;
unsigned int cnt_s=0; //用于计数PWM的点空比0=100;
unsigned long cnt_b=0;
unsigned long cnt_beed=0; //用于控制蜂鸣器
unsigned int flag_beed=1;
unsigned int B_counter=0;
unsigned char R_date[3]={0};
unsigned char RBuff_date[4]={0};
unsigned char pattern=0; //0:stop 1:start
unsigned long cnt_ser=0; //用于舵机直流电机控制
unsigned char flag_ser=0;
unsigned char flag_phone=0; //用于手机控制标记
unsigned char check_phone=0;
unsigned char flag_PC=0;
unsigned char sen_inp_IROA()
{
unsignedIROA_date;
IROA_date=sensor_IROA;
IROA_date=~IROA_date;
IROA_date&=0x38;
IROA_date>>=3;
return(IROA_date);
}
unsigned long Ult_distance=0; //超声波距离变量
unsigned char flag_Ult; //超声波发射标记
unsigned char flag_Ult_overflow=0;
unsigned long Ult_cnt=0; //超声波时间计数变量
unsigned long Ult_time; //超声波定时发射时间
void delay(unsigned long t) //软件延时带参数t
{
unsignedint j,k;
for(t;t>0;t--)
for(j=20;j>0;j--)
for(k=100;k>0;k--);
}
/**********超声波模块启动***************************/
void Start_Ult() //启动模块
{
unsignedt=200;
Ult_TX=1; //启动一次模块
while(t--);
{
_nop_();
}
Ult_TX=0;
}
/************计算距离*******************************/
void Ult_Conut()
{
Ult_distance=(int)(Ult_cnt*0.8);
}
void beed_ctrl(unsigned long time ,unsigned int num)
{
beed=0;
cnt_beed=2*time;
B_counter=2*num;
beed=1;
cnt_b=0;
}
void display_1602(unsigned intaddr,unsigned char temp)
{
unsignedint i,w[2];
w[0]=temp/16;
w[1]=temp%16;
for(i=0;i<2;i++)
{
switch(w)
{
case0: print(addr+i,"0"); break;
case1: print(addr+i,"1"); break;
case2: print(addr+i,"2"); break;
case3: print(addr+i,"3"); break;
case4: print(addr+i,"4"); break;
case5: print(addr+i,"5"); break;
case6: print(addr+i,"6"); break;
case7: print(addr+i,"7"); break;
case8: print(addr+i,"8"); break;
case9: print(addr+i,"9"); break;
case10: print(addr+i,"A"); break;
case11: print(addr+i,"B"); break;
case12: print(addr+i,"C"); break;
case13: print(addr+i,"D"); break;
case14: print(addr+i,"E"); break;
case15: print(addr+i,"F"); break;
default:break;
}
}
}
void display_1602_10(unsigned int addr,unsignedchar temp)
{
unsignedint i,w[3];
w[0]=temp/100;
w[1]=temp/10%10;
w[2]=temp%10;
for(i=0;i<3;i++)
{
print2(addr+i,w);
}
}
void display_1602_dis(unsigned intaddr,unsigned char temp)
{
unsignedint i,w[3];
w[0]=temp/100;
w[1]=temp/10%10;
w[2]=temp%10;
for(i=0;i<3;i++)
{
print2(addr+i,w);
}
}
/*************init To************/
void init_T0(void)
{
TMOD|=0x01; //定时器工作在模式1
TH0=0xff; //定时初值TH0=0xff TL0=0x49 定时100uS
TL0=0x49;
TR0=1;
ET0=1;
}
/************TO interrupt********/
void timer0(void) interrupt 1
{
TH0=0xff;
TL0=0x49;
cnt_s++; //PWM占空比计数 0-100
if(cnt_s>=speed_R)
{
EN1=0;
}
if(cnt_s>=speed_L)
{
EN2=0;
}
if(cnt_s>=100)
{
EN1=1;
EN2=1;
cnt_s=0;
}
}
|