1. 程式人生 > >Arduino和C51開發DHT11溫濕度傳感器

Arduino和C51開發DHT11溫濕度傳感器

等待 print 軟件 title arduino brush tom lib dht11

技術:51單片機、Arduino、DHT11、溫濕度傳感器、傳感器

概述

學習單片機離不開對傳感器的學習,本文主要介紹DHT11溫濕度傳感器的使用方法,同學也可以了解更多的傳感器,這對你以後開發產品的思維有很大的幫助

詳細

代碼下載:http://www.demodashi.com/demo/14729.html

一、DHT11溫度傳感器

DHT11數字溫濕度傳感器是一款含有已校準數字信號輸出的溫濕度復合傳感器,它應用專用的數字模塊采集技術和溫濕度傳感技術,確保產品具有極高的可靠性和卓越的長期穩定性。傳感器包括一個電阻式感濕元件和一個NTC測溫元件,並與一個高性能8位單片機相連接。

技術參數:

  • 供電電壓: 3.3~5.5V DC

  • 輸 出: 單總線數字信號

  • 測量範圍: 濕度20-90%RH, 溫度0~50℃

  • 測量精度: 濕度+-5%RH, 溫度+-2℃

  • 分 辨 率: 濕度1%RH, 溫度1℃

  • 互 換 性: 可完全互換 ,

  • 長期穩定性: <±1%RH/年

二、51單片機串口顯示時鐘

硬件連接:

技術分享圖片

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);        
   }
}

最後串口打印情況如下:

技術分享圖片

三、Arduino串口顯示時鐘

硬件連接:

技術分享圖片

編譯燒寫前,你還需要:

  1. 右擊Arduino軟件->打開文件所在的位置

  2. 將本項目代碼文件夾中的DHT11文件夾復制到libraries文件夾中

技術分享圖片

這樣我們代碼中才能使用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);     
}

溫濕度顯示功能如下:

技術分享圖片

四、總結

本文實現51單片機和Arduino串口顯示溫濕度功能,讓讀者對DHT11能夠更好的理解,如果想深入了解DHT11具體實現和其他的功能,大家可以自行上網搜索資料,後面也會教大家在LCD和OLED顯示屏上顯示溫濕度值,感謝你的支持!!!

五、項目結構圖

技術分享圖片

代碼下載:http://www.demodashi.com/demo/14729.html

註:本文著作權歸作者,由demo大師發表,拒絕轉載,轉載需要作者授權

Arduino和C51開發DHT11溫濕度傳感器