基于ARM的嵌入式远程数据采集系统设计.docx
《基于ARM的嵌入式远程数据采集系统设计.docx》由会员分享,可在线阅读,更多相关《基于ARM的嵌入式远程数据采集系统设计.docx(63页珍藏版)》请在冰豆网上搜索。
基于ARM的嵌入式远程数据采集系统设计
中国地质大学(武汉)远程与继续教育学院
本科毕业论文(设计)指导教师指导意见表
学生姓名:
学号:
专业:
电气工程及其自动化
毕业设计(论文)题目:
基于ARM的嵌入式远程数据采集系统设计
指导教师意见:
(请对论文的学术水平做出简要评述。
包括选题意义;文献资料的掌握;所用资料、实验结果和计算数据的可靠性;写作规范和逻辑性;文献引用的规范性等。
还须明确指出论文中存在的问题和不足之处。
)
设计选题切入较好,系统设计具有很好的示范性。
设计中以Linux为平台ARM为核心,加以测距传感器,红外蔽障,循迹传感器,摄像头以实现图像识别,配合一定的机械设备完成从发现到报警、响应,最终完成灭火操作,资料详实,方法实用,逻辑严密,写作基本规范,达到了本科毕业设计的要求,可以提交评阅。
指导教师结论:
合格(合格、不合格)
指导教师
姓名
所在单位
兰州工业学院
指导时间
2014-09-17
中国地质大学(武汉)远程与继续教育学院
本科毕业设计(论文)评阅教师评阅意见表
学生姓名:
学号:
专业:
电气工程及其自动化
毕业设计(论文)题目:
基于ARM的嵌入式远程数据采集系统设计
评阅意见:
(请对论文的学术水平做出简要评述。
包括选题意义;文献资料的掌握;所用资料、实验结果和计算数据的可靠性;写作规范和逻辑性;文献引用的规范性等。
还须明确指出论文中存在的问题和不足之处。
)
论文选题切合实际生活,符合专业培养要求。
文章中对基于ARM的嵌入式远程数据采集系统的系统架构、硬件设计、硬件组装、电路接线、软件部分和系统调试操作部分进行了比较详细的表述,并对全文进行了总结。
文章参考资料详实,用大量实物图展示了作者在毕业设计中所做的工作,观点明确,结构比较完整合理,逻辑性比较强,写作基本符合规范,语言通顺流畅。
但是文中的摘要不够精炼,软件部分没有用流程图的形式来表述,文章目录存在问题。
总体上说,该论文基本符合本科毕业论文的要求。
修改意见:
(针对上面提出的问题和不足之处提出具体修改意见。
评阅成绩合格,并可不用修改直接参加答辩的不必填此意见。
)
1、论文摘要应当是对全文核心内容的提炼,摘要字数在300字左右,请修改;
2、论文的目录有问题,目录中二级小标题(
(一)
(二)……)小标题不是按顺序来的,请修改。
3、论文中软件部分用大量的程序代码作为正文篇幅,请修改,改为程序流程图的方式来表述软件部分,并用文字对流程图做适当的说明。
毕业设计(论文)评阅成绩(百分制):
62
评阅结论:
修改后答辩(同意答辩、不同意答辩、修改后答辩)
评阅人姓名
所在单位
中国地质大学(武汉)
评阅时间
2014/10/2
论文原创性声明
本人郑重声明:
本人所呈交的本科毕业论文《基于ARM的嵌入式远程数据采集系统设计》,是本人在导师的指导下独立进行研究工作所取得的成果。
论文中引用他人的文献、资料均已明确注出,论文中的结论和结果为本人独立完成,不包含他人成果及使用过的材料。
对论文的完成提供过帮助的有关人员已在文中说明并致以谢意。
本人所呈交的本科毕业论文没有违反学术道德和学术规范,没有侵权行为,并愿意承担由此而产生的法律责任和法律后果。
论文作者(签字):
日期:
2014年9月1日
摘要
本项目以Linux为平台ARM为核心,加以测距传感器,红外蔽障,循迹传感器,摄像头以实现图像识别,配合一定的机械设备完成从发现到报警、响应,最终完成灭火操作。
预期目标:
该项目对用于对火种比较敏感的场合,在安全时期该机器处于侦察状态,不断扫描周围的环境,一旦发现火苗,立即发出报警信号,并循迹走到达火源地并利用自带装备将火苗扑灭。
该项目利用ARM可以移植操作系统并可以并行处理事件的优势,在对于时间要求严格的场合,可以并行完成多个任务,以节约时间进而节约成本,该项目可以最大限度的减少财产损失和保证生命财产安全。
该项目的重要难点在于:
拟利用摄像头和传感器确定火源或火种方位的图像识别部分难度较大;在火源或火种方位确定之后如何接近火源,既可以保证机器的安全又要可以把火势较小的火源扑灭的算法,以及实现准确靠近火源的测量和在机器车上安装何种设备可实现小面积火的扑救作业。
另外,整个过程中的操作都是由编制的程序完成,而程序和操作系统关联,所以,整个过程需要的应用程序和驱动程序以及对应的引导编译程序是重点也是难点,也是整个工程中最大的部分。
该项目是利用比较高端的处理器ARM和开源操作系统Linux,处理功能强大,是智能家电,工业控制中的佼佼者。
该项目被运用于防火比较严格的单位,例如博物馆、图书馆、天然气加气站等,它可以减少危害发生的几率或减小危害程度,可以挽回不可估量的经济损失,作用巨大。
国内、外都有大型的嵌入式远程数据采集系统,可以拖着水管进行消防作业,但是由于体积大不可能运用在室内;对应的保护室内物品、避免发生火险的却没有,预计如果制作成功可在室内对火险敏感的地方作业。
可以实现明火的探测,明火从出现到被传感器探测到最慢1s,从探测到到冲向火源的时间由距离决定,一般速度为1m/s,前提是:
火源在传感器的探测范围之内(15m),没有障碍物阻挡,并且地面没有阻拦物与障碍。
可以扑灭一定程度的火源,可根据易燃物种类搭配相应的灭火材料。
报警是在发现火源的时候,报警并向火源靠近。
关键词:
ARM、消防、循迹
1、系统概述
(一)系统架构
“嵌入式远程数据采集系统”系统是由嵌入式操作系统配合应用程序作为软件控制部分,通过驱动程序来指挥硬件工作,实现控制的目的。
整个系统的结构如图1所示。
图1
1、系统组成
嵌入式远程数据采集系统由车体、驱动板、循迹板、核心控制板、摄像头、探测板、无线网卡等部分组成,系统框图如图1所示。
嵌入式远程数据采集系统具有自动循迹和定位功能;能够完成目标拍照,并实现图像识别;能够完成探测目标的温度和发光频率的测量,实现目标距离测量;通过无线通信接收服务器指令,并将探测数据传回服务器。
图2嵌入式远程数据采集系统系统框图
(1)主要硬件模块
1)核心控制模块:
核心板使用S3C2440A处理器,通过SPI、I2C、USB、串口等接口,完成和驱动模块、循迹模块、探测模块、摄像模块和无线网卡的连接、驱动和控制。
2)驱动模块:
采用ARM7处理器,接收核心控制板传来的控制参数,产生PWM信号控制电机驱动模块,并将电机编码器信息回传核心控制板。
3)循迹模块:
采用ARM7处理器,利用24路反射式红外传感器,采集路线循迹信息,通过SPI接口上传核心控制板。
4)无线通信模块:
使用WIFI无线网卡,接收服务器发出的控制命令,并将探测数据和图像数据上传至服务器。
5)探测模块:
利用温度传感器、光电传感器和超声波传感器,实现探测目标的温度、发光频率和距离的测量,通过I2C总线将探测数据传给核心控制板。
6)摄像头模块:
采集目标图像信息,由核心控制板完成图像识别,并上传服务器。
(2)主要软件模块
1)操作系统:
嵌入式远程数据采集系统采用linux2.6版操作系统,系统内核可以裁减,用户可根据产品的应用能力和范围,定制其具体功能。
2)驱动程序:
CMOS摄像头驱动Camera;I2C总线驱动dev/i2c/0;SPI驱动ledarray;手动按钮驱动extraio;串口驱动ttySAC0,1,2;
3)主要应用程序:
小车控制程序car_control.c;图像采集与识别程序camera.c;无线通信程序wf_trans.c;探测板数据处理程序24cXX.c。
2、系统功能
小车与多种传感器协调工作,具备一定的自动识别和判断能力;小车整体有电机、寻迹板、驱动板、主板、核心板、摄像头、红外传感器、无线网卡和整个车体组成,系统框图如图3所示。
图3
它可实现如下功能:
(1)寻迹,可跟随线前进,在短线处也可实现正确到达目的。
(2)在距离火源一定距离时停止前进,停下采集火源照片。
(3)同时采集火源的物理参数,并通过wifi传回pc机。
(4)对所拍图像进行颜色识别。
3、系统主要硬件模块
(1)核心控制模块
嵌入式远程数据采集系统控制核心板使用S3C2440A控制器,他可以运行操作系统,集成如下主要片上功能:
1)3路URAT(IrDA1.0,64-ByteTxFIFO,64ByteRxFIFO)
2)12路USB主机控制/1路USB期间控制(ver1.1)
3)摄像头接口(支持最大4096x4096的输入,2048x2048缩放输入)
4)130个通用I/O,24个外部中断源
5)最高频率:
400MHz从而实现对摄像头的大量数据的高速处理,对串口、USB、大量通用I/O口和中断的控制,
(2)寻迹模块
采用RPR220反射式红外传感器进行路面信息的采集,路面信息的准确性直接影响到控制决策的准确性。
根据红外传感器的输出值,可以得到嵌入式远程数据采集系统相对黑线的位置,从而控制智能车向相应的方向转向,使其不会冲出跑道。
它的具体工作过程:
红外传感器采集传感器信息,8路传感器传回数据组成一个字节,传至2440,计算是否偏离黑线,传感器和:
temp=1×flagSensor[1]+2×flagSensor[2]+3×flagSensor[3]+4×flagSensor[4]+5×flagSensor[5]+6×flagSensor[6]+7×flagSensor[7]+8×flagSensor[8];偏离值计算:
temp/4.5,带入速度调整公式:
motor->speed=(int)(motor->proportion*bias)+motor->speedNormal;得出电机pwm值,分别放入wr_buf[2],wr_buf[3]中,利用write(fd_COM1,wr_buf,SEND_BUFF_SIZE)将速度发到AVR单片机,调整电机pwm值,达到调整方向的目的。
图4
(3)无线通信模块
无线传输模块使用wifi,属于在办公室和家庭中使用的短距离无线技术,通讯距离可达305米,在封闭性区域,通讯距离为76米到122米,方便与现有的有线以太网络整合,组网的成本更低。
Wi-Fi的半径则可达300英尺左右约合100米WiFi最主要的优势在于不需要布线,可以不受布线条件的限制,
(4)图像识别模块
1)具有8位的CMOS图像传感器接口,根据不同颜色图像在经过二值化处理,存储在ROM的编码数据
2)具有在黑暗处补偿的功能;
3)具有色彩修正的功能;
4)具有图像(灰度)校正,亮度校正,非线性校正的功能;
5)具有获得目标物体的形状和中心位置的功能;
6)具有主从通讯的串形通讯方式的接口;
框图如下:
图5
(5)探测模块
采用AT89c51做控制器,作为超声波,红外测温,测频率协调工作的基础,主要完成对红外传感器传来的信息和超声波的数据进行处理,使用传感器技术对目标的物理量进行物理分析、计算、进而产生结果,通过出口传入2440,再通过无线网卡传回PC。
具体框图如下:
图6
4、主要软件模块
(1)操作系统
嵌入式远程数据采集系统系统采用Fedora9操作系统,它也是一种开源操作系统,系统内核可以裁减,我们可以针对我们的产品的应用能力和范围,来定制操作系统支持的功能,该车需要USB口,摄像头,不需要蓝牙支持,我们在编译内核是就不需要蓝牙的支持,这也是因为系统的flash的大小是有限制的,要留出更多的空间来存储程序,而不是操作系统。
(2)嵌入式编译环境
该系统使用的交叉编译环境为ARM-Linux-gcc,它的是针对专门的硬件设计的,它编译完成的可执行文件只能在开发环境时针对的硬件环境下工作,虽然2440是一种带操作系统的处理器,但是它不具备自主开发能力,所以需要pc机编译。
(3)主要应用程序
1)car_control.c功能:
小车循迹定位控制算法,PC启动和按钮启动,各个设备启动与传输
2)camera.c功能:
拍照与图像识别算法
3)wf_trans.c功能:
命令、图像,数据的通信
(4)ARM9与ARM7间通信
ARM9与ARM7单片机之间的串口通信没有固定的格式,可以仿照以太网通信里面的数据打包的概念,每次传输都是以一个数据包为基本单位。
(5)与上位机的接口
服务器侦听自己IP地址和端口7001,等待客户机Socket连接。
等到客户机connect()操作的上位机等待并读取客户机的“请求数据”,上位机处理服务请求后,写入“答应数据”给客户机。
客户机发起请求,上位机答应请求,命令总长度是40个字节,上传图像数据命令长度例外,命令长度不够40字节,数据内容填0。
2、电源部分
图7
(一)主要接口
图8
(二)控制部分
图9
(三)图像及音频部分
图10
(四)通信接口
图11
(五)寻迹部分
图12
1、寻迹算法
取传感器传回数据,将各位分别放入数组的0~8位,待以后方便使用
tempData=sensorData;
for(i=0;i<8;i++)
{
flagSensor[i]=sensorData&0x01;//取传感器位值依次放入数组
if(flagSensor[i])
{
(*sum)++;
temp+=(i+1);//产生一个数值
temp=i(flagsenor[1]=1)+1
}
sensorData>>=1;
}
最后运算结果为temp=1×flagSensor[1]+2×flagSensor[2]+3×flagSensor[3]+4×flagSensor[4]+5×flagSensor[5]+6×flagSensor[6]+7×flagSensor[7]+8×flagSensor[8]
在此之后,根据结果计算调整量:
if(temp!
=0)*bias=temp*1.0/(*sum)-REF_VALUE;//产生计算结果
如果在中间即flagSensor[4]和flagSensor[5]的值为1,最后运算结果为4.5,而基值REF_VALUE=4.5,则偏移量为0,导致结果不做调整,如此往左偏,偏移量为正值,往右偏,偏移值为负值。
if(*sum>4)
{
for(i=0;iif(tempData==table[i])//判断与预计的那种情况相同
*bias=0;
return1;
}
}
图13
判断是不是与预定的值相等,预定的值有以下的几种情况,如图所示:
motor->speed=(int)(motor->proportion*bias)+motor->speedNormal;//计算公式y=kx+b
如果传回的传感器位置,与上图的位置某一相同,则速度保持不变(即*bias=0,motor->speed=speedNormal),若不与上图任一类型相同,则将计算结果带入该式计算出偏移量,分别放入wr_buf[2],wr_buf[3]中,利用write(fd_COM1,wr_buf,SEND_BUFF_SIZE)将速度发到ARM7单片机,控制电机调整pwm值,达到调整方向的目的。
(六)驱动板部分
图14
(七)测温部分
图15
(八)印制板图
1、探测板印制图
图16
2、寻迹印制板图
图17
三、硬件组装
(一)控制部分装配图
1、主板在核心板上平面图(俯视)
图18
2、核心板装在主板上
图19
注意:
(1)JP为主板与驱动板的接口
(2)J1、J2为核心板与主板的主要接口。
(3)装配顺序为驱动板在最下面,主板在驱动板的上面,接口为JP。
(4)核心板在主板的上面,接口为J1,J2(颜色相对应)。
(5)D1、D2为电源1、电源2电源2。
(6)主板图上P1口为扩展板接口,插接红外线探测板。
(7)主板图上P2口为摄像头接口,插接摄像头连接板。
(8)摄像头连接板上插接摄像头模块。
(9)烧写ARM7单片机时,在驱动板上烧写,需取下核心板及主板,把ISP接头插入ARM7ISP接口,即可实现程序的烧写。
(二)探测部分装配图
1、寻迹传感器装配(侧面)
图20
2、探测板装配
图21
注意:
(1)红外传感器(RPR220)的高度可以通过调整螺丝的高度调整,具体方法:
拧松螺帽,把探测板抬(降)值理想高度,再紧固螺帽即可完成。
(2)红外传感器的安装高度,约为0.8~1.4cm,具体情况,应以调试时能正确探测到黑线为低电平,其他情况为高电平为标准。
(3)扩展板应插入如上图所示的P2口,方向以红外探头的玻璃窗面向被测物体即为安装正确。
(4)最后装塑料保护外壳,缺口朝前。
(5)无线网卡在靠内侧USB接口。
(三)摄像头部分装配(侧视图)
图22
(四)整车装配完成实物图
图23
(五)寻迹板安装
1、布局
为了达到最理想的寻迹效果:
既不会偏离线太远才调整,又不会反复在线周围摆动,可以适当的调整传感器之间的距离,来达到目的。
2、高度
RPR220的使用有一定的距离范围,寻迹传感器应布置在小车的前面,根据线的宽度可做相应的调整,但是传感器的高度应在0.8CM~1.3CM之间,过低可能导致发出的红外线不能反射到接收端,过高则会影响它的灵敏度。
(六)探测板安装
探测板插接到主板的J2口(靠外侧的十针接口)上,以探测板面向被测物体为安装正确。
(七)摄像头安装
探测板插接到主板的J1口(靠内侧的十针接口)上,以摄像头面向被测物体为安装正确。
(八)无线网卡安装
无线网卡通过主板上靠内侧的USB口向接。
4、电路接线
(一)控制板接线
1、驱动板接线
图24
2、电源,电机接线
图25
(二)探测板接线
1、循迹板接线
图26
方向:
探测板插接到P2口,以红外传感器的测温面向被测物体为正确方向。
摄像头板插接到P1口,以摄像头面向物体为正确。
2、摄像头板接线
图27
3、探测板接线
图28
4、寻迹板红外传感器板接线板
图29
5、Sensor接口接线在主板P2插接口上,如下图所示
图30
实物图如下
图31
5、软件部分
(一)程序说明
1、Car_contol.c
完成电机的控制部分,从采集红外传感器数据到处理数据并计算出偏离值,并发送到ARM7纠正路线,和图像的控制部分,主要功能部分如下:
(1)初始化电机
(2)建立电机控制模型
(3)初始化串口
(4)从传感器读回来原始数据并计算出偏移黑线值和在黑线上的传感器数目
(5)用电机控制模型计算出电机各自的调整量
(6)为摄像头开辟内存
(7)打开串口,红外传感器,摄像头出错处理
(8)发送并等待“启动消防车请求”,并以10ms循环读取“启动按钮”
(9)发送图像数据
2、Camera.c
完成如何采集一帧图像的完整操作,具体功能部分如下:
(1)开辟图像处理暂存区
(2)打开摄像头
(3)获取当前时刻的一帧图像
(4)图像识别
(5)关闭摄像头
3、Extraio.c
为红外传感器和以后添的各种传感器预留的统一接口,主要完成从传感器读数据到处理,再到返回结果的一个流程,具体功能部分如下;
(1)建立输入与输出结构
(2)配置数字口
(3)从数字口读数据、从数字口写数据
(4)获取测温传感器的值,分别需要获取两个通道
(5)等待启动按钮函数
(6)收到启动消防车应答信号
4、wifi_trans.c
完成与上位机的的各种通信协议及参数命令的配置,和对使用大量内存图像的处理操作,具体功能部分如下:
(1)配置通信的各种参数
(2)跟PC机通信的各种握手命令
(3)分配图像指针
(4)启动消防车请求函数
(5)上传采集数据函数的处理实体
(6)上传采集数据函数
(7)上传一帧图像函数的处理实体
(8)上传一帧图像函数
(9)上传一帧LOGO图像函数的处理实体
(二)程序流程图
1、寻迹主程序流程图
图31
2、寻迹前进子函数流程图
图32
3、采集数据,上传子函数
图33
4、红外线传感器程序流程图
5、其它传感器程序流程图
图34
(三)程序
1、controller.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include"controller.h"
#include"commu.h"
#include"camera.h"
#defineDEBUG_CONTROLLER
/*controller_running全局变量初始为1,在进程接收到SIGINT信号后
*设成0,在进程的主要的循环条件中加上此条件,即能够令用户通过Ctrl+C
*来正常退出循环。
*/
intcontroller_running=1;
voidon_sig(intsig){
//如果是SIGINT信号,则设置controller_running变量
if(sig==SIGINT)
controller_running=0;
if(sig==SIGUSR2)
printf("ControllerreceivedSIGUSR2.\n");
if(sig==SIGCHLD)
printf("Childprocesshasended.\n");
}
voidregister_sig_handler(){
structsigactionsig_act;
sig_act.sa_handler=on_sig;
sigemptyset(&sig_act.sa_mask);
sig_act.sa_flags=SA_RESTART;
if(sigaction(SIGINT,&sig_act,NULL)==-1){
perror("RegisterSIGINThandlerfails.");
exit
(1);
}
if((sigaction(SIGUSR2,&sig_act,NULL)==-1)){
perror("RegisterSIGUSR2handlerfails.");
exit
(1);
}
if((s