




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统软件开发课程设计报告题 目: 基于嵌入式系统的传感器环境检测 学 院: 物理与电子信息工程学院 专业: 计算机科学与技术 班级: 10计本 姓 名: 左凌轩 学 号: 10110013151 指导老师: 徐玉 完成日期: 2013.3.30 目录摘 要IAbstractII第一章设计目的31.1 掌握STM32嵌入式系统各功能模块的使用方法。31.2 掌握SHT1x温湿度传感器、BMP085气压传感器、GL5528光敏电阻、雨量传感器的数据采集与处理方法。31.3 掌握嵌入式系统上位机软件的实现方法。3第二章 课程设计要求32.1嵌入式系统要求32.2上位机要求3第三章 系统原理33.1硬件电路33.2 SHT1x温湿度传感器43.3 BMP085气压传感器43.4GL5528光敏电阻43.5雨量传感器5第四章 系统开发步骤54.1开发板模块初始配置54.2传感器模块初始配置54.3 UI、传感器数据读取显示以及串口传输54.4上位机串口软件编写以及测试64.5 整体测试和调试8第五章 总结11第六章 附录126.1 Comopeator(主界面)126.2 history(查看历史界面)222摘 要设计多传感器实现环境质量检测的多功能、实时数据保存以及查看,有利于各个领域在环境方面的检测和测试,方便在环境相应参数的调查和研究。本文采用Stm32开发版、BMP085、SHT1X、光强、雨量等灵敏度较高的先进传感器分别检测温度、气压、湿度、光强、雨量,并在上位机中用C+实现实时显示和数据库的保存。从设计中,各种检测和数据挖掘明显趋于简单。关键词: 传感器 检测 数据 注:上位机关键代码见附录Abstract.Key Words:第一章 设计目的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.2 SHT1x温湿度传感器SHT1x温湿度传感器是应用非常广泛一类环境传感器,可以数字形式提供14位分辨率的温度信息与12位分辨率的相对湿度信息。该传感器提供专用的同步半双工串行接口向CPU传送采集的传感信息,其时钟信号连接STM32的PC14端口,数据信号连接STM32的PA9端口。STM32利用GPIO口模拟SHT1x专用的串口通讯协议以实现传感信息采集。3.3 BMP085气压传感器BMP085是Bosch公司推出的一款绝对压力传感器,可以数字形式提供16-19位分辨率的绝对压力信息与16位分辨率的温度信息。STM32利用I2C1与该传感器通讯,PB6端口连接其时钟信号,PB7连接其数据信号。3.4 GL5528光敏电阻光敏电阻的阻值随着亮度的提升而降低,基于此原理可利用上图所示电路中的电阻分压电路检测光敏电阻的阻值,进而根据阻值与亮度的关系计算环境中的光照强度。3.5 雨量传感器雨量传感器由一系列互不连通的导线构成,当雨滴落到各导线上,由于水的导电作用雨量传感器的电阻会降低,阻值随着雨滴增多而降低,基于此原理可利用上图所示的电路中的分压电路检测雨量传感器的阻值,进而判断雨量大小。 第四章 系统开发步骤4.1开发板模块初始配置void RCC_Configuration(void);void SysTick_Configuration(void);/系统时钟初始化void GPIO_Configuration(void);/管脚初始化void EXTI_Configuration(void);/中断处理void NVIC_Configuration(void);/优先级响应初始化void ADC_Configuration(void); /数模转换以及模数转换void DAC_Configuration(void);void USART_Configuration(void);/串口模块初始化void TIM_Configuration(void);/void I2C_Configuration(void);/数据总线初始化4.2传感器模块初始配置void BMP085_BufferRead(u8 *pBuffer, u8 ReadAddr, u8 NumByteToRead);void BMP085_ReadCalCoeff(void);u16 BMP085_ReadTemp(void);/读取温度u32 BMP085_ReadPressure(void);/读取气压void SHT1x_DataOut(void);void SHT1x_DataIn(void);u8 SHT1x_WriteByte(u8 value);u8 SHT1x_ReadByte(u8 ack);void SHT1x_TransStart(void);void SHT1x_ConnectionReset(void);/SHT1x初始化连接u8 SHT1x_ReadReg(u8 *pvalue);u8 SHT1x_Measure(u16 *pvalue, u8 mode);u8 SHT1x_ReadTempHumi(float *ptemp,float *phumi);float GL5528_ReadLight(void);/获取光强u16 Rain_Read(void);/获取雨量数值4.3 UI、传感器数据读取显示以及串口传输4.3.1 UI设置 Key1按下选择查看的项目,Key2按下确认进入查看的项目实时图形设置,Key3退出当前的页面(只在查看实时显示时有效)。4.3.2数据读取void getall();/读取所有数据void settingdetail();/设置单个读取信息void DiscribeLine();/UI画图函数4.4上位机串口软件编写以及测试本组采取的是C+ Builder IDE下的软件编写,在串口通讯方面使用了Victor串口通讯控件、EXCLE导出控件、以及自编注册表自动获取控件、Chart查看显性实时图像信息,以及数据库连接和数据库的存储(其中使用了SQLserver数据库及其触发器编程)。4.4.1对应串口设置固定波特率为:9600自动搜索串口(从上位机注册表读取):ComX4.4.2图像实时显示4.4.3数据库保存4.4.3历史数据查看以及到处生成EXCEL4.4.5历史数据图像显示4.5 整体测试和调试第五章 总结从上述设计中,本文顺利地解决了嵌入式系统的设计与编码,上位机的界面设计以及算法设计与编码,即可以简单快捷地使用此设计作为环境检测的标准。同时在设计的过程中遇到了许多困难和疑惑,但是在不懈努力与坚持下,本组组员都得以克服。最后让组员收获颇多。第六章 附录6.1 Comopeator(主界面)/-#ifndef ComOpeatorH#define ComOpeatorH/-#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 /-class TComConnection : public TForm_published:/ IDE-managed ComponentsTYbCommDevice *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 _fastcall Button2Click(TObject *Sender);/void _fastcall Button1Click(TObject *Sender);void _fastcall YbCommDevice1Package(TObject *Sender, int NotifyType);void _fastcall Button3Click(TObject *Sender);void _fastcall cbb_comSelect(TObject *Sender);void _fastcall btdatacloseClick(TObject *Sender);void _fastcall btClearClick(TObject *Sender);void _fastcall btshowClick(TObject *Sender);void _fastcall btdataopenClick(TObject *Sender);void _fastcall Timer1Timer(TObject *Sender);void _fastcall Button1Click(TObject *Sender);void _fastcall Button4Click(TObject *Sender);void _fastcall Button5Click(TObject *Sender);void _fastcall Button6Click(TObject *Sender);private:/ User declarationsbool comStatus;bool aotuCom;bool datain;bool dymcshow;public:/ User declarations_fastcall TComConnection(TComponent* Owner);void FillInfo(int varity , UnicodeString s);void FillDatabase();bool DBGrid2Excel(TDataSet *dataset, String filename);/-extern PACKAGE TComConnection *ComConnection;/-#endif/-#include #pragma hdrstop#include ComOpeator.h#include his.h/-#pragma package(smart_init)#pragma link YbCommDevice#pragma link Chart#pragma link Series#pragma link TeEngine#pragma link TeeProcs#pragma resource *.dfmTComConnection *ComConnection;/-_fastcall TComConnection:TComConnection(TComponent* Owner): TForm(Owner)comStatus = false;aotuCom = false;datain = false;dymcshow = false;Memo1-Clear();/-void _fastcall TComConnection:Button2Click(TObject *Sender)tryif(!comStatus)YbCommDevice1-Active = true; /打开串口YbCommDevice1-PackageType = cptFrameTimeout; /使用超时的方法识别每帧数据YbCommDevice1-UsePackage = true; /启动 PackageButton2-Caption=关闭串口;elseYbCommDevice1-Active = false;Button2-Caption=打开串口;catch(Exception &e)ShowMessage(打开串口失败,请先选择自动或检查串口是否正确接入。);comStatus = !comStatus;/-/*void _fastcall TComConnection:Button1Click(TObject *Sender) int nBytes = 0; char Buffer1000; wchar_t *EndPtr; UnicodeString head=09 A1 ff ff ff ff ff ff ; UnicodeString code=head + Edit1-Text;/ UnicodeString code= Edit1-Text; UnicodeString t,s = code.Trim(); /去掉两端的空格 while(s.Length()0) int p = s.Pos( ); /空格 if(p0) t = s.SubString(1,p-1);s = s.SubString(p+1,s.Length().Trim();BuffernBytes+ = wcstol(t.w_str(), &EndPtr, 16); /十六进制字符串转成字节 else /还剩下最后一个字节 t = s;s = ;BuffernBytes+ = wcstol(t.w_str(), &EndPtr, 16); /十六进制字符串转成字节 YbCommDevice1-Write(Buffer,nBytes);*/-void _fastcall TComConnection:YbCommDevice1Package(TObject *Sender, int NotifyType)unsigned char Buf1000; /接收缓存int n = YbCommDevice1-ReadPackage(Buf,100);int varity = -1;if(n0) /收到数据的字节数 UnicodeString s;for(int i=0; iLines-Add(s); if(varity =0) FillInfo(varity,s); s=; continue;else if(Bufi =0xa0 & BufiLines-Add(s); /在 Memo1 里显示出收到的数据, 将会是完整的一帧数据 /-void _fastcall TComConnection:Button3Click(TObject *Sender)tryTRegistry *reg = new TRegistry(KEY_READ);TStringList *strlist = new TStringList;reg-RootKey = HKEY_LOCAL_MACHINE;/*2013-1-26 未能将转义符转义,致使注册表打开失败,经过修改随即可行。*/reg-OpenKeyReadOnly(HARDWAREDEVICEMAPSERIALCOMM);reg-GetValueNames(strlist);cbb_com-Clear();for( int i=0; iCount;i+ )strlist-Stringsi = reg-ReadString(strlist-Stringsi);cbb_com-Items-Add(strlist-Stringsi);cbb_com-ItemIndex = 0;delete reg,strlist;cbb_comSelect(this);aotuCom = true;catch(Exception &e)ShowMessage(自动搜索串口失败,请检查串口是否正确接入。);/-void _fastcall TComConnection:cbb_comSelect(TObject *Sender) try /*串口号的形式是COMC,其中C的取值不定,这里要将C提取出来,就是去掉前面三个字符,并且不要后面/r和/n那么它的长度就是length-3-2,而它的子串是从第四个开始的*/YbCommDevice1-PortName = cbb_com-Items-Text;UnicodeString s=YbCommDevice1-PortName;s=s.SubString(4,YbCommDevice1-PortName.Length()-5);YbCommDevice1-PortNo = StrToInt(s); catch(Exception &e)ShowMessage(自动搜索串口失败,请检查串口是否正确接入。);/-void _fastcall TComConnection:btdatacloseClick(TObject *Sender)datain=false;/-void _fastcall TComConnection:btClearClick(TObject *Sender)Memo1-Clear();/-void TComConnection:FillInfo(int varity,UnicodeString s)switch(varity)case 0:LabeledEdit1-Text=s;break;case 1:LabeledEdit2-Text=s;break;case 2:LabeledEdit3-Text=s;break;case 3:LabeledEdit4-Text=s;break;case 4:LabeledEdit5-Text=s;break;case 5:LabeledEdit6-Text=s;FillDatabase();break;void _fastcall TComConnection:btshowClick(TObject *Sender)this-dymcshow = true;/-void _fastcall TComConnection:btdataopenClick(TObject *Sender)datain=true;/-void TComConnection:FillDatabase()if(datain)ADOQuery1-Connection = this-ADOConnection1;ADOQuery1-SQL-Clear();UnicodeString command = insert into SensorData(bmptemp,bmppress,sht1xtemp,sht1xhr,light,rain,time) values(:bmptemp,:bmppress,:sht1xtemp,:sht1xhr,:light,:rain,:time) ;this-ADOQuery1-SQL-Add(command);this-ADOQuery1-Parameters-ParamByName(bmptemp)-Value = this-LabeledEdit1-Text;this-ADOQuery1-Parameters-ParamByName(bmppress)-Value = this-LabeledEdit2-Text;this-ADOQuery1-Parameters-ParamByName(sht1xtemp)-Value = this-LabeledEdit3-Text;this-ADOQuery1-Parameters-ParamByName(sht1xhr)-Value = this-LabeledEdit4-Text;this-ADOQuery1-Parameters-ParamByName(light)-Value = this-LabeledEdit5-Text;this-ADOQuery1-Parameters-ParamByName(rain)-Value = this-LabeledEdit6-Text;this-ADOQuery1-Parameters-ParamByName(time)-Value = this-DateTimePicker1-DateTime.CurrentDateTime();this-ADOQuery1-ExecSQL();void _fastcall TComConnection:Timer1Timer(TObject *Sender)if(!dymcshow)return ;tryChart1-RemoveAllSeries(); / 清除Chart1上所有舊 SeriesChart1-View3D=True; / 不要 3D 立體Chart1-Legend-Visible=false; / 不秀圖例說明Chart1-Title-Text-Clear();Chart1-Title-Text-Add(传感器指标);Series1-Clear();Series1-ParentChart=Chart1;Series1-Marks-Visible=true; / 設定要提示說明/*int V; / valueString L; /Labelfor (int i = 1; i Add( V , L , clTeeColor );*/double a6 = StrToFloat(LabeledEdit1-Text),StrToFloat(LabeledEdit2-Text)/10000,StrToFloat(LabeledEdit3-Text),StrToFloat(LabeledEdit4-Text),StrToFloat(LabeledEdit5-Text),StrToFloat(LabeledEdit6-Text);UnicodeString b=LabeledEdit1-EditLabel-Caption,LabeledEdit2-EditLabel-Caption,LabeledEdit3-EditLabel-Caption,LabeledEdit4-EditLabel-Caption,LabeledEdit5-EditLabel-Caption,LabeledEdit6-EditLabel-Caption;for(int i=0;iAddXY(i*15,ai,bi,clTeeColor);catch(Exception &e)dymcshow = false;ShowMessage(显示图形失败,请检查串口);/-void _fastcall TComConnection:Button1Click(TObject *Sender) ADOQuery2-Connection = this-ADOConnection1; ADOQuery2-SQL-Clear(); UnicodeString command = select time as 时间 ,bmptemp as BMP温度,bmppress as BMP气压,sht1xtemp as SHT1温度,sht1xhr,light as 光强,rain as 雨量 from SensorData order by time desc; this-ADOQuery2-SQL-Add(command); this-ADOQuery2-Open(); this-DBGrid1-DataSource = this-DataSource1;/-void _fastcall TComConnection:Button4Click(TObject *Sender) ADOQuery2-Connection = this-ADOConnection1; ADOQuery2-SQL-Clear(); UnicodeString command = select time as 时间 ,bmptemp as BMP温度,bmppress as BMP气压,sht1xtemp as SHT1温度,sht1xhr,light as 光强,rain as 雨量 from SensorData where time=:stime and time ADOQuery2-SQL-Add(command); this-ADOQuery2-Parameters-ParamByName(stime)-Value = this-DateTimePicker2-DateTime; this-ADOQuery2-Parameters-ParamByName(etime)-Value = this-DateTimePicker3-DateTime; this-ADOQuery2-Open(); this-DBGrid1-DataSource = this-DataSource1;/-#define PG OlePropertyGet#define PS OlePropertySet#define FN OleFunction#define PR OleProcedurebool TComConnection:DBGrid2Excel(TDataSet *dataset, String filename) DeleteFile( filename );Variant excel = CreateOleObject(Excel.Application); tryVariant newxls = excel.PG(WorkBooks).FN(Add);int i;Variant v = 123; Variant vv = v.ChangeType(varOleStr);for ( i = 0; i Fields-Count; i+ ) v = dataset-Fields-Fieldsi-FieldName; vv = v.ChangeType(varOleStr); (excel.PG(Cells, 1, i+1).PS(Value, vv ); int row = 2; AnsiString pos; AnsiString tmp; Variant format = ; while( !dataset-Eof ) for ( i = 0; i Fields-Count; i+ ) (excel.PG(Cells, row, i+1).PR(Select); (excel.PG(Selection).PS(NumberFormat, format.ChangeType(varOleStr); v = dataset-Fields-Fieldsi-AsString; vv = v.ChangeType(varOleStr); (excel.PG(Cells, row, i+1).PS(Value, vv ); row+;dataset-Next(); Variant fn = filename; newxls.PR(SaveAs, fn.ChangeType(varOleStr) ); excel.OleFunction(Quit); catch(Exception& e) excel.OleFunction(Quit); int xx = 0; xx = xx; throw e; return true;void _fastcall TComConnection:Button5Click(TObject *Sender) if(this-DBGrid2Excel(DataSource1-DataSet,F:360data重要数据桌面传感器信息_)ShowMessage(导出数据成功!); elseShowMessage(导出失败,请检查相应程序!); /-void _fastcall TComConnection:Button6Click(TObject *Sender) hisc-Show();/-6.2 history(查看历史界面)/-#ifnde
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全指南试题及答案
- 共享出行平台信用体系构建与信用评级机制研究报告
- 农产品溯源2025年智慧农业与食品安全监管融合报告
- 安全实务试题及答案
- 金融衍生品市场2025年创新产品开发与风险管理体系研究报告
- 直播平台内容监管与自律发展对直播行业监管的创新报告
- 绿色建筑认证体系在绿色生态园区建设的应用与发展策略报告
- 月子中心医护培训课件
- 中国医药电子课件
- 消毒供应中心管理规范
- 计算流体力学完整课件
- 国开作业《监督学》形成性考核(三)参考(含答案)238
- 人因工程学课后习题及解答
- 供应商管理培训 课件
- 2022年广东省中考地理试卷(含答案)
- 机关档案管理工作培训课件
- 石材产品质量保证书
- 部编版五年级语文下册作文范文全套
- 衰老生物学ppt课件(PPT 57页)
- 企业部门单位工伤事故报告书
- 注塑模具皮纹制作知识简介课件
评论
0/150
提交评论