ZYL太原理工物联网大三课程设计实验报告环境监测.docx

上传人:b****2 文档编号:17763681 上传时间:2023-08-03 格式:DOCX 页数:18 大小:185.30KB
下载 相关 举报
ZYL太原理工物联网大三课程设计实验报告环境监测.docx_第1页
第1页 / 共18页
ZYL太原理工物联网大三课程设计实验报告环境监测.docx_第2页
第2页 / 共18页
ZYL太原理工物联网大三课程设计实验报告环境监测.docx_第3页
第3页 / 共18页
ZYL太原理工物联网大三课程设计实验报告环境监测.docx_第4页
第4页 / 共18页
ZYL太原理工物联网大三课程设计实验报告环境监测.docx_第5页
第5页 / 共18页
ZYL太原理工物联网大三课程设计实验报告环境监测.docx_第6页
第6页 / 共18页
ZYL太原理工物联网大三课程设计实验报告环境监测.docx_第7页
第7页 / 共18页
ZYL太原理工物联网大三课程设计实验报告环境监测.docx_第8页
第8页 / 共18页
ZYL太原理工物联网大三课程设计实验报告环境监测.docx_第9页
第9页 / 共18页
ZYL太原理工物联网大三课程设计实验报告环境监测.docx_第10页
第10页 / 共18页
ZYL太原理工物联网大三课程设计实验报告环境监测.docx_第11页
第11页 / 共18页
ZYL太原理工物联网大三课程设计实验报告环境监测.docx_第12页
第12页 / 共18页
ZYL太原理工物联网大三课程设计实验报告环境监测.docx_第13页
第13页 / 共18页
ZYL太原理工物联网大三课程设计实验报告环境监测.docx_第14页
第14页 / 共18页
ZYL太原理工物联网大三课程设计实验报告环境监测.docx_第15页
第15页 / 共18页
ZYL太原理工物联网大三课程设计实验报告环境监测.docx_第16页
第16页 / 共18页
ZYL太原理工物联网大三课程设计实验报告环境监测.docx_第17页
第17页 / 共18页
ZYL太原理工物联网大三课程设计实验报告环境监测.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

ZYL太原理工物联网大三课程设计实验报告环境监测.docx

《ZYL太原理工物联网大三课程设计实验报告环境监测.docx》由会员分享,可在线阅读,更多相关《ZYL太原理工物联网大三课程设计实验报告环境监测.docx(18页珍藏版)》请在冰点文库上搜索。

ZYL太原理工物联网大三课程设计实验报告环境监测.docx

ZYL太原理工物联网大三课程设计实验报告环境监测

课程设计

课程名称:

物联网感知课程设计

设计名称:

环境监测系统

专业班级:

物联1403学号:

2014002091

学生姓名:

赵羽龙

指导教师:

呼克佑

2016年12月23日

太原理工大学课程设计任务书

学生姓名

赵羽龙专业班级

物联1403

课程名称

物联网感知课程设计

设计名称

环境监测系统

设计周数2

设计任务主要设计参数

运用已学的编程工具及物联网实验箱设计一个《环境监测》系统,该系统可实现如下功能:

1.读取环境的温度、湿度通过串口通信,读取至电脑程序界面显示。

2.根据在程序界面设置温度、湿度的上下限值,完成显示相应的温湿度调节机器的工作状态。

3.将监测到的温湿度值保存至文本文件。

设计的基本要求如下:

(1)选择合适的传感器来完成温度、湿度数据的采集。

(2)制作相应的显示界面,将采集的变量值实时显示设计的扩展要求如下:

判断温度过高过低、湿度过高过低时,通过电机控制空调、加湿器的启停。

设计内容设计要求

1、收集技术资料:

理解设计任务、查阅相关资料、搭建开发平台。

2、确定总体设计思想:

方案论证比较、确定总体设计方案。

3、感知层和传输层的设计:

感知模块的选择、传输模式与接口程序的设计。

4、应用层的设计:

各模块的功能说明、程序流程、代码编写。

5、系统调试与运行:

验证各项功能的实现。

6、书写设计报告:

按照课程设计报告的要求,编写设计报告。

主要参考资料

1、徐勇军.物联网实验教程.北京:

机械工业出版社.2011

2、李刚.疯狂JAVA讲义.电子工业出版社。

2016

3、KathySierra&BertBates.HeadFirs中t.国电力出版社.2016

学生提交归档文件

封面—任务书—目录—课程设计报告-参考文献

注:

1.课程设计完成后,学生提交的归档文件应按照:

封面—任务书—说明书—图纸的顺序进行装订上交(大张图纸不必装订)。

2.可根据实际内容需要续表,但应保持原格式不变。

指导教师签名:

日期:

一.功能分析

二.概要设计

1.系统组成

2.传感器选型

三.详细设计

1.硬件连接

2.程序设计

3.界面设计

四.系统说明

五.设计总结

1

1

1

1

1

1

1

3

3

4

4..

六.附录

程序设计课程设计报告

专业:

物联网工程班级:

1403姓名:

赵羽龙学号:

2014002091完成日期:

2016/12/23题目:

设计一个环境监测系统。

一.功能分析

环境监测系统主要包括对环境变量的采集和显示。

(1)选择合适的传感器来完成温度、湿度数据的采集。

(2)制作相应的显示界面,将采集的变量值实时显示。

(3)扩展功能:

判断温度过高过低、湿度过高过低时,通过电机控制空调、加湿器的启停。

二.概要设计1.系统组成

系统大体组成包括:

传感器模块、数据传送模块和电机控制模块。

系统框图如图1所示。

由于传感器模块没有外接电路,因此需要通过中间的协调器将数据转为串口形式发送到PC机上。

图1系统框图

2.传感器选型

选择SHT10单片数字温湿度传感器来监测环境。

SHT10采用CMOSens专利技术将温度湿度传感器、A/D转换器及数字接口无缝结合,使传感器具有体积小、响应速度快、接口简单、性价比高等特点。

电路连接时,接口简单,两线连接,SHT10的两线串行接口(bidirectional2-wire)在传感器信号读取和电源功耗方面都做了优化处理,其总线类似I2C总线但并不兼容I2C总线。

三.详细设计1.硬件连接

SHT10共有4个引脚,除了电源和地,数据和时钟引脚分别连接单片机P06、P07。

图2系统硬件框图

2.程序设计

IO口功能选择

(1)端口初始化程序staticvoidGPIOInit(void)

P0SEL&=~(1<<6);//时钟接口初始化,

P0DIR|=(1<<6);//IO口方向选择P0SEL&=~(1<<7);//数据接口初始化

P0DIR|=(1<<7);//IO口方向选择

}功能:

初始化SHT10接口;入口参数:

无;返回值:

(2)传感器采集程序

staticuint16ReadSHT10(uint8param){

doubletemp;

uint8i;

uint16result;uint16SORH=0;DATA_OUTPUT;DATA_HIGH;SCK_OUTPUT;SCK_LOW;

//通讯复位

for(i=0;i<10;i++)SCK_HIGH;MicroWait(30);SCK_LOW;MicroWait(30);

}

功能:

读取SHT10的温湿度值;入口参数:

0x00,温度;0x01,湿度;返回值:

温湿度值。

图3传感器工作时序图

SHT10工作时,要通过SCK引脚模拟时序来完成,因此,读传感器的数据时,需要单片机控制SCK产生一系列时序,配合DATA的变化以完成温湿度的数据采集。

对于采集到的湿度值需要通过以下的公式进行换算:

同样,温度值要经过以下换算,才能得到实际值,这些都在传感器的读写程序里完成

3.界面设计

(1)选择eclipse软件工具,建立工程。

(2)设计显示界面。

选用java的swing、awt组件设计界面。

界面采用flowlayout与gridlayout嵌套布局。

按照环境监测系统功能的需要添加组件。

四.系统说明本系统搭建了一个温湿度的采集显示环境,能够采集周围环境中的温度、湿度值,并且实时在PC机上显示。

PC机实时显示界面如图:

五.设计总结

系统采用SHT10单片数字温湿度传感器将温湿度采集集成在一起,数据的读取要采用时序控制来进行。

采集变量的实时显示由JAVA编制界面来完成。

我负责界面的设计和功能的实现。

首先选择eclipse软件工具,建立工程。

选用java的swing、awt组件设计界面。

根据功能需求将界面采用flowlayout与gridlayout嵌套布局。

按照环境监测系统功能的需要添加组件。

1.建立一个窗体,采用flowlayout布局。

2.添加一个标签,当作程序名称添加至窗体的North。

期间学习了设置文字的大小颜色。

3.将Center采用gridlayout,分为一行两列。

分别在两列中添加温度面板和湿度面板。

对布局更加熟悉。

4.分别在温度面板和湿度面板中添加当前值、上限值、下限值、及相应的调节机器的状态的标签和对应的显示的文本框。

5.对两个面板的当前值、上限值、下限值设置监听。

期间加深了对监听的设置和实现的理解。

6.添加串口通信面板和操作面板并对他们实现监听。

期间和学习了串口通信。

7.完成异常的抛出处理。

8.调用主函数即可完成界面的显示和相应功能。

在实验中遇到很多不懂的问题,通过书籍、上网查资料进行学习解决问题。

队友给我的帮助很大。

在本次实验中增强了问题的处理能力、加深了对传感器感知,熟练了Java的编程能

力。

六.附录

源程序文件名清单:

TempAndHum.h//传感器程序

Coordinator.h//协调器程序

//界面显示程序

 

(程序的实现需

主函数的类代码。

共有5个包分别实现异常处理、串口管理、界面设计、数据处理、方法实现。

要从网络下载配置串口通信的包)实验结果已经老师检查,成功实现要求功能。

下面仅给出初始化界面的类和packagecom.zyl;

importjava.io.File;

importjava.io.FileOutputStream;

importjava.io.PrintWriter;

importgnu.io.SerialPort;

importgnu.io.SerialPortEvent;

importgnu.io.SerialPortEventListener;

importjava.text.*;

importjava.awt.*;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.util.List;

importjavax.swing.border.EtchedBorder;

importjavax.swing.border.TitledBorder;

importcom.yang.serialport.exception.NoSuchPort;

importcom.yang.serialport.exception.NotASerialPort;

importcom.yang.serialport.exception.PortInUse;

importcom.yang.serialport.exception.SerialPortParameterFailure;

importcom.yang.serialport.exception.TooManyListeners;

importcom.yang.serialport.manage.SerialPortManager;

importcom.yang.serialport.utils.ByteUtils;

importcom.yang.serialport.utils.ShowUtils;

importjava.awt.Color;

importjavax.swing.BorderFactory;

importjavax.swing.JButton;

importjavax.swing.JComboBox;

importjavax.swing.JFrame;

importjavax.swing.JLabel;

importjavax.swing.JPanel;

//窗口初始化

publicclassCshextendsJFrameimplementsData{publicstaticDoublesdz=0.00;

publicstaticDoublewdz=0.00;

booleanthereIsSomeOne=false;booleantheDoorIsOpen=false;

/**

程序界面宽度

*/

publicstaticfinalintWIDTH=500;

*程序界面高度

*/

publicstaticfinalintHEIGHT=360;

//privateJTextAreadataView=newJTextArea();

//privateJScrollPanescrollDataView=newJScrollPane(dataView);

//串口设置面板

privateJPanelserialPortPanel=newJPanel();

privateJLabelserialPortLabel=newJLabe串l("口");

privateJLabelbaudrateLabel=newJLabe波l("特率");

privateJComboBoxcommChoice=newJComboBox();

privateJComboBoxbaudrateChoice=newJComboBox();

//操作面板

privateJPaneloperatePanel=newJPanel();

privateJButtonserialPortOperate=newJButton打("开串口");

privateListcommList=null;

privateSerialPortserialport;

publicCsh(){initComponents();actionListener();

initData();

}

privatevoidinitComponents(){

//数据显示//dataView.setFocusable(false);

//串口设置serialPortPanel.setBorder(BorderFactory.createTitledBorde串r(口"设置"));serialPortPanel.setVisible(true);

serialPortLabel.setForeground(Color.gray);serialPortPanel.add(serialPortLabel);

commChoice.setFocusable(false);serialPortPanel.add(commChoice);

baudrateLabel.setForeground(Color.gray);serialPortPanel.add(baudrateLabel);

baudrateChoice.setFocusable(false);serialPortPanel.add(baudrateChoice);

//操作operatePanel.setBorder(BorderFactory.createTitledBord操er(作""));operatePanel.setBounds(200,220,285,100);

serialPortOperate.setFocusable(false);serialPortOperate.setBounds(45,60,90,20);JLabela=newJLabel("");operatePanel.add(a);

operatePanel.add(serialPortOperate);

JLabelb=newJLabel("");operatePanel.add(b);

}

@SuppressWarnings("unchecked")privatevoidinitData(){

commList=SerialPortManager.findPort();

//检查是否有可用串口,有则加入选项中

if(commList==null||commList.size()<1){

ShowUtils.warningMessage没("有搜索到有效串口!

");

}else{

for(Strings:

commList){

commChoice.addItem(s);

}

}

baudrateChoice.addItem("9600");

baudrateChoice.addItem("19200");

baudrateChoice.addItem("38400");

baudrateChoice.addItem("57600");

baudrateChoice.addItem("115200");

}

privatevoidactionListener(){

serialPortOperate.addActionListener(newActionListener(){

@Override

publicvoidactionPerformed(ActionEvente){

if("打开串口".equals(serialPortOperate.getText())

&&serialport==null){openSerialPort(e);

}else{

closeSerialPort(e);

}

}

});

/**

打开串口

*@paramevt

*点击事件

*/

privatevoidopenSerialPort(java.awt.event.ActionEventevt){

//获取串口名称

StringcommName=(String)commChoice.getSelectedItem();

//获取波特率

intbaudrate=9600;

Stringbps=(String)baudrateChoice.getSelectedItem();baudrate=Integer.parseInt(bps);

//检查串口名称是否获取正确if(commName==null||commName.equals("")){

ShowUtils.warningMessage没("有搜索到有效串口!

");

}else{

try{

serialport=SerialPortManager.openPort(commName,baudrate);if(serialport!

=null){

//dataView.setText(串"口已打开"+"\r\n");serialPortOperate.setText(关"闭串口");

}

}catch(SerialPortParameterFailuree){

e.printStackTrace();

}catch(NotASerialPorte){

e.printStackTrace();

}catch(NoSuchPorte){

e.printStackTrace();

}catch(PortInUsee){

e.printStackTrace();

ShowUtils.warningMessage串("口已被占用!

");

}

}

try{

SerialPortManager.addListener(serialport,newSerialListener());}catch(TooManyListenerse){

e.printStackTrace();

}

}

/**

关闭串口

*@paramevt

*点击事件

*/

privatevoidcloseSerialPort(java.awt.event.ActionEventevt){SerialPortManager.closePort(serialport);//dataView.setText("串口已关闭"+"\r\n");serialPortOperate.setText打("开串口");

}

privateclassSerialListenerimplementsSerialPortEventListener{

/**

处理监控到的串口事件

*/

publicvoidserialEvent(SerialPortEventserialPortEvent){

switch(serialPortEvent.getEventType()){

caseSerialPortEvent.BI:

//10通讯中断ShowUtils.errorMessage与("串口设备通讯中断");break;

caseSerialPortEvent.OE:

//7溢位(溢出)错误

caseSerialPortEvent.FE:

//9帧错误

caseSerialPortEvent.PE:

//8奇偶校验错误

caseSerialPortEvent.CD:

//6载波检测

caseSerialPortEvent.CTS:

//3清除待发送数据

caseSerialPortEvent.DSR:

//4待发送数据准备好了

caseSerialPortEvent.RI:

//5振铃指示

caseSerialPortEvent.OUTPUT_BUFFER_EMPTY:

//2输出缓冲区已清空break;

caseSerialPortEvent.DATA_AVAILABLE:

//1串口存在可用数据byte[]data=null;

try{

if(serialport==null){ShowUtils.errorMessage串("口对象为空!

监听失败!

");

}else{

data=SerialPortManager.readFromPort(serialport);Stringtemp=ByteUtils.byteArrayToHexString(data,true);System.out.println(temp+"\r\n");

@SuppressWarnings("unused")Filefp=newFile("e:

\\a.txt");

if(((data[5]&0xff)>0)&&((data[5]&0xff)<20))

{

Doubleda=(double)(data[5]&0xff);if(((data[5]&0xff)>0)){

Doubledb=(double)(data[6]&0xff);

Doubledc=(double)((da*256)+db)/100;

wdz=dc;

//System.out.println(dc);System.out.println(wdz);

new

FileOutputStreamfosFileOutputStream("e:

\\a.txt",true);//true表示在文件末尾追加

fos.write("温度值:

".getBytes());fos.write(Double.toString(wdz).getBytes());fos.write("\n".getBytes());fos.close();//流要及时关闭

tf1.setText(Double.toString(wdz));

}

}if(((data[7]&0xff)>0)&&((data[7]&0xff)<20))

{

Doubleda=(double)(data[7]&0xff);if(((data[5]&0xff)>0))

{

Doubledb=(double)(data[8]&0xff);Doubledc=(double)((da*256)+db)/100;sdz=dc;

//System.out.println(dc);//System.out.println(sdz);tf6.setText(Double.toString(sdz));

new

FileOutputStreamfos

FileOutputStream("e

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2