查看: 1600|回复: 1

【赚周年币】技术贴 基于Arduino Uno开发板的温湿度检测

[复制链接]
  • TA的每日心情
    奋斗
    2023-5-10 20:09
  • 签到天数: 1742 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2016-12-20 17:34:05 | 显示全部楼层 |阅读模式
    分享到:
    先前在社区申请到一块Arduino Uno开发板,计划做一个温湿度控制器,主要由DHT11温湿度传感器、IIC接口OLED屏、光隔继电器、按键等组成。
        进过一定时间的资料收集和测试,现已实现温湿度的检测。开始检查到的温湿度值一直不变当误了许多的时间,后来才发现问题出在传感器模块上,根本就不能工作,测了一下上拉电阻才有1K,后来自己用元件焊了个传感器模块,问题就解决了,其线路如图1所示。
    图片1.png
    1 DHT11温湿度传感器模块线路及用法

    由于采用的OLED屏IIC接口,所有同常规的SPI接口有一定的差别。此外,使用示例的SSD1306程序也没能奏效,或许SSD1306的12864屏与0.96’的双色屏有区别,有待解决或自己重新写一个驱程。现将已有的成果分享分享,已实现的效果如如2所示。该程序相对于普通的程序输出的数据值更多样化,一个温度就有3种表现方式,且有露点值得输出。

    图片2.png
    图2 温湿度检测结果

    至于所用的程序嘛,如下:
    1. //摄氏温度度转化为华氏温度
    2. double Fahrenheit(double celsius)
    3. {
    4.         return 1.8 * celsius + 32;
    5. }
    6.    
    7. //摄氏温度转化为开氏温度
    8. double Kelvin(double celsius)
    9. {
    10.         return celsius + 273.15;
    11. }     

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

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

    36. #include <dht11.h>
    37. dht11 DHT11;
    38. #define DHT11PIN 2
    39. void setup()
    40. {
    41.   Serial.begin(9600);
    42.   Serial.println("DHT11 TEST PROGRAM ");
    43.   Serial.print("LIBRARY VERSION: ");
    44.   Serial.println(DHT11LIB_VERSION);
    45.   Serial.println();
    46. }

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

    50.   int chk = DHT11.read(DHT11PIN);

    51.   Serial.print("Read sensor: ");
    52.   switch (chk)
    53.   {
    54.     case DHTLIB_OK:
    55.                 Serial.println("OK");
    56.                 break;
    57.     case DHTLIB_ERROR_CHECKSUM:
    58.                 Serial.println("Checksum error");
    59.                 break;
    60.     case DHTLIB_ERROR_TIMEOUT:
    61.                 Serial.println("Time out error");
    62.                 break;
    63.     default:
    64.                 Serial.println("Unknown error");
    65.                 break;
    66.   }

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

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

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

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

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

    77.   Serial.print("Dew PointFast (oC): ");
    78.   Serial.println(dewPointFast(DHT11.temperature, DHT11.humidity));

    79.   delay(2000);
    80. }
    复制代码
    后续的任务则是实现OLED屏显示数据,并配置按键来设置控制值以控制继电器的开合动作。

    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2017-10-15 13:21
  • 签到天数: 183 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2016-12-20 17:51:14 | 显示全部楼层
                                    
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-23 06:15 , Processed in 0.131564 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.