查看: 3722|回复: 0

[原创] LPC824+DHT22 + 环境温湿度测量

[复制链接]
  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7125
    最后登录
    2023-4-20
    发表于 2019-11-7 14:46:23 | 显示全部楼层 |阅读模式
    本帖最后由 jinglixixi 于 2019-11-7 15:04 编辑

    1. 硬件构成
    在硬件方面,主要由 LPC824 Lite开发板和DHT22温湿度传感器
    实物图.jpg

    1.1 LPC824 Lite开发板
    LPC824Lite所用MCU为LPC824, 基于ARM Cortex-M0+内核,运行频率高达30MHz。LPC824具有丰富的外设,包括4路I2C总线接口、3路UART、2路SPI、1个多速率定时器、1个自唤醒定时器、1个状态可配置定时器(SCT)、1个DMA控制器、1个12位ADC模块、1个模拟比较器、独特的开关矩阵(可实现I/O端口的自由分配)以及多达29个同样I/O口,充分体现了Kinetis 32位微控制器产品的优质性能、多元化的外设、广泛的支持和可扩展性。
         LPC824Lite带有板载调试下载器(CMSIS-DAP),支持U盘模式编程,还带有模拟串口功能,通过一条USB线连接PC即可进行开发调试。开发板还扩展了Arduino R3接口,可以方便的连接各类功能模块,尤其是市面上大量的Arduino模块,构成合适的开发与评估系统。

    1.2 DHT22温湿度传感器
    DHT22数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与长期的稳定性。传感器包括一个电容式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。该产品为 4 针单排引脚封装,采用单线制串行接口,具有体积小、功耗低的特点,信号传输距离可达20米以上。
    2. 开发工具
      在程序开发方面,主要由KEIL V5.15来进行,在经过程序编译后,需生成BIN文件以供下载处理。在下载处理时,只需将生成的BIN文件直接拖入开发板所虚拟出的U盘中即可。
    3. DHT22与DHT11的比较
      在一般的使用中人们出于价格的原因多使用DHT11,但二者在性能方面还是存在一定的差别的,主要体现在精度和测量范围方面。
    器件型号
    显示精度
    测量范围
    DHT11
    不带小数位
    温度:0-50℃   湿度:20-90%RH
    DHT22
    带1位小数
    温度:-40---80℃ 湿度:0---100%RH

    DHT22的数据格式:
    40bit数据=16bit湿度数据+16bit温度数据+8bit校验和
    例子: 接收40bit数据如下:
    0000 0010 1000 1100 0000 0001 0101 1111 1110 1110
    湿度数据 温度数据 校验和
    湿度高8位+湿度低8+温度高8+温度低8=的末8=校验和
    例如:0000 0010+1000 1100+0000 0001+0101 1111=1110 1110
    湿度=65.2RH 温度=35.1℃
    当温度低于0℃时温度数据的最高位置1。
    例如:-10.1℃表示为1000 0000 0110 0101

    使用DHT22可以有效地提高采集数据的质量,因此在设计中选用该器件是十分必要的。
    4. 引脚分配
    由于是在LPC824Lite开发板上进行,要涉及的是接口引脚的分配是将P0.20分配给
    DHT22的数据口。
    5. 程序设计
    在程序设计方面,主要涉及的是各功能函数的设计,其中包括DHT22的初始化、字节读写、温湿度读取等函数。
    1. void DHT22_Rst(void)           
    2. {                 
    3. DHT22_OUT;
    4. DHT22_Low;      
    5. delay_msdht(20);
    6. DHT22_High;   
    7. delay_usdht(30);
    8. }

    9. uint8_t DHT22_Check(void)   
    10. {   
    11. uint8_t retry=0;
    12. DHT22_IN;
    13. while(DHT22_State&&retry<100)
    14. {
    15. retry++;
    16. delay_usdht(1);
    17. };         
    18. if(retry>=100) return 1;
    19. else retry=0;
    20. while(!DHT22_State&&retry<100)
    21. {
    22. retry++;
    23. delay_usdht(1);
    24. };
    25. if(retry>=100) return 1;            
    26. return 0;
    27. }

    28. uint8_t DHT22_Init(void)
    29. {
    30. DHT22_OUT;
    31. DHT22_High;            
    32. DHT22_Rst();
    33. return DHT22_Check();
    34. }

    35. uint8_t DHT22_Read_Bit(void)  
    36. {
    37. uint8_t retry=0;
    38. while(DHT22_State&&retry<100)
    39. {
    40. retry++;
    41. delay_usdht(1);
    42. }
    43. retry=0;
    44. while(!DHT22_State&&retry<100)
    45. {
    46. retry++;
    47. delay_usdht(1);
    48. }
    49. delay_usdht(50);
    50. if(DHT22_State)return 1;
    51. else return 0;           
    52. }

    53. uint8_t DHT22_Read_Byte(void)   
    54. {        
    55. uint8_t i,dat;
    56. dat=0;
    57. for (i=0;i<8;i++)
    58. {
    59. dat<<=1;
    60. dat|=DHT22_Read_Bit();
    61. }            
    62. return dat;
    63. }

    64. uint8_t DHT22_Read_Data(uint16_t *temp,uint16_t *humi)   
    65. {        
    66. uint8_t buf[5];
    67. uint8_t i;
    68. DHT22_Rst();
    69. if(DHT22_Check()==0)
    70. {
    71. for(i=0;i<5;i++)
    72. {
    73. buf[i]=DHT22_Read_Byte();
    74. }
    75. if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
    76. {
    77. *humi=(buf[0]*256+buf[1]);
    78. *temp=(buf[2]*256+buf[3]);
    79. }
    80. }else return 1;

    81. return 0;            
    82. }
    复制代码

    主函数:
    1. int main(void)
    2. {
    3. uint16_t tem,hum;
    4. SystemCoreClockUpdate();
    5. Board_Init();
    6. DEBUGOUT("DHT22 TEST\r\n");
    7. /* Endless loop */
    8. while (1) {
    9. DHT22_Read_Data(&tem,&hum);
    10. if(tem>3276)
    11. {
    12. DEBUGOUT("Tem:- %d.%d Hum: %d.%d\r\n", (tem-32768)/10,(tem-32768)%10, hum/10, hum%10);
    13. }
    14. else
    15. {
    16. DEBUGOUT("Tem: %d.%d Hum: %d.%d\r\n", tem/10,tem%10, hum/10, hum%10);
    17. }
    18. delay_msdht(500);
    复制代码


    6. 使用效果
      在下载完成后,首先打开串口助手,选好工作的串口,并将波特率设为9600。然后按序开发板上的复位按钮,则下载的程序开始运行。提供串口助手,可以看到如图所示的效果。若将手放在DHT22上,则温湿度会发生变化。
    dht22.jpg
                                效果图

    Bin文件



    dht22 test.rar

    2.98 KB, 下载次数: 6, 下载积分: 威望 1

    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-28 00:53 , Processed in 0.082320 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表