网络工程(物联网技术)课程设计报告基于温湿度传感器物联网应用实时数据处理系统开发_第1页
网络工程(物联网技术)课程设计报告基于温湿度传感器物联网应用实时数据处理系统开发_第2页
网络工程(物联网技术)课程设计报告基于温湿度传感器物联网应用实时数据处理系统开发_第3页
网络工程(物联网技术)课程设计报告基于温湿度传感器物联网应用实时数据处理系统开发_第4页
网络工程(物联网技术)课程设计报告基于温湿度传感器物联网应用实时数据处理系统开发_第5页
已阅读5页,还剩41页未读, 继续免费阅读

下载本文档

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

文档简介

1、网络工程(物联网技术)课程设计报告题 目: 基于温湿度传感器物联网应用实时数据处理系统开发 院(系) 别: 数学与信息工程学院 专业: 网络工程(物联网技术) 班级 1 班 学 号: 2006099914 姓 名: 小 明 指导教师: 职称 博士 填表日期: 2012 年 5 月 11 日前 言一、选题的依据及意义1. 依据物联网是一种新概念和新技术,它使新一代it技术更加充分地应用于各行各业之中。它的问世打破了过去将基础设施与it设施分开的传统观念,将建筑物、公路、铁路和网站、网络、数据中心合为一体,是信息化和工业化融合的重要切入点。温湿度与人们的生活关系密切,所以物联网在温湿度实时数据处理

2、系统的开发将有很大的前景。2. 意义 在我们的日常生活中无处不在,控制好温湿度可以使我们生活、生产的更好。温湿度传感器物联网应用实时数据处理系统开发可以帮我们实现对温湿度以实时数据让我们明了的知道。从而更好的控制温湿度、达到我们所需的标准。二、本课程设计内容简介1. 通过ubuntu连接传感器实验箱收集由传感器测得的实时数据存入sqlite3数据库。2. 然后通过ubuntu发送到linux、接收并用动态网页显示代表数据变化的曲线。三、要达到的目标1.可以在ubuntu上实现自动接收由传感器取得、传来的实时数据。2. 并ubuntu上能边接收边连续往linux发送从传感器取得的实时数据。3还要

3、确保发送过的数据不会再次发送。4. linux能接收到ubuntu发过来的实时数据并通过动态网页曲线图实时显示接收过来的数据。实 现 方 案一、开发环境1.硬件(详细介绍所涉及硬件的详细内容)pc机、温湿度传感器、传感器实验箱、连接所需的各种线。2.软件(详细介绍所涉及软件的详细内容) mdk414(arm平台编译烧录代码软件)、keilc51v750a_full(c51平台编译软件)、stc手动下载(c51烧录代码软件)、r340(串口线连接usb驱动)、ubuntu操作系统、linux操作系统。3.其它二、开发内容1.项目开发详细内容(包括传感器的配置、传感器烧录、数据的实时收集、实时数据

4、的存储、实时数据的传输、实时数据在服务器端的接受及存储-tcpserver及mysql、数据库及web服务器安装、利用jsp曲线动态显示实时数据)首先烧录整合好的温湿度传感器的代码。接着连接传感器取得数据。然后在ubuntu中编译并运行com_sensor程序获取传感器实验箱的数据。在ubuntu11编译并运行senddata.c把数据发送到linux.linux通过tcpserver服务器接收数据并存入mysql数据库。最后将接收到的数据通过linuxweb服务器以jsp曲线动态显示实时数据。2.网络拓扑图(包括传感器、网关、传输网络、tcpserver服务器、数据库服务器、静态及动态web

5、服务器、web服务器客户端;并详细标注设备名称及ip地址等详细信息;并详细叙述网络拓扑图流程) 三、技术路线1. 传感器数据处理(给出详细的传感器烧录代码 )代码如下:/*/中软吉大信息技术有限公司/物联网传感技术教学实验系统/*/#include <intrins.h> /keil library (is used for _nop()_ operation) #include <math.h> /keil library #include"lcmdisplay.h" #define fosc 11059200#define baud 14400t

6、ypedef union unsigned int i; float f; value;/- / modul-var /- enum temp,humi; #define noack 0 #define ack 1 /adr command r/w #define status_reg_w 0x06 /000 0011 0 #define status_reg_r 0x07 /000 0011 1 #define measure_temp 0x03 /000 0001 1 #define measure_humi 0x05 /000 0010 1 #define reset 0x1e /000

7、 1111 0 sbit data=p22;sbit sck=p21;sbit power=p25;sbit flag1=p07;sbit flag2=p46;sbit flag3=p27;sbit flag4=p26; void delay(unsigned int ntimedelay) unsigned int i; while (ntimedelay-) for (i=0;i<125;i+); void serial_init() tmod = 0x01; tr0 = 1; ea = 1; et0 = 0; tf0 = 0; s2con = 0x50; /8位可变波特率 (无校验

8、位) brt = -(fosc/32/baud); /设置独立波特率发生器的重载初值 auxr = 0x14; /独立波特率发生器工作在1t模式 /ie2 = 0x01; /使能串口2中断void io_init(void)p2m1=p2m1&0xdf;p2m0=p2m0&0xdf;p0m1=p0m1&0x7f;p0m0=p0m0&0x7f;p4m1=p4m1&0xbf;p4m0=p4m0&0xbf;p2m1=p2m1&0x3f;p2m0=p2m0&0x3f;p4sw=p4sw|0x40;void power_identify(v

9、oid)while(1)if(power=0)delay(4000);lcmprintf("请给传感器模块上电!n");else break;void module_identify(unsigned int xuhao)unsigned int abc=0;if(flag4=1)abc=abc+1;abc=abc<<1;if(flag3=1)abc=abc+1;abc=abc<<1;if(flag2=1)abc=abc+1;abc=abc<<1;if(flag1=1)abc=abc+1;if(abc!=xuhao)delay(3000)

10、;lcmprintf("提示:您插入的模块不正确!n");while(1)if(abc!=xuhao);elsedelay(2000);lcmprintf("连接的模块是m%un",xuhao);delay(5000);break;/- char s_write_byte(unsigned char value) /- / writes a byte on the sensibus and checks the acknowledge unsigned char i,error=0; for (i=0x80;i>0;i/=2) /shift bit

11、 for masking if (i & value) data=1; /masking value with i , write to sensi-bus else data=0; _nop_(); /observe setup time sck=1; /clk for sensi-bus _nop_();_nop_();_nop_(); /pulswith approx. 5 us sck=0; _nop_(); /observe hold time data=1; /release data-line _nop_(); /observe setup time sck=1; /cl

12、k #9 for ack error=data; /check ack (data will be pulled down by sht11) sck=0; return error; /error=1 in case of no acknowledge /- char s_read_byte(unsigned char ack) /- / reads a byte form the sensibus and gives an acknowledge in case of "ack=1" unsigned char i,val=0; data=1; /release dat

13、a-line for (i=0x80;i>0;i/=2) /shift bit for masking sck=1; /clk for sensi-bus if (data) val=(val | i); /read bit sck=0; data=!ack; /in case of "ack=1" pull down data-line _nop_(); /observe setup time sck=1; /clk #9 for ack _nop_();_nop_();_nop_(); /pulswith approx. 5 us sck=0; _nop_();

14、/observe hold time data=1; /release data-line return val; /- void s_transstart(void) /- / generates a transmission start / _ _ / data: |_| / _ _ / sck : _| |_| |_ data=1; sck=0; /initial state _nop_(); sck=1; _nop_(); data=0; _nop_(); sck=0; _nop_();_nop_();_nop_(); sck=1; _nop_(); data=1; _nop_();

15、sck=0; /- void s_connectionreset(void) /- / communication reset: data-line=1 and at least 9 sck cycles followed by transstart / _ _ / data: |_| / _ _ _ _ _ _ _ _ _ _ _ / sck : _| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_ unsigned char i; data=1; sck=0; /initial state for(i=0;i<9;i+) /9 sck cycle

16、s sck=1; sck=0; s_transstart(); /transmission start /- char s_softreset(void) /- / resets the sensor by a softreset unsigned char error=0; s_connectionreset(); /reset communication error+=s_write_byte(reset); /send reset-command to sensor return error; /error=1 in case of no response form the sensor

17、 /- char s_read_statusreg(unsigned char *p_value, unsigned char *p_checksum) /- / reads the status register with checksum (8-bit) unsigned char error=0; s_transstart(); /transmission start error=s_write_byte(status_reg_r); /send command to sensor *p_value=s_read_byte(ack); /read status register (8-b

18、it) *p_checksum=s_read_byte(noack); /read checksum (8-bit) return error; /error=1 in case of no response form the sensor /- char s_write_statusreg(unsigned char *p_value) /- / writes the status register with checksum (8-bit) unsigned char error=0; s_transstart(); /transmission start error+=s_write_b

19、yte(status_reg_w);/send command to sensor error+=s_write_byte(*p_value); /send value of status register return error; /error>=1 in case of no response form the sensor /- char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode) /- / makes a measurement (humidity/temper

20、ature) with checksum unsigned char error=0; unsigned int i; s_transstart(); /transmission start switch(mode) /send command to sensor case temp : error+=s_write_byte(measure_temp); break; case humi : error+=s_write_byte(measure_humi); break; default : break; for (i=0;i<65535;i+) if(data=0) break;

21、/wait until sensor has finished the measurement if(data) error+=1; / or timeout (2 sec.) is reached *(p_value) =s_read_byte(ack); /read the first byte (msb) *(p_value+1)=s_read_byte(ack); /read the second byte (lsb) *p_checksum =s_read_byte(noack); /read checksum return error; /- void calc_sth11(flo

22、at *p_humidity ,float *p_temperature) /- / calculates temperature °c and humidity %rh / input : humi ticks (12 bit) / temp ticks (14 bit) / output: humi %rh / temp °c const float c1=-2.0468; / for 12 bit rh const float c2=+0.0367; / for 12 bit rh const float c3=-0.0000015955; / for 12 bit

23、rh const float t1=+0.01; / for 12 bit rh const float t2=+0.00008; / for 12 bit rh float rh=*p_humidity; / rh: humidity ticks 12 bit float t=*p_temperature; / t: temperature ticks 14 bit float rh_lin; / rh_lin: humidity linear float rh_true; / rh_true: temperature compensated humidity float t_c; / t_

24、c : temperature °c t_c=t*0.01 - 40.1; /calc. temperature°cfrom 14 bit temp.ticks 5v rh_lin=c3*rh*rh + c2*rh + c1; /calc. humidity from ticks to %rh rh_true=(t_c-25)*(t1+t2*rh)+rh_lin; /calc. temperature compensated humidity %rh if(rh_true>100)rh_true=100; /cut if the value is outside of

25、 if(rh_true<0.1)rh_true=0.1; /the physical possible range *p_temperature=t_c; /return temperature °c *p_humidity=rh_true; /return humidity%rh /- float calc_dewpoint(float h,float t) /- / calculates dew point / input: humidity %rh, temperature °c / output: dew point °c float k,dew_p

26、oint ; k = (log10(h)-2)/0.4343 + (17.62*t)/(243.12+t); dew_point = 243.12*k/(17.62-k); return dew_point; /- void main() /- / sample program that shows how to use sht11 functions / 1. connection reset / 2. measure humidity ticks(12 bit) and temperature ticks(14 bit) / 3. calculate humidity %rh and te

27、mperature °c / 4. calculate dew point °c / 5. print temperature, humidity, dew point value humi_val,temp_val; float dew_point; unsigned char error,checksum; unsigned int i; serial_init();io_init();power_identify();module_identify(3); s_connectionreset(); while(1) error=0; error+=s_measure(

28、unsigned char*) &humi_val.i,&checksum,humi); /measure humidity error+=s_measure(unsigned char*) &temp_val.i,&checksum,temp); /measure temperature if(error!=0) s_connectionreset(); /in case of an error: connection reset else humi_val.f=(float)humi_val.i; /converts integer to float tem

29、p_val.f=(float)temp_val.i; /converts integer to float calc_sth11(&humi_val.f,&temp_val.f); /calculate humidity, temperature dew_point=calc_dewpoint(humi_val.f,temp_val.f); /calculate dew point power_identify();lcmdisplaysht10(humi_val.f,temp_val.f);/lcmprintf("温度:%5.1f 湿度:%5.1f 露点:%3.1f

30、n", temp_val.f,humi_val.f,dew_point);/temp :温度/for (i=0;i<40000;i+);/延迟/lcmprintf("", humi_val.f);/humi:湿度/for (i=0;i<40000;i+);/延迟/lcmprintf("", dew_point);/dewpoint:露点(点在此温度时,空气饱和并产生露珠) /-wait approx. 0.8s to avoid heating up shtxx- for (i=0;i<50000;i+); /(be sure

31、 that the compiler doesn't eliminate this line!) /- lcmdisplay.c:#include "lcmdisplay.h"typedef enum lcmprtf = 0, / 字符串打印 / 1 磁感应及环境光传感器模块 lcmhall, / 霍尔接近开关 lcmreed, / 干簧管 lcmmetal, / 金属接近开关 lcmlux, / 环境光强度 lcmldr, / 光敏电阻 / 2 震动及mems麦克传感器模块 lcmshockds, / 双珠单向 lcmshockdd, / 双珠双向 lcmshoc

32、kspring, / 弹簧 lcmshock, / 全向震动 lcmmic, / mems麦克风 / 3 测距测障类及温湿度类传感器模块 lcmir, / 红外对管测距 lcmirswitch, / 红外接近开关 lcmultr, / 超声波测距 lcmtemp, / 温度/ ds18b20 lcmsht10, / 温湿度传感器sht10 lcmhumi, / 湿度/sht10 lcmntc, / 热敏电阻 / 4 操作控制类及加速传感器模块 lcmacc, / 三轴加速度 lcmjoystick, / 摇杆电位器 lcmencoder, / 编码开关 / 5 称重传感器模块 lcmweigh

33、t, / 称重 / 6 粉尘传感器模块 lcmdust, / 粉尘 / 7 红外测温及颜色传感器模块(增强型模块) lcmbodytemp, / 红外测体温 lcmcolor, / 颜色 / 8 磁阻陀螺仪及气压传感器模块(增强型模块) lcmreluctance, / 三轴磁阻 lcmangrate, / 三轴角速率陀螺仪 lcmpressure, / 气压 / 9 二氧化碳传传感器模块(扩展型模块) lcmco2, / 二氧化碳 / 10 气体流量传感器模块(扩展型模块) lcmflow, / 气体流量 lcminit / 初始值 flag_t;void swap(char *cp)uns

34、igned char temp;temp=cp3;cp3=cp0;cp0=temp;temp=cp2;cp2=cp1;cp1=temp;void sendc (unsigned char chr)/发送一个字符 s2buf = chr; while(!(s2con & 0x02); s2con &= 0x02; unsigned char recvc (void)unsigned char chr;while(!(s2con & 0x01); s2con &= 0x01; chr = s2buf;return chr;static void packetlcm(

35、flag_t flag, char *data1, int length) sendc(0x7e); sendc(0xff); sendc(0x06);/改成6 sendc(flag); while(length-) switch (*data1) case 0x7e: sendc(0x7d); sendc(0x5e); case 0x7d: sendc(0x7d); sendc(0x5e); default: sendc(*data1); data1+; sendc(0x00); sendc(0x00);sendc(0x7e); / 等待显示完成 /recvc();/ 字符串打印到液晶voi

36、d lcmprintf(char *fmt, .) va_list ap; va_start(ap,fmt); vsprintf(data1, fmt, ap);va_end(ap); packetlcm(lcmprtf, data1, strlen(data1);/ 1 磁感应及环境光传感器模块/lcmhall, / 霍尔接近开关/ 霍尔传感器,有磁铁靠近true,离开falsevoid lcmdisplayhall(bool v) conv_t conv;conv.b = v;swap(conv.c); packetlcm(lcmhall, conv.c, 4);/lcmreed, / 干

37、簧管/ 干簧管,有磁铁靠近true,离开falsevoid lcmdisplayreed(bool v) conv_t conv;conv.b = v;swap(conv.c); packetlcm(lcmreed, conv.c, 4);/lcmmetal, / 金属接近开关/ 金属传感器,有金属靠近true,离开falsevoid lcmdisplaymetal(bool v) conv_t conv;conv.b = v;swap(conv.c); packetlcm(lcmmetal, conv.c, 4);/lcmlux, / 环境光强度/ 环境光强度,luxvoid lcmdisp

38、laylux(float v) conv_t conv; conv.f = v;swap(conv.c); packetlcm(lcmlux, conv.c, 4);/lcmldr, / 光敏电阻/ 光敏电阻,千欧void lcmdisplayldr(float v) conv_t conv; conv.f = v;swap(conv.c); packetlcm(lcmldr, conv.c, 4);/ 2 震动及mems麦克传感器模块/lcmshockds, / 双珠单向void lcmdisplayshockds(bool v) conv_t conv;conv.b = v; packetlcm(lcmshockds, conv.c, sizeof(v);/lcmshockdd, / 双珠双向void lcmdisplayshockdd(bool vl, bool vr) conv_t conv; if (vl && vr) conv.uc = 0xff; e

温馨提示

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

评论

0/150

提交评论