本帖最后由 jinglixixi 于 2019-11-7 15:04 编辑
1. 硬件构成 在硬件方面,主要由 LPC824 Lite开发板和DHT22温湿度传感器。
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,但二者在性能方面还是存在一定的差别的,主要体现在精度和测量范围方面。 器件型号 | | | | | | | | 温度:-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.2%RH 温度=35.1℃ 当温度低于0℃时温度数据的最高位置1。 例如:-10.1℃表示为1000 0000 0110 0101
使用DHT22可以有效地提高采集数据的质量,因此在设计中选用该器件是十分必要的。 4. 引脚分配 由于是在LPC824Lite开发板上进行,要涉及的是接口引脚的分配是将P0.20分配给 DHT22的数据口。 5. 程序设计 在程序设计方面,主要涉及的是各功能函数的设计,其中包括DHT22的初始化、字节读写、温湿度读取等函数。 - void DHT22_Rst(void)
- {
- DHT22_OUT;
- DHT22_Low;
- delay_msdht(20);
- DHT22_High;
- delay_usdht(30);
- }
- uint8_t DHT22_Check(void)
- {
- uint8_t retry=0;
- DHT22_IN;
- while(DHT22_State&&retry<100)
- {
- retry++;
- delay_usdht(1);
- };
- if(retry>=100) return 1;
- else retry=0;
- while(!DHT22_State&&retry<100)
- {
- retry++;
- delay_usdht(1);
- };
- if(retry>=100) return 1;
- return 0;
- }
- uint8_t DHT22_Init(void)
- {
- DHT22_OUT;
- DHT22_High;
- DHT22_Rst();
- return DHT22_Check();
- }
- uint8_t DHT22_Read_Bit(void)
- {
- uint8_t retry=0;
- while(DHT22_State&&retry<100)
- {
- retry++;
- delay_usdht(1);
- }
- retry=0;
- while(!DHT22_State&&retry<100)
- {
- retry++;
- delay_usdht(1);
- }
- delay_usdht(50);
- if(DHT22_State)return 1;
- else return 0;
- }
- uint8_t DHT22_Read_Byte(void)
- {
- uint8_t i,dat;
- dat=0;
- for (i=0;i<8;i++)
- {
- dat<<=1;
- dat|=DHT22_Read_Bit();
- }
- return dat;
- }
- uint8_t DHT22_Read_Data(uint16_t *temp,uint16_t *humi)
- {
- uint8_t buf[5];
- uint8_t i;
- DHT22_Rst();
- if(DHT22_Check()==0)
- {
- for(i=0;i<5;i++)
- {
- buf[i]=DHT22_Read_Byte();
- }
- if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
- {
- *humi=(buf[0]*256+buf[1]);
- *temp=(buf[2]*256+buf[3]);
- }
- }else return 1;
- return 0;
- }
复制代码
主函数: - int main(void)
- {
- uint16_t tem,hum;
- SystemCoreClockUpdate();
- Board_Init();
- DEBUGOUT("DHT22 TEST\r\n");
- /* Endless loop */
- while (1) {
- DHT22_Read_Data(&tem,&hum);
- if(tem>3276)
- {
- DEBUGOUT("Tem:- %d.%d Hum: %d.%d\r\n", (tem-32768)/10,(tem-32768)%10, hum/10, hum%10);
- }
- else
- {
- DEBUGOUT("Tem: %d.%d Hum: %d.%d\r\n", tem/10,tem%10, hum/10, hum%10);
- }
- delay_msdht(500);
复制代码
6. 使用效果 在下载完成后,首先打开串口助手,选好工作的串口,并将波特率设为9600。然后按序开发板上的复位按钮,则下载的程序开始运行。提供串口助手,可以看到如图所示的效果。若将手放在DHT22上,则温湿度会发生变化。 效果图
Bin文件
|