Arduino 101 实验04 - 温湿度传感器,做一块环境看板

« 返回 Arduino101 平台  IoT 专题

实验04:温湿度环境看板

这个实验做完你会得到什么

手机上同时显示当前温度和湿度,并给出一句舒适度判断(干燥 / 舒适 / 潮湿)。 对着传感器哈口气,湿度数字明显往上跳。

项目 说明
难度 ★★☆☆☆
用时 约 35 分钟
前置 实验03:读一个按钮

改编自 MIT 官方教程 Humidity SensorTemperature Sensor。这两篇用的是同一个 DHT 传感器、同一个组件Arduino101Humidity 同时提供温度和湿度),所以合并成一篇。 完成品工程:Arduino101Humidity.aia


一、器材清单

器材 数量 说明
Arduino 101 1  
Seeed Grove 扩展板 1  
Grove 温湿度传感器(DHT11/DHT22) 1  

二、接线

传感器插在 Grove 扩展板的 D4 接口(数字口,不是模拟口)。

固件:.ino 里把 HUMIDITY 设为 ENABLED,其余 DISABLED,上传。 库要装好 DHT-sensor-libraryAdafruit Unified Sensor(见 实验00 第四节)。

DHT 是数字传感器,虽然测的是连续量,但走的是单总线数字协议,所以插 D 口不是 A 口。 这跟后面光照、土壤那几个模拟传感器不一样。


三、界面组件

组件 命名 关键属性
标签 标签_温度 字号 40、粗体,文本「–」
标签 标签_湿度 字号 40、粗体,文本「–」
标签 标签_舒适度 字号 20,文本「等待数据」
Arduino101Humidity Arduino101Humidity1 不可见,BluetoothDevice = BluetoothLE1Pin = 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 度 传感器贴着板子,受板子发热影响。用延长线拉远一点

六、下一步


相关文档

文档反馈