无线传感器数据通信实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二:无线传感器数据通信实验

一、实验目的:

在无线传感器节点的单片机驱动代码的基础上,编写无线通信程序,实现多个传感器节点之间的双向数据传输。

二、实验原理:

温湿度传感器和单片机采用的是类似IIC的串行通信,和单片机相连如图1-8所示

VDD和GND是传感器供电引脚。

SCK是时钟引脚,在通信这个过程中,SCK信号都是有单片机控制的。

DATA是数据线,和单片机IO口相连。用于向传感器发送指令和从单片机读走数据。数据在时钟的上升沿生效在时钟是高电平时保持不变。在时钟是低电平时准备数据。接口如图所示。

图1-8 温湿度接口

单片机先向传感器发送开始命令,然后开始通信,开始命令时序图如图所示。在SCK高电平时,将数据线拉低,在下一个时钟高电平期间,将数据线拉高。开始信号发送完毕。

图1-9 开始信号

再开始信号后是命令信号,命令信号包含3位地址位(只支持000)和5位命令位组成。传感器在接收到1byte数据时(即第八个时钟下降沿)将数据线拉低,表示数据正确接收。在九个下降沿被释放。命令如下表。

单片机在发送完命令信号后,等待温湿度传感器测量完成。传感器在转换完成后将数据线拉低。单片机产生时钟信号,从温湿度传感器读数据。数据包含2bytes的测量结果和1bytes的校验。单片机在收到每字节数据都要将数据线拉低给出应答信号。数据高位在前,低位在后。传感器在测量结束和通信完毕后自动进入休眠。具体操作见数据手册。时序图如图1-10所示。

图1-10 传感器工作时序图

8、 计算公式

温度计算公式:

湿度计算公式:

三、实验设备:

ZIGBEE无线空气温湿度传感器一个、装有实验软件的计算机。

四、实验内容:

1、建立开发工程;

用MDK打开工程模板。

2、把similar_i2C.c和similar_i2C.h加入到工程。

将similar_i2c文件夹拷贝到工程模板目录中。

调用similar_i2C.c中函数,编写温度采集和湿度采集代码

在工程模板根目录下建立sht1xx_sensor,在里面新建sht1xx.c和sht1xx.h空文件,将c加入到工程,将h文件加入到工程设置中编写main()调用温度采集和湿度采集函数,并对原始数据进行处理。

在原有的程序的基础上,添加代码使程序能够根据数据计算出湿度,并显示出来。

计算湿度的公式:

代码:

(主函数部分)

#include "arch_include.h"

#include "sht1xx.h"

#include "similar_i2c.h"

uint16_t temp_value;

uint16_t rh_value;

float g_temp;

float g_rh;

int main(void){

system_init_from_reset();

SENSOR_VBAT_ON();

SI32_PBSTD_A_enable_pullup_resistors(SI32_PBSTD_1);

delay_us(100000);

while (1){

temp_value=SHT15_temp_samp();

g_temp=-39.7+0.04*temp_value; //计算温度公式

rh_value=SHT15_rh_samp();

g_rh=-4+0.0405*rh_value+rh_value*rh_value*(-2.8)/1000000+ (g_temp-25)*(0.01+0.00008*rh_value); //计算湿度公式

delay_us(1000000);

}

}

(SHT15_rh_samp函数部分)

float SHT15_rh_samp()

{

uint8_t RH_data[3];

float rh=0;

simliar_i2c_transstart(); //transmission start

similar_i2c_write_byte(0x06); //send command to sensor

similar_i2c_write_byte(0x00); //send value of status register

simliar_i2c_transstart();

similar_i2c_write_byte(0x05);

SIMILAR_I2C_DATA_IN;

delay_us(100000);

SIMILAR_I2C_DATA_OUT;

RH_data[0]=similar_i2c_read_byte(SIMILAR_I2C_ACK); //read the first byte (MSB)

RH_data[1]=similar_i2c_read_byte(SIMILAR_I2C_ACK); //read the second byte (LSB)

RH_data[2] =similar_i2c_read_byte(SIMILAR_I2C_NOACK); //read checksum

rh=RH_data[0]*256+RH_data[1];

return rh;

}

调试结果:

运行后可得到温度为28.42℃,湿度为68.68%rh,与现实相符,表示测量结果正确。

五、实验心得:

这次实验是在第一次熟悉传感器的基础上进行的。在实验中第一次接触到了Keil uVision4这个软件。与其他相关的编译软件差不多,一些基本的头文件导入,分步调试的功能我也能较快的进行。只是在调试前仍需在Options中设置许多的参数,以保证能够正确地驱动传感器并调取传感器的数据。有些参数的设置或选项在张老师的讲解下能够清楚明白,但是也有部分的设置不知道是为何要那样设置,因此在之后的一些不停调试中,有时需要机械性地记住哪些地方是需要改动的。在这一点上,我觉得我应该再去清楚的了解,真正了解了每一步的意义才能一直记住如何去做。

除设置外,实验的进行也比较顺利,利用资料中的公式与程序中已有的温度查询的基础上,将湿度的计算公式添入进去即可,基本都比较容易,数据在运行后都及时地显示了。

这一次实验也对传感器有了更深的理解,传感器不仅仅是一各仪器,它仍需一些程序才能正常地使用,并激发更多的功能。

相关文档
最新文档