查看: 8583|回复: 35

DHT11 温度湿度测试+1602 LCD显示

[复制链接]
  • TA的每日心情
    开心
    2018-9-20 15:06
  • 签到天数: 279 天

    [LV.8]以坛为家I

    发表于 2017-4-11 14:24 | 显示全部楼层 |阅读模式
    论坛里很多同学都用DHT11做温度湿度测试,实际看起来没什么特别的,可是还是有同学遇到些问题,刚好买其他东西,就顺手当了一个DHT11传感器,反正便宜,到网上当了一个DHT11的库,直接用示例,连上线,上传,串口显示正常;找出I2C模块,随便找了片1602LCD,直接接上,打印输出~~~~~  因为是数字的传感器,温度和湿度应该都算准确;以前试过LM35十分不准确,后来自己试过用NTC,要自己计算(http://www.arduino.cn/thread-42661-1-1.html),有点复杂,这个有人写出现成的库,变的特别简单:
    497886156599145508.jpg 701558552267290124.jpg

    代码如下,使用DHT11库示例,没研究,数值计算什么的,自己加入了LCD显示的内容,其他的没什么特别:
    [kenrobot_code]

    double Fahrenheit(double celsius)
    {
            return 1.8 * celsius + 32;
    }    //摄氏温度度转化为华氏温度

    double Kelvin(double celsius)
    {
            return celsius + 273.15;
    }     //摄氏温度转化为开氏温度

    // 露点(点在此温度时,空气饱和并产生露珠)
    // 参考: http://wahiduddin.net/calc/density_algorithms.htm
    double dewPoint(double celsius, double humidity)
    {
            double A0= 373.15/(273.15 + celsius);
            double SUM = -7.90298 * (A0-1);
            SUM += 5.02808 * log10(A0);
            SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
            SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
            SUM += log10(1013.246);
            double VP = pow(10, SUM-3) * humidity;
            double T = log(VP/0.61078);   // temp var
            return (241.88 * T) / (17.558-T);
    }

    // 快速计算露点,速度是5倍dewPoint()
    // 参考: http://en.wikipedia.org/wiki/Dew_point
    double dewPointFast(double celsius, double humidity)
    {
            double a = 17.271;
            double b = 237.7;
            double temp = (a * celsius) / (b + celsius) + log(humidity/100);
            double Td = (b * temp) / (a - temp);
            return Td;
    }

    #include <dht11.h>
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    LiquidCrystal_I2C lcd(0x3F,16,2);  

    dht11 DHT11;

    #define DHT11PIN 2

    void setup()
    {
      Serial.begin(9600);
      Serial.println("DHT11 TEST PROGRAM ");
      Serial.print("LIBRARY VERSION: ");
      Serial.println(DHT11LIB_VERSION);
      Serial.println();
      lcd.init();                      // initialize the lcd
      lcd.init();
      lcd.backlight();

    }

    void loop()
    {
      Serial.println("\n");

      int chk = DHT11.read(DHT11PIN);

      Serial.print("Read sensor: ");
      switch (chk)
      {
        case DHTLIB_OK:
                    Serial.println("OK");
                    break;
        case DHTLIB_ERROR_CHECKSUM:
                    Serial.println("Checksum error");
                    break;
        case DHTLIB_ERROR_TIMEOUT:
                    Serial.println("Time out error");
                    break;
        default:
                    Serial.println("Unknown error");
                    break;
      }

      Serial.print("Humidity (%): ");
      Serial.println((float)DHT11.humidity, 2);

      Serial.print("Temperature (oC): ");
      Serial.println((float)DHT11.temperature, 2);

      Serial.print("Temperature (oF): ");
      Serial.println(Fahrenheit(DHT11.temperature), 2);

      Serial.print("Temperature (K): ");
      Serial.println(Kelvin(DHT11.temperature), 2);

      Serial.print("Dew Point (oC): ");
      Serial.println(dewPoint(DHT11.temperature, DHT11.humidity));

      Serial.print("Dew PointFast (oC): ");
      Serial.println(dewPointFast(DHT11.temperature, DHT11.humidity));
      lcd.setCursor(0,0);
      lcd.print("Hum(%): ");
      lcd.setCursor(10,0);
       lcd.print((float)DHT11.humidity, 2);
        lcd.setCursor(0,1);
      lcd.print("Temp(oC): ");
      lcd.setCursor(10,1);
       lcd.print((float)DHT11.temperature, 2);
       

      delay(2000);
    }[/kenrobot_code]
    打赏一点,努力一点
  • TA的每日心情
    开心
    2018-9-20 15:06
  • 签到天数: 279 天

    [LV.8]以坛为家I

     楼主| 发表于 2017-4-11 14:30 | 显示全部楼层
    忘记上传串口打印信息~ DH11.jpg

    看出来广东有多热了吧~
    打赏一点,努力一点
  • TA的每日心情
    无聊
    2018-7-17 17:38
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2017-4-11 14:42 | 显示全部楼层
    DHT系列准确个鬼,我买了几个,个个出来的数都不同,尤其是湿度,相差可以达到20...........
  • TA的每日心情
    开心
    2018-9-20 15:06
  • 签到天数: 279 天

    [LV.8]以坛为家I

     楼主| 发表于 2017-4-11 16:17 | 显示全部楼层
    真不知道,没有对比过,反正我日常使用中,NTC是十分准确的,对于湿度,还没有用过传感器
    打赏一点,努力一点

    该用户从未签到

    发表于 2017-7-3 13:48 | 显示全部楼层
    有接线图吗,分享下,我也想做一个

    该用户从未签到

    发表于 2017-7-3 13:52 | 显示全部楼层
    好厉害啊啊啊啊啊啊啊
  • TA的每日心情
    开心
    2018-9-20 15:06
  • 签到天数: 279 天

    [LV.8]以坛为家I

     楼主| 发表于 2017-7-4 08:50 | 显示全部楼层
    gaoshenquan 发表于 2017-7-3 13:48
    有接线图吗,分享下,我也想做一个

    这个接线太简单了吧?DHT11 共3个接口,VCC接5V  GND接GND,输出接主板的一个IO, 1602LCD更简单,直接挂I2C的两条线,然后接电源就行了~
    打赏一点,努力一点
  • TA的每日心情

    2017-7-26 23:42
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2017-7-27 00:44 | 显示全部楼层
    我的怎么一直提示sketch_jul27c:109: error: stray '\240' in program

    sketch_jul27c:109: error: stray '\302' in program

    sketch_jul27c:109: error: stray '\240' in program

    sketch_jul27c:110: error: stray '\302' in program

    聽  delay  (2000);
    楼主求救
    打赏作者鼓励一下!
  • TA的每日心情
    开心
    2018-9-20 15:06
  • 签到天数: 279 天

    [LV.8]以坛为家I

     楼主| 发表于 2017-7-27 08:21 | 显示全部楼层
    wangbo13 发表于 2017-7-27 00:44
    我的怎么一直提示sketch_jul27c:109: error: stray '\240' in program

    sketch_jul27c:109: error: stray ' ...

    检查代码是不是有全角输入的~~~
    打赏一点,努力一点
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    博哥零基础教你玩转ESP8266(十三) ESP8266WiFiGeneric库
    博哥零基础教你玩转ESP826
    帖子导航帖 博哥零基础教你玩转ESP8266(一) 重识ESP8266 博哥零基础教你玩转ESP8266
    求助!WeMos D1 WiFi怎么接0.96寸OLED?(ㄒoㄒ)
    求助!WeMos D1 WiFi怎么
    求助!WeMos D1 WiFi怎么接0.96寸OLED?(ㄒoㄒ) 想用WeMos D1 WiFi接收服务器的数据然
    串口发送16进制指令求助
    串口发送16进制指令求助
    我准备串口发出16进制指令到我的外置设备 代码如下图 我分别监控ARDUINO的tx口和USB口
    一文教你选择Arduino开发板,小白进
    一文教你选择Arduino开发
    笔者在2016年接触了Arduino,跳了万条坑,行了千里弯,到今天也算是Arduino的一
    大神们!1602显示屏上的MQ2浓度示数不是实时监测的何解
    大神们!1602显示屏上的MQ
    本人小白,刚刚接触arduino,长时间的查阅资料后,通过复制修改代码接线实现了DHT11实
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表