Arduino和C51开发DHT11温湿度传感器

技术:51单片机、Arduino、DHT11、温湿度传感器、传感器
 

概述

学习单片机离不开对传感器的学习,本文主要介绍DHT11温湿度传感器的使用方法,同学也可以了解更多的传感器,这对你以后开发产品的思维有很大的帮助

详细

一、DHT11温度传感器

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。

 

技术参数:

  • 供电电压: 3.3~5.5V DC

  • 输 出: 单总线数字信号

  • 测量范围: 湿度20-90%RH, 温度0~50℃

  • 测量精度: 湿度+-5%RH, 温度+-2℃

  • 分 辨 率: 湿度1%RH, 温度1℃

  • 互 换 性: 可完全互换 ,

  • 长期稳定性: <±1%RH/年

     

二、51单片机串口显示时钟

硬件连接:

图片1.png

DHT11进行初始化,接着接收数据位发送过来的数据,并将他保存到my_dat数组中:

void DHT11_receive()      //接收40位的数据
{
    uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise; 
    DHT11_start();
    if(Data==0)
    {
        while(Data==0);   //等待拉高     
        DHT11_delay_us(40);  //拉高后延时80us
        R_H=DHT11_rec_byte();    //接收湿度高八位  
        R_L=DHT11_rec_byte();    //接收湿度低八位  
        T_H=DHT11_rec_byte();    //接收温度高八位  
        T_L=DHT11_rec_byte();    //接收温度低八位
        revise=DHT11_rec_byte(); //接收校正位
 
        DHT11_delay_us(25);    //结束
 
        if((R_H+R_L+T_H+T_L)==revise)      //校正
        {
            RH=R_H;
            RL=R_L;
            TH=T_H;
            TL=T_L;
        } 
        /*将数据存储到my_dat中*/
        my_dat[0]='0'+(RH/10);
        my_dat[1]='0'+(RH%10);
        my_dat[2]='%';
        my_dat[3]=' ';
        my_dat[4]=' ';
        my_dat[5]='0'+(TH/10);
        my_dat[6]='0'+(TH%10);
        my_dat[7]='C';
    }
}

main函数中进行串口初始话、接收温湿度和发送温湿度到串口:

void main()
{
   UsartInit();
   DHT11_delay_ms(1000);    //DHT11上电后要等待1S以越过不稳定状态   
   while(1)
   {   
       DHT11_receive();
       printf("%c",my_dat[0]); 
   printf("%c",my_dat[1]);   
   printf("%c",my_dat[2]);   
   printf("%c",my_dat[3]);   
   printf("%c",my_dat[4]);   
   printf("%c",my_dat[5]);   
   printf("%c",my_dat[6]);   
   printf("%c",my_dat[7]);
   printf("\n"); 
   DHT11_delay_ms(1000);        
   }
}

最后串口打印情况如下:

1545370700037004584.png

三、Arduino串口显示时钟

硬件连接:

图片3.png

编译烧写前,你还需要:

  1. 右击Arduino软件->打开文件所在的位置

  2. 将本项目代码文件夹中的DHT11文件夹复制到libraries文件夹中

图片4.png

这样我们代码中才能使用DHT11这个头文件,代码如下:

#include <dht11.h>            //定义头文件dht11.h
#define DHT11PIN 2            //定义Data引脚为D2
dht11 DHT11;                  //实例化DHT11对象
int chk,tem,hum;
 
void setup() {                   
  Serial.begin(9600);              //串口初始化
  pinMode(DHT11PIN,OUTPUT);  
}
 
void loop() {                      
  chk = DHT11.read(DHT11PIN);     //读取D2引脚电平值
  tem=(float)DHT11.temperature;  //将温度值赋值给tem
  hum=(float)DHT11.humidity;  //将湿度值赋给hum
  Serial.print("Tempeature:");   //打印出Tempeature:
  Serial.println(tem);        //打印温度结果
 
  Serial.print("Humidity:"); //打印出Humidity:
  Serial.print(hum);         //打印出湿度结果
  Serial.println("%");       //打印出%
 
  delay(1000);     
}

温湿度显示功能如下:

1545370771125065177.png

四、总结

本文实现51单片机和Arduino串口显示温湿度功能,让读者对DHT11能够更好的理解,如果想深入了解DHT11具体实现和其他的功能,大家可以自行上网搜索资料,后面也会教大家在LCD和OLED显示屏上显示温湿度值,感谢你的支持!!!

 

五、项目结构图

 

图片6.png

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

posted on 2019-03-09 22:10  demo例子集  阅读(1615)  评论(0编辑  收藏  举报

导航