查看: 31|回复: 1

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

[复制链接]

70

主题

2

好友

991

积分

举人

Rank: 4

  • TA的每日心情
    奋斗
    6 小时前
  • 签到天数: 241 天

    [LV.8]以坛为家I

    爱板会员勋章 活跃会员勋章

    发表于 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屏显示数据,并配置按键来设置控制值以控制继电器的开合动作。

    回复

    使用道具 举报

    5

    主题

    1

    好友

    712

    积分

    举人

    Rank: 4

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 47 天

    [LV.5]常住居民I

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

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

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

    手机版|爱板网 |网站地图  

    GMT+8, 2017-1-18 18:02 , Processed in 0.212614 second(s), 11 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部