嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx

上传人:b****3 文档编号:5304523 上传时间:2023-05-08 格式:DOCX 页数:32 大小:2.85MB
下载 相关 举报
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx_第1页
第1页 / 共32页
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx_第2页
第2页 / 共32页
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx_第3页
第3页 / 共32页
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx_第4页
第4页 / 共32页
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx_第5页
第5页 / 共32页
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx_第6页
第6页 / 共32页
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx_第7页
第7页 / 共32页
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx_第8页
第8页 / 共32页
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx_第9页
第9页 / 共32页
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx_第10页
第10页 / 共32页
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx_第11页
第11页 / 共32页
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx_第12页
第12页 / 共32页
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx_第13页
第13页 / 共32页
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx_第14页
第14页 / 共32页
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx_第15页
第15页 / 共32页
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx_第16页
第16页 / 共32页
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx_第17页
第17页 / 共32页
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx_第18页
第18页 / 共32页
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx_第19页
第19页 / 共32页
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx

《嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx(32页珍藏版)》请在冰点文库上搜索。

嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx

嵌入式课程设计基于嵌入式系统的传感器环境检测

 

嵌入式系统软件开发课程设计报告

题目:

基于嵌入式系统的传感器环境检测

学院:

物理与电子信息工程学院

专  业:

计算机科学与技术

班  级:

10计本

姓名:

左凌轩

学号:

10110013151

指导老师:

徐玉

完成日期:

2013.3.30

 

摘要

设计多传感器实现环境质量检测的多功能、实时数据保存以及查看,有利于各个领域在环境方面的检测和测试,方便在环境相应参数的调查和研究。

本文采用Stm32开发版、BMP085、SHT1X、光强、雨量等灵敏度较高的先进传感器分别检测温度、气压、湿度、光强、雨量,并在上位机中用C++实现实时显示和数据库的保存。

从设计中,各种检测和数据挖掘明显趋于简单。

关键词:

传感器检测数据

 

注:

上位机关键代码见附录

 

Abstract

.

KeyWords:

 

第一章设计目的

1.1掌握STM32嵌入式系统各功能模块的使用方法。

1.2掌握SHT1x温湿度传感器、BMP085气压传感器、GL5528光敏电阻、雨量传感器的数据采集与处理方法。

1.3掌握嵌入式系统上位机软件的实现方法。

第二章课程设计要求

2.1嵌入式系统要求

2.1.1、SHT1x温湿度传感器的信息采集与处理

2.1.2、BMP085气压传感器的信息采集与处理

2.1.3、基于GL5528光敏电阻的亮度信息采集与处理

2.1.4、雨量传感器的数据采集与处理

2.1.5、传感器信息的LCD显示界面设计

2.1.6、串口通讯程序与相应通讯协议设计与实现

2.2上位机要求

2.2.1、传感器信息的显示

2.2.2、串口配置(串口号、波特率的选择)

2.2.3、传感信息的数据库保存

2.2.4、数据库信息的可视化显示

第三章系统原理

3.1硬件电路

本课程设计涉及的环境监测系统在STM32嵌入式实验教学系统的基础上实现,相关的硬件原理图如下图所示

(图1)

3.2SHT1x温湿度传感器

SHT1x温湿度传感器是应用非常广泛一类环境传感器,可以数字形式提供14位分辨率的温度信息与12位分辨率的相对湿度信息。

该传感器提供专用的同步半双工串行接口向CPU传送采集的传感信息,其时钟信号连接STM32的PC14端口,数据信号连接STM32的PA9端口。

STM32利用GPIO口模拟SHT1x专用的串口通讯协议以实现传感信息采集。

3.3BMP085气压传感器

BMP085是Bosch公司推出的一款绝对压力传感器,可以数字形式提供16-19位分辨率的绝对压力信息与16位分辨率的温度信息。

STM32利用I2C1与该传感器通讯,PB6端口连接其时钟信号,PB7连接其数据信号。

3.4GL5528光敏电阻

光敏电阻的阻值随着亮度的提升而降低,基于此原理可利用上图所示电路中的电阻分压电路检测光敏电阻的阻值,进而根据阻值与亮度的关系计算环境中的光照强度。

3.5雨量传感器

雨量传感器由一系列互不连通的导线构成,当雨滴落到各导线上,由于水的导电作用雨量传感器的电阻会降低,阻值随着雨滴增多而降低,基于此原理可利用上图所示的电路中的分压电路检测雨量传感器的阻值,进而判断雨量大小。

第四章系统开发步骤

4.1开发板模块初始配置

voidRCC_Configuration(void);

voidSysTick_Configuration(void);//系统时钟初始化

voidGPIO_Configuration(void);//管脚初始化

voidEXTI_Configuration(void);//中断处理

voidNVIC_Configuration(void);//优先级响应初始化

voidADC_Configuration(void);//数模转换以及模数转换

voidDAC_Configuration(void);

voidUSART_Configuration(void);//串口模块初始化

voidTIM_Configuration(void);//

voidI2C_Configuration(void);//数据总线初始化

4.2传感器模块初始配置

voidBMP085_BufferRead(u8*pBuffer,u8ReadAddr,u8NumByteToRead);

voidBMP085_ReadCalCoeff(void);

u16BMP085_ReadTemp(void);//读取温度

u32BMP085_ReadPressure(void);//读取气压

voidSHT1x_DataOut(void);

voidSHT1x__DataIn(void);

u8SHT1x_WriteByte(u8value);

u8SHT1x_ReadByte(u8ack);

voidSHT1x_TransStart(void);

voidSHT1x_ConnectionReset(void);//SHT1x初始化连接

u8SHT1x_ReadReg(u8*pvalue);

u8SHT1x_Measure(u16*pvalue,u8mode);

u8SHT1x_ReadTempHumi(float*ptemp,float*phumi);

floatGL5528_ReadLight(void);//获取光强

u16Rain_Read(void);//获取雨量数值

4.3UI、传感器数据读取显示以及串口传输

4.3.1UI设置

Key1按下选择查看的项目,Key2按下确认进入查看的项目实时图形设置,Key3退出当前的页面(只在查看实时显示时有效)。

4.3.2数据读取

voidgetall();//读取所有数据

voidsettingdetail();//设置单个读取信息

voidDiscribeLine();//UI画图函数

4.4上位机串口软件编写以及测试

本组采取的是C++BuilderIDE下的软件编写,在串口通讯方面使用了Victor串口通讯控件、EXCLE导出控件、以及自编注册表自动获取控件、Chart查看显性实时图像信息,以及数据库连接和数据库的存储(其中使用了SQLserver数据库及其触发器编程)。

4.4.1对应串口设置

固定波特率为:

9600

自动搜索串口(从上位机注册表读取):

ComX

4.4.2图像实时显示

4.4.3数据库保存

4.4.3历史数据查看以及到处生成EXCEL

4.4.5历史数据图像显示

4.5整体测试和调试

 

第五章总结

从上述设计中,本文顺利地解决了嵌入式系统的设计与编码,上位机的界面设计以及算法设计与编码,即可以简单快捷地使用此设计作为环境检测的标准。

同时在设计的过程中遇到了许多困难和疑惑,但是在不懈努力与坚持下,本组组员都得以克服。

最后让组员收获颇多。

第六章附录

6.1Comopeator(主界面)

//---------------------------------------------------------------------------

#ifndefComOpeatorH

#defineComOpeatorH

//---------------------------------------------------------------------------

#include

#include

#include

#include

#include"YbCommDevice.h"

#include

#include

#include

#include

#include"Chart.hpp"

#include"Series.hpp"

#include"TeEngine.hpp"

#include"TeeProcs.hpp"

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

//---------------------------------------------------------------------------

classTComConnection:

publicTForm

{

__published:

//IDE-managedComponents

TYbCommDevice*YbCommDevice1;

TMemo*Memo1;

TButton*Button2;

TComboBox*cbb_com;

TButton*Button3;

TButton*btClear;

TLabeledEdit*LabeledEdit1;

TLabeledEdit*LabeledEdit2;

TLabeledEdit*LabeledEdit3;

TLabeledEdit*LabeledEdit4;

TLabeledEdit*LabeledEdit5;

TLabeledEdit*LabeledEdit6;

TChart*Chart1;

TBarSeries*Series1;

TButton*btshow;

TButton*btdataopen;

TADOConnection*ADOConnection1;

TADOQuery*ADOQuery1;

TDateTimePicker*DateTimePicker1;

TButton*btdataclose;

TTimer*Timer1;

TPanel*Panel1;

TDBGrid*DBGrid1;

TDateTimePicker*DateTimePicker2;

TDateTimePicker*DateTimePicker3;

TADOQuery*ADOQuery2;

TButton*Button1;

TButton*Button4;

TButton*Button5;

TDataSource*DataSource1;

TImage*Image1;

TButton*Button6;

void__fastcallButton2Click(TObject*Sender);

//void__fastcallButton1Click(TObject*Sender);

void__fastcallYbCommDevice1Package(TObject*Sender,intNotifyType);

void__fastcallButton3Click(TObject*Sender);

void__fastcallcbb_comSelect(TObject*Sender);

void__fastcallbtdatacloseClick(TObject*Sender);

void__fastcallbtClearClick(TObject*Sender);

void__fastcallbtshowClick(TObject*Sender);

void__fastcallbtdataopenClick(TObject*Sender);

void__fastcallTimer1Timer(TObject*Sender);

void__fastcallButton1Click(TObject*Sender);

void__fastcallButton4Click(TObject*Sender);

void__fastcallButton5Click(TObject*Sender);

void__fastcallButton6Click(TObject*Sender);

private:

//Userdeclarations

boolcomStatus;

boolaotuCom;

booldatain;

booldymcshow;

public:

//Userdeclarations

__fastcallTComConnection(TComponent*Owner);

voidFillInfo(intvarity,UnicodeStrings);

voidFillDatabase();

boolDBGrid2Excel(TDataSet*dataset,Stringfilename);

};

//---------------------------------------------------------------------------

externPACKAGETComConnection*ComConnection;

//---------------------------------------------------------------------------

#endif

//---------------------------------------------------------------------------

#include

#pragmahdrstop

#include"ComOpeator.h"

#include"his.h"

//---------------------------------------------------------------------------

#pragmapackage(smart_init)

#pragmalink"YbCommDevice"

#pragmalink"Chart"

#pragmalink"Series"

#pragmalink"TeEngine"

#pragmalink"TeeProcs"

#pragmaresource"*.dfm"

TComConnection*ComConnection;

//---------------------------------------------------------------------------

__fastcallTComConnection:

:

TComConnection(TComponent*Owner)

:

TForm(Owner)

{

comStatus=false;

aotuCom=false;

datain=false;

dymcshow=false;

Memo1->Clear();

}

//---------------------------------------------------------------------------

void__fastcallTComConnection:

:

Button2Click(TObject*Sender)

{

try{

if(!

comStatus){

YbCommDevice1->Active=true;//打开串口

YbCommDevice1->PackageType=cptFrameTimeout;//使用超时的方法识别每帧数据

YbCommDevice1->UsePackage=true;//启动Package

Button2->Caption="关闭串口";

}

else

{

YbCommDevice1->Active=false;

Button2->Caption="打开串口";

}

}

catch(Exception&e){

ShowMessage("打开串口失败,请先选择自动或检查串口是否正确接入。

");

}

comStatus=!

comStatus;

}

//---------------------------------------------------------------------------

/*

void__fastcallTComConnection:

:

Button1Click(TObject*Sender)

{

intnBytes=0;

charBuffer[1000];

wchar_t*EndPtr;

UnicodeStringhead="09A1ffffffffffff";

UnicodeStringcode=head+Edit1->Text;

//UnicodeStringcode=Edit1->Text;

UnicodeStringt,s=code.Trim();//去掉两端的空格

while(s.Length()>0)

{

intp=s.Pos('');//空格

if(p>0)

{

t=s.SubString(1,p-1);

s=s.SubString(p+1,s.Length()).Trim();

Buffer[nBytes++]=wcstol(t.w_str(),&EndPtr,16);//十六进制字符串转成字节

}

else//还剩下最后一个字节

{

t=s;

s="";

Buffer[nBytes++]=wcstol(t.w_str(),&EndPtr,16);//十六进制字符串转成字节

}

}

YbCommDevice1->Write(Buffer,nBytes);

}

*/

//---------------------------------------------------------------------------

void__fastcallTComConnection:

:

YbCommDevice1Package(TObject*Sender,intNotifyType)

{

unsignedcharBuf[1000];//接收缓存

intn=YbCommDevice1->ReadPackage(Buf,100);

intvarity=-1;

if(n>0)//收到数据的字节数

{

UnicodeStrings;

for(inti=0;i

if(Buf[i]==0xff){

Memo1->Lines->Add(s);

if(varity>=0)

FillInfo(varity,s);

s="";

continue;

}

elseif(Buf[i]>=0xa0&&Buf[i]<=0xa5){

varity=Buf[i]-0xa0;

continue;

}

s+=(char)(Buf[i]);

}

//Memo1->Lines->Add(s);//在Memo1里显示出收到的数据,将会是完整的一帧数据

}

}

//---------------------------------------------------------------------------

void__fastcallTComConnection:

:

Button3Click(TObject*Sender)

{

try{

TRegistry*reg=newTRegistry(KEY_READ);

TStringList*strlist=newTStringList;

reg->RootKey=HKEY_LOCAL_MACHINE;

/*

2013-1-26未能将转义符转义,致使注册表打开失败,经过修改随即可行。

*/

reg->OpenKeyReadOnly("HARDWARE\\DEVICEMAP\\SERIALCOMM");

reg->GetValueNames(strlist);

cbb_com->Clear();

for(inti=0;iCount;i++)

{

strlist->Strings[i]=reg->ReadString(strlist->Strings[i]);

cbb_com->Items->Add(strlist->Strings[i]);

}

cbb_com->ItemIndex=0;

deletereg,strlist;

cbb_comSelect(this);

aotuCom=true;

}

catch(Exception&e){

ShowMessage("自动搜索串口失败,请检查串口是否正确接入。

");

}

}

//---------------------------------------------------------------------------

void__fastcallTComConnection:

:

cbb_comSelect(TObject*Sender)

{

try

{

/*

串口号的形式是COMC,

其中C的取值不定,这里要将C提取出来,

就是去掉前面三个字符,并且不要后面/r和/n

那么它的长度就是length-3-2,而它的子串是从第四个开始的

*/

YbCommDevice1->PortName=cbb_com->Items->Text;

UnicodeStrings=YbCommDevice1->PortName;

s=s.SubString(4,YbCommDevice1->PortName.Length()-5);

YbCommDevice1->PortNo=StrToInt(s);

}

catch(Exception&e){

ShowMessage("自动搜索串口失败,请检查串口是否正确接入。

");

}

}

//-----------------------------

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2