【STM32项目开源】基于STM32的智能衣柜系统
目录
一、设计背景和意义
1.1设计背景
1.2设计意义
二、实物效果展示
2.1实物图片
2.2实物演示视频
三、硬件功能简介
3.1项目功能详解
3.2元器件清单
四、主框图与软件流程图
五、硬件PCB展示
六、软件程序设计
七、项目资料包内容
资料获取:查看主页介绍“充哥单片机设计”
一、设计背景和意义
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展示
六、软件程序设计
#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初始化,波特率115200uart2_init(9600); //串口2初始化,波特率9600DHT11_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;}
}