基于CC2530的温湿度传感器模块实验
实验内容
- 认识温度湿度传感器;
- 能够编程读取传感器的温湿度数据;
- 能够将读取的数据在数码管上显示。
实验目的
- 熟悉温湿度模块的使用;
- 了解数码管的工作原理;
- 了解温湿度传感器作原理。
实验环境
实验所需硬件
序号 | 名称 | 数量 | 备注 |
---|---|---|---|
1 | 电脑 | 1台 | 系统Windows7及以上 |
2 | CC2530底座模块 | 1个 | · |
3 | 温湿度模块 | 1个 | · |
4 | CC Debugger 仿真器和连接线 | 1套 | · |
5 | USB线 | 1根 | · |
6 | 温湿度模块实验代码 | 1份 | · |
实验所需软件
- IAR 驱动安装步骤
- CC Debugger 驱动安装步骤
- Git 软件下载(可选)
CC2530底座:HIVE ZigBee Pro(简称CC2530底座)是一种基于CC2530F256芯片的蜂巢底座。
CC Debugger 仿真器和连接线
USB线
实验要求
- 认识温度湿度传感器;
- 能够编程读取传感器的温湿度数据;
- 能够将读取的数据在数码管上显示。
实验原理
温度传感器工作原理
利用材料的物理特性随着温度变化的原理设计。比如利用金属膨胀原理设计的传感器,将双金属片由两片不同膨胀系数的金属贴在一起而组成,随着温度变化,材料A比另外一种金属膨胀程度要高,引起金属片弯曲。弯曲的曲率可以转换成一个输出信号。又比如利用金属随着温度变化,其电阻值也发生变化的原理。阻值的变化会导致电流电压的变化,通过测量电流电压。便可知道温度的变化。
湿度感器工作原理
湿敏元件是最简单的湿度传感器。湿敏元件主要有电阻式、电容式两大类。湿敏电阻的特点是在基片上覆盖一层用感湿材料制成的膜,当空气中的水蒸气吸附在感湿膜上时,元件的电阻率和电阻值都发生变化,利用这一特性即可测量湿度。湿敏电容一般是用高分子薄膜电容制成的,常用的高分子材料有聚苯乙烯、聚酰亚胺、酪酸醋酸纤维等。当环境湿度发生改变时,湿敏电容的介电常数发生变化,使其电容量也发生变化,其电容变化量与相对湿度成正比。温湿度模块使用SHT20,采用的是电容式湿敏元件。
硬件设计
温湿度传感器采用集成化的模块SHT20,主要通过IIC的通信方式进行数据的传输及处理,该芯片性能优异,长期工作也能保持数据稳定。数码管驱动采用TM1640驱动芯片。 TM1640是一种LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器,能有效节省IO。
温湿度传感器基本电路图
数码管驱动电路图
实验步骤
① CC2530底座模块安装温湿度模块,用CC Debugger连接底座与电脑,如下图所示:
② 轻按CCDebugger复位按键,指示灯变绿,表示连接正常。如下图:
③ 访问github,进入github界面后点击Code,Clone HTTPS安全链接,如下图所示:
④ 打开电脑终端,进入工作目录workspace (workspace 为工程文件夹所在目录):
$ cd workspace
⑤ 运行clone
命令:
$ git clone https://github.com/aiotcom/eps.git
下载目录至指定文件夹下。
如果提示“command not found”表示电脑没有安装Git,请至Git官网下载。
如果电脑没有安装 Git 软件,也可以进入Github,点击 Code
-> DownLoad ZIP
下载所有工程代码。如下图所示:
如果电脑没有公网,可以进:D盘\实验教程与代码选择相应的代码。
⑥ 打开 IAR Embedded Workbench
工程软件,点击工具栏: File
-> Open
-> Workspace
,选择工程文件:基于CC2530的模块实验\3.温湿度传感器模块\SHT20.eww
并打开。
⑦ 点击Make
按钮,重新编译文件,显示没有错误。
⑧ 点击Download and Debug
按钮,将程序下载到模块中。
⑨ 点击X
退出仿真模式。
⑩ 移除CC Debugger
仿真器,采用USB线供电。
⑪ 获取环境温湿度显示到数码管上:
显示湿度值:
显示温度值:
代码讲解
① 程序目录结构,源代码文件如下图:
② main.c代码,对SHT20温湿度传感器 IIC 接口IO、SHT20、TM1640初始化,初始化完成后,以定时器时间为基准每1.6秒更新依次传感器温湿度数据。
void main(void)
{
static uint8_t Display_Flag = 0;//显示标志位
Hal_Init_32M();//初始化32M时钟
IIC_Init();//初始化IIC
TM1640_Init();//初始化TM1640
Init_Timer1();//初始化定时器1(20ms),为温湿度数据更新提供时间基准
while(1)
{
if(Display_Count>=80 && Display_Flag == 0)//1600ms 显示温度
{
Display_Flag = 1;//下一个显示湿度
SHT2x_GetTempHumi();//取温湿度值 保存在g_sht2x_param.TEMP_HM
send_LED_Display(0xC0,(uint16_t)g_sht2x_param.TEMP_HM,1);//显示温度
}
else if(Display_Count>=160 && Display_Flag == 1)//3200ms 显示湿度
{
Display_Flag = 0; //下一个显示温度
SHT2x_GetTempHumi();//获取温湿度值 保存在g_sht2x_param.HUMI_HM
send_LED_Display(0xC0,(uint16_t)g_sht2x_param.HUMI_HM,2);//显示湿度
Display_Count = 0;//计数清零
}
}
}
通过调用SHT2x_GetTempHumi(),读取一次温湿度,分别保存在g_sht2x_param.TEMP_HM,g_sht2x_param.HUMI_HM。
if(Display_Count>=80 && Display_Flag == 0)//1600ms 显示温度
{
Display_Flag = 1;//下一个显示湿度
SHT2x_GetTempHumi();//取温湿度值 保存在g_sht2x_param.TEMP_HM
send_LED_Display(0xC0,(uint16_t)g_sht2x_param.TEMP_HM,1);//显示温度
}
else if(Display_Count>=160 && Display_Flag == 1)//3200ms 显示湿度
{
Display_Flag = 0; //下一个显示温度
SHT2x_GetTempHumi();//获取温湿度值 保存在g_sht2x_param.HUMI_HM
send_LED_Display(0xC0,(uint16_t)g_sht2x_param.HUMI_HM,2);//显示湿度
Display_Count = 0;//计数清零
}
调用send_LED_Display(),显示温湿度。
常见问题
-
弹出警告窗口,不能下载程序。
- 请确认CCDebugger驱动否安装。
- 轻按CCDebugger仿真器的按键,指示灯不是绿色连接有问题。
- CCDebugger仿真器是否正常接入到底座,参考实验步骤第一步。
-
下载代码后程序没观察到实验现象。
- 请重新上电,或者按下底座上的复位按键。
- 模块没有安装稳妥。
实验思考
-
修改代码实验实现温湿度数据2秒更新一次。
-
每200ms采集一次温湿度数据。采集5次,取平均数。再显示。