嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx
- 文档编号:5304523
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:32
- 大小:2.85MB
嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx
《嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计 基于嵌入式系统的传感器环境检测.docx(32页珍藏版)》请在冰点文库上搜索。
嵌入式课程设计基于嵌入式系统的传感器环境检测
嵌入式系统软件开发课程设计报告
题目:
基于嵌入式系统的传感器环境检测
学院:
物理与电子信息工程学院
专 业:
计算机科学与技术
班 级:
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;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("自动搜索串口失败,请检查串口是否正确接入。 "); } } //-----------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式课程设计 基于嵌入式系统的传感器环境检测 嵌入式 课程设计 基于 系统 传感器 环境 检测