完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
用STM32和DHT11实现温湿度测量和报警
最近到手了一块正点原子Nano板,上手试了试温湿度测量的功能,将配套的代码改了一下,就能够实现高温蜂鸣器报警了。 DHT11传感器 先来介绍一下DHT11数字温湿度传感器。 这是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测型号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为该类应用甚至最为苛刻的应用场合的最佳选择。产品为4针单排引脚封装,连接方便。 这就是图片啦,插到Nano板的时候要之一网孔多的那一面要向外(板子的手册这么写的) 部分代码 #include “sys.h” #include “delay.h” #include “usart.h” #include “led.h” #include “smg.h” #include “timer.h” #include “dht11.h” #include “beep.h” u8 smg_num[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x01,0x00}; u8 smg_wei=2;//数码管位选 u8 num=0;//数值 u16 led_t=0;//led统计时间 u16 dht11_t=0;//dht11采样时间 u8 temperature;//温度值 u8 humidity;//湿度值 int main(void) { HAL_Init(); //初始化HAL库 Stm32_Clock_Init(RCC_PLL_MUL9); //设置时钟,73M delay_init(72); //初始化延时函数 BEEP_Init(); //初始化蜂鸣器端口 uart_init(115200); //串口初始化为115200 LED_Init(); //初始化与LED连接的硬件接口 LED_SMG_Init(); //数码管初始化 printf(“NANO STM32rn”); printf(“DHT11 TESTrn”); while(DHT11_Init()) //DHT11初始化 { printf(“DHT11 Errorrn”); delay_ms(200); LED3=!LED3;//LED3闪烁表示DHT11初始化失败 } LED3=1; printf(“DHT11 OKrn”); TIM3_Init(19,7199);//数码管2ms定时显示 while(1) { } } //回调函数,定时器中断服务函数调用 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim==(&TIM3_Handler)) { dht11_t++; if(dht11_t==500)//DHT11 1S采样 { dht11_t=0; DHT11_Read_Data(&temperature,&humidity);//读取温湿度值 if(temperature》33) { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET); //BEEP引脚拉低,响,等同BEEP=0; delay_ms(300); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET); //BEEP引脚拉高,不响,等同BEEP=1; delay_ms(300); } } switch(smg_wei) { case 2: num = smg_num[temperature/10]; break;//温度值 case 3: num =smg_num[temperature%10];break; case 6: num = smg_num[humidity/10]; break;//湿度值 case 7: num =smg_num[humidity%10];break; } LED_Write_Data(num,smg_wei);//写数据到数码管 LED_Refresh();//更新显示 smg_wei++; if(smg_wei==4) smg_wei=6; if(smg_wei==8) smg_wei=2; led_t++; if(led_t==250)//LED每500ms闪烁 { led_t=0; LED0=!LED0; } } } 以上是main函数的代码,其他部分没有更改,代码里出现串口是因为我还想实现串口通信,但是发现板子资料中的函数的写法好像和视频教程中的不太一样,所以还在摸索中… 更改预设温度 代码中在以下这一行更改预设温度 if(temperature》33) 将33改为其他数值,当温度超过预设温度的时候,蜂鸣器会间断发声。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1767 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1069 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1935浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
728浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
567浏览 3评论
592浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
551浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 01:15 , Processed in 1.134420 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号