first commit

This commit is contained in:
2024-09-05 13:29:00 +08:00
commit 53515a5a50
75 changed files with 3863 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

View File

@@ -0,0 +1,207 @@
<img src="222.png" alt="cover" style="zoom: 150%;" />
---
[TOC]
---
**实验分工**
| 姓名 | 学号 | 分工 |
| :----: | :------: | :----------------------------------------------------------- |
| 柯劲帆 | 21281280 | 负责实验代码的解读,分析了代码的整体思想与运行流程,设计了最后的报警展示效果。 |
| 李桦炅 | 21281282 | 协助进行实验代码解读分析了LCD可实行的温湿度阈值使得可以展示出实验效果。 |
| 王子励 | 21281292 | 撰写实验报告,与小组成员积极沟通,记录实验进程。 |
| 李志民 | 20281146 | 参与报告撰写,记录实验当中遇到的问题并总结。 |
# 实验二 传感层数据收集实验
## 1. 实验目的
学习使用CC2530及相应的模块采集温湿度光电信号 并针对温湿度电传感器的编程通过Zigbee网络将传感器节点与协调器连接协调器通过Zigbee网络收集传感器的数据将部分收集到的数据显示在LCD上以显示成功收集数据。
## 2. 工具/原料
- 装有IAR的PC机一台。
- 22530仿真器usb线A型转B型
- 无限节点模块带LCD的智能主板温湿度传感器模块。
## 3. 实验原理及其说明
本实验将使用 CC2530 读取温湿度传感器 SHT10 的温度和湿度数据,并通过 CC2530 内部的 ADC 得到光照传感器的数据。最后将采样到的数据转换然后在 LCD 上显示。其中对温湿度的读取是利用 CC2530 的 I/OP1.0 和 P1.1)模拟一个类 IIC 的过程。对光照的采集使用内部的 AIN0 通道。光照和温湿度传感器
SHT10 是一款高度集成的温湿度传感器芯片, 提供全标定的数字输出。它采用专利的 CMOSens 技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电容性聚合体测湿敏感元件、一个用能隙材料制成的测温元件,并在同一芯片上,与 14 位的 A/D 转换器以及串行接口电路实现无缝连接。
**SHT10 引脚特性如下:**
1. VDDGND SHT10 的供电电压为 2.4~5.5V。传感器上电后,要等待 11ms 以越过“休眠”状态。在此期间无需发送任何指令。电源引脚VDDGND之间可增加一个 100nF 的电容,用以去耦滤波。
2. SCK 用于微处理器与 SHT10 之间的通讯同步。由于接口包含了完全静态逻辑,因而不存在最小 SCK 频率。
3. DATA 三态门用于数据的读取。DATA 在 SCK 时钟下降沿之后改变状态,并仅在 SCK 时钟上升沿有效。数据传输期间,在 SCK 时钟高电平时DATA 必须保持稳定。为避免信号冲突,微处理器应驱动 DATA 在低电平。需要一个外部的上拉电阻例如10kΩ将信号提拉至高电平。上拉电阻通常已包含在微处理器的 I/O 电路中。
**向 SHT10 发送命令:**
用一组“ 启动传输”时序,来表示数据传输的初始化。它包括:当 SCK 时钟高电平时 DATA 翻转为低电平,紧接着 SCK 变为低电平,随后是在 SCK 时钟高电平时 DATA 翻转为高电平。后续命令包含三个地址位目前只支持“000”和五个命令位。SHT10 会以下述方式表示已正确地接收到指令:在第 8 个 SCK 时钟的下降沿之后,将 DATA 拉为低电平ACK 位)。在第 9 个 SCK 时钟的下降沿之后,释放 DATA恢复高电平
**测量时序(RH 和 T)**
发布一组测量命令00000101表示相对湿度 RH00000011表示温度 T控制器要等待测量结束。这个过程需要大约 11/55/210ms分别对应 8/12/14bit 测量。确切的时间随内部晶振速度最多有±15%变化。SHTxx 通过下拉 DATA 至低电平并进入空闲模式,表示测量的结束。控制器在再次触发 SCK 时钟前,必须等待这个“数据备妥”信号来读出数据。检测数据可以先被存储,这样控制器可以继续执行其它任务在需要时再读出数据。接着传输 2 个字节的测量数据和 1 个字节的CRC 奇偶校验。uC 需要通过下拉DATA 为低电平,以确认每个字节。所有的数据从 MSB 开始,右值有效(例如:对于 12bit 数据,从第 5 个 SCK 时钟起算作 MSB 而对于 8bit 数据, 首字节则无意义)。用 CRC 数据的确认位,表明通讯结束。如果不使用 CRC-8 校验,控制器可以在测量值 LSB 后,通过保持确认位 ack 高电平, 来中止通讯。在测量和通讯结束后SHTxx 自动转入休眠模式。
**通讯复位时序:**
如果与 SHTxx 通讯中断,下列信号时序可以复位串口:当 DATA 保持高电平时,触发 SCK 时钟 9 次或更多。在下一次指令前,发送一个“传输启动”时序。这些时序只复位串口,状态寄存器内容仍然保留。更多 SHT10 信息,请参考相应文档。
**光照强度采集:**
光照采集主要是通过用 CC2530 内部的 ADC 来得到 OURS-CC2530 开发板上的光照传感器输出电压。传感器输出电压(连接到 CC2530 的 AIN0)。
## 4. 核心代码
### 4.1. MAIN函数
```c
void main()
{
SET_MAIN_CLOCK_SOURCE(CRYSTAL); // 设置系统时钟源为32MHz晶体振荡器
GUI_Init(); // GUI初始化
GUI_SetColor(1, 0); // 显示色为亮点,背景色为暗点
int t = 0, h = 0;
int t_threshold = 27, h_theshold = 40;
while (1) {
th_read(&t, &h);
char t_string[40] = {0};
char h_string[40] = {0};
sprintf(t_string, "Temperature = %d", t);
sprintf(h_string, "Humidity = %d", h);
// 当任意监控的值超过阈值,设置警报
if (t > t_threshold || h > h_theshold) GUI_ExchangeColor(); // 警报为将显示的背景颜色设置为深色
// 在LCD屏幕上显示温湿度
GUI_PutString5_7(0, 0, t_string);
GUI_PutString5_7(0, 15, h_string);
LCM_Refresh();
if (t > t_threshold || h > h_theshold) GUI_ExchangeColor();
}
}
```
实现逻辑为:
1. 初始化LCD屏幕
2. 设置温湿度报警阈值;
3. 调用`th_read()`读取温湿度;
4. 将温湿度信息写进字符串;
5. 判断温湿度是否超过了阈值。若是,调用`GUI_ExchangeColor()`将背景颜色设置为深色,表示报警;否则不变;
6. 在LCD屏幕上显示温湿度信息字符串调用函数接口`GUI_PutString5_7()`
7. 结束本轮循环,如果设置了报警,将深色反转回来;
8. 返回3重复循环。
### 4.2. th_read函数
本函数为读取传感器的温湿度的函数。
```c
void th_read(int* t, int* h)
{
unsigned char error, checksum; // 定义错误标志和校验和变量
float humi, temp; // 定义存储原始湿度和温度数据的临时变量
int tmp; // 用于临时存储用于四舍五入计算的变量
initIO(); // 初始化输入输出接口
s_connectionreset(); // 启动传输,准备接收数据
error = 0; // 清除错误标志
error += s_measure(&checksum, 5); // 读取湿度数据并进行校验,错误计数会增加如果有错误发生
humi = d1 * 256 + d2; // 将读取的数据转换为湿度值
error += s_measure(&checksum, 3); // 读取温度数据并进行校验
temp = d1 * 256 + d2; // 将读取的数据转换为温度值
if (error != 0) // 如果有错误发生
s_connectionreset(); // 通信复位,准备重新读取数据
else { // 如果读取成功
// 对温度和湿度数据进行转换和计算,得到最终的值
temp = temp * 0.01 - 44.0;
humi = (temp - 25) * (0.01 + 0.00008 * humi) - 0.0000028 * humi * humi + 0.0405 * humi - 4;
if (humi > 100) humi = 100;
if (humi < 0.1) humi = 0.1;
}
// 对温度值进行四舍五入处理
tmp = (int)(temp * 10) % 10;
if (tmp > 4) temp = temp + 1;
*t = (int)temp; // 返回处理后的温度值
// 对湿度值进行四舍五入处理
tmp = (int)(humi * 10) % 10;
if (tmp > 4) humi = humi + 1;
*h = (int)humi; // 返回处理后的湿度值
}
```
此函数负责读取温度和湿度数据。它初始化通信接口,读取并校验从传感器获得的数据,然后计算出温度和湿度的正确值。
如果数据读取失败,它会重置通信连接。最后,函数通过指针参数返回处理后的温度和湿度值。
## 5. 实验步骤
1. 给智能主板供电。
2. 将一个无线节点模块插入到带LCD的智能主板的相应位置
3. 将温湿度传感器模块插入到智能主板的传感及控制扩展口位置
4. 将CC2530仿真器的一端通过USB线A型转B型连接到PC机另一端通过10Pin下载线连接到智能主板的CC2530 JTAG口J203
5. 将智能主板上电源开关拨至开位置。按下仿真器上的按钮,仿真器上的指示灯为绿色时表示连接成功
6. 将自己改好的程序编译下载到板子上运行,观察现象。
7. 改变温湿度可以向温湿度传感器吹气或将手指按压在传感器上观察LCD上温湿度的变化。
## 6. 实验结果
在LCD板上显示了温湿度的实时测量数据可自行设置阈值来使得lcd板的颜色反转来实现警示的作用。
温湿度正常情况下的显示:
<img src="111.jpg" alt="cover" style="zoom: 25%;" />
温湿度异常,报警的显示:
<img src="666.jpg" alt="cover" style="zoom: 25%;" />
## 7. 实验感想
通过这次的传感层数据收集实验,我深刻体会到了物联网技术在实际应用中的重要性和潜力。实验过程不仅加深了我的理论知识,更重要的是,它提高了我的实践能力和问题解决能力。
一方面实验中使用的CC2530及相关模块为我提供了一个直观的平台让我能够亲手操作和观察温湿度信号的采集过程。这种实践操作使我们对传感器的工作原理和数据通信过程有了更深入的了解。
另一方面团队合作在这次实验中发挥了关键作用。我们每个人都有自己的分工但实验的成功依赖于团队成员之间的有效沟通和协作。在实验过程中我们遇到了一些挑战比如如何优化LCD的显示效果。通过团队讨论和共同努力我们不仅解决了这些问题还增进了团队协作和沟通能力。
总的来说,这次实验不仅让我们对物联网技术有了更深刻的认识,还锻炼了我们的实践操作能力和团队合作能力。我们相信这些经验和技能将在未来学习和职业生涯中发挥重要作用。