嵌入式課程設計--基于嵌入式系統(tǒng)的傳感器環(huán)境檢測_第1頁
嵌入式課程設計--基于嵌入式系統(tǒng)的傳感器環(huán)境檢測_第2頁
嵌入式課程設計--基于嵌入式系統(tǒng)的傳感器環(huán)境檢測_第3頁
嵌入式課程設計--基于嵌入式系統(tǒng)的傳感器環(huán)境檢測_第4頁
嵌入式課程設計--基于嵌入式系統(tǒng)的傳感器環(huán)境檢測_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、嵌入式系統(tǒng)軟件開發(fā)課程設計報告題 目: 基于嵌入式系統(tǒng)的傳感器環(huán)境檢測 學 院: 物理與電子信息工程學院 專業(yè): 計算機科學與技術 班級: 10計本 姓 名: 左凌軒 學 號: 10110013151 指導老師: 徐玉 完成日期: 2013.3.30 目錄摘 要IAbstractII第一章設計目的31.1 掌握STM32嵌入式系統(tǒng)各功能模塊的使用方法。31.2 掌握SHT1x溫濕度傳感器、BMP085氣壓傳感器、GL5528光敏電阻、雨量傳感器的數(shù)據(jù)采集與處理方法。31.3 掌握嵌入式系統(tǒng)上位機軟件的實現(xiàn)方法。3第二章 課程設計要求32.1嵌入式系統(tǒng)要求32.2上位機要求3第三章 系統(tǒng)原理33

2、.1硬件電路33.2 SHT1x溫濕度傳感器43.3 BMP085氣壓傳感器43.4GL5528光敏電阻43.5雨量傳感器5第四章 系統(tǒng)開發(fā)步驟54.1開發(fā)板模塊初始配置54.2傳感器模塊初始配置54.3 UI、傳感器數(shù)據(jù)讀取顯示以及串口傳輸54.4上位機串口軟件編寫以及測試64.5 整體測試和調(diào)試8第五章 總結11第六章 附錄126.1 Comopeator(主界面)126.2 history(查看歷史界面)222摘 要設計多傳感器實現(xiàn)環(huán)境質量檢測的多功能、實時數(shù)據(jù)保存以及查看,有利于各個領域在環(huán)境方面的檢測和測試,方便在環(huán)境相應參數(shù)的調(diào)查和研究。本文采用Stm32開發(fā)版、BMP085、SH

3、T1X、光強、雨量等靈敏度較高的先進傳感器分別檢測溫度、氣壓、濕度、光強、雨量,并在上位機中用C+實現(xiàn)實時顯示和數(shù)據(jù)庫的保存。從設計中,各種檢測和數(shù)據(jù)挖掘明顯趨于簡單。關鍵詞: 傳感器 檢測 數(shù)據(jù) 注:上位機關鍵代碼見附錄Abstract.Key Words:第一章 設計目的1.1 掌握STM32嵌入式系統(tǒng)各功能模塊的使用方法。1.2 掌握SHT1x溫濕度傳感器、BMP085氣壓傳感器、GL5528光敏電阻、雨量傳感器的數(shù)據(jù)采集與處理方法。1.3 掌握嵌入式系統(tǒng)上位機軟件的實現(xiàn)方法。第二章 課程設計要求2.1 嵌入式系統(tǒng)要求2.1.1、SHT1x溫濕度傳感器的信息采集與處理2.1.2、BMP0

4、85氣壓傳感器的信息采集與處理2.1.3、基于GL5528光敏電阻的亮度信息采集與處理2.1.4、雨量傳感器的數(shù)據(jù)采集與處理2.1.5、傳感器信息的LCD顯示界面設計2.1.6、串口通訊程序與相應通訊協(xié)議設計與實現(xiàn)2.2 上位機要求2.2.1、 傳感器信息的顯示2.2.2、 串口配置(串口號、波特率的選擇)2.2.3、 傳感信息的數(shù)據(jù)庫保存2.2.4、 數(shù)據(jù)庫信息的可視化顯示 第三章 系統(tǒng)原理3.1硬件電路本課程設計涉及的環(huán)境監(jiān)測系統(tǒng)在STM32嵌入式實驗教學系統(tǒng)的基礎上實現(xiàn),相關的硬件原理圖如下圖所示(圖1)3.2 SHT1x溫濕度傳感器SHT1x溫濕度傳感器是應用非常廣泛一類環(huán)境傳感器,可

5、以數(shù)字形式提供14位分辨率的溫度信息與12位分辨率的相對濕度信息。該傳感器提供專用的同步半雙工串行接口向CPU傳送采集的傳感信息,其時鐘信號連接STM32的PC14端口,數(shù)據(jù)信號連接STM32的PA9端口。STM32利用GPIO口模擬SHT1x專用的串口通訊協(xié)議以實現(xiàn)傳感信息采集。3.3 BMP085氣壓傳感器BMP085是Bosch公司推出的一款絕對壓力傳感器,可以數(shù)字形式提供16-19位分辨率的絕對壓力信息與16位分辨率的溫度信息。STM32利用I2C1與該傳感器通訊,PB6端口連接其時鐘信號,PB7連接其數(shù)據(jù)信號。3.4 GL5528光敏電阻光敏電阻的阻值隨著亮度的提升而降低,基于此原理

6、可利用上圖所示電路中的電阻分壓電路檢測光敏電阻的阻值,進而根據(jù)阻值與亮度的關系計算環(huán)境中的光照強度。3.5 雨量傳感器雨量傳感器由一系列互不連通的導線構成,當雨滴落到各導線上,由于水的導電作用雨量傳感器的電阻會降低,阻值隨著雨滴增多而降低,基于此原理可利用上圖所示的電路中的分壓電路檢測雨量傳感器的阻值,進而判斷雨量大小。 第四章 系統(tǒng)開發(fā)步驟4.1開發(fā)板模塊初始配置void RCC_Configuration(void);void SysTick_Configuration(void);/系統(tǒng)時鐘初始化void GPIO_Configuration(void);/管腳初始化void EXTI_

7、Configuration(void);/中斷處理void NVIC_Configuration(void);/優(yōu)先級響應初始化void ADC_Configuration(void); /數(shù)模轉換以及模數(shù)轉換void DAC_Configuration(void);void USART_Configuration(void);/串口模塊初始化void TIM_Configuration(void);/void I2C_Configuration(void);/數(shù)據(jù)總線初始化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);/獲取雨量數(shù)值4.3 UI、傳感器數(shù)據(jù)讀取顯示以及串口傳輸4.3.1 UI設置 Key1按下選擇查看的項目,Key2按下確認進入查看的項目實時圖形設置,Key3退出當前的頁面(只在查看實時顯示時有效)。4.3.2數(shù)據(jù)讀取void getall();/讀取所有數(shù)據(jù)void s

10、ettingdetail();/設置單個讀取信息void DiscribeLine();/UI畫圖函數(shù)4.4上位機串口軟件編寫以及測試本組采取的是C+ Builder IDE下的軟件編寫,在串口通訊方面使用了Victor串口通訊控件、EXCLE導出控件、以及自編注冊表自動獲取控件、Chart查看顯性實時圖像信息,以及數(shù)據(jù)庫連接和數(shù)據(jù)庫的存儲(其中使用了SQLserver數(shù)據(jù)庫及其觸發(fā)器編程)。4.4.1對應串口設置固定波特率為:9600自動搜索串口(從上位機注冊表讀?。?ComX4.4.2圖像實時顯示4.4.3數(shù)據(jù)庫保存4.4.3歷史數(shù)據(jù)查看以及到處生成EXCEL4.4.5歷史數(shù)據(jù)圖像顯示4.

11、5 整體測試和調(diào)試第五章 總結從上述設計中,本文順利地解決了嵌入式系統(tǒng)的設計與編碼,上位機的界面設計以及算法設計與編碼,即可以簡單快捷地使用此設計作為環(huán)境檢測的標準。同時在設計的過程中遇到了許多困難和疑惑,但是在不懈努力與堅持下,本組組員都得以克服。最后讓組員收獲頗多。第六章 附錄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; /使用超時的方法識別每幀數(shù)

22、據(jù)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); /十六進制字符串轉成字節(jié) else /還剩下最后一個字節(jié) t = s;s = ""BuffernBytes+ = wcstol(t.w_str(), &EndPtr, 16); /十六進制字符串轉成字節(jié) 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) /收到數(shù)據(jù)的字節(jié)數(shù) 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 里顯示出收到的數(shù)據(jù), 將會是完整的一幀數(shù)據(jù) /-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 未能將轉義符轉義,致使注冊表打開失敗,經(jīng)過修改隨即可行。*/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重要數(shù)據(jù)桌面?zhèn)鞲衅餍畔")ShowMessage("導出數(shù)據(jù)成功!"); 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論