利用Arduino制作一个电子温度、湿度记

所需元件:

1. Arduino UNO开发板(核心部件)

 

2. LCD 1602A显示屏(显示测量数据)

3. 10kohm旋转变阻器(用于控制LCD显示对比度)

4. DHT11传感器元件 (温度和湿度测量元件)

 元件接线方式:

ArduinoLCD 1602ADHT11R
5VVDDVCC1
GNDVSS,RWGND3
2D7--
3D6--
4D5--
5D4--
11E--
12RS--
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管脚与计算机通信(・∀・(・∀・(・∀・*)

posted @ 2021-07-16 20:34  逸笔  阅读(463)  评论(0编辑  收藏  举报