做wifi小车, 单片机跟单片机无线路由器通讯讯不了

14499人阅读
小车与机器人
转载请保留作者信息:星辉斑斓http://blog.csdn.net/hnmsky
本文分三个部分:
一:小车的组成。
二:tplink wr703n的改造。
三:网页代码和用ps2手柄控制小车。
四:后续工作
&& 某次出差的时在宾馆无聊,就折腾我带去的wrt703n这个路由器,刷上了openwrt。然后就想着用这个东西做点什么,最简单的就是做一个wifi的小车。第一次做这个东西,我也不想做成个很复杂的小车,而且703n这个东西本来就很小巧,我觉得如果做个很大很复杂的小车反而会抹杀了这个特点。所有就有了这个小车。
& & 小车主要功能:
& & 可以通过网页控制(手机,ipad,电脑都可以)前进后退和转向,带有摄像头可以实时传输图像。有舵机可以控制摄像头方向。轮子附近有2个红外传感器用来控制走直线。
先看一下完成后的图片:
这里还有小车视频
小车的组成
这部分主要来说明小车的构成。如下图所示:
&WR703N通过wifi来通信,并通过串口与单片机通信。单片机用的是杜洋的DB1(STC12C5A60S2),比较小巧。单片机通过驱动板来控制电机,舵机。
703N上还接了个摄像头,并通过舵机控制摄像头方向,可以实时监控。
为了保证走直线,还加了红外传感器。用来计算2个轮子转动的圈数,这样就是可以控制小车走直线了。
但要注意前轮要用那种珠子的,不要用轮子的。我开始买的是轮子的,转向不灵活很容易走偏。
照片上还有个数码管是用来显示一些调试信息。
电源上我用了一个移动电源来给单片机和WR703供电。其中WR703N大概要200mA,单片机要20mA。然后用5个镍氢的充电电池给电机供电。其实这个可以用锂电池,只不过我手上没有其他的移动电源了。其实一开始我只用了一个电源,结果每次打开驱动板的开关时电压会被瞬间拉低,会导致703N工作不正常。所以搞了2个电源。
单片机上的程序并不复杂,主要就是串口通信和产生PWM控制电机和舵机。其实如果用arduino会更简单一些。
703N的改造
这个比较麻烦,所幸网上有很多资料可以参考。
& & 硬件部分
首先这个东西比较难拆,我是特意买了一套手机的拆机工具来拆的。
1:换64M Ram。这个在[1]找一个对应型号的DDR的芯片,买一个换上就行。
2:我并没有换8M flash,而是参考[2]的作法,放了一个H202&usb hub进去,然后买了一个sdisk mini的U盘放了进去。我在taobao上找了下,基本上这个USB hub和U盘算是最小的了。然后开了一个孔,这样就有2个USB接口可以使用了(另外一个插了U盘)。
3:我把串口线引到了电源的mini USB的接口上,这部分可参考[3],注意[4]这样用普通USB 线接电源无法开机,接电脑没事,需要把USB 的D+ D-断开。
& & & & 当然还需要一些开孔(引出2个USB接口),打磨的工作。
我做了一个USB 线,插在电源那里的就是,并且又开了一个USB的孔
这里可以看到USB hub和U盘。
软件部分:
刷入openwrt
首先就是刷上openwrt,可以自己编译,但其实下载编好的镜像就可以。到官网[1]下载镜像文件升级,注意tp link原生系统升级要用这个squashfs-factory.bin,已经是openwrt系统的才可以用squashfs-sysupgrade.bin。升级之后通过网页用192.168.1.1这个地址登陆进去,可以看到Luci的管理配置页面,在这里设置好网络就可以了。最新的版本上配置已经很简单了,不需要去手动改一些配置文件,而且官网上有很多介绍,后面我也会说一下一些软件的安装。
有兴趣编译源码的可以在这里下载代码https://dev.openwrt.org/wiki/GetSource,我用的是Attitude Adjustment 12.09 branch。
这里介绍了如何编译
shell中刷写命令 注意-sysupgrade.bin和factory.bin的区别
wget http://downloads.openwrt.org/snapshots/trunk/ar71xx/openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin
sysupgrade openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin
wget http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin
mtd -r write /tmp/openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin firmware
建议做下备份,特别是art,这里保存了一些校准数据,每台机器都不一样,如果丢失是无法恢复的。当然这部分不是必须的。
openwrt备份命令:
查看分区cat /proc/mtd
可以看到mtd4 “art”这类的字样。
备份 ddif=/dev/mtd4 of=/tmp/art.bin
然后用winscp软件(linux下可以用scp)把/tmp/art.bin copy到pc上
openwrt恢复命令注[1]:
先将固件用winscp软件上传到/tmp/ 目录下
mtd -r write/tmp/art.bin art
&串口部分:
禁用系统的串口输出:
& & & &修改/etc/inittab
::sysinit:/etc/init.d/rcS S boot
::shutdown:/etc/init.d/rcS K shutdown
#ttyATH0::askfirst:/bin/ash --login
最后一行注释掉
开机后启动stty把波特率设为9600(默认为115200),详细参考web/wificar
&&&&&&&& 首先确认以下软件安装到wr703中
&&&&&&&& block-mount
&&&&&&&& kmod-usb-storage
&&&&&&&& kmod-fs-ext4
&&&&&&&& kmod-usb2
&&&&&&&& kmod-usb-core
&&&&&&&& kmod-usb-ohci
&&&&&&&& e2fsprogs
&&&&&&&& 然后插上U盘,不出意外的话可以找到设备/dev/sda1。执行下面命令
mkfs.ext4 /dev/sda1
mkdir -p /mnt/sda1
mount -t ext4 /dev/sda1 /mnt/sda1
mkdir -p /tmp/cproot
mount --bind / /tmp/cproot
tar -C /tmp/cproot -cvf - . | tar -C /mnt/sda1 -xf -
umount /tmp/cproot
&&&&&&&& 登陆进到管理页面,进入SYSTEM下的STARTUP,启动 fstab,再回到SYSTEM下的MOUNT POINTS,修改挂载点,点击开启挂载mount, 选中 对于block-extroot则设置挂载到overlay存储 。重启后可进入SYSTEM下SOFTWARE查看剩余空间,就知道是否成功。
安装mjpg-streamer&
&&&&&&&& 远程监控基本上是wifi小车的一个必备功能了。摄像头的选用可以参考[5],我用的是微软 LifeCam HD-3000,这个要100多吧。
&&&&&&&& 确认安装了以下软件:
&&&&&&&& kmod-usb2
&&&&&&&& kmod-video-uvc
&&&&&&&& (*)kmod-nls-base
&&&&&&&& kmod-usb-core
&&&&&&&& kmod-video-core
&&&&&&&& kmod-input-core
&&&&&&&& kmod-usb-ohci &&
&&&&&&&& kmod-usb-video
&&&&&&&& libjpeg
&&&&&&&& (*)librt
&&&&&&&& (*)libpthread
&&&&&&&& mjpg-streamer
&&&&&&&& (*)的表示我并不确定是否是必须要的。
&&&&&&&& 然后运行运行mjpg_streamer -i &input_uvc.so -r 640x480 -f 25& -o &output_http.so -p 8080 &-w /www/webcam&
&&&&&&&& 其中640X480&是视频的大小,25是帧率,这个要根据摄像头来选择。
&&&&&&&& 然后再PC的浏览器上输入下面的网址即可查看
192.168.1.1:8080/?action=stream(动态视频)
192.168.1.1:8080/?action=snapshot(静态图像)
也可访问192.168.1.1:8080/index.html 可以看到更多的内容
至于设置mjpg-streamer开机自启动,可以用uci来配置。关于uci可以看官网上的介绍。
uci show mjpg-streamer
输出大概是下面的样子
mjpg-streamer.core=mjpg-streamer
mjpg-streamer.core.device=/dev/video0
mjpg-streamer.core.resolution=640x480
mjpg-streamer.core.www=/www/webcam
mjpg-streamer.core.port=8080
mjpg-streamer.core.enabled=0
mjpg-streamer.core.fps=15
然后根据自己摄像头的情况修改
uci set mjpg-streamer.core.enabled=1
uci set mjpg-streamer.core.fps=25
uci set mjpg-streamer.core.resolution=640x480
登陆进到管理页面,进入SYSTEM下的STARTUP,点击enable mjpg-streamer
这样下次开机mjpg-streamer就会自启动了。
网页代码和如何用ps2手柄控制小车
单片机和网页的代码在
/hnmsky/wifi_car.git
网页代码要放到703N上的www目录。
这部分代码是参考网上的,通过lua脚本来向串口发送数据。
我调整了布局(Html是现学的,凑合着用了),并加入了触摸事件的处理[6],这样就可以用手机或ipad来控制小车了。
web/car.html:网页代码
web/web2ser:lua脚本,向串口发数据
web/wificar:703N开机时启动的服务,用来设置串口
用ps2手柄控制小车.
手上正好有个ps2的手柄,当然要利用起来。首先要到淘宝上买个usb的转接头,10多块钱吧。
然后这是有2种方案:
1:有个Joy2Key的工具,可以把手柄上的按键映射为键盘上的按键,然后在网页中处理相应按键即可。
2:firefox和chrome有相应版本可以支持gamepadAPI,这样在网页用使用相关API,就可以用手柄了。
我采用的是方案2.用的是firefox[7]。
首先需要一个gamepad.js的脚本[8]。不过原来的不支持ps2,所以我添加了ps2的支持。
然后可参考[9],在网页上监听相应事件即可。注意左摇杆和方向键有冲突,其实是无法区分这些键。所以我只用了左摇杆。
web/Ps2/index.html:测试ps2手柄。
web/Ps2/ps2.html:用手柄控制小车的代码。
后续的工作
电机底盘都买的便宜货。驱动力很差,基本只能在平地上跑跑了。这个还有很大改进空间。另外也可以加上超声波雷达什么的,改进下控制电机的算法。
至于摄像头,可以做一些人脸识别,自动拍照录像的工作。总之,可玩的东西还很多。
不过我也只是介绍这种只有基本功能的小车的制作,其他的就有待大家研究了。
参考文献:
[1]openwrt官网镜像下载地址&
http://wiki.openwrt.org/toh/tp-link/tl-wr703n
[2]wr703n+USB hub
.cn/forum/forum.php?mod=viewthread&tid=79885
[3]WR703N TTL引线教程+TTL免拆机无损改造教程
.cn/forum/forum.php?mod=viewthread&tid=75606
[4]703N这样改TTL的可得要注意了
.cn/forum/forum.php?mod=viewthread&tid=75606
[5]openWRT摄像头选购
/lancerz001/item/af0ee7f23874afd9a935a263
[6]: /library/safari/#documentation/appleapplications/reference/safariwebcontent/handlingevents/handlingevents.html
[9] /tutorials/games/an-introduction-to-the-html5-gamepad-api/
&&&&&&&& [1]这部分我未测试
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:188963次
积分:2688
积分:2688
排名:第8623名
原创:73篇
转载:71篇
评论:59条
(1)(1)(1)(1)(1)(2)(3)(1)(1)(3)(3)(2)(2)(3)(1)(1)(4)(3)(10)(3)(6)(1)(2)(2)(2)(2)(2)(4)(3)(2)(5)(1)(8)(4)(1)(13)(2)(1)(1)(7)(1)(4)(1)(1)(1)(7)(3)(1)(1)(4)(4)[智能小车]基于单片机的WIFI智能小车设计_智能小车-牛bb文章网
[智能小车]基于单片机的WIFI智能小车设计 智能小车
所属栏目: &
辽宁石油化工大学继续教育学院论文基于单片机的WIFI智能小车设计摘 要WIFI智能小车由电机、小车车体、89C52控制芯片、WIFI收发模块、电机驱动、舵机、电源、摄像头等主要部件以及灯光、蜂鸣器、电平转换等辅助模块构成。WIFI智能小车利用笔记本或手机等能连接无线路由器的终端智能设备连接到路由器,通过应用软件显示路由器上摄像头上采集到的视频信号,再通过这些智能的终端设备发送控制指令到无线路由器,通过无线路由器将指令传送给单片机进行处理。然后通过单片机控制电机驱动驱动电机转动、舵机转动,从而实现控制小车的运动及视频采集。关键词:路由器;wifi;智能小车;89C52I辽宁石油化工大学继续教育学院论文AbstractThe intelligent WIFI car involved a motor, a body, the 89C52 control chip, a WIFI transfer module, motor drivers, a power supply, lights, a buzzer and a voltage converter. The intelligent WIFI car can use an intelligent terminal (such as a laptop or a mobile phone) to connect with the router and use application software to display the video signal collected by the camera, then the intelligent terminal will send control commands which can be processed by the MCU though the routers. The MCU will control the turning of motors and realize the moving of the car and the video collection.Keywords:Router;WIFI;intelligent car;89C52II辽宁石油化工大学继续教育学院论文目 录摘 要 ................................................................................................................................. I Abstract ............................................................................................................................... II第1章 概述 .......................................................................................................................1第2章 方案论证及选择 ...................................................................................................32.1 总体设计方案 ......................................................................................................32.1.1 整机系统 ...................................................................................................32.1.2 整机工作原理 ...........................................................................................42.2 系统方案的选择与比较 ......................................................................................4第3章 硬件电路设计 .......................................................................................................53.1 DB120-WG无线路由器 .........................................................................................53.1.1 刷机固件介绍 ...........................................................................................53.1.2 刷机步骤 ...................................................................................................63.2 单片机最小系统设计 ..........................................................................................83.2.1 主控制芯片89C52 ....................................................................................83.2.2 STC89C52RC单片机最小系统 ................................................................103.2.3 89C52单片机的使用 ..............................................................................123.3 电机驱动电路 ....................................................................................................133.3.1 电机驱动模块使用 .................................................................................133.3.2 驱动原理及电路图 .................................................................................143.3.3 驱动模块原理及电路原理图 .................................................................153.4 摄像头介绍 ........................................................................................................163.4.1 摄像头简介 .............................................................................................163.4.2 摄像头的分类 .........................................................................................163.4.3 摄像头的工作原理 .................................................................................163.4.4 摄像头的主要结构和组件 .....................................................................173.5 舵机 ....................................................................................................................173.5.1 舵机的控制 .............................................................................................183.5.2 舵机的作用 .............................................................................................183.6 电源模块 ............................................................................................................181辽宁石油化工大学继续教育学院论文3.6.1 LM78系列集成稳压芯片介绍 ................................................................193.6.2 稳压电路 .................................................................................................193.7 路由器及驱动模块供电模块LM2596 ...............................................................203.7.1 LM2596系列开关稳压集成电路的主要特性 ........................................203.7.2 LM2596构成的可调压电源模块 ............................................................213.8 灯光、蜂鸣器及电平转换电路设计 ................................................................22第4章 系统程序设计 .....................................................................................................244.1 系统程序简介 ....................................................................................................244.2 程序流程图 ........................................................................................................244.2.1 主程序流程图 .........................................................................................244.2.2 串口中断子函数流程图 .........................................................................254.2.3 定时器2中断子函数流程图 .................................................................264.2.4 避障子函数流程图 .................................................................................274.2.5 寻迹函数流程图 .....................................................................................27第5章 制作与调试 .........................................................................................................295.1 系统仿真 ............................................................................................................295.1.1 常用软件介绍 .........................................................................................295.1.2 仿真测试 .................................................................................................315.2 实物调试 ............................................................................................................31第6章 结论 .....................................................................................................................32参考文献 ...........................................................................................................................33致 谢 ...............................................................................................................................34附录1 系统设计原理图 ..................................................................................................35附录2 元器件明细表 ......................................................................................................36附录3 源程序 ..................................................................................................................372辽宁石油化工大学继续教育学院论文第1章 概述现在是一个智能化的时代,各种智能化设备正在逐步替代人为的操作。随着汽车工业的迅速发展,关于智能汽车的研究也就越来越受人关注。全国电子大赛和省内电子大赛几乎每次都有智能小车这方面的题目,全国各高校也都很重视该题目的研究。设计的WIFI智能小车能够实自动寻迹、避障功能,可程控行驶速度、电脑手机WIFI连接控制行驶及其他的控制方式。本系统能实现对小车的运动状态进行实时控制。系统控制灵活、可靠,精度高,可满足对系统的各项要求。本设计以89C52为控制核心,利用超声波传感器检测道路上的障碍并测量小车与障碍之间的距离,小车通过红外传感器能够的自动避障,通过改变PWM信号的占空比可以控制快慢速行驶,以及自动停车,自动寻迹等功能。通过对本小车研究,我们可以初步构建智能汽车的模型与理论基础。对于智能汽车的研究,国内外都有很大的成就,谷歌的无人驾驶汽车,已经能够在高速公路上安全行驶数千公里,在高速行驶下都能有这么好的操控能力,无非是智能汽车领域的一座里程碑。对于智能泊车系统,现在也已经进入了民用领域,很多车型也装配了该系统,有了他,汽车用超声波传感器扫描路面两侧,通过比较停车的空间和车辆的长度,自动寻找合适的停车位。找到合适位置后,驾驶者只需控制刹车,车辆自动控制转向操作,即可将车停进停车位,并且液晶屏会有相应的显示。本设计选用的89C52单片机属于MCS-51系列单片机,由Intel公司开发,其结构是8048的延伸,改进了8048的缺点,具有指针、布尔代数运算等指令,以及串行通信能力和5个中断源。采用40引脚双列直插式DIP。其内部有128个RAM单元及4K的ROM。89C52有两个16位定时计数器,两个外中断,三个定时计数中断,及一个串行中断,并有4个8位并行输入口。89C52内部有时钟电路,但需要石英晶体和微调电容外接,本系统中采用22.1184MHz的晶振频率。由于89C52的系统性能满足系统数据采集及时间精度的要求,而且产品产量丰富来源广,应用也很成熟,故用来作为控制核心。新一代单片机为外部提供了相当完善的总线结构,为系统的扩展与配置打下了良好的基础。本设计主要研究内容就是基于89C52设计一部WIFI智能小车,小车能够实现自动循迹,自动避障,超声波测量距离。WIFI遥控的智能小车控制系统,包括了对驱动电路,红外通讯以及无线视频通信等的探索和研究。本项目文主要从小车设计方案的选取、硬件设 1辽宁石油化工大学继续教育学院论文计、软件设计、测试结果方面进行主要论述。我们在第3章主讲单片机与路由器的设计,包括了单片机最小系统的电路设计对路由器进行刷机处理;整个小车的一个供电电源的设计,需要通过电源给整个系统供12V、8V、5V等几个电压;电机的驱动模块,详细的说明了电机驱动的原理,视频信号的采集;第4章程序的设计给出了程序整体的流程图及编写思想;第5章调试简述整机的每个模块调试及方法。2辽宁石油化工大学继续教育学院论文第2章 方案论证及选择2.1 总体设计方案WIFI智能小车需要由WIFI模块、电机驱动模块、核心控制模块、摄像头模块等构成。2.1.1 整机系统如图2-1所示。图2-1 系统结构框图项目系统包括路由器、单片机最小系统、电机驱动电路、电机、电平转换电路、电源电路、舵机、摄像头、蜂鸣器电路、灯光电路等。路由器用于接收电脑等终端设备发送的指令和将摄像头采集到的视频信号传送到电脑等终端设备;单片机最小系统是整个小车的控制核心,控制着各个模块统一协调工作;电机驱动电路用于驱动电机转动,可以使电机产生正转、反转,从而使车体产生前进、后退、转弯等动作;电机的作用就是使整个车体运动;电平转换电路是将路由器输出的3.3V串口电平转换为单片机能判断的高低电平;电源电路作用是为整个小车系统共电;舵机制作成云台,然后装上摄像头,使摄像头可实现3辽宁石油化工大学继续教育学院论文上下、水平方向180度旋转调节;摄像头用于采集视频信号;蜂鸣器电路用于报警提示;照明电路为小车在夜间行驶提供照明。2.1.2 整机工作原理由电脑终端,通过WIFI无线网络连接到路由器,再通过电脑应用软件,向路由器发送控制命令及数据。路由器接收到数据后通过内部的串口发送软件,将接收到的命令和数据,通过路由器串口发送到89C52单片机的串口端,单片机接收到这些命令后执行相应的指令,如:驱动小车运动、舵机运动、蜂鸣器鸣叫、照明电路的开关等。视频信号,通过摄像头采集之后通过路由器发送到电脑终端,并在其应用软件中显示摄像头采集到的视频信号。2.2 系统方案的选择与比较方案一:选择网上已经经过改装过的wifi小车专用的TP―LINK WR703N无线路由器做为我们wifi小车的wifi连接模块,使用MSP430g2553单片机作为wifi小车的控制芯片。自己再够买元器件,自己搭接电源、驱动电路及单片机最小系统。方案二:利用网上大家公认做wifi小车较好的大亚db120-wg无线路由器,作为我们的wifi智能小车的wifi连接模块,使用我们教学用的51系列单片机89C52做为我们wifi智能小车的控制芯片。利用手里面现有的一些电源、驱动等模块等制作我们的wifi智能小车。方案选择:基于我们对成本和制作性的考虑我们选取的是方案二。4辽宁石油化工大学继续教育学院论文第3章 硬件电路设计3.1 DB120-WG无线路由器路由器如图3-1:图3-1 db120-wg路由器路由器内部如图3-2所示。图3-2 路由器内部结构图3.1.1 刷机固件介绍固件wifi-robots-openwrt-RG100A_DB120-cfe固件说明: 5辽宁石油化工大学继续教育学院论文1.Ser2net 已设置开机启动2.mjpg_streamer开机启动。摄像头只有2种驱动,uvc和301,目前开机mjpg_streamer缺省启动了301摄像头,301摄像头无需设置直接跳到第3步,uvc需要修改下即可ssh登陆后,vi etc/init.d/wificar,找到摄301像头参数mjpg_streamer -b -i "input_uvc.so -r 640x480 -f 30" -o "output_http.so -p 8080 -w /web"修改为uvc参数mjpg_streamer -b -i "input_uvc.so -r 352x288 -f 15 -y" -o "output_http.so -p 8080 -w /web"然后在putty命令行下输入chmod 777 /etc/init.d/wifirobot更改属性输入/etc/init.d/wificar enable 启动该配置文件 重启路由器,301摄像头设置完成。3.支持Luci/web 管理,错误设置后不能进入的,可以长按复位键 回初始模式4.网络设置,目前是AP模式,IP:192.168.1.1。3.1.2 刷机步骤1.网线连接电脑和路由器的LAN1(靠近电源那个网口,升级只能使用此口,有的版本丝印不是LAN1,反正记住靠近电源的那个口即可),电脑IP设置为192.168.1.169/255.255.255.0,192.168.1.1;设置完成点击网络邻居,选择属性,选择升级用的有线网口,右键点修复。2.用USB TTL线接好路由的GND、RXD、TXD三条线(VCC电源千万别接,会烧路由),打开putty,选好端口号,端口号请查看电脑设备管理器,设置波特率为115200,点击下面的Open。3.路由器通电,接线且设置正确的话,putty窗口应该出现路由器的信息,在通电3秒内,按下键盘的回车键,阻止路由器CFE启动,这时候应出现CFE&。4.输入小写e a,e a之间有个回车键,然后再按下y,点击回车,路由器开始擦除清除原系统固件。清除之后,路由会持续输出很多命令行,且不会停止,我们不用管,关掉路由电源。5.重新打开路由电源,和第四步一样,通电3秒内按下回车键阻止CFE继续启动打开浏览器,输入192.168.1.1,应看到上传固件的的选择文件,putty窗口也会出现路由器升级进度信息,此时千万不要断电,理论上此时断电会刷坏路由器,升级完成后,耐心等待5分钟,路由器会自动重启。6.等待路由启动后,等待几分钟再次重启一次路由,打开网页192.168.1.1,输入密码登陆进入路由器的设置,将路由器的无线网络开启,只有这样电脑等终端 6辽宁石油化工大学继续教育学院论文设备才能通过wifi信号和路由器连接。7.用putty登陆路由,转到/etc/init.d/目录,可以看到一个ser2net.conf文件,打开它可以看到路由串口的配置信息,默认配置的波特率是9600,8位数据位,1位停止位,无校验位。完成之后需要设定mjpg-streamer和ser2net随机启动,不然没法正常工作。8.由于我使用的摄像头是301芯片的,在电脑上显示会花屏,所以还需要对脚本进行修改,其操作步骤如下:具体步骤:A.登陆路由器:telnet 192.168.1.1 (IP地址根据你的路由器实际地址而定)。B.编辑脚本/etc/init.d/wificar:# vi /etc/init.d/wificar (在START=80后面增加一行killall mjpg_streamer,修改后的脚本看下面内容。)#!/bin/sh /monSTART=80killall mjpg_streamerstart() {mjpg_streamer -b -i "input_uvc.so -r 640x480 -f 15" -o "output_http.so Cp 8080 -w /web"# mjpg_streamer -b -i "input_uvc.so -r 352x288 -f 15 -y" -o "output_http.so -p 8080 -w /web"ser2net}stop(){killall mjpg_streamerkillall ser2net}C.保险起见,修改wificar脚本权限。# chmod -777D.重启路由器。# sync;sync;reboot7辽宁石油化工大学继续教育学院论文9.插上301芯片的摄像头,在电脑上打开我们的一个wifi小车的控制界面软件,选择wifi控制模式,然后打开视频,这时我们可以看到一个稳定视频信号通过路由器无线传送到了我们的电脑终端,至此说明我们路由器刷机及其配置完成。3.2 单片机最小系统设计最小系统主控芯片是宏晶公司MCS-51系列单片机中的89C52。3.2.1 主控制芯片89C5289C52是宏晶公司MCS-51系列单片机中基本的产品,它采用ETC公司可靠的CHMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于80C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似马达控制等应用场合。89C52内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。此外,89C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。89C52有PDIP(40pin)和PLCC(44pin)两种封装形式。主要功能特性:1.标准MCS-51内核和指令系统。2.32个双向I/O口。3.3个16位可编程定时/计数器。4.向上或向下定时计数器。5.6个中断源。6.全双工串行通信口。7.―帧错误侦测。8.―自动地址识别。9.空闲和掉电节省模式。10.片内8kROM(可扩充64kB外部存储器)。11.256x8bit内部RAM(可扩充64kB外部存储器)。12.时钟频率3.5-12/24/33MHz。13.改进型快速编程脉冲算法。14.5.0V工作电压。15.布尔处理器。16.4层优先级中断结构。17.兼容TTL和CMOS逻辑电平。18.PDIP(40)和PLCC(44)封装形式。管脚说明:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器, 8辽宁石油化工大学继续教育学院论文它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口作为STC89C52的一些特殊功能口,管脚备选功能:P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频 9辽宁石油化工大学继续教育学院论文率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA / VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。振荡电路:外接石英晶体或者陶瓷谐振器以及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。为了使装置能够被外部时钟信号激活,XATL1应该有效,而XTAL2应该被悬空。由于输入到内部的时钟信号电路通过了一个二分频的信号,外部信号的工作周期比没有别的要求,但是最大值和最小值的大小可以在数据表上观察出来。当正常工作时,外部振荡器可以计算出XTAL1上的电容,最大可达到100pF。这是由于振荡器电容和反馈电容之间的相互作用。当外部信号是标准高电平或者低电平时,电容不会超过20pF。空置模式:用户的软件都可以调用空置模式。当单片机出于这种模式,耗能就会自然降低。特殊功能端和板子上的随机存储器在空置状态保持各自的电平。但是处理器阻止装置执行指令。空置模式会被激活如果端口处于复位状态或者中断系统有效。3.2.2 STC89C52RC单片机最小系统STC89C52RC单片机最小系统的基本工作电路包括电源电路、时钟电路和复位 10辽宁石油化工大学继续教育学院论文电路。其组成方框图如图3-3所示。图3-3 单片机最小系统组成方框图1.电源电路电源电路模块为单片机最小系统和其他功能模块提供标准的+5V电源电压。2.时钟电路单片机的时钟信号为单片机芯片内部的各种操作提供时间基准,时钟电路为单片机产生时钟脉冲序列。作为单片机工作的时间基准,典型的晶体振荡频率为12MHz。MCS-51系列单片的时钟信号可以由两种方式产生:一种为内部时钟方式,利用芯片内部的振荡电路;另一种为外部时钟方式。其两种电路如图3-4所示。(a)内部时钟方式 (b)外部时钟方式图3-4 单片机时钟信号示意图3.复位电路单片机复位是使CPU和系统中的其他功能部件都恢复到一个确定的初始状态,并从这个状态开始工作。当在MCS-51系列单片的RST引脚处引入高电平并保持2个机器周期,单片机内部就执行复位操作。单片机常见的复位电路有两种基本形式:一种是上自动电复位,另一种是手动复位。其两种电路方式如图3-5(a)、(b)所示。由于STC89C52RC单片机芯片内有时钟振荡电路,所以此系统单片机均采用内部时钟方式。只需在单片机的XTAL1和XTAL2引脚外接石英晶体和微调电容,就113.2.3 89C52单片机的使用 电路。其具体电路设计如图3-6所示。T1、T2的使用及串口中断、外部中断。讯涉及波特率,所以在此选择22.1184MHz。 图3-5 单片机复位电路示意图 辽宁石油化工大学继续教育学院论文 (a)上电自动复位 (b)手动复位 构成了自激振荡器并在单片机内部产生时钟信号脉冲信号。同时,也采用手动复位此选择30pF;晶振X1的振荡频率范围在3.5~33MHz之间选择,因为需要使用串通在此图中,C1、C2电容的作用的是稳定频率和快速起振,其值为5~30pF,在本次设计,使用到了89C52单片机的I/O口的输入输出功能、内部定时器T0、12辽宁石油化工大学继续教育学院论文图3-6 单片机最小系统电路图89C52单片机的I/O口的输入功能用于传感器信号的输入处理。通过单片机对外部传感器的信号采集处理,从而对外部条件进行判断以确定小车下一步的运行状态。89C52单片机的I/O口信号输出,主要是给驱动模块送控制信号用于控制电机的转动、给舵机送PWM控制信号控制舵机的偏转以及控制开关蜂鸣器、灯光等。单片机的内部定时器的使用是用于产生PWM信号,以及其他需要精确时间的地方。单片机的串口中断,用于与路由器进行的串口通讯,接收电脑终端发送的串口指令。单片机的外部中断用于红外信号的接收,然后通过解码程序得到命令,从而控制小车的运动。3.3 电机驱动电路电动小车的驱动不但要求电机驱动系统具有高转矩重量比、宽调速范围、高可靠性,而且电机的转矩-转速特性受电源功率的影响,这就要求驱动具有尽可能宽的高效率区。我们所使用的电机一般为直流电机,主要用到永磁直流电机、伺服电机及步进电机三种。直流电机的控制很简单,性能出众,直流电源也容易实现。我们使用的这种直流电机的驱动及控制需要电机驱动芯片进行驱动。常用的电机驱动芯片有L297/298,MC33886,ML4428等。3.3.1 电机驱动模块使用我们使用的L298N是ST公司生产的一种高电压、大电流电机驱动芯片。该芯片采用15脚封装。主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。使用L298N芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机。项目使用的是4个直流电机,项目中使用了两块L298N电机驱动来驱动这四个直流电机的转动。13辽宁石油化工大学继续教育学院论文其实物及引脚图如下图3-7所示。其中6和11引脚是它的使能端,一个使能端控制一个电机,只有当它们都是高电平的时候两个电机才有可能工作,5、7、10、12是298的信号输入端和单片机的IO口相连,2、3、13、14脚是输出端,输入5和7脚控制输出2和3脚,输入的10、12脚控制输出的13、14脚。图3-7 L298驱动芯片实物及引脚图3.3.2 驱动原理及电路图驱动部分我们使用的是L298N驱动芯片构成的一个驱动电路模块如图3-8所示。图3-8 驱动实物图14辽宁石油化工大学继续教育学院论文3.3.3 驱动模块原理及电路原理图电路原理图如下图3-9所示。图3-9 L298驱动模块电路原理图使用直流/步进两用驱动器可以驱动两台直流电机。分别为M1和M2。引脚A,B可用于输入PWM脉宽调制信号对电机进行调速控制。(如果无须调速可将两引脚接5V,使电机工作在最高速状态,既将短接帽短接)实现电机正反转就更容易了,输入信号端IN1接高电平输入端IN2接低电平,电机M1正转。(如果信号端IN1接低电平,IN2接高电平,电机M1反转。)控制另一台电机是同样的方式,输入信号端IN3接高电平,输入端IN4接低电平,电机M2正转。(反之则反转),PWM信号端A控制M1调速,PWM信号端B控制M2调速。可参考下图表3-1。表3-1电机驱动状态表15辽宁石油化工大学继续教育学院论文3.4 摄像头介绍本项目中摄像头实现实时监测小车周边情况,使之成为一个无线可控移动的视频监控器,也用于判断小车当前路况。3.4.1 摄像头简介摄像头(CAMERA)又称为电脑相机、电脑眼等,它作为一种视频输入设备,在过去被广泛的运用于视频会议、远程医疗及实时监控等方面。近年以来,随着互联网技术的发展,网络速度的不断提高,再加上感光成像器件技术的成熟并大量用于摄像头的制造上,这使得它的价格降到普通人可以承受的区间。普通的人也可以彼此通过摄像头在网络进行有影像、有声音的交谈和沟通,另外,人们还可以将其用于当前各种流行的数码影像、影音处理。3.4.2 摄像头的分类摄像头分为数字摄像头和模拟摄像头两大类。模拟摄像头可以将视频采集设备产生的模拟视频信号转换成数字信号,进而将其储存在计算机里。模拟摄像头捕捉到的视频信号必须经过特定的视频捕捉卡将模拟信号转换成数字模式,并加以压缩后才可以转换到计算机上运用。数字摄像头可以直接捕捉影像,然后通过串、并口或者USB接口传到计算机里。现在电脑市场上的摄像头基本以数字摄像头为主,而数字摄像头中又以使用新型数据传输接口的USB数字摄像头为主,目前市场上可见的大部分都是这种产品。除此之外还有一种与视频采集卡配合使用的产品,但目前还不是主流。由于个人电脑的迅速普及,模拟摄像头的整体成本较高等原因,USB接口的传输速度远远高于串口、并口的速度,因此现在市场热点主要是USB接口的数字摄像头。以下主要是指USB接口的数字摄像头。3.4.3 摄像头的工作原理摄像头的工作原理大致为:景物通过镜头(LENS)生成的光学图像投射到图像传感器表面上,然后转为电信号,经过A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(DSP)中加工处理,再通过USB接口传输到电脑中处理,通过显示器就可以看到图像了。我们这里是将摄像头连接在路由器的USB接口上,通过路由器上的摄像头驱动软件使摄像头工作,并由路由器通过WIFI将视频信号发送出去。电脑等终端接收设备,接收到视频信号后通过控制软件的界面 16辽宁石油化工大学继续教育学院论文显示图像。3.4.4 摄像头的主要结构和组件从摄像头的工作原理就可以列出摄像头的主要结构和组件:1.主控芯片(详情请参阅下面介绍)2.感光芯片(详情请参阅下面介绍)3.镜头(详情请参阅下面介绍)4.电源。摄像头内部需要两种工作电压:3.3V和2.5V,因此好的摄像头内部电源也是保证摄像头稳定工作的一个因素。在本次wifi小车的制作中我们使用的天敏S606的摄像头,如图3-10所示。图3-10 天敏S606摄像头3.5 舵机舵机如图3-11所示。图3-11 舵机舵机的输入线共有三条,红色中间,是电源线,一边黑色的是地线,这辆根线给舵机提供最基本的能源保证,主要是电机的转动消耗。电源有两种规格,一是4.8V,一是6.0V,分别对应不同的转矩标准,即输出力矩不同,6.0V对应的要大一些,具体看应用条件;另外一根线是控制信号线,Futaba的一般为白色,JR的一般为桔黄色。另外要注意一点,SANWA的某些型号的舵机引线电源线在边上而不是中间,需要辨认。但记住红色为电源,黑色为地线,一般不会有错。 17辽宁石油化工大学继续教育学院论文3.5.1 舵机的控制舵机的控制信号为周期是20ms的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0-180度,呈线性变化。也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置上。舵机内部有一个基准电路,产生周期20ms,宽度1.5ms的基准信号,有一个比较器,将外加的PWM信号与基准信号相比较,判断出方向和大小,从而产生电机的转动信号。由此可见,舵机是一种位置伺服的驱动器,转动范围不能超过180度,适用于那些需要角度不断变化并可以保持的驱动当中。比方说机器人的关节、飞机的舵面等。3.5.2 舵机的作用在本次wifi小车中我们利用两个舵机做成一个云台(如图3-12),将摄像头固定在云台上,通过89C52单片机控制舵机旋转一定的角度,把我们想要角度的图像通过摄像头传送到电脑等终端设备。图3-12 舵机云台3.6 电源模块单片机和舵机需要分别单独供5V、6V的电源。本项目采用的是通过集成稳压芯片LM78XX系列构成一个5v、6v的稳压模块供电。LM78系列引脚及实物图如图3-13所示。18辽宁石油化工大学继续教育学院论文3.6.1 LM78系列集成稳压芯片介绍电子产品中,常见的三端稳压集成电路有正电压输出的78××系列和负电压输出的79××系列。顾名思义,三端IC是指这种稳压用的EIC来组成稳压电源所需的外围元件极少,电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。该系列集成稳压IC型号中的78或79后面的数字代表该三端集成稳压电路的输出电压,如7806表示输出电压为正6V,7909表示输出电压为负9V。因为三端固定集成稳压电路的使用方便,电子制作中经常采用。图3-13 LM78系列稳压引脚及实物在实际应用中,应在EQWEWQW 三端集成稳压电路上安装足够大的散热器(当然小功率的条件下不用)。当稳压管温度过高时,稳压性能将变差,甚至损坏。当制作中需要一个能输出1.5A以上电流的稳压电源,通常采用几块三端稳压电路并联起来,使其最大输出电流为N个1.5A,但应用时需注意:并联使用的集成稳压电路应采用同一厂家、同一批号的产品,以保证参数的一致。另外在输出电流上留有一定的余量,以避免个别集成稳压电路失效时导致其他电路的连锁烧毁。3.6.2 稳压电路78稳压电路原理图如图3-14所示。19辽宁石油化工大学继续教育学院论文图3-14 7805、06集成芯片稳压电路原理图这是一个输出正5V、6V直流电压的稳压电源电路。IC采用集成稳压器,其中电容分别为输入端和输出端滤波,LED和电阻R1构成一个电源指示电路,具体参数如图3-14所示。当输出电较大时,7805应配上散热板。3.7 路由器及驱动模块供电模块LM2596路由器需要一个12V/1A的电源;电机驱动需要一个8V左右的电源。我们这里分别使用了两个可调压的LM2596电源模块分别调节到想要的电压为路由器和电机驱动供电。LM2596系列是美国国家半导体公司生产的3A电流输出降压开关型集成稳压芯片,它内含固定频率振荡器(150KHZ),和基准稳压器(1.23V),并具有完善的保护电路:电流限制、热关断电路等。利用该器件只需极少的外围器件便可构成高效稳压电路。提供有:3.3V、5V、12V及可调(-ADJ)等多个电压档次产品。此外,该芯片还提供了工作状态的外部控制引脚。图3-15为LM2596芯片实物以及引脚示意图。1为+VIN,2为out put,3为gnd,4为feed back,5为on/off。3.7.1 LM2596系列开关稳压集成电路的主要特性1.最大输出电流:3A2.最高输入电压:37V3.输出电压:3.3V、5V、12V及(ADJ)等,最大输出电压37V4.震荡频率:150KHZ5.转换效率:75%~88%(不同电压输出时的转换效率不同)6.工作温度范围:-40℃~+125℃20辽宁石油化工大学继续教育学院论文7.工作模式:低功耗/正常两种模式。可外部控制8.工作模式控制:TTL电平相容9.所需外部组件:仅四个(不可调);六个(可调)10.器件保护:热关断及电流限制11.封装形式:5脚(TO-220(T);TO-263(S))3.7.2 LM2596构成的可调压电源模块开关电源调节器是降压型电源管理单片集成电路,能够输出3A的驱动电流,同时具有很好的线性和负载调节特性。可调节输出小于37V的各种电压。该器件内部集成频率补偿和固定频率发生器,开关频率为150KHZ,与低频开关调节器相比较,可以使用更小规格的滤波元件。由于该器件只需4个外接器件,可以使用通用的标准电感,这更优化了LM2596的使用,极大地简化了开关电源电路的设计。图3-15 LM2596实物及引脚图VOUT?VREF(1?R2?R1VREF?1.23V。),其中, R3VOUTR2?R1?R3(?1) VREF21辽宁石油化工大学继续教育学院论文CFF?131?103?R2由于路由器耗电较大需要供12V/1A的电,我们通过调节LM2596的开关电源模块电路为路由器供12V/1A的电源以及给耗电较大的电机供电。其电路图3-16所示。可调压LM2596电路原理图如图3-16所示。图3-16 LM2596构成的可调压电源模块电路图3.8 灯光、蜂鸣器及电平转换电路设计灯光、蜂鸣器及电平转换电路都是通过三极管的开关作用实现的,如图3-17、3-18、3-19所示。灯光电路和蜂鸣器电路都是通过单片机引脚输出高低电平到三极管的基极,使三极管导通或截止,从而控制LED的点亮熄灭,控制蜂鸣器的鸣叫。其中灯光电路中的电阻用于限流保护发光二极管。电平转换电路中将5V转化为3V是通过滑动电阻器降压实现的,将3V转换为5V是通过3V的信号控制三极管的截止,导通进行控制从而使三级管的发射极对应输出高低电平用于输入单片机进行处理。22辽宁石油化工大学继续教育学院论文 23辽宁石油化工大学继续教育学院论文第4章 系统程序设计4.1 系统程序简介硬件平台结构一旦确定,大的功能框架即形成,软件在硬件平台上构筑,完成各部分硬件的控制和协调工作。系统功能是由软硬件共同实现的,由于软件的可伸缩性,最终实现的系统功能可强可弱,差别可能很大。因此,软件是系统的灵魂。软件采用模块化设计方法,不仅易于编程和调试,也可减小软件故障率和提高软件的可靠性。我们的小车控制是通过89C52单片机控制驱动电路和给舵机送控制信号,然而这些控制信号的命令又是电脑等终端设备通过无线路由器串口传送给单片机的,所以在程序中我们需要设计到串口的使用、定时器使用、I/O口的使用。4.2 程序流程图智能WIFI小车的软件编写主要分为命令接收部分、命令执行部分、以及具体的信号的采集和处理。4.2.1 主程序流程图系统主程序模块主要完成对系统中各模块电路的初始化等工作,主要包括对定时器、串口中断、外部中断的初始化,同时执行电脑等终端设备所发送的命令,等待外部中断以及根据所需要的功能进行相应操作。软件总体设计及程序流程如下图4-1所示。24辽宁石油化工大学继续教育学院论文图4-1 主函数流程图4.2.2 串口中断子函数流程图通过串口中断,实现单片机和路由器进行通讯。进入中断后关掉中断,避免数据信号重复引起中断。根据命令数据发送的规律,将命令解码储存在相应的二维数组当中,方便在主函数中调用。具体流程图如下图4-2所示。25辽宁石油化工大学继续教育学院论文4.2.3 定时器2中断子函数流程图通过定时器的初始值和循环次数,确定出舵机PWM信号的20Ms的周期,通过控制高电平持续的中断次数,来确定具体的PWM信号。其流程图如下图4-3所示。图4-2 串口中断流程图26辽宁石油化工大学继续教育学院论文4.2.4 避障子函数流程图根据传感器探测到小车四周障碍物状态,从而确定驱动几个电机的旋转方向,也就确定了小车的运动状态。其流程图如下图4-4所示。4.2.5 寻迹函数流程图 根据传感器扫黑线上的状态,从而确定驱动几个电机的旋转方向,也就确定了小车的运动状态。其流程图如下图4-5所示。图4-3 定时中断函数流程图27辽宁石油化工大学继续教育学院论文图4-4 避障子函数流程图图4-5 寻迹子函数流程图28辽宁石油化工大学继续教育学院论文第5章 制作与调试5.1 系统仿真随着科技的发展,“计算机仿真技术”已成为许多设计部门重要的前期设计手段。它具有设计灵活,结果、过程统一的特点。可使设计时间大为缩短、耗资大为减少,也可降低工程制造的风险。5.1.1 常用软件介绍1.Keil软件Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。其软件界面如图5-1所示。图5-1 Keil软件界面图29辽宁石油化工大学继续教育学院论文2.Proteus软件Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译。其软件界面如图5-2所示。图5-2 Proteus软件界面30辽宁石油化工大学继续教育学院论文5.1.2 仿真测试1.系统初始化测试:主要完成对系统中各模块电路的初始化等工作,如在Proteus里面对软件的一些参数进行调试。将Proteus里的单片机89C52的晶振设置为我们实物中使用的参数22.1184MHz,将T0、T1和T2定时器开启并使之从单片机的I/O口输出,我们通过Proteus软件里的示波器,就可看出我们设置的定时器初始值是否合适,如果不合适我们就能根据I/O口的波形,修改我们的参数直到合适为止。2.分模块对软件进行测试,在Proteus软件中我们把我们的寻迹、避障模块程序分别进行调试,我将传感器的状态在软件中用开关替代,在输出I/O引脚上加上发光二极管,用观察输出状态。这样我们就可将外部的输入状态和输出进行对比,判断出个模块软件的编写是否正常。5.2 实物调试根据系统设计方案,此系统调试可分为硬件调试、软件调试和软硬件联调三个部分。1.硬件调试由于此设计实物的焊接、装配工作量非常大,所以在电路安装完成后,首先应对系统进行整体检查,确认电路无虚焊、短路、断路等错误,然后应该对电路各功能模块进行分级调试,逐步实现系统的整体功能。2.软件调试此系统的软件程序,均使用C语言编写。首先选用单片机开发板作为程序调试的载体,逐步对各模块子程序进行调试,然后再将各子程序模块进行有机组合、联调,最终完成整个系统的软件调试。3.软硬联调系统软硬件联调的主要任务是检测系统中各模块的功能和效果,同时需要校正系统的相关数据,按实际测量数据进行调试,直至数据结果准确为止。31辽宁石油化工大学继续教育学院论文第6章 结论通过本次WIFI智能小车的理论学习、论文编写和实物的制作,进一步的认识到了自身存在的不足。特别是自己在路由器方面知识的欠缺,这使得我在小车在起步制作时路由器部分的处理花费了大量的时间。但通过我在网上不断的查询相关的资料,在网上请教这方面的高手,最终我还是完成了路由器部分的处理。但是我还是不知道其中具体的一些细节的原理,如我的摄像头为什么会在后期不能使用,使用不同摄像头时路由器要进行怎样的一个处理。还有在整机装配的时候我没有注意到一些细节的地方,这使得我把小车拆装了多次。要想把事情做好提高效率,这就需要注意学习生活工作中做事的细节,以及对自己知识的扩充。同时,通过这次的毕业设计,我的各方面能力也得到了大幅度的提高。在知识上:一方面,我系统的总结了自己的专业知识,明确了自己今后事业的发展方向。另一方面,我如饥似渴的自学了单片机及其外围电路知识,并通过自己独立对软件的编写和实物制作,最终完成了整个WIFI智能小车的设计。在能力上:我通过不断查阅资料、与师生交流学习新知识、在网上请教相关的人士,然后又将自己沉淀后的知识和经验运用到实际电路设计理念中,丰富其功能与质量。在综合素质上,我虽然遇到很多的挑战和困难,但从未想过放弃,最终凭借自己百折不饶、勇于钻研的精神解决了这些技术难点。当然,由于我的知识和能力有限,整个设计还有很多不足之处有待完善和改进,恳请老师指教,这必将是我在踏上工作岗位之前的最大一笔收获。32辽宁石油化工大学继续教育学院论文参考文献[1] 张永枫.单片机应用实训教程.北京:清华大学出版社,2008[2] 刘守义.单片机应用技术.西安:西安电子科技大学出版社,2007[3] 赵克林.C语言实例教程.北京:人民邮电出版社,2009[4] 徐 玮.C51单片机高效入门.北京:机械工业出版社,2006[5] 刘建清.从零开始学单片机技术.北京:国防工业出版社,2006[6] 刘建清.从零开始学单片机C语言.北京:国防工业出版社,2006[7] 王静霞.单片机应用技术(C语言版).北京:电子工业出版社,2009[8] 李伯成.嵌入式系统可靠性设计.北京:电子工业出版社,2006[9] 先锋工作室.单片机程序设计实例.西安:清华大学出版社,2003[10] 马忠梅.单片机的C语言应用程序设计.北京:北京航空航天大学出版社,1988[11] 李群芳.单片微型计算机与接口技术.北京:电子工业出版社,200733辽宁石油化工大学继续教育学院论文致 谢通过这次设计,加强了我的动手、思考和解决问题的能力。使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。最后在老师的辛勤指导下,终于游逆而解。同时,在老师的身上我们学也到很多实用的知识,在次我们表示感谢!同时,我也学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应变,都受益非浅,今后的制作应该更轻松,自己也都能扛的起并高质量的完成项目。最后,感谢指导老师的指导,无论在哪方面,我都学到了许多东西。34辽宁石油化工大学继续教育学院论文 附录1 系统设计原理图35辽宁石油化工大学继续教育学院论文附录2 元器件明细表36辽宁石油化工大学继续教育学院论文附录3 源程序 /******************************************************************** * 文件名 : 串口接收试验.c* 描述 : 该文件实现通过单片机 无线从电脑接收数据。通过处理电脑发送的数据对小车进行操控该试验使用的晶振是22.1184。* 创建人 : 邹君,日* 版本号 : 2.0* 感谢各大工作室和同学对本人的大力支持。***********************************************************************/ #include&reg52.h&#include&intrins.h&#define uchar unsigned char#define uint unsigned intsbit P3_2=P3^2; //保留sbit IRIN = P3^3; //红外接收器数据线sbit P3_4=P3^4; //led控制sbit P3_5=P3^5; //蜂鸣器控制sbit P3_6=P3^6; //舵机控制sbit P3_7=P3^7;sbit P2_0=P2^0; //电机速度控制 (没用)sbit P2_1=P2^1;sbit TX=P2^6; //超声波触发端sbit RX=P2^7; //超声波接收端uint time=0; //超声波往返时间long S=0; //s表示超声波距离uchar disbuff[4]={0}; //超声波数据显示缓存uchar io1=20,io2=20,sdd1=1,sdd2=1; //舵机及电机初始状态变量uchar temp[1],cmd1[4],cmd2[4],cmd3[4],cmd4[4],cmd5[4]; //存放WIFI串口发下来的数据uchar IRCOM[7];void StartModule(); //超声波启动模块void chaoshengbo_conv(void);void delay(uchar x); //x*0.14MS(红外专用)/******************************************************************** * 名称 : Delay_1ms()* 功能 : 延时子程序,延时时间为 1ms * x* 输入 : x (延时一毫秒的个数)* 输出 : 无***********************************************************************/ 37辽宁石油化工大学继续教育学院论文void Delay_1ms(uint i)//1ms延时 {uint x,j;for(j=0;j&i;j++)for(x=0;x&=300;x++); }void delay_ms(uint z)//延时函数 {uint x,y;for(x=2000;x&0;x--) for(y=z;y&0;y--);}void delay1_us(uint z)//延时函数 { uint x,y;for(x=200;x&0;x--)for(y=z;y&0;y--);}void forward(void) {P1=0}void right(void)//右转{P1=0xa5;}void left(void)//左右{P1=0x5a;}void back(void)//后退{P1=0x55;}void stop(void)//停止{P1=038辽宁石油化工大学继续教育学院论文}void StartModule() //超声波启动模块{TX=1; // 启动一次模块_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();TX=0;}///////////////////////////////////////超声波测距模块程序////////////////////////////////////void chaoshengbo_conv(void){time=TH0*256+TL0; //计算时间TH0=0;TL0=0; //每计算一次,将计数器重装初值 S=(time*1.742)/100; //算出来是mm ,温度取15° if(S&=20) //如果超出测量范围{right();delay_ms(30);}}void Evade_function() //避障函数{uint valA;RX=1; //先拉高,等待下次高电平到来进行计数 StartModule(); //启动超声波模块forward();for(valA=7510;valA&0;valA--) //循环,在有效范围内计数{if(RX==1) //如果接收头接收到超声波,{TR0=1; //开启计数while(RX); //当RX为1计数并等待TR0=0; //关闭计数chaoshengbo_conv(); //计算}}}39辽宁石油化工大学继续教育学院论文void Track_function() //循迹函数{switch(P0){case 0xFB:forward();delay1_us(100);//11011case 0xF9:right();delay1_us(100);//11001case 0xF3:left();delay1_us(100);//10011case 0xFD:right();delay1_us(100);//11101case 0xF7:left();delay1_us(100);//10111case 0xFE:right();delay1_us(150);//11110case 0xEF:left();delay1_us(150);//01111case 0xFC:right();delay1_us(150);//11100case 0xE7:left();delay1_us(150);//00111case 0xF8:right();delay1_us(150);//11000case 0xE3:left();delay1_us(150);//00011default :stop();}}void Evade_function1() //壁障函数{switch(P2){case 0xFB:left();delay1_us(300);//11011case 0xFD:left();delay1_us(200);//11101case 0xF7:right();delay1_us(200);//10111case 0xF9:left();delay1_us(200);//11001case 0xF3:right();delay1_us(200);//10011 40辽宁石油化工大学继续教育学院论文case 0xF8:left();delay1_us(200);//11000case 0xE3:right();delay1_us(200);//00011case 0xF0:left();delay1_us(350);//10000case 0xE1:right();delay1_us(350);//00001case 0xF1:back();delay1_us(550);left();delay1_us(350);//10001case 0xE0:back();delay1_us(550);left();delay1_us(350);//00000default :forward();}}/******************************************************************** * 名称 : Com_Int()* 功能 : 串口中断子函数* 输入 : 无* 输出 : 无***********************************************************************/ uchar cont=0;void UART() interrupt 4//串口{RI=0;temp[cont]=SBUF;if(SBUF!=0xff){if(temp[0]==0x01){cmd1[cont]= temp[cont];}else if(temp[0]==0x02){cmd2[cont]= temp[cont];}else if(temp[0]==0x03){cmd3[cont]= temp[cont];}else if(temp[0]==0x04)41辽宁石油化工大学继续教育学院论文{cmd4[cont]= temp[cont];}else if(temp[0]==0x05){cmd5[cont]= temp[cont];}cont++;}else{cont=0;}}/******************************************************************** * 名称 : Com_Init()* 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断* 输入 : 无* 输出 : 无***********************************************************************/ void Com_Init(void){TMOD = 0x21;PCON = 0x00;SCON = 0x50;TH1 = 0xFa; //22.0592晶振设置波特率 9600TL1 = 0xFa;TR1 = 1; //启动定时器1RCAP2H=0RCAP2L=0x54;TR2=1;ET2=1;EA=1; //开总中断// EX1=1; //外部中断1 允许// IT1=1; //中断由下降沿 触发PCON=0;42辽宁石油化工大学继续教育学院论文IP=0X10; //中断优先顺序为PX1、PSES = 1; //开串口中断EA = 1; //开总中断cmd5[2]=15; //舵机初始位置}uchar t1=0,t2=0;void timer2() interrupt 5 //舵机频率50hz 100us一次{RCAP2H=0RCAP2L=0x54;TF2=0;t1++;t2++;if(t1==io1) //io 为串口接收到的速度数据十进制 从10到30 {P3_6=0; //舵机控制端1}else if(t1==200){P3_6=1;t1=0;}if(t2==io2) //io 为串口接收到的速度数据十进制 从10到30 {P3_7=0; //舵机控制端(2)}else if(t2==200){P3_7=1;t2=0;}}uchar sd1=0,sd2=0;void timer0() interrupt 1 //电机频率100HZ{TH0=0TL0=0x0b;sd1++;sd2++;if(sd1==sdd1) //sdd 为串口接收到的速度数据十进制 从0到30 {43辽宁石油化工大学继续教育学院论文P2_0=0;}else if(sd1==31){P2_0=1;sd1=0;}if(sd2==sdd2) //sdd 为串口接收到的速度数据十进制 从0到30{P2_1=0;}else if(sd2==31){P2_1=1;sd2=0;}}/******************************************************************** * 名称 : Main()* 功能 : 主函数* 输入 : 无* 输出 : 无***********************************************************************/ void main(){Delay_1ms(100);P1=0P2=0P3=0Com_Init();while(1) // 为WIFI操控{if(cmd1[1]==0x01){forward();}else if(cmd1[1]==0x02){left();}else if(cmd1[1]==0x03)44辽宁石油化工大学继续教育学院论文{ right(); } else if(cmd1[1]==0x04) { back(); } else if(cmd1[1]==0x00) { stop(); } if(cmd2[1]==0x02) //cmd[0]==0x0A 为循迹 功能 { Track_function(); } else if(cmd2[1]==0x01)//cmd[0]==0x0B 为壁障 { Evade_function(); } else if(cmd2[1]==0x03)//cmd[0]==0x0B 为壁障 { Evade_function1(); } else if(cmd2[1]==0xfe) { stop(); cmd2[1]=0 } if(cmd3[1]==0x01)//cmd3[1]==0x01 为WIFI操控灯 { P3_4=1;// 灯亮 } else if(cmd3[1]==0xfe) { P3_4=0;// 灯灭 } else if(cmd3[1]==0x02)//cmd3[1]==0x02 为WIFI操控蜂鸣器 { P3_5=0; // 蜂鸣器鸣叫 } 45辽宁石油化工大学继续教育学院论文else if(cmd3[1]==0x03)//cmd3[1]==0x02 为WIFI操控蜂鸣器{P3_5=1; // 蜂鸣器停止}if(temp[0]==0x04) //cmd3[1]==0x01 为WIFI操控电机速度{if(cmd4[1]==0x01)//控制小车行驶速度{sdd1=cmd4[2]; //cmd4[1] 为串口接收到的速度数据十进制 从10到30}else if(cmd4[1]==0x02){sdd2=cmd4[2]; //cmd4[1] 为串口接收到的速度数据十进制 从10到30}}if(temp[0]==0x05){if(cmd5[1]==0x01)//cmd5[0]==0x05 为WIFI操控摄像头舵机{io1=cmd5[2]; //cmd5[2] 为串口接收到的速度数据十进制 从10到30 }else if(cmd5[1]==0x02){io2=cmd5[2]; //cmd5[2] 为串口接收到的速度数据十进制 从10到30 }}Delay_1ms(1);}}/***************红外中断解码函数***********************void IR_IN() interrupt 2 using 0{unsigned char j,k,N=0;EX1 = 0;EA=0;delay(15);if (IRIN==1){ EX1 =1;EA=1;46辽宁石油化工大学继续教育学院论文}//确认IR信号出现while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。 {delay(1);}for (j=0;j&4;j++) //收集四组数据{for (k=0;k&8;k++) //每组数据有8位{while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。 {delay(1);}while (!IRIN) //等 IR 变为高电平{delay(1);}while (IRIN) //计算IR高电平时长{delay(1);N++;if (N&=30){ EX1=1;EA=1;} //0.14ms计数过长自动离开。} //高电平计数完毕 IRCOM[j]=IRCOM[j] && 1; //数据最高位补“0” if (N&=8) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补“1”N=0;}//end for k}//end for jif (IRCOM[2]!=~IRCOM[3]){ EX1=1; EA=1; }switch(IRCOM[2]){case 0x1c:case 0x45:cmd1[1]=0x00;P0=0x01; // 小车停止 (P0为测试现象参数)case 0x18:cmd1[1]=0x01;P0=0x02; // 小车前进case 0x08:cmd1[1]=0x02;P0=0x03; // 小车左转case 0x5a:cmd1[1]=0x03;P0=0x04; // 小车右转case 0x52:cmd1[1]=0x04;P0=0x05; // 小车后退case 0x0d:cmd2[1]=0x02;P0=0x06; // 小车寻迹case 0x09:cmd2[1]=0x01;P0=0x07; // 小车避障47辽宁石油化工大学继续教育学院论文case 0xa0:cmd2[1]=0x03;P0=0x07; // 小车避障case 0x43:cmd2[1]=0P0=0x08; // 寻迹避障停止 case 0x44:cmd3[1]=0x01;P0=0x09; // 灯开case 0x40:cmd3[1]=0P0=0x0a; // 灯关case 0x07:cmd3[1]=0x02;P0=0x0b; // 蜂鸣器开case 0x15:cmd3[1]=0x03;P0=0x0c; // 蜂鸣器关case 0x16:if(++cmd5[2]==24){cmd3[1]=0x02;cmd5[2]--;}P0=0x0d;case 0x19:if(++cmd5[2]==6){cmd3[1]=0x02;cmd5[2]++;}P0=0x0e;case 0x0c:temp[0]=0x05;cmd5[1]=0x01;P0=0x0f;case 0x5e:temp[0]=0x05;cmd5[1]=0x02;P0=0x00;}EX1 = 1; EA=1;}******************红外专用延时函数***********************void delay(unsigned char x) //x*0.14MS{while(x--){for (i = 0; i&13; i++) {} // 参数29(原参数13)经电脑仿真测试 误差在1% }}**********************************************************/ 48欢迎您转载分享:
更多精彩:

我要回帖

更多关于 单片机无线路由器通讯 的文章

 

随机推荐