折腾来折腾去

pikipity的blog

用 Arduino 测量温度和湿度

今天中秋放假闲在宿舍里,于是就用 Arduino 做了一个测量温度和湿度的小装置,使用 DHT11 测量温度和湿度,然后用 LCD1602 来显示。

这里有一个 DHT11 的简单介绍,包括引脚的意义和解法还有一个 Arduino 的例程。DHT11 的使用还是很简单的,基本思路就是先发送给 DHT11 一个信号,将其激活,成功激活后,DHT11 会返回一个信号,之后 DHT11 就会连续发送40位的二进制数据,这40bits的数据包括湿度数值、温度数值和校检数值,其中湿度数值和温度数值都是16位的定点二进制小数(定点二进制小数在这里有介绍),其中前8位为整数位,后8位为小数位,具体排列如下:

8位湿度整数位 8位湿度小数位 8位温度整数位 8位温度小数位 8位校检数值

DHT11 具体操作步骤如下:

  1. 发送启动信号:拉低引脚至少18ms,拉高引脚20us到40us
  2. 检测 DHT11 的返回信号:如果可以检测到一个低信号80us,然后一个高信号80us,则启动成功,进入下一步开始接受数据,否则启动失败。
  3. 开始接受数据:低信号时等待下一位数据,高信号时计算高信号的宽度,如果是26us到28us,则此位为“0”,如果是70us,则此位为“1”,共40位。

使用 DHT11 要注意的是:

  1. 湿度单位为“%RH”(相对湿度),温度单位为“℃”(摄氏度)。
  2. 它的精度并不高,湿度误差为±5%RH,温度为±2℃。
  3. 校检数值使用方法:如果湿度整数位加上温度整数位等于校检数值,那么传输无误,否则存在传输错误。
  4. 采样周期不得小于1秒钟

LCD1602 就简单很多了,直接使用 Arduino 自带的 “LiquidCrystal” 库就可以很轻松的进行控制了,库中所包含的函数、使用方法和例程可以到这里看 “LiquidCrystal” 官方说明文档

以下是我设计的电路:

面包板连接图

电路连接图

程序可以到这里下载。其中 “DHT11_Arduino” 文件夹中是对 DHT11 的测试,用的是串口显示测量结果,“LCD_Arduino” 文件夹中是对 LCD1602 的测试,显示的 “hello World",“display” 文件夹中是整个的代码,"Sketch” 中是电路图和结果图。

最终结果如下:

结果



Comments