Arduino中文教程----认识DHT11温湿度传感器并制作温度报警器

in #utopian-io6 years ago (edited)

What Will I Learn?

  • 认识Arduino 的DHT11温湿度传感器

  • 编写程序获取温湿度传感器的数值

  • 制作温度报警器

    GIF.gif

Requirements

  • Arduino UNO

    图片.png

  • Arduino IDE开发环境

    图片.png

  • Arduino DHT11温湿度传感器

    图片.png

Difficulty

  • 基础

Tutorial Contents

一、认识Arduino 的DHT11温湿度传感器

DHT传感器由电容式湿度传感器和热敏电阻两部分组成。除此之外,模块内部还做了一些模拟信号到数字信号的转换,将温湿度以数字信号方式输出。

DHT11温湿度传感器特性如下:

  • 成本较低,更适合于DIY
  • 供电3.3-5V均可
  • 2.5ma最大电流
  • 20-80%湿度读数精度在5%之内
  • 0-50°C温度读数在精度±2°C
  • 频率不超过1赫兹,相当于每秒钟一次
  • 模块尺寸较小,15.5mm x 12mm x 5.5mm

DHT11模块有三个引脚加一个LED

  • VCC :连接供电电源的正极
  • DAT :将数字信号输出
  • GND : 连接供电电源的负极
  • 电源指示 : 模块正常供电时会亮

二、编编写程序获取温湿度传感器的数值

  • 连接Arudino UNO与DHT11温湿度传感器

    如上图,DHT11温湿度传感器引脚有三个

    • GND
    • VCC
    • DAT
    Arduino UNODHT11温湿度传感器
    GNDGND
    5VVCC
    D8DAT

    图片.png

  • 编写程序获取DHT11温湿度传感器的数字信号

    • 下载DHT11的库文件

    • 解压文件并添加至arudino安装路径下的libraries

      图片.png

    • 引入DHT11库文件

      #include <dht11.h>  
        
      dht11 DHT11;  
      

    • 定义变量

       #define PIN_DHT11 8 
       float temp,humi;
      
    • setup()初始化。

      这里大家可能会有疑惑,为什么要获取DHT11模块的数字信号,但是不用初始化设定该引脚为输入模式呢?

      其实是需要的,但是已经在库文件中定义设定了,所以在这里不必重复设定

      void setup() {
        Serial.begin(9600);  
        temp=0;
        humi=0;
      }
      
      
    • loop()写入主体函数

      void loop() {
        DHT11.read(PIN_DHT11);  
        humi = (float)DHT11.humidity;
        temp = (float)DHT11.temperature;
        Serial.println(humi, 2);  
        Serial.println(temp, 2);  
      }
      
      
  • 连接Arduino UNO至电脑

    图片.png

  • 编译并上传程序至Arduino UNO

    图片.png

  • 测试效果

    • 接上USB运行Arduino程序的时候,可以见到DHT11模块的LED是亮着的,说明模块正常供电

      图片.png

    • 测试的时候,可以向模块哈气,以增加温度与湿度看数据的输出变化

      GIF.gif

三、制作温度报警器

  • 基于步骤二,连接LED与Arduino UNO

    LEDArduino UNO
    短脚GND
    长脚D10

    图片.png

  • 基础步骤二的程序整合上LED程序

    需求分析,这里我们只是用到DHT11提供的温度

    • 当温度大于23的时候,点亮LED
    • 当温度小于23的时候,熄灭LED

    定义变量

    #define PIN_DHT11 8 
    float temp,humi;
    

    setup()初始化

    void setup() {
      Serial.begin(9600);  
      pinMode(10,OUTPUT);
      temp=0;
      humi=0;
    }
    

    loop()函数主体

    void loop() {
      DHT11.read(PIN_DHT11);  
      Serial.print("Humidity (%): ");  
      humi = (float)DHT11.humidity;
      Serial.println(humi, 2);  
      Serial.print("Temperature (oC): ");  
      temp = (float)DHT11.temperature;
      Serial.println(temp, 2);  
      if(temp > 23)
        digitalWrite(10,HIGH);
      else
        digitalWrite(10,LOW);
      delay(500); 
    }
    

    整合全部程序:

    #include <dht11.h>  
      
    dht11 DHT11;  
    #define PIN_DHT11 8 
    float temp,humi;
    void setup()  
    {  
      Serial.begin(9600);  
      pinMode(10,OUTPUT);
      temp=0;
      humi=0;
    }  
      
    void loop()  
    {  
      DHT11.read(PIN_DHT11);  
      Serial.print("Humidity (%): ");  
      humi = (float)DHT11.humidity;
      Serial.println(humi, 2);  
      Serial.print("Temperature (oC): ");  
      temp = (float)DHT11.temperature;
      Serial.println(temp, 2);  
      if(temp > 23)
        digitalWrite(10,HIGH);
      else
        digitalWrite(10,LOW);
      delay(500);  
    }  
    
  • 编译并上传程序测试效果

    GIF.gif

Curriculum



Posted on Utopian.io - Rewarding Open Source Contributors

Sort:  

Coin Marketplace

STEEM 0.27
TRX 0.12
JST 0.032
BTC 57369.97
ETH 2943.81
USDT 1.00
SBD 3.63