实验04:温湿度环境看板
这个实验做完你会得到什么
手机上同时显示当前温度和湿度,并给出一句舒适度判断(干燥 / 舒适 / 潮湿)。 对着传感器哈口气,湿度数字明显往上跳。
| 项目 | 说明 |
|---|---|
| 难度 | ★★☆☆☆ |
| 用时 | 约 35 分钟 |
| 前置 | 实验03:读一个按钮 |
改编自 MIT 官方教程 Humidity Sensor 与 Temperature Sensor。这两篇用的是同一个 DHT 传感器、同一个组件(
Arduino101Humidity同时提供温度和湿度),所以合并成一篇。 完成品工程:Arduino101Humidity.aia
一、器材清单
| 器材 | 数量 | 说明 |
|---|---|---|
| Arduino 101 | 1 | |
| Seeed Grove 扩展板 | 1 | |
| Grove 温湿度传感器(DHT11/DHT22) | 1 |
二、接线
传感器插在 Grove 扩展板的 D4 接口(数字口,不是模拟口)。
固件:.ino 里把 HUMIDITY 设为 ENABLED,其余 DISABLED,上传。
库要装好 DHT-sensor-library 和 Adafruit Unified Sensor(见 实验00 第四节)。
DHT 是数字传感器,虽然测的是连续量,但走的是单总线数字协议,所以插 D 口不是 A 口。 这跟后面光照、土壤那几个模拟传感器不一样。
三、界面组件
| 组件 | 命名 | 关键属性 |
|---|---|---|
| 标签 | 标签_温度 |
字号 40、粗体,文本「–」 |
| 标签 | 标签_湿度 |
字号 40、粗体,文本「–」 |
| 标签 | 标签_舒适度 |
字号 20,文本「等待数据」 |
| Arduino101Humidity | Arduino101Humidity1 |
不可见,BluetoothDevice = BluetoothLE1、Pin = 4 |
四、分步搭代码块
第 1 步:连上就订阅两路数据
when BluetoothLE1.Connected() {
标签_状态.Text = "已连接,正在读数"
Arduino101Humidity1.RequestTemperatureUpdates()
Arduino101Humidity1.RequestHumidityUpdates()
}
中途验证:状态标签更新。
温度和湿度是两个独立订阅,各订各的。只订一个的话,另一个的事件永远不触发。
第 2 步:分别接收并显示
global 温度 = 0
global 湿度 = 0
when Arduino101Humidity1.TemperatureReceived(temperature) {
global 温度 = temperature
标签_温度.Text = join(round(temperature), "℃")
}
when Arduino101Humidity1.HumidityReceived(humidity) {
global 湿度 = humidity
标签_湿度.Text = join(round(humidity), "%")
}
中途验证:两个数字都开始显示。对着传感器哈气,湿度会明显上升然后慢慢回落。
第 3 步:给一句舒适度判断
global 温度 = 0
global 湿度 = 0
when Arduino101Humidity1.HumidityReceived(humidity) {
global 湿度 = humidity
标签_湿度.Text = join(round(humidity), "%")
if 湿度 < 30 {
标签_舒适度.Text = "干燥,建议加湿"
标签_舒适度.TextColor = "&HFFEF6C00"
} else if 湿度 > 70 {
标签_舒适度.Text = "潮湿,注意通风"
标签_舒适度.TextColor = "&HFF1E88E5"
} else {
标签_舒适度.Text = "舒适"
标签_舒适度.TextColor = "&HFF43A047"
}
}
中途验证:哈气让湿度超过 70%,提示变成蓝色的「潮湿,注意通风」。
30% / 70% 是常见的室内舒适区间参考值,按你所在地区的气候调整。
第 4 步:收尾
when Screen1.BackPressed() {
Arduino101Humidity1.StopTemperatureUpdates()
Arduino101Humidity1.StopHumidityUpdates()
BluetoothLE1.Disconnect()
}
五、排错表
| 现象 | 原因与处理 |
|---|---|
| 两个数字都不出来 | ① 没订阅;② Pin 不是 4;③ 固件里 HUMIDITY 没设 ENABLED |
| 只有温度没有湿度(或反之) | 两路要分别订阅,少调了一个 Request |
编译固件报找不到 DHT.h |
DHT-sensor-library 没装,见 实验00 |
| 数值明显不对(如 -999、0) | 传感器插在了 A 口。DHT 是数字传感器,必须插 D 口 |
| 读数几秒才更新一次 | 正常。DHT11 的采样率本来就只有 1Hz 左右,这是硬件限制 |
| 温度偏高 2~3 度 | 传感器贴着板子,受板子发热影响。用延长线拉远一点 |
六、下一步
- 实验05:光照传感器 —— 第一个模拟传感器,插 A 口
- 想把温湿度画成折线图:参考 动态图表教程
相关文档
- Arduino101Humidity 组件参考
- 官方原版教程(英文,已标注过时):湿度 / 温度
扫码添加客服咨询