第三章 物联网感知与标识实验
第二节 典型传感器感知实验
3.2 典型传感器感知实验
传感器是通过敏感元件,把外部物理世界的信息按当量比例变换成电信号的一种重要的电子部件。传感器种类繁多,按照其敏感机理、敏感材料、工艺设备和计测技术都会衍生出不同种类的传感器,而不同行业对同类传感器的性能要求也是千差万别。我国将传感器分为10大类、42小类近6000个品种,而国外品种更多(美国约有1.7万种)。本节结合常用的传感器介绍传感器的实验原理和方法,主要包括高精度温湿度传感器实验、运动感知实验、图像采集实验、步进电动机控制实验、键盘与显示屏交互实验等,至于其他种类的传感器,完全可以根据这些实验举一反三。3.2.1 实验四A 单片机平台高精度温湿度传感器实验
1.实验目的
本实验使用单片机ATmega128来控制高精度温湿度传感器SHT10获取周围环境的温度和湿度,并将温湿度数据发送到计算机。通过实验,使读者初步掌握ATmega128的基本编程方法,并掌握高精度温湿度传感器SHT10的使用方法。2.实验设备
(1)硬件




(2)软件



3.实验原理
本实验基于ATmega128实现一个高精度温湿度数据采集程序,主要硬件平台为单片机实验母板 (IOT-SCMMB),以及相关的传感器和外围模块。程序主要完成的工作包括:首先,单片机发送 命令给高精度传感器,高精度传感器再根据单片机命令,执行温度或湿度的采集;然后,单片机读出相应的温度或湿度的数据,并把相关数据通过单片机的串口发送到PC;最后,通过在PC上 的串口调试助手,获取采集到的温度和湿度数据,并计算转化为具体的温湿度值。为了便于理解,将实验内容分为3个部分:各模块的初始化,单片机控制传感器采集温度和湿度,把采集的数据通过串口发送到PC上。下面分别对以上内容进行介绍。(1)各模块的初始化
由于串口的初始化在实验一已经介绍,这里主要介绍高精度传感器的初始化。因为高精度温湿度传感器只需要将DATA引脚和CLK引脚与单片机相连,所以使用单片机的PC6和PC7引脚分别连接传感器的CLK和DATA口,并且只要单片机给PC6和PC7发送相应的时序就能控制高精度温湿度传感器。单片机对传感器I/O口的初始化代码如下:
(2)高精度温度和湿度数据的采集
数字高精度温湿度传感器SHT10有4个引脚:GND、DATA、SCK、VDD。图3-1为SHT10与单片机(即所使用的ATmega128)的连接方式。
在本实验中,SHT10的SCK和DATA引脚与ATmega128的PC6和PC7引脚相连。因此,只要通过单片机的PC6和PC7引脚向SHT10发送相应的时序,就能驱动SHT10进行采样,并返回采样数据。注意如图3-1所示的DATA引脚要接上拉电阻。
要驱动SHT10进行采样必须发送如下命令:首先,单片机向SHT10发送“启动传输”时序,完成数据传输的初始化。如图3-2所示,时序包括当SCK时钟高电平时DATA翻转为低电平,紧接着SCK变为低电平,随后在SCK时钟高电平时DATA翻转为高电平。初始化之后,单片机便可以向SHT10发送命令。通常的命令包含3个地址位(目前只支持“000”)和5个命令位,具体将在后面结合代码进行介绍。SHT10会以下述方式表示已正确地接收到指令:在第8个SCK时钟的下降沿之后,将DATA下拉为低电平,并且在第9个SCK时钟的下降沿之后,将DATA位恢复为高电平。
启动传输程序如下:
启动时序完成之后,SHT10便会以串行数据方式与单片机进行通信,时序图如图3-3所示。DATA三态门用于数据的读取,DATA在SCK时钟下降沿之后改变状态,并仅在SCK时钟上升沿有效。数据传输期间,在SCK时钟高电平时,DATA必须保持稳定。为避免信号冲突,单片机应驱动DATA在低电平。
给传感器发送数据需要注意时序,在上升沿之前把数据写入,上升沿时数据有效,在下降沿时把数据发送给传感器。数据发送的相关代码如下:
分页
从传感器读数据,同样也要注意时序,只有在上升沿数据有效之后才能读。读数据的相关代码如下:
温湿度测量的过程如下:单片机发布一组测量命令后(“00000101”表示测量相对湿度,“00000011”表示测量温度),传感器开始采集数据。对应8/12/14bit 3种不同的测量,这个过程分别需要大约20/80/320ms。SHT10通过下拉DATA至低电平并进入空闲模式,表示测量的结束。单片机在触发SCK时钟来读出数据前,必须等待这个“数据备妥”信号。检测数据可以先被存储,这样单片机可以继续执行其他任务,在需要时再读出数据。在收到“数据备妥”信号之后,传输2B的测量数据和1B的CRC奇偶校验。单片机需要通过下拉DATA为低电平,以确认每字节。在测量和通信结束后,SHT10自动转入休眠模式。温湿度测量的相关代码如下:
(3)把采集的数据通过串口发送到PC上
单片机在获取了温湿度数据之后,通过串口将数据发送给PC。从串口获取数据的函数为:
将数据发送到串口的函数为:
以上是此实验的各个模块的分析,下面介绍实验的流程。首先,主函数初始化各模块;然后,单片机给高精度传感器发送命令,高精度传感器把采集的数据发送给单片机;最后,单片机通过串口把数据发送到PC。下面是main()函数的主要代码:
分页
4.实验内容
阅读高精度温湿度传感器STH10芯片的数据手册,学会阅读并分析芯片的时序图,并能够依照时序图,编写相关的驱动程序,读出传感器的温度和湿度数据,然后通过串口把数据发送到PC。5.实验步骤
1)编写实验代码,在WinAVR环境下编译得到.hex文件。2)使用AVR Studio将.hex文件下载到开发板上。
3)把开发板的串口与PC相连,使用串口调试助手获得节点发回的温湿度数据。波特率 9600bit/s,串口调试助手会显示:
其中的X和Y分别为传感器的采样数据,这个数据必须通过芯片数据手册上的公式进行计算才能获得最后的温湿度值。
计算温度的公式为:
Temperature=d1+d2×X
式中,d1,d2为参数;X为传感器采集的温度数据。
对于本实验采用3.5V电压、14位采样精度,查芯片手册可知:d1=-39.67,d2=0.01。带入计算 即可得到以摄氏度为单位的温度值。
计算湿度的公式为:
Humidity=c1+c2×Y+c3×Y 2
式中,c1,c2,c3为参数;Y为传感器采集的湿度数据。
对于本实验采用12位采样精度,查芯片手册可知:c1=-4,c2=0.0405,c3=-2.8×10-6。代入计 算即可得到湿度百分比。
6.思考题
本程序采样精度为8位温度,14位湿度,如何修改程序能够使精度变为8位湿度、12位温度。7.补充阅读
[1] 徐勇军,安竹林,等. 无线传感器网络实验教程[M]. 北京:北京理工大学出版社,2007.[2] ATmega128/L Datasheet. http://www.atmel.com/. Atmel,2010.
[3] SHT10 Datasheet. http://www.sensirion.com/. SENSIRION,2009.
3.2.2 实验四B 嵌入式平台高精度温湿度传感器实验
1.实验目的
本实验介绍在mClinux环境下基于General Purpose Input/Output(GPIO)驱动程序编写嵌入式应用程序。程序使用LPC2220微控制器来控制高精度温湿度传感器SHT10获取周围环境的温度和湿度,并将温湿度数据通过串口传送到PC的超级终端上进行显示。通过实验,使读者初步掌握mClinux应用程序的编写方法,并掌握GPIO驱动和高精度温湿度传感器SHT10的使用方法。2.实验设备
(1)硬件



(2)软件



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口。由于mClinux将所有的设备都当做文件进行处理,因此对微控制器的P0.25和P2.20引脚的处理是使用GPIO的相关I/O函数进行操作(详见GPIO驱动程序)。初始化代码如下:
(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位恢复为高电 平。
启动传输程序代码如下: