




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、嵌入式系統軟件開發課程設計報告題 目: 基于嵌入式系統的傳感器環境檢測 學 院: 物理與電子信息工程學院 專業: 計算機科學與技術 班級: 10計本 姓 名: 左凌軒 學 號: 10110013151 指導老師: 徐玉 完成日期: 2013.3.30 目錄摘 要IAbstractII第一章設計目的31.1 掌握STM32嵌入式系統各功能模塊的使用方法。31.2 掌握SHT1x溫濕度傳感器、BMP085氣壓傳感器、GL5528光敏電阻、雨量傳感器的數據采集與處理方法。31.3 掌握嵌入式系統上位機軟件的實現方法。3第二章 課程設計要求32.1嵌入式系統要求32.2上位機要求3第三章 系統原理33
2、.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、SH
3、T1X、光強、雨量等靈敏度較高的先進傳感器分別檢測溫度、氣壓、濕度、光強、雨量,并在上位機中用C+實現實時顯示和數據庫的保存。從設計中,各種檢測和數據挖掘明顯趨于簡單。關鍵詞: 傳感器 檢測 數據 注:上位機關鍵代碼見附錄Abstract.Key Words:第一章 設計目的1.1 掌握STM32嵌入式系統各功能模塊的使用方法。1.2 掌握SHT1x溫濕度傳感器、BMP085氣壓傳感器、GL5528光敏電阻、雨量傳感器的數據采集與處理方法。1.3 掌握嵌入式系統上位機軟件的實現方法。第二章 課程設計要求2.1 嵌入式系統要求2.1.1、SHT1x溫濕度傳感器的信息采集與處理2.1.2、BMP0
4、85氣壓傳感器的信息采集與處理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溫濕度傳感器是應用非常廣泛一類環境傳感器,可
5、以數字形式提供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光敏電阻光敏電阻的阻值隨著亮度的提升而降低,基于此原理
6、可利用上圖所示電路中的電阻分壓電路檢測光敏電阻的阻值,進而根據阻值與亮度的關系計算環境中的光照強度。3.5 雨量傳感器雨量傳感器由一系列互不連通的導線構成,當雨滴落到各導線上,由于水的導電作用雨量傳感器的電阻會降低,阻值隨著雨滴增多而降低,基于此原理可利用上圖所示的電路中的分壓電路檢測雨量傳感器的阻值,進而判斷雨量大小。 第四章 系統開發步驟4.1開發板模塊初始配置void RCC_Configuration(void);void SysTick_Configuration(void);/系統時鐘初始化void GPIO_Configuration(void);/管腳初始化void EXTI_
7、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,
8、 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
9、_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 s
10、ettingdetail();/設置單個讀取信息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.
11、5 整體測試和調試第五章 總結從上述設計中,本文順利地解決了嵌入式系統的設計與編碼,上位機的界面設計以及算法設計與編碼,即可以簡單快捷地使用此設計作為環境檢測的標準。同時在設計的過程中遇到了許多困難和疑惑,但是在不懈努力與堅持下,本組組員都得以克服。最后讓組員收獲頗多。第六章 附錄6.1 Comopeator(主界面)/-#ifndef ComOpeatorH#define ComOpeatorH/-#include <Classes.hpp>#include <Controls.hpp>#include <StdCtrls.hpp>#include <
12、;Forms.hpp>#include "YbCommDevice.h"#include <ExtCtrls.hpp>#include <Registry.hpp>#include <DB.hpp>#include <DBTables.hpp>#include "Chart.hpp"#include "Series.hpp"#include "TeEngine.hpp"#include "TeeProcs.hpp"#include <A
13、DODB.hpp>#include <ComCtrls.hpp>#include <DBGrids.hpp>#include <Grids.hpp>#include <ExtCtrls.hpp>#include <sysvari.h>#include <Provider.hpp>#include <comobj.hpp>#include <jpeg.hpp>#include <Dialogs.hpp>/-class TComConnection : public TForm_pub
14、lished:/ 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 *LabeledE
15、dit6;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;TADOQ
16、uery *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 B
17、utton3Click(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 *Sen
18、der);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_fastcal
19、l TComConnection(TComponent* Owner);void FillInfo(int varity , UnicodeString s);void FillDatabase();bool DBGrid2Excel(TDataSet *dataset, String filename);/-extern PACKAGE TComConnection *ComConnection;/-#endif/-#include <vcl.h>#pragma hdrstop#include "ComOpeator.h"#include "his.
20、h"/-#pragma package(smart_init)#pragma link "YbCommDevice"#pragma link "Chart"#pragma link "Series"#pragma link "TeEngine"#pragma link "TeeProcs"#pragma resource "*.dfm"TComConnection *ComConnection;/-_fastcall TComConnection:TComConne
21、ction(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; /使用超時的方法識別每幀數
22、據YbCommDevice1->UsePackage = true; /啟動 PackageButton2->Caption="關閉串口"elseYbCommDevice1->Active = false;Button2->Caption="打開串口"catch(Exception &e)ShowMessage("打開串口失敗,請先選擇自動或檢查串口是否正確接入。");comStatus = !comStatus;/-/*void _fastcall TComConnection:Button1Clic
23、k(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(' '); /空格
24、 if(p>0) 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 TC
25、omConnection:YbCommDevice1Package(TObject *Sender, int NotifyType)unsigned char Buf1000; /接收緩存int n = YbCommDevice1->ReadPackage(Buf,100);int varity = -1;if(n>0) /收到數據的字節數 UnicodeString s;for(int i=0; i<n; i+)if(Bufi = 0xff) Memo1->Lines->Add(s); if(varity >=0) FillInfo(varity,s);
26、s="" continue;else if(Bufi >=0xa0 && Bufi<=0xa5)varity = Bufi-0xa0;continue;s += (char)(Bufi); /Memo1->Lines->Add(s); /在 Memo1 里顯示出收到的數據, 將會是完整的一幀數據 /-void _fastcall TComConnection:Button3Click(TObject *Sender)tryTRegistry *reg = new TRegistry(KEY_READ);TStringList *str
27、list = new TStringList;reg->RootKey = HKEY_LOCAL_MACHINE;/*2013-1-26 未能將轉義符轉義,致使注冊表打開失敗,經過修改隨即可行。*/reg->OpenKeyReadOnly("HARDWAREDEVICEMAPSERIALCOMM");reg->GetValueNames(strlist);cbb_com->Clear();for( int i=0; i<strlist->Count;i+ )strlist->Stringsi = reg->ReadString
28、(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 /*串口號的形式是COM
29、C,其中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)ShowMe
30、ssage("自動搜索串口失敗,請檢查串口是否正確接入。");/-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
31、;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 _fa
32、stcall 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) va
33、lues(: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")
34、->Value = this->LabeledEdit2->Text;this->ADOQuery1->Parameters->ParamByName("sht1xtemp")->Value = this->LabeledEdit3->Text;this->ADOQuery1->Parameters->ParamByName("sht1xhr")->Value = this->LabeledEdit4->Text;this->ADOQuery1->Par
35、ameters->ParamByName("light")->Value = this->LabeledEdit5->Text;this->ADOQuery1->Parameters->ParamByName("rain")->Value = this->LabeledEdit6->Text;this->ADOQuery1->Parameters->ParamByName("time")->Value = this->DateTimePicker
36、1->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->T
37、ext->Clear();Chart1->Title->Text->Add("傳感器指標");Series1->Clear();Series1->ParentChart=Chart1;Series1->Marks->Visible=true; / 設定要提示說明/*int V; / valueString L; /Labelfor (int i = 1; i <= 8; i+)V=i; / Series 值L="V"+IntToStr(i); / 軸名稱Series1->Add( V , L ,
38、 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,Labeled
39、Edit2->EditLabel->Caption,LabeledEdit3->EditLabel->Caption,LabeledEdit4->EditLabel->Caption,LabeledEdit5->EditLabel->Caption,LabeledEdit6->EditLabel->Caption;for(int i=0;i<6;i+)Series1->AddXY(i*15,ai,bi,clTeeColor);catch(Exception &e)dymcshow = false;ShowMessa
40、ge("顯示圖形失敗,請檢查串口");/-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 光強,ra
41、in 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; ADOQu
42、ery2->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 <=:etime order by time desc" this->ADOQuery2->SQL->Add(command); this->A
43、DOQuery2->Parameters->ParamByName("stime")->Value = this->DateTimePicker2->DateTime; this->ADOQuery2->Parameters->ParamByName("etime")->Value = this->DateTimePicker3->DateTime; this->ADOQuery2->Open(); this->DBGrid1->DataSource = this-
44、>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(&q
45、uot;WorkBooks").FN("Add");int i;Variant v = "123" Variant vv = v.ChangeType(varOleStr);for ( i = 0; i < dataset->Fields->Count; i+ ) v = dataset->Fields->Fieldsi->FieldName; vv = v.ChangeType(varOleStr); (excel.PG("Cells", 1, i+1).PS("Value&q
46、uot;, vv ); int row = 2; AnsiString pos; AnsiString tmp; Variant format = "" while( !dataset->Eof ) for ( i = 0; i < dataset->Fields->Count; i+ ) (excel.PG("Cells", row, i+1).PR("Select"); (excel.PG("Selection").PS("NumberFormat", format.
47、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("Q
48、uit"); 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("導出數據成功!"); elseShow
49、Message("導出失敗,請檢查相應程序!"); /-void _fastcall TComConnection:Button6Click(TObject *Sender) hisc->Show();/-6.2 history(查看歷史界面)/-#ifndef hisH#define hisH/-#include <Classes.hpp>#include <Controls.hpp>#include <StdCtrls.hpp>#include <Forms.hpp>#include <ComCtrls.hpp>#include "Chart.hpp"#include "TeEngine.hpp"#include "TeeProcs.hpp"#include <ExtCtrls.hpp>#include "Ser
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新目標引領新未來
- 《測控一體化閘門安裝及驗收規程》(征求意見稿)編制說明
- 2025年教育培訓行業品牌塑造與市場推廣策略研究報告:品牌區塊鏈營銷策略
- 2025年運動醫學醫療市場增長動力報告:技術創新趨勢下的市場前景
- 醫藥流通行業供應鏈優化與成本控制2025年競爭格局分析報告
- 元宇宙社交平臺用戶行為洞察報告:2025年用戶體驗優化與瓶頸解析
- 探索廢棄礦井資源再利用與綠色發展協同推進模式
- 2025年綠色金融發展趨勢與投資策略研究報告
- 2025年互聯網醫療平臺在線問診醫療服務質量監控報告
- 2025年潮流玩具市場分析報告:收藏價值與文化傳承深度挖掘
- 2025年安徽省中考數學試卷真題(含標準答案)
- 高級記者考試試題及答案
- 2025年福建日報新聞發展有限公司招聘題庫帶答案分析
- 2025國家開放大學《高級財務會計》期末機考題庫
- 2025年浙江寧波大劇院文化發展有限公司招聘筆試參考題庫附帶答案詳解
- 新疆開放大學2025年春《國家安全教育》形考作業1-4終考作業答案
- GB/T 17775-2024旅游景區質量等級劃分
- 保安管理制度與應急預案
- 《活板》同步練習及答案
- 化學品安全技術說明(膠水)
- 動物簡筆畫各種小動物簡(課堂PPT)
評論
0/150
提交評論