目录
一、设计背景和意义
1.1设计背景
在物联网技术迅猛发展和智能家居市场持续扩张的背景下,传统家居产品正经历着前所未有的智能化变革。根据Statista的最新数据显示,全球智能家居市场规模预计在2025年将达到1730亿美元,年复合增长率超过13%。在这一浪潮中,作为家居重要组成部分的衣柜却相对滞后,其智能化程度远低于其他家电产品。当前市面上的衣柜产品仍以机械结构和简单存储功能为主,无法满足现代消费者对衣物护理的精细化需求。
1.2设计意义
从实际应用层面来看,本系统的研发具有多重实用价值:在家庭应用场景中,系统能有效解决衣物存储过程中的霉变、异味等问题。根据中国家用纺织品行业协会的调研数据,我国南方地区每年因衣物霉变造成的经济损失超过20亿元。本系统的智能除湿和消毒功能,可以显著降低这类损失,提升居民生活质量。
在商业应用领域,如高端服装店、博物馆藏品保管等场景,系统提供的精准环境控制和数据记录功能,可以满足专业级的衣物保管需求。特别是历史数据追溯功能,为权责划分和质量控制提供了可靠依据。
二、实物效果展示
2.1实物图片

2.2实物演示视频
【开源】基于STM32的智能衣柜系统
三、硬件功能简介
3.1项目功能详解
1)传感器:温湿度、光照强度、人体
2)显示:0.96OLED屏幕
3)执行机构:步进电机(衣柜门、通风扇(除湿、消毒灯、LED、加热片
4)数据设定:通过按键或APP设定阈值,切换自/手动模式
5)定时消毒:设定消毒的时间间隔,自动消毒
6)工作模式:手动模式按键或APP控制执行机构,自动模式检测到人体,自动开柜门;湿度过大打开加热片和风扇除湿;打开柜门后,环境光暗开灯
7)接入云平台:系统通过ESP8266 WIFI联网后,接入机智云平台
8)App远程监控:远程监控数据,控制执行机构
3.2元器件清单
- 主控采用STM32F103C8T6芯片
- wifi通信
- 0.96OLED显示屏幕
- DHT11温湿度传感器
- 光电红外传感器
- 步进电机(模拟衣柜门)
- 继电器风扇、加热片、LED照明灯
- UV紫外线消毒灯。
四、主框图与软件流程图
主框图

流程图

五、硬件PCB展示


六、软件程序设计
cpp
#include "delay.h"
#include "sys.h"
#include "bmp.h"
#include "usart.h"
#include "control.h"
#include "key.h"
#include "timer.h"
#include "oled.h"
#include "dht11.h"
#include "uln2003.h"
#include "IoData.h"
#include "adc.h"
/**** 菜单变量 ****/
uint8_t keu_num = 0;
uint8_t page_num = 1;
uint8_t option = 0;
/**** 数据变量 ****/
uint16_t temp_door = 30; //温度阈值
uint16_t humi_door = 60; //湿度阈值
uint16_t light_door = 3000; //光照阈值
uint8_t led_status = 0; //照明开关状态
uint8_t wind_status = 0; //风扇开关状态
uint8_t heat_status = 0; //加热开关状态
uint8_t rays_status = 0; //消毒灯状态
uint8_t open_flag = 0; //门开关标志位
uint8_t door_flag = 0; //门状态标志位
uint8_t mode = 0; //模式
extern uint16_t rays_time;
/**** 功能函数声明 ****/
void get_all_sensor_data(); //传感器数据采集
void Sensor_Data_Handle(); //不同模式下控制效果
void Key_event_handle(void); //按键功能函数
void All_Pin_Init(void); //系统初始化函数
void OLED_Show_FirstPage(); //第一屏显示内容
void OLED_Show_SecondPage(); //第二屏显示内容
void OLED_Show_ThirdPage(); //第三屏显示内容
void All_Pin_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//改变指定管脚的映射,JTAG-DP 禁用 + SW-DP 使能
delay_init();
OLED_Init();
uart3_init(115200); //串口3初始化,波特率115200
// uart1_init(115200); //串口1初始化,波特率115200
uart2_init(9600); //串口2初始化,波特率9600
DHT11_Init(); //DHT11温湿度初始化
Uln2003_Init(); //步进电机初始化
Adc_Init(); //光照强度初始化
KEY_Init(); //按键初始化
TIME_Config(); //定时器初始化
IoData_Init(); //人体检测初始化
Control_Init(); //消毒灯、补光灯、风扇、加热初始化
}
int main(void)
{
All_Pin_Init();
while(1)
{
get_all_sensor_data(); //传感器数据采集
Key_event_handle(); //按键监测
if(page_num == 1){ //屏幕更新
OLED_Show_FirstPage();
}else if(page_num == 2){
OLED_Show_SecondPage();
}else if(page_num == 3){
OLED_Show_ThirdPage();
}
Sensor_Data_Handle(); //数据处理
}
}
void Key_event_handle(void)
{
keu_num = KEY_Scan(0); //按键扫描赋值
switch(keu_num)
{
case 1: //按键1按下
if(page_num==1){
option++;
if(option>1){
option=0;
page_num=2;
OLED_Clear();OLED_Show_SecondPage();
}else OLED_Show_FirstPage();
}else if(page_num==2){
option++;
if(option>3){
option=0;
page_num=3;
OLED_Clear();OLED_Show_ThirdPage();
}else OLED_Show_SecondPage();
}
else if(page_num==3){
option++;
if(option>4){
option=0;
page_num=1;
OLED_Clear();OLED_Show_FirstPage();
}else OLED_Show_ThirdPage();
}
break;
case 2: //按键2按下
if(page_num==1){
if(option==1)rays_time++;
else mode = !mode;
}else if(page_num==2){
if(option==1)temp_door++;
else if(option==2)humi_door++;
else if(option==3)light_door+=25;
}else if(page_num==3){
if(mode==0){
if(option==1){
LED=0;
led_status = 1;
}else if(option==2){
Wind = 1;
wind_status = 1;
}else if(option==3){
heat = 1;
heat_status = 1;
}else if(option==4){
Rays = 1;
rays_status = 1;
}
}
}
break;
case 3: //按键3按下
if(page_num==1){
if(option==1)rays_time--;
else{
if(mode==0){
open_flag = 1;
door_flag = !door_flag;
}
}
}else if(page_num==2){
if(option==1)temp_door--;
else if(option==2)humi_door--;
else if(option==3)light_door-=25;
}else if(page_num==3){
if(mode==0){
if(option==1){
LED=1;
led_status = 0;
}else if(option==2){
Wind = 0;
wind_status = 0;
}else if(option==3){
heat = 0;
heat_status = 0;
}else if(option==4){
Rays = 0;
rays_status = 0;
}
}
}
break;
case 4: //按键1按下
break;
}
}
void get_all_sensor_data()
{
DHT11_Read_Data(&DHT_temp,&DHT_hum); //获取温湿度数据
Get_HCSR_Value(&hcsr); //人体检测
Get_Light_Value(&Light_Value); //获取光照强度
}
void Sensor_Data_Handle()
{
//手动模式控制衣柜开关
if(mode==0){
if(open_flag==1){
open_flag = 0;
if(door_flag==1){
Stepper_RotateByLoop(1,1,1);
}else{
Stepper_RotateByLoop(0,1,1);
}
}
}
//自动模式
if(mode==1){
if(hcsr==1&&door_flag==0){
door_flag = 1;
Stepper_RotateByLoop(1,1,1);
if(Light_Value<light_door)LED = 0;
}else if(hcsr==0&&door_flag==1){
door_flag = 0;
Stepper_RotateByLoop(0,1,1);
LED = 1;
}
/*
检测到温湿度超过阈值
自动打开风扇通风降温、除湿
*/
if(DHT_hum>=humi_door||DHT_temp>temp_door){
Wind = 1;wind_status = Wind;
}else{
Wind = 0;wind_status = Wind;
}
//湿度大于阈值打开加热片除湿
if(DHT_hum>=humi_door){
heat = 1;heat_status = heat;
}else{
heat = 0;heat_status = heat;
}
//自动消毒
if(rays_status==1)Rays = 1;
else Rays = 0;
}
}
七、项目资料包内容
