首页 理论教育 嵌入式物联网实验:高精度温湿度传感器实现

嵌入式物联网实验:高精度温湿度传感器实现

时间:2023-10-21 理论教育 版权反馈
【摘要】:程序使用LPC2220微控制器来控制高精度温湿度传感器SHT10获取周围环境的温度和湿度,并将温湿度数据通过串口传送到PC的超级终端上进行显示。通过实验,使读者初步掌握Clinux应用程序的编写方法,并掌握GPIO驱动和高精度温湿度传感器SHT10的使用方法。初始化这部分主要是对微控制器和高精度温湿度传感器的连接引脚初始化。

嵌入式物联网实验:高精度温湿度传感器实现

1.实验目的

本实验介绍在µClinux环境下基于General Purpose Input/Output(GPIO)驱动程序编写嵌入式应用程序。程序使用LPC2220微控制器来控制高精度温湿度传感器SHT10获取周围环境的温度和湿度,并将温湿度数据通过串口传送到PC的超级终端上进行显示。通过实验,使读者初步掌握µClinux应用程序的编写方法,并掌握GPIO驱动和高精度温湿度传感器SHT10的使用方法。

2.实验设备

(1)硬件

● ARM实验母板(IOT-ARMMB)1套。

● 传感器及外围模块(IOT-MODULES)1套。

● PC(含串口)1台。

(2)软件

● Linux和Windows操作系统。

● H-JTAG。

● µClinux2.4x发行包和arm-elf-gcc交叉编译环境。

3.实验原理

本实验基于LPC2220嵌入式微控制器实现一个高精度温湿度数据采集程序,主要硬件为ARM实验母板(IOT-ARMMB)及传感器和其他外围模块。与本实验教程实验四A中通过单片机实现的高精度温湿度实验不同,本实验基于Linux的GPIO驱动程序。有别于单片机需要将程序下载到Flash的烦琐过程,本实验基于NFS(网络文件系统)建立的交叉编译环境,可以将主机中的程序读取到实验板的RAM中运行。NFS是FreeBSD支持的文件系统中的一种,其允许一个系统在网络上与其他系统共享目录和文件。通过网络接口将主机与实验板连接,NFS使用户和程序可以像访问本地文件一样访问远端系统上的文件。这样,在程序的修改调试中,就不需要反复的下载过程。实验板可以随时通过NFS运行主机上最新版本的程序。另外,读者可以通过本实验进一步熟悉Linux下字符型设备的驱动方式。

程序主要完成的工作包括:首先,微控制器发送命令给高精度温湿度传感器,高精度温湿度传感器根据微控制器的命令,执行温度或湿度的采集;然后,微控制器读出相应的温度或湿度的数据,并把相关数据发送到PC的串口上;最后,通过PC上的超级终端,显示采集到的温度和湿度数据。为了便于理解,将实验内容分为3个部分:初始化,微控制器采集温度和湿度,将采集到的数值转换为实际温湿度值并将其通过串口发送到PC的超级终端显示。下面分别对以上的内容进行介绍。

(1)初始化

这部分主要是对微控制器和高精度温湿度传感器的连接引脚初始化。因为高精度温湿度传感器只通过DATA和SCK这两个引脚与微控制器通信,所以使用微控制器的P0.25和P2.20引脚分别连接传感器的DATA和SCK口。由于µClinux将所有的设备都当做文件进行处理,因此对微控制器的P0.25和P2.20引脚的处理是使用GPIO的相关I/O函数进行操作(详见GPIO驱动程序)。初始化代码如下:

978-7-111-34147-5-Chapter03-14.jpg

(2)高精度温度和湿度数据的采集

数字高精度温湿度传感器SHT10有4个引脚:GND、DATA、SCK、VDD。图3-4所示为SHT10与微控制器的连接方式。

在本实验中,SHT10的DATA和SCK引脚与微控制器的P0.25和P2.20引脚相连。因此,只要通过微控制器的P0.25和P2.20引脚向SHT10发送相应的时序,就能驱动SHT10进行采样,并返回采样数据。注意DATA引脚要接上拉电阻

要驱动SHT10进行采样必须发送如下命令:首先,微控制器向SHT10发送“启动传输”时序,来完成数据传输的初始化。如图3-5所示,时序包括当SCK时钟高电平时DATA翻转为低电平,紧接着SCK变为低电平,随后在SCK时钟高电平时DATA翻转为高电平。初始化之后,微控制器便可以向SHT10发送命令。通常的命令包含3个地址位(目前只支持“000”)和5个命令位,具体将在后面结合代码进行介绍。SHT10会以下述方式表示已正确地接收到指令:在第8个SCK时钟的下降沿之后,将DATA下拉为低电平,并且在第9个SCK时钟的下降沿之后,将DATA位恢复为高电平。

978-7-111-34147-5-Chapter03-15.jpg

图3-4 SHT10与微控制器的连接方式

978-7-111-34147-5-Chapter03-16.jpg

图3-5 SHT10启动传输时序图

启动传输程序代码如下:

978-7-111-34147-5-Chapter03-17.jpg

启动时序完成之后,SHT10便会以串行数据方式与微控制器进行通信,时序图如图3-6所示。DATA三态门用于数据的读取,DATA在SCK时钟下降沿之后改变状态,并仅在SCK时钟上升沿有效。数据传输期间,在SCK时钟高电平时,DATA必须保持稳定。为避免信号冲突,微处理器应保持DATA在低电平。

978-7-111-34147-5-Chapter03-18.jpg

图3-6 SHT10与微控制器通信时序图

给传感器发送数据需要注意时序,在上升沿之前把数据写入,上升沿时数据有效,在下降沿时把数据传给传感器。数据发送的相关代码如下:

978-7-111-34147-5-Chapter03-19.jpg

978-7-111-34147-5-Chapter03-20.jpg

从传感器读数据,同样也要注意时序,只有在上升沿数据有效之后才能读。读数据的相关代码如下:

978-7-111-34147-5-Chapter03-21.jpg

温湿度测量的过程如下,发布一组测量命令后(“00000101”表示相对湿度,“00000011”表示温度),传感器开始采集数据。对应8/12/14位3种不同的测量,这个过程分别需要大约20/80/320ms。SHT10通过下拉DATA至低电平并进入空闲模式,表示测量的结束。微控制器在触发SCK时钟来读出数据前,必须等待这个“数据备妥”信号。检测数据可以先被存储,这样微控制器可以继续执行其他任务,在需要时再读出数据。在收到“数据备妥”信号之后,传输2字节的测量数据和1字节的CRC奇偶校验。微控制器需要通过下拉DATA为低电平,以确认每个字节。在测量和通信结束后,SHT10自动转入休眠模式。温湿度测量的相关代码:

978-7-111-34147-5-Chapter03-22.jpg

(3)转换采集到的数据为具体的温度和湿度值并将数据通过串口发送到PC的超级终端显示

微控制器从传感器获取的数据并不是实际的温湿度值,要得到实际的温湿度值必须将从传感器获得的数据通过SHT10数据手册中给出的公式进行相应的转换。在程序中使用转换函数calc_sht10实现。该函数的两个参数分别为指向采集的湿度和温度数据的指针变量。(www.xing528.com)

温度转换公式为:

Temperature=d1+d2×X

式中,X为传感器采样的温度数据;d1d2为系数。

对于本实验采用3.5V电压、14位温度采样精度,查数据手册可知该公式的系数分别为:d1=-39.67,d2=0.01)。

湿度转换公式为:Humidity=c1+c2×Y+c3×Y2式中,Y为传感器采样的湿度数据;c1c2c3为系数。

对于本实验采用12位湿度采样精度,查数据手册可知该公式的系数分别为:c1=-4,c2=0.0405,c3=-2.8×10-6)。

转换函数calc_sht10的代码如下:

978-7-111-34147-5-Chapter03-23.jpg

在获取并转换了温湿度数据之后,使用printf()函数通过串口将读取的数据以及转换后的数据发送给PC。

以上是本实验的各个模块的分析,下面介绍实验的流程。首先,主函数初始化各模块,然后微控制器给高精度传感器发送命令,高精度传感器把采集的数据发送给微控制器,最后微控制器通过串口把数据发送到电脑上去。下面是main()函数的主要代码:

978-7-111-34147-5-Chapter03-24.jpg

978-7-111-34147-5-Chapter03-25.jpg

4.实验内容

阅读STH10芯片的数据手册,学会分析芯片的时序图。阅读GPIO驱动程序,能够依照前述数据手册上的时序图,使用GPIO驱动程序编写一个简单的µClinux应用程序,读出传感器的温度和湿度数据,使用数据手册中的公式转换之后,通过串口把数据发送到PC。

5.实验步骤

1)打开终端或者进入虚拟控制台,进入arm实验目录,为本实验新建工作目录temp- hum。

978-7-111-34147-5-Chapter03-26.jpg

2)将源代码文件temp-hum.c和Makefile以及config.h文件复制到工作目录。

3)将光盘提供的gpio文件夹复制到nfs共享目录下的header目录下。

4)编译程序,生成可执行代码temp-hum。

978-7-111-34147-5-Chapter03-27.jpg

5)启动μCLinux,进行NFS连接,进入GPIO驱动所在目录,加载GPIO驱动。

978-7-111-34147-5-Chapter03-28.jpg

6)进入cat1025目录,运行实验程序。

978-7-111-34147-5-Chapter03-29.jpg

之后可以在超级终端上看到程序运行的结果,如图3-7所示。

978-7-111-34147-5-Chapter03-30.jpg

图3-7 嵌入式平台高精度温湿度传感器实验结果

其中每一组前两行为从传感器获得的数据,后两行为转换后的温湿度数据。

6.思考题

1)本程序的采样精度为14位温度,12位湿度,如何修改程序能够使精度变为12位温度、8位湿度。

2)怎样修改程序使得采样频率变小?

7.补充阅读

[1]徐勇军,安竹林,蒋文丰,姜鹏.无线传感器网络实验教程[M].北京:北京理工大学出版社,2007.

[2]周立功,等.ARM嵌入式系统实验教程[M].北京:北京航空航天大学出版社,2005.

[3]ATmega128/LDatasheet.http://www.atmel.com/.Atmel,2010.

[4]SHT10Datasheet.http://www.sensirion.com/.SENSIRION,2009.

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈