利用Arduino制作一个电子温度、湿度记
所需元件:
1. Arduino UNO开发板(核心部件)
2. LCD 1602A显示屏(显示测量数据)
3. 10kohm旋转变阻器(用于控制LCD显示对比度)
4. DHT11传感器元件 (温度和湿度测量元件)
元件接线方式:
Arduino | LCD 1602A | DHT11 | R |
5V | VDD | VCC | 1 |
GND | VSS,RW | GND | 3 |
2 | D7 | - | - |
3 | D6 | - | - |
4 | D5 | - | - |
5 | D4 | - | - |
11 | E | - | - |
12 | RS | - | - |
7 | - | DATA | - |
- | V0 | - | 2 |
这里采用的是简化版的接线,去除了滤波电容以及上拉电阻,典型的DHT11电路图参看下图。
与LM35模拟温度传感器采集模拟信号(电压)并配合Arduino的模拟输入管脚进行温度测量不同的是,DHT11 元件的输出是一系列的高低电平,模拟信号转数数字信号的过程是由DHT11元件自己完成的。Arduino只需要通过DHT11的DATA管脚与其进行通行,即可获得当前环境的温度和湿度。(具体的通信说明参见DHT11的说明,在这里我采用了SimpleDHT这个库,避免重复造轮,提高开发效率~)
而LCD 1602A采用了,LiquidCrystal库。
以下是温度湿度记的程序源代码:
(各条语句的作用参看程序段中的注释哈~)
#include <LiquidCrystal.h>
#include <SimpleDHT.h>
// 指定DHT11的DATA管脚连接位置
int pinDHT11 = 7;
SimpleDHT11 dht11(pinDHT11);
// initialize the library by associating any needed LCD interface pin
// 分配lcd屏幕的管脚连接
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
// set up the LCD's number of columns and rows:
// lcd 屏幕的初始化,1602A的屏幕为16列2行
lcd.begin(16, 2);
}
void loop() {
byte temperature = 0;//初始化温度变量
byte humidity = 0;//初始化湿度变量
int err = SimpleDHTErrSuccess;//初始化错误信息,SimpleDHTErrSuccess表示成功获取温度湿度
lcd.setCursor(0, 0);//将lcd的光标移到左上角(0行0列)
// 判断是否读取错误,读取错误则在lcd显示错误信息
if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
lcd.print("Read DHT11 failed, err="); lcd.print(SimpleDHTErrCode(err));
lcd.print(","); lcd.println(SimpleDHTErrDuration(err)); delay(1000);
return;
}
//显示温度和湿度信息
lcd.print(temperature); lcd.print("C");
//光标移动至0列1行,即第二行开头
lcd.setCursor(0, 1);
lcd.print(humidity); lcd.print("H");
// DHT11 sampling rate is 1HZ.
delay(1500);
}
DTH11的DATA管脚尽量不要与Arduino UNO的0,1管脚相连,因为这两个管脚是Arduino UNO的通信管脚,使用了0,1管脚会使得Arduino的通信与DHT11互相干扰,虽然这里我们没有用到TX,RX管脚与计算机通信(・∀・(・∀・(・∀・*)
本文来自博客园,作者:逸笔
转载请注明原文链接:https://www.cnblogs.com/1blog/p/15186569.html