基于STM32的智能加湿器设计(新版本)
创作时间:
作者:
@小白创作中心
基于STM32的智能加湿器设计(新版本)
引用
CSDN
1.
https://blog.csdn.net/qq_44987481/article/details/145388731
智能加湿器作为智能家居生态系统的一部分,可以与其他智能设备(如智能灯泡、智能窗帘等)进行联动,实现全屋智能化控制,提升家居生活的智能化水平。该项目的成功实施可以为其他智能家居产品的开发提供技术参考和示范,推动智能家居技术的普及和应用。
系统功能
本设计是基于STM32单片机的智能加湿器系统设计,主要内容如下:
- 主控芯片:主控芯片采用STM32F103C8T6,通过此芯片实现加湿器传感器信息的采集以及外设的控制。
- DHT11温湿度传感器:通过本传感器可以检测室内的湿度信息。
- 加湿模块:通过继电器控制加湿模块。
- HC-05蓝牙模块:实现远程控制加湿模块。
- 语音识别模块:语音识别模块核心芯片采用LD3320芯片,是一种非特定人“语音识别”专用芯片。通过“启动加湿器”和“关闭加湿器”等关键语句实现对加湿模块的语音控制。
- 时钟模块:实现定时功能加湿功能。
- OLED显示模块:OLED显示模块采用0.96寸液晶显示屏,该模块用来实时显示室内湿度和加湿器的工作状态。
- 按键模块:按键模块用来控制模式选择和控制加湿器的开启与关闭。可通过单片机上按键设置湿度的上下限报警值并具有掉电保存功能,保存在单片机内部,上电无需重新设置参数。
- 蜂鸣器模块:湿度太低和太高报警。
演示视频和实物
系统设计框图
软件设计流程图
加湿器控制系统设计的主程序主要是对相关硬件环境初始化,只有在系统硬件环境初始化成功后,系统才能够正常的工作。初始化过程涵盖了多个方面,主要包括蓝牙通信模块初始化、语音识别模块初始化、外部中断初始化、采集模块初始化、输入模块初始化和显示模块初始化。程序完成初始化后,单片机将采集到温湿度的值显示在OLED屏幕上,显示完成后单片机会将当前湿度值与设置的湿度阈值进行比较,控制加湿器。
原理图
主程序
#include "stm32f10x.h"
#include <stdio.h>
#include <string.h>
#include "sys.h"
#include "delay.h"
#include "OLED.h"
#include "Key.h"
#include "Serial.h"
#include "Serial3.h"
#include "LED.h"
#include "Buzzer.h"
#include "MyRTC.h"
#include "string.h"
#include "dht11.h"
#include "Serial2.h"
uint16_t RTC_Time1[] = {7, 0, 0}; //3个定时时间
uint16_t RTC_Time2[] = {11, 0, 0};
uint16_t RTC_Time3[] = {19, 0, 0};
uint8_t KeyNum; //存储按键值
uint8_t RxData; //蓝牙接收到的数据
uint32_t bufe[4]; //存储温湿度
u8 temp, humi;
u8 t = 0; //温湿度读取值的间隔
u8 state = 1; //设备开关
u8 state1 = 1; //模式选择
u8 state2,state3,state4,state5; //模式选择
u8 ShiYu_Xia=20,ShiYu_Shang=60; //湿度阈值设置
void Jia_ON(void)
{
JiaShi_ON();
LED1_ON();
}
void Jia_OFF(void)
{
JiaShi_OFF();
LED1_OFF();
}
void YuYingMode() //先说小杰唤醒,然后说打开窗户和关闭窗户
{
if (Serial2_RxFlag == 1) //串口接收到数据包的标志位,若是收到数据包,会置1
{
if (strcmp(Serial2_RxPacket, "JIASHI_ON") == 0)
{
Jia_ON();
}
else if (strcmp(Serial2_RxPacket, "JIASHI_OFF") == 0)
{
Jia_OFF();
}
Serial2_RxFlag = 0; //将标志位清零,不清零就接收不到下一个数据包了
}
}
void ctrlue()
{
if(bufe[1]<ShiYu_Xia)
{
Jia_ON();
}else
{
Jia_OFF();
}
if(bufe[1]>ShiYu_Shang)
{
Buzzer_Turn();
LED2_ON();
}else
{
Buzzer_OFF();
LED2_OFF();
}
if (KeyNum == 2 ) //阈值设置
{
delay_ms(20);
if (KeyNum == 2)
{
state3++;
if (state3 > 1)
{
state3 = 0;
}
}
}
if (state3 == 0)
{
if(KeyNum == 3) ShiYu_Xia++;
if(KeyNum == 4) ShiYu_Xia--;
}
if (state3 == 1)
{
if(KeyNum == 3) ShiYu_Shang++;
if(KeyNum == 4) ShiYu_Shang--;
}
}
void shoudong()
{
Buzzer_OFF();
if (KeyNum == 2 ) //手动模式控制
{
delay_ms(20);
if (KeyNum == 2)
{
state2++;
if (state2 > 1)
{
state2 = 0;
}
}
}
if (state2 == 1)
{
Jia_ON();
}
if (state2 == 0)
{
Jia_OFF();
}
}
void LanYa()
{
if (Serial_GetRxFlag() == 1) //蓝牙接收部分
{
RxData = Serial_GetRxData(); //蓝牙接收
switch (RxData) //蓝牙控制选择
{
case 1:
Jia_ON();
break;
case 2:
Jia_OFF();
break;
case 3:
Buzzer_ON();
break;
case 4:
Buzzer_OFF();
case 5:
ShiYu_Xia++;
break;
case 6:
ShiYu_Xia--;
break;
case 7:
ShiYu_Shang++;
break;
case 8:
ShiYu_Shang--;
break;
default:
break;
}
}
}
void dingshi()
{
if ((MyRTC_Time[3] == RTC_Time1[0]) && (MyRTC_Time[4] == RTC_Time1[1]) && (MyRTC_Time[5] == RTC_Time1[2]))//开启时间
{
Jia_ON();
}
if ((MyRTC_Time[3] == RTC_Time3[0]) && (MyRTC_Time[4] == RTC_Time3[1]) && (MyRTC_Time[5] == RTC_Time3[2])) //关闭时间
{
Jia_OFF();
}
}
int main(void) //主函数
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
delay_init(); //延时函数初始化
SystemInit();
Key_Init(); //按键初始化
LED_Init();
OLED_Init();
Buzzer_Init();
DHT11_Init();
OLED_ShowString(1, 5, "XX:XX:XX"); //显示时间
OLED_ShowChinese(2, 3, 3); //显示湿度
OLED_ShowChinese(2, 4, 4);
OLED_ShowString(2, 9, ":");
OLED_ShowChinese(4, 1, 2); //显示温度
OLED_ShowChinese(4, 2, 4);
OLED_ShowString(4, 5, ":");
MyRTC_Init();
Serial_Init(); //串口1初始化(蓝牙)
Serial3_Init(); //串口2初始化(语音)
Serial2_Init(); //串口2初始化(语音识别模块)
while (1)
{
MyRTC_ReadTime();
OLED_ShowNum(1, 5, MyRTC_Time[3], 2);
OLED_ShowNum(1, 8, MyRTC_Time[4], 2);
OLED_ShowNum(1, 11, MyRTC_Time[5], 2);
if (t % 10 == 0)
{
DHT11_Read_Data(&temp, &humi); //读取温湿度并显示在OLED上
bufe[0] = temp; //温度
bufe[1] = humi; //湿度
OLED_ShowNum(2, 10, bufe[1], 2);
OLED_ShowString(2, 12, "%");
OLED_ShowNum(4, 6, bufe[0], 2);
OLED_ShowString(4, 8, "%");
printf("\r\nWen=%d", bufe[0]); //蓝牙上传数据
printf("\r\nShi=%d\r\n", bufe[1]);
}
OLED_ShowString(3, 2, "S_X:");
OLED_ShowNum(3, 6, ShiYu_Xia, 2);
OLED_ShowString(3, 10, "S_S:");
OLED_ShowNum(3, 14, ShiYu_Shang, 2);
KeyNum = Key_GetNum(); //按键检查
if (KeyNum == 1 )
{
delay_ms(20);
if (KeyNum == 1)
{
state1++;
if (state1 > 4)
{
state1 = 0;
}
}
}
if (state1 == 1) //自动模式
{
ctrlue(); // 开
OLED_ShowChinese(4, 7, 30);
OLED_ShowChinese(4, 8, 31);
}
if (state1 == 0) //手动模式
{
shoudong();
OLED_ShowChinese(4, 7, 29);
OLED_ShowChinese(4, 8, 31);
}
if (state1 == 2) //定时模式
{
dingshi();
OLED_ShowChinese(4, 7, 68);
OLED_ShowChinese(4, 8, 69);
}
if (state1 == 3) //蓝牙模式
{
LanYa();
OLED_ShowChinese(4, 7, 62);
OLED_ShowChinese(4, 8, 63);
}
if (state1 == 4) //语音模式
{
YuYingMode();
OLED_ShowChinese(4, 7, 54);
OLED_ShowChinese(4, 8, 55);
}
}
}
总结
本次设计采用了一种基于单片机的智能加湿器系统,其以STM32F103C8T6和温湿度传感器DHT11为核心,通过湿度传感器对湿度信号进行采集和转换,然后通过单片机对数据进行分析处理,实现智能切换加湿功能。
热门推荐
冬季感冒高发期,如何通过饮食缓解症状?
297地市评级ABC,中国城市社会发展指数百强榜出炉,北上深广杭排名最前
手机上查询个人征信的步骤与注意事项详解
保定美食十大排行榜,文食肆热干面上榜,看看有没有你爱吃的?
配音入门:从零基础到语言表达高手
从对立到友谊:《小绿和小蓝》角色性格塑造分析
掌握正确的修剪方法,可以培养出优美的树形 最全的植物修剪技术
地栽腊梅修剪时间和方法
广州及周边自然景观游览攻略:长隆度假区、宝墨园、河源万绿湖
广州一日游:永庆坊、陈家祠,感受千年古城的新活力
广州一日游,这些美食街你一定不能错过!
广州塔打卡:广州一日游完美行程
广州必打卡网红景点推荐:广州塔、永庆坊、越秀公园
《看门狗:军团》中的DedSec:从虚拟组织到社会象征
中储粮:用科技创新守护大国粮仓
水杨酸:不同浓度的水杨酸有哪些作用?
五味子汤:心脏跳动异常患者的救星?
《伤寒论》教你如何应对心脏跳动异常
旧金山冒险:《看门狗2》主角马可仕的黑科技之旅
《看门狗2》黑客技能大揭秘:如何成为网络战高手?
从《看门狗2》看现代信息安全挑战
柿子与螃蟹的食用指南:破解谜团 享受美食
在食用柿子时,需要注意以下禁忌
冬季限定「柿子」降低发炎、保护视力,教你「柿子」2种类以及4种食用禁忌
晋城大粮山:太行古战场上的历史印记
《乡村爱情故事》:一部展现农村生活的经典之作
四川古镇哪个最好?四川14个绝美古镇推荐
平遥古城:晋商文化的活化石
PCR实验透明管的使用技巧大揭秘!
蠡湖景区:山水相依 城融景韵