查看: 7413|回复: 30

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 ' ...

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

    本版积分规则

    热门推荐

    KittenBot杯第六届开源硬件开发大赛启动啦
    KittenBot杯第六届开源硬
    大赛简介: 第六届开源硬件开发大赛由Arduino中文社区发起 由KittenBot冠名赞助
    全过程展示:PWM自定义、测速、PID调速、PID自整定
    全过程展示:PWM自定义、
    arduino如何控制带驱动28步进电机
    arduino如何控制带驱动28
    有大佬知道吗,arduino不知道能不能发出脉冲信号
    Wifiduino(esp8266)+blinker+微信消息推送
    Wifiduino(esp8266)+bli
    最近呢,有个很小的项目 需要反馈现场电源工作状态,着急开发,没时间做方案。我又是
    因为DHT11是假的吗?
    因为DHT11是假的吗?
    用DHT11测温湿度时,监视窗口总是这样显示,这是为什么啊,求大佬告知!
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表