基于STM32的除湿杀菌鞋柜设计

news/2025/2/6 13:36:01/

🤞大家好,这里是5132单片机毕设设计项目分享,今天给大家分享的是加湿器。设备的详细功能见网盘中的文章《13、基于STM32的除湿杀菌鞋柜设计》:

链接:https://pan.baidu.com/s/1uWSZX2zbZwy9sYwwnvyktQ?pwd=5132

提取码:5132

1、系统功能

本系统由STM32F103CT6作为主控,通过自动模式、手动模式、蓝牙模式、语音模式和定时模式控制鞋柜,其中DHT11温湿度传感器用来采集温度和湿度。输出设备由加湿器、风扇和紫外线杀菌模块组成。

1、自动模式:通过温度控制加湿器,温度控制排风扇,两者共同控制杀菌灯。

2、手动模式:通过三个按键控制加湿器、风扇和紫外线杀菌模块。

3、蓝牙模式:通过蓝牙模块原创控制加湿器、风扇和紫外线杀菌模块。

4、语音模式:通过LD3320A语音识别模块控制加湿器、风扇和紫外线杀菌模块。

2、演示视频和实物

基于单片机的智能杀菌除湿鞋柜控制系统(LD3320A+HC05)---已开源,三连+关注获取资料

3、系统设计框图

4、原理图

7、主程序

#include "stm32f10x.h" //定制单片机联系VX:lwfw123456789  
#include <stdio.h>
#include <string.h>
#include "sys.h"
#include "delay.h"
#include "OLED.h"
#include "Key.h"
#include "OLED.h"
#include "Serial.h"
#include "Serial3.h"
#include "LED.h"
#include "Buzzer.h"
#include "MyRTC.h"
#include "string.h"
#include "dht11.h"
#include "AD.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};
uint16_t AD0, AD1, AD4, AD5, AD6;   //存储5路ADC值
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 WenYu=30,ShiYu=50;     //湿度阈值void YuYingMode()   //先说小杰唤醒,然后说打开窗户和关闭窗户
{if (Serial2_RxFlag == 1)        //串口接收到数据包的标志位,若是收到数据包,会置1{if (strcmp(Serial2_RxPacket, "JUN_ON") == 0){ShaJun_ON();}else if (strcmp(Serial2_RxPacket, "JUN_OFF") == 0){ShaJun_OFF();}if (strcmp(Serial2_RxPacket, "FENG_ON") == 0){FengShan_ON();}else if (strcmp(Serial2_RxPacket, "FENG_OFF") == 0){FengShan_OFF();}if (strcmp(Serial2_RxPacket, "JIASHI_ON") == 0){JiaShi_ON();}else if (strcmp(Serial2_RxPacket, "JIASHI_OFF") == 0){JiaShi_OFF();}Serial2_RxFlag = 0; //将标志位清零,不清零就接收不到下一个数据包了}
}void ctrlue()
{/*****门关的情况下,温度大于设定阈值,打开杀菌和风扇*****/if ( bufe[1] > ShiYu)    {JiaShi_OFF();			      }/*****门开的情况下或者温度小于设定阈值,关闭杀菌和风扇*****/		if ( bufe[1] < ShiYu)    {	JiaShi_ON();}/*****门关的情况下,湿度大于设定阈值,打开杀菌和加湿器*****/if ( bufe[0] > WenYu)    { FengShan_ON();}/*****门关的情况下,湿度大于设定阈值,打开杀菌和加湿器*****/if ( bufe[0] < WenYu)    {FengShan_OFF();}/*****门开的情况下关闭杀菌和加湿器,打开照明灯*****/if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) == 0)     {if(bufe[2] < 50){LED_ON(); }     }else{LED_OFF();   }if(( bufe[1] > ShiYu)||( bufe[0] > WenYu)){ShaJun_ON();}else{ShaJun_OFF();}if (KeyNum == 2){state5++;if (state5 > 1){state5 = 0;}}			if (state5 == 1)                {if (KeyNum == 3)  WenYu++;if (KeyNum == 4)  WenYu--;}if (state5 == 0)                   {if (KeyNum == 3)  ShiYu++;if (KeyNum == 4)  ShiYu--;} }void shoudong()
{Buzzer_OFF();LED_OFF();if (KeyNum == 2 )   //手动模式控制风扇{delay_ms(20);if (KeyNum == 2){state2++;if (state2 > 1){state2 = 0;}}}if (state2 == 1)                {FengShan_ON();}if (state2 == 0)                   {FengShan_OFF();} if (KeyNum == 3 ) //手动模式控制加湿器{delay_ms(20);if (KeyNum == 3){state3++;if (state3 > 1){state3 = 0;}}}if (state3 == 0)                {JiaShi_ON();}if (state3 == 1)                   {JiaShi_OFF();}if (KeyNum == 4 ) //手动模式控制加湿器{delay_ms(20);if (KeyNum == 4){state4++;if (state4 > 1){state4 = 0;}}}if (state4 == 1)                {ShaJun_ON();}if (state4 == 0)                   {ShaJun_OFF();} 			
}	void LanYa()
{if (Serial_GetRxFlag() == 1)      //蓝牙接收部分{RxData = Serial_GetRxData();     //蓝牙接收switch (RxData)        //蓝牙控制选择{case 1:ShaJun_ON(); //break;case 2:ShaJun_OFF();//break;case 3:                       //LED_ON();break;case 4:                         //LED_OFF();break;case 5:                       //FengShan_ON();break;case 6:                         //FengShan_OFF();break;case 8:                       //JiaShi_ON();break;case 7:                         //JiaShi_OFF(); break;case 9:                       //WenYu++; break;case 10:                         //WenYu--;break;case 11:                       //ShiYu++; break;case 12:                         //ShiYu--;break;default:break;}}
}void dingshi()
{if ((MyRTC_Time[3] == RTC_Time1[0]) && (MyRTC_Time[4] == RTC_Time1[1]) && (MyRTC_Time[5] == RTC_Time1[2]))//开启时间{ShaJun_ON();    delay_ms(1000);ShaJun_OFF();   }if ((MyRTC_Time[3] == RTC_Time3[0]) && (MyRTC_Time[4] == RTC_Time3[1]) && (MyRTC_Time[5] == RTC_Time3[2])) //关闭时间{ShaJun_ON();    delay_ms(1000);ShaJun_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();AD_Init();Serial2_Init();   //串口2初始化(语音识别模块)OLED_ShowString(1, 5, "XX:XX:XX");    //显示时间OLED_ShowChinese(2, 1, 3); //显示湿度OLED_ShowChinese(2, 2, 4);OLED_ShowString(2, 5, ":");OLED_ShowString(3, 10, "W_Y:");OLED_ShowChinese(3, 1, 2);     //显示温度OLED_ShowChinese(3, 2, 4);OLED_ShowString(3, 5, ":");OLED_ShowString(2, 10, "S_Y:");OLED_ShowChinese(4, 1, 16);     //显示光强OLED_ShowChinese(4, 2, 17);OLED_ShowString(4, 5, ":");MyRTC_Init();Serial_Init();   //串口1初始化(蓝牙)Serial3_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);OLED_ShowNum(3, 14, WenYu, 2);OLED_ShowNum(2, 14, ShiYu, 2);if (t % 10 == 0){DHT11_Read_Data(&temp, &humi);  //读取温湿度并显示在OLED上bufe[0] = temp;     //温度bufe[1] = humi;    //湿度OLED_ShowNum(2, 6, bufe[1], 2);OLED_ShowString(2, 8, "%");OLED_ShowNum(3, 6, bufe[0], 2);OLED_ShowString(3, 8, "%");printf("\r\nWen=%d", bufe[0]);   //蓝牙上传数据printf("\r\nShi=%d\r\n", bufe[1]);AD0 = AD_GetValue(ADC_Channel_0);    //光照传感器     PA0if (AD0 > 4000)AD0 = 4000;bufe[2] = (u8)(100 - (AD0 / 40));OLED_ShowNum(4, 6, bufe[2], 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);}if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) == 0)     {OLED_ShowChinese(1, 8, 13); if(bufe[2] < 50){LED_ON(); }     }else{   OLED_ShowChinese(1, 8, 12);LED_OFF();   }		}
}

8、总结

本系统由STM32F103CT6作为主控,通过自动模式、手动模式、蓝牙模式、语音模式和定时模式控制鞋柜,其中DHT11温湿度传感器用来采集温度和湿度。输出设备由加湿器、风扇和紫外线杀菌模块组成。


http://www.ppmy.cn/news/1569814.html

相关文章

为AI聊天工具添加一个知识系统 之82 详细设计之23 符号逻辑 正则表达式规则 之1

本文要点 在继续“逻辑符号”的设计中&#xff0c;我们先回顾一个本项目--作为备忘也作为 设计中的时刻牢记&#xff1a; 回顾 项目介绍 项目名&#xff1a;为使用AI聊天工具的聊天者开挂一个知识系统项目口号&#xff1a;通过不断完善一个概念整体运营的大局观思想来持续维…

基于微信小程序的私家车位共享系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

WPS中解除工作表密码保护(忘记密码)

1.下载vba插件 项目首页 - WPS中如何启用宏附wps.vba.exe下载说明分享:WPS中如何启用宏&#xff1a;附wps.vba.exe下载说明本文将详细介绍如何在WPS中启用宏功能&#xff0c;并提供wps.vba.exe文件的下载说明 - GitCode 并按照步骤安装 2.wps中点击搜索&#xff0c;输入开发…

深度解析近期爆火的 DeepSeek

最近&#xff0c;AI 领域有个名字频繁出现在大众视野 ——DeepSeek&#xff0c;它的火爆程度就像一颗投入平静湖面的巨石&#xff0c;激起千层浪。今天&#xff0c;咱们就来深入了解一下这个 “AI 新星”。 官网&#xff1a;DeepSeek - 探索未至之境 DeepSeek 是什么 DeepSeek…

linux中统计文件中特定单词或字符串的出现次数

在 Linux 中&#xff0c;可以使用 grep 和 wc 命令组合来统计一个文件中特定单词或字符串的个数。假设想统计文件 example.txt 中字符串 “example_string” 出现的次数&#xff0c;可以使用以下命令&#xff1a; grep -o -w example_string example.txt | wc -l这里是每个选项…

android java 用系统弹窗的方式实现模拟点击动画特效

接上一篇&#xff1a;android java系统弹窗的基础模板-CSDN博客 本篇记录的是系统弹窗的一个应用示例&#xff1a;实现点击动画效果 首先模拟点击的实现参考&#xff1a;android模拟点击_motionevent upevent motionevent.obtain(systemclo-CSDN博客 动画效果&#xff0c;是…

基础相对薄弱怎么考研

复习总体规划 明确目标 选择专业和院校&#xff1a;根据你的兴趣、职业规划和自身实力&#xff0c;选择适合自己的专业和院校。可以参考往年的分数线、报录比、复试难度等。了解考试科目&#xff1a;不同专业考试科目不同&#xff0c;一般包括&#xff1a; 公共课&#xff1a…

机器学习基本概念(附代码)

一、算法与模型的关系 在机器学习领域&#xff0c;算法和模型是两个核心概念。算法是一种偏抽象的概念&#xff0c;它定义了计算机解决问题的步骤和流程。而模型则是更加具体的概念&#xff0c;通过代码实现特定算法来完成任务。数学上&#xff0c;一个简单的模型可以表示为 y…