智能家居综合试验_第1页
智能家居综合试验_第2页
智能家居综合试验_第3页
智能家居综合试验_第4页
智能家居综合试验_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、山东微分电子科技有限公司 智能家居综合实验1山东微分电子科技有限公司目录目录1第一章综合实验21.智能家居21.1实验目的21.2实验环境21.3实验内容21.4实验原理21.4.5.实验步骤5附录23协议介绍23通讯格式23传输编码2425第一章 综合实验1.智能家居1.1实验目的通过对智能家居案例的学习,让学生充分认识物联网在智能家居的作用,充分了解并深入掌握光照,温度,湿度等各传感器的作用。1.2实验环境1. Microsoft Visual Studio 20102. Microsoft SQL Server 20083. 微分电子实验箱或实验台以及配套的C#SDK开发包 1.3实验内

2、容通过对光照、温度、湿度、火焰、燃气、烟雾等多种传感器的利用,实时采集光照、温度、湿度、火焰、燃气、烟雾等多种传感信息,进而与窗帘、空调、灯光、风扇等多种继电器和电机实施联动控制,可以配置报警记录,产生历史记录。显示报警记录,历史记录等信息。1.4实验原理1.系统背景电子信息的日益更新,控制技术的逐步提升,社会信息化的逐步加快,促使人们的生活、工作、学习以及通讯技术的关系日益紧密,信息化的社会在改变人们生活习惯和工作方式的同时,也对我们传统住宅提出了更高的要求,环视四周,我们很容易发现,人们对家居的要求早已不再时简单的物质空间,更为关注的是一个高度安全、舒适以及美观方便的居住环境,先进的通讯设

3、施,完备高效的信息终端,自动、智能的家电,网络化的资源管理及购物方式等等。现今社会人们日益膨胀的需求使得家居智能化已然成为一种趋势。2.系统功能概述系统结构图系统功能设计智能家居系统分为两个部分:实时的数据采集,包括对各地点的环境信息监控,与电机的联动配置,网络通讯的设置;数据记录查询,历史记录查询和报警记录查讯。厨房查询:监控厨房各传感器的信息值,进行用户的手动配置,以图表形式实时显示各传感器信息。客厅查询:监控客厅各传感器的信息值,进行用户的手动配置,以图表形式实时显示各传感器信息。卧室查询:监控卧室各传感器的信息值,进行用户的手动配置,以图表的形式实时显示各传感器信息。阈值设置:对客厅、

4、卧室的光照、温度、湿度的传感器信息进行阈值配置,判断是否进行电机联动和产生报警信息,从而在主界面进行反馈。历史查询:查询客厅,卧室,厨房历史记录信息,并在界面显示。报警查询:查询客厅,卧室,厨房报警记录信息,并在界面显示。退出系统:退出整个系统。4.数据库的设计通过数据库保存光照、温度、湿度、火焰、燃气、烟雾等传感器信息的数据信息,保存各传感器数据阈值的记录和对联动信息电机的状态的值,从而有利于用户对各传感器的故障排除和记录查询,保证家居环境的安全。数据库名称:SmartHome数据库表名:历史记录查询表 dbo.HistoryData字段数据类型主键描述允许为空HistoryIDInt是历史

5、记录ID否HistoryMinValueNvarchar(30)否历史记录的最小值否HistoryMaxValueNvarchar(30)否历史记录的最大值否SensorIDNvarchar(20)否传感器ID否SensorValueNvarchar(30)否传感器采集值否SensorCollectTimeDateTime否设备采集时间否数据库表名:地点表 dbo.Place字段数据类型主键描述允许为空placeNoNvarchar(20)是地点ID否PlaceNameNvarchar(30)否地点名称否数据库表名:传感器表dbo.SensorTable字段数据类型主键描述允许为空Sensor

6、NoNvarchar(20)是传感器编号否SensorTypeIDNvarchar(30)否传感器类型否SensorPlaceNonvarChar(20)否传感器采集地点编号否数据库表名:传感器类型表dbo.SensorType字段数据类型主键描述允许为空SensorTypeIDNvarchar(20)是传感器类型ID否SensorTypeNvarchar(30)否传感器类型否数据库表名:报警数据表dbo.WarningData字段数据类型主键描述允许为空WarnIDint是报警编号否WarnSensorIDNvarchar(20)否报警传感器ID否WarnValuefloat否产生报警采集值

7、否WarnlimitMinValuefloat否报警最小值阈值否WarnlimitMaxValuefloat否报警最大值阈值否WarnTimedateTime否报警值采集时间否WarnPlaceNoNvachar(20)否传感器所在地点否WarnInfoNtext否报警信息否数据库表名:传感器配置表 dbo.SensorConfig字段数据类型主描述允许为空SensorConfigIDint是配置编号否SensorIDNvarchar(20)否配置传感器ID否SensorPlaceIDNvarchar(20)否配置传感器ID否SensorConRealyIDNvarchar(20)否相关连的继

8、电器ID否SensorCollectValueFloat 否传感器采集值否SensorlimitMinValueFloat 否配置最小值阈值信息否SensorlimitMaxValueFloat 否配置最大值阈值信息否SensorAlarmInfoNvarchar(50)否传感器报警信息状态否SensorlimitSetTimedateTime 否配置阈值当前时间否数据库表名:继电器状态表 dbo.RealyStatus字段数据类型主键描述允许为空RealyIDNvarchar(20)是继电器类型ID否RealyNameNvarchar(30)否继电器类型否RealyStatusNvarcha

9、r(10)否继电器状态是1.4.5.实验步骤第一步 :网络参数的读取,界面效果如下:在【进入】时,由从XML文件读取的IP和Port配置,并ping IP地址,如果网络联通正常,将IP和端口号赋给各个窗体,进入【智能家居实时监控】/读取配置文件/实例化XMLDocument类 XmlDocument xmldoc = new XmlDocument(); /读取IPConfig文件 xmldoc.Load("IPConfig.xml");/读取节点 XmlNode nodeIP = xmldoc.SelectSingleNode("config/ip")

10、; XmlNode nodePort = xmldoc.SelectSingleNode("config/Port"); /判断信息正确与否,并给全部变量赋值 if (txtIP.Text = nodeIP.InnerText &&txtPort.Text=nodePort.InnerText) try /实例化ping类 Ping p = new Ping();/将所要ping的IP地址传到后台 PingReply reply = p.Send(txtIP.Text);/判断ping IP的状态 if (reply.Status = IPStatus.Su

11、ccess) MessageBox.Show("当前网络联通正常!"); else MessageBox.Show("当前网络联通异常或当前IP错误!"); catch (Exception ex) MessageBox.Show(ex.Message); FrmMain frmMa = new FrmMain(); frmMa.Show(); FrmDrawing.NetIP = nodeIP.InnerText; FrmDrawing.Port = nodePort.InnerText; FrmKitchen.NetIP = nodeIP.Inner

12、Text; FrmKitchen.Port = nodePort.InnerText; FrmRoom.NetIP = nodeIP.InnerText; FrmRoom.Port = nodePort.InnerText; FrmMain.NetIP = nodeIP.InnerText; FrmMain.Port = nodePort.InnerText; this.Hide(); else MessageBox.Show("输入的信息有误!"); 第二步 当IP与Port配置成功后,进入到【智能家居实时监控】,显示界面效果如下:在【智能家居实时监控】中,实时监测卧室的

13、环境信息,当网络配置正常时,自动进行联动控制主要功能代码(以卧室为例)如下:/读取配置文件 XmlDocument xmldoc = new XmlDocument(); xmldoc.Load("IPConfig.xml"); XmlNode nodeNetIP = xmldoc.SelectSingleNode("config/ip"); XmlNode nodePort = xmldoc.SelectSingleNode("config/Port");/判断IP和端口号 if (NetIP = nodeNetIP.InnerTe

14、xt && Port = nodePort.InnerText) try string light = sm.getLight("" + NetIP + "", "" + Port + "", "3", "", "", ""); lblRoomlight.Text = "卧室光照:“+light1 + "LX"int lightValue = int.Parse(light1); if (l

15、ightRoomlimitMaxValue >= lightRoomlimitMinValue) /显示设定的最小值 string strReadMinValue = "select SensorlimitMinValue from SensorConfig where SensorID='C0003_3'" /显示设定的最大 string strReadMaxValue = "select SensorlimitMaxValue from SensorConfig where SensorID='C0003_3'"

16、 /判断光照与阈值的关系,并进行联动操作 /判断光照值是否小于最小值,如果满足条件,打开灯光 if (int.Parse(SQLDBHelper.GetDataSet(strReadMinValue).Tables0.Rows0"SensorlimitMinValue".ToString() > lightValue) Roomlight.Visible = false; RoomlightRed.Visible = true;/判断联动电机的状态 String strRead = "SELECT RealyStatus,SensorID,SensorCon

17、RealyID FROM RealyStatus,SensorConfig where SensorConfig.SensorConRealyID=RealyStatus.RealyID and SensorID='C0003_3' and SensorConRealyID='S0001'" /如果LED灯状态为“关”,自动关闭LED灯,否则就打开LED if (SQLDBHelper.GetDataSet(strRead).Tables0.Rows0"RealyStatus".ToString() = "关")

18、 string close = sm.getOrSetSwitch("" + NetIP + "", "" + Port + "", "101", "", "", "", "3", "0"); else string open = sm.getOrSetSwitch("" + NetIP + "", "" + Port + "&

19、quot;, "101", "", "", "", "3", "1"); /判断光照度是否大于设定的最大值,如果满足,打开步进电机 else if (lightValue > int.Parse(SQLDBHelper.GetDataSet(strReadMaxValue).Tables0.Rows0"SensorlimitMaxValue".ToString() Roomlight.Visible = false; RoomlightRed.Vis

20、ible = true; string strRoomlight= "SELECT RealyStatus,SensorID,SensorConRealyID FROM RealyStatus,SensorConfig where SensorConfig.SensorConRealyID=RealyStatus.RealyID and SensorID='C0003_3' and SensorConRealyID='S0003'" /判断步进电机的状态if (SQLDBHelper.GetDataSet(strRoomlight).Tabl

21、es0.Rows0"RealyStatus".ToString() = "关") string close = sm.getOrSetStepMotor("" + NetIP + "", "" + Port + "", "104", "", "", "", "3", "0", 800); else string open = sm.getOrSetStepM

22、otor("" + NetIP + "", "" + Port + "", "104", "", "", "", "3", "1", 800); /如果条件都不满足,则将LED和步进电机都关闭 else Roomlight.Visible = true; RoomlightRed.Visible = false; string closeStep = sm.getOrSetStepMotor(&q

23、uot;" + NetIP + "", "" + Port + "", "104", "", "", "", "3", "0", 800); string closeMotor = sm.getOrSetSwitch("" + NetIP + "", "" + Port + "", "101", "

24、", "", "", "3", "0"); catch (Exception ex) Console.WriteLine(ex); 【厨房监测环境监控】,界面效果如下:对于厨房的环境,燃气,烟雾,火焰进行实时采集和显示,手动进行联动设置,例如:电机的开启与关闭。/获取燃气值,将数据保存到数据库 try string Gas = sm.getCombustibleGas("" + NetIP + "", "" + Port + "&quo

25、t;, "7", "", "", ""); /获取燃气值 lblGas.Text = Gas1; if (lblGas.Text != null && int.Parse(Gas1) > 0) /设置picSwitch 背景 picSwitch.ImageLocation = "picture/off.png" /将燃气值添加到数据库 string strSqlGas = "insert into HistoryData (HistoryMinValue,Hist

26、oryMaxValue,SensorID,SensorValue,SensorCollectTime)values('0','25','A0001_3','" + Gas1 + "','" + DateTime.Parse(time) + "')" SQLDBHelper.ExecuteNonQuery(strSqlGas); else picSwitch.ImageLocation = "picture/on.png" /从数据库读取信息,并绑

27、定在chart图表上 string strfindGas = "select TOP 100 SensorCollectTime,SensorValue from HistoryData where SensorID='A0001_3' order by(SensorCollectTime)desc" /声明数据类型为int的list List<int> listData = new List<int>(); /声明数据类型为string的list List<string> listDate = new List<s

28、tring>(); for (int i = 0; i < SQLDBHelper.GetDataSet(strfindGas).Tables0.Rows.Count; i+) / 从数据库读取数据,添加到list listData.Add(int.Parse(SQLDBHelper.GetDataSet(strfindGas).Tables0.Rowsi"SensorValue".ToString(); listDate.Add(SQLDBHelper.GetDataSet(strfindGas).Tables0.Rowsi"SensorCollec

29、tTime".ToString(); /绑定厨房燃气数据 chtKitChen.Series0.Points.DataBindXY(listDate, listData); catch (Exception ex) Console.WriteLine(ex); /获取厨房火焰数据,保存在数据库 try string flame = sm.getFire("" + NetIP + "", "" + Port + "", "156", "", "",

30、 ""); if (flame1 = "1") lblflame.Text = "有" lblflame.ForeColor = Color.Red; string strSqlflame = "insert into HistoryData (HistoryMinValue,HistoryMaxValue,SensorID,SensorValue,SensorCollectTime)values('0','100','A0001_2','火焰:有','

31、" + DateTime.Parse(time) + "')" SQLDBHelper.ExecuteNonQuery(strSqlflame); catch (Exception ex) Console.WriteLine(ex); /在窗体载入时开启线程threadCollect = new Thread(collect);threadCollect.Start();/定义变量 bool flag = false; /对于线程的方法 public void collect() flag = true; while (flag) try string t

32、emp = sm.getTemperature("" + NetIP + "", "" + Port + "", "1", "", "", ""); lblTemp.Text = temp1; /将数据添加到历史记录表 string strSqlTemp = "insert into HistoryData(HistoryMinValue,HistoryMaxValue,SensorID,SensorValue,SensorC

33、ollectTime) values('" + FrmMain.templimitMinValue + "','" + FrmMain.templimitMaxValue + "','B0002_1','" + lblTemp.Text + "','" + DateTime.Parse(time) + "')" SQLDBHelper.ExecuteNonQuery(strSqlTemp); /从数据库读取信息,将数据绑定到c

34、hart图表 string strfindtemp = "select TOP 100 SensorCollectTime,SensorValue from HistoryData where SensorID='B0002_1' order by(SensorCollectTime)desc" /定义数据类型为int的list List<int> listData = new List<int>(); /定义数据类型为string的list List<string> listDate = new List<stri

35、ng>(); for (int i = 0; i < SQLDBHelper.GetDataSet(strfindtemp).Tables0.Rows.Count; i+) if (int.Parse(SQLDBHelper.GetDataSet(strfindtemp).Tables0.Rowsi"SensorValue".ToString() > 0) /将获得数据添加到list listData.Add(int.Parse(SQLDBHelper.GetDataSet(strfindtemp).Tables0.Rowsi"SensorVal

36、ue".ToString(); listDate.Add(SQLDBHelper.GetDataSet(strfindtemp).Tables0.Rowsi"SensorCollectTime".ToString(); /通过委托传递参数this.Invoke(new Action() => lblTemp.Text = temp1;/绑定客厅温度到chart图表 chtLivingwt.Series0.Points.DataBindXY(listDate, listData); ); catch (Exception ex) Console.WriteLi

37、ne(ex); 【客厅监测环境监控】,界面效果如下:监测客厅的环境信息(这里指温度),保存到数据库,并将数据绑定到chart图表,手动进行联动电机的开启与关闭。/在窗体载入时开启线程threadCollect = new Thread(collect);threadCollect.Start();/定义变量 bool flag = false; /对于线程的方法 public void collect() flag = true; while (flag) try string temp = sm.getTemperature("" + NetIP + "&quo

38、t;, "" + Port + "", "1", "", "", ""); lblTemp.Text = temp1; /将数据添加到历史记录表 string strSqlTemp = "insert into HistoryData(HistoryMinValue,HistoryMaxValue,SensorID,SensorValue,SensorCollectTime) values('" + FrmMain.templimitMinValu

39、e + "','" + FrmMain.templimitMaxValue + "','B0002_1','" + lblTemp.Text + "','" + DateTime.Parse(time) + "')" SQLDBHelper.ExecuteNonQuery(strSqlTemp); /从数据库读取信息,将数据绑定到chart图表 string strfindtemp = "select TOP 100 SensorCo

40、llectTime,SensorValue from HistoryData where SensorID='B0002_1' order by(SensorCollectTime)desc" /定义数据类型为int的list List<int> listData = new List<int>(); /定义数据类型为string的list List<string> listDate = new List<string>(); for (int i = 0; i < SQLDBHelper.GetDataSet(s

41、trfindtemp).Tables0.Rows.Count; i+) if (int.Parse(SQLDBHelper.GetDataSet(strfindtemp).Tables0.Rowsi"SensorValue".ToString() > 0) /将获得数据添加到list listData.Add(int.Parse(SQLDBHelper.GetDataSet(strfindtemp).Tables0.Rowsi"SensorValue".ToString(); listDate.Add(SQLDBHelper.GetDataSet(

42、strfindtemp).Tables0.Rowsi"SensorCollectTime".ToString(); /通过委托传递参数this.Invoke(new Action() => lblTemp.Text = temp1;/绑定客厅温度到chart图表 chtLivingwt.Series0.Points.DataBindXY(listDate, listData); ); catch (Exception ex) Console.WriteLine(ex); (注意:由于数据需要从数据库中读取,可能数据获取比较慢)对chart的设置主要代码:/设置温度图表

43、样式/设置chart标题 chtLivingwt.Titles.Add("客厅温湿度监控"); /实例化图表区 ChartArea ca = new ChartArea("图表区");/实例化图表序列seTemp = new Series("温度");/设置图表序列样式 seTemp.ChartType = SeriesChartType.Spline; /将温度的图表序列添加到图表区 seTemp.ChartArea = ca.Name; /图表ca添加到图表区 chtLivingwt.ChartAreas.Add(ca); /将温

44、度seTemp的图表序列添加到图表序列chtLivingwt.Series.Add(seTemp); /设置图表序列样条线的宽度chtLivingwt.Series0.BorderWidth = 2; /设置X轴主题 chtLivingwt.ChartAreas0.AxisX.Title = "时间:( /s)" /设置Y轴主题chtLivingwt.ChartAreas0.AxisY.Title = "单位:" 【卧室环境实时监控】,界面效果如下:注:代码及注释请参考“客厅环境监控”【智能家居控制区】,界面效果如下:将配置的电机,继电器的状态,是否报警

45、等信息在界面显示,同时并更改数据库数据的状态。主要代码如下(以客厅光照为例):/设置客厅光照/窗体载入判断数据记录是否存在,如果存在,则不插入数据,否则就将数据记录插入到数据库 string sqlRead = " select count(*)as Count from SensorConfig where SensorID='B0002_3' "/如果数据不存在 if (int.Parse(SQLDBHelper.GetDataSet(sqlRead).Tables0.Rows0"Count".ToString() <= 1)

46、string time = DateTime.Now.ToLocalTime().ToString(); string strSqlIns = "insert into SensorConfig values('5','B0002_3','B10002','S0001','" + txtLivinglight.Text + "','" + txtlivinglightMinVa.Text + "','" + txtlivinglig

47、htMaxVa.Text + "','否','" + time + "')" SQLDBHelper.ExecuteNonQuery(strSqlIns); string strSqlSec = "insert into SensorConfig values('6','B0002_3','B10002','S0003','" + txtLivinglight.Text + "','" +

48、 txtlivinglightMinVa.Text + "','" + txtlivinglightMaxVa.Text + "','否','" + time + "')" SQLDBHelper.ExecuteNonQuery(strSqlSec); else Console.WriteLine("该记录已存在!"); /判断低温报警是否被选中 string strReadWarn1 = "SELECT SensorAlarmInfo FROM SensorConfig where SensorConfigID='5'" if (SQLDBHelper.GetDataSet(strReadWarn1).Tables0.Rows0"SensorAlarmInfo".ToString() = "否") cblivinglightPolice1.Checked = fals

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论