【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元器件清单

  1. 主控采用STM32F103C8T6芯片
  2. wifi通信
  3. 0.96OLED显示屏幕
  4. DHT11温湿度传感器
  5. 光电红外传感器
  6. 步进电机(模拟衣柜门)
  7. 继电器风扇、加热片、LED照明灯
  8. 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;
	}
}

七、项目资料包内容

资料获取:查看主页介绍"充哥单片机设计"

相关推荐
松涛和鸣18 小时前
从零开始理解 C 语言函数指针与回调机制
linux·c语言·开发语言·嵌入式硬件·排序算法
小曹要微笑1 天前
STM32F7 时钟树简讲(快速入门)
c语言·stm32·单片机·嵌入式硬件·算法
XINVRY-FPGA1 天前
XCVP1802-2MSILSVC4072 AMD Xilinx Versal Premium Adaptive SoC FPGA
人工智能·嵌入式硬件·fpga开发·数据挖掘·云计算·硬件工程·fpga
沐欣工作室_lvyiyi1 天前
家用按摩椅控制系统设计(论文+源码)
单片机·物联网·毕业设计·按摩椅控制系统
天天爱吃肉82181 天前
电机控制技术深度解析:从基础原理到前沿实战
python·嵌入式硬件·汽车
学习路上_write1 天前
FREERTOS_互斥量_创建和使用
c语言·开发语言·c++·stm32·单片机·嵌入式硬件
czhaii1 天前
单片机RTOS“实时响应时间”的定义与测量方法
单片机
DIY机器人工房1 天前
简单理解:什么是EMC 整改?
stm32·单片机·嵌入式硬件·面试题·emc·diy机器人工房
偶像你挑的噻2 天前
11-Linux驱动开发-I2C子系统–mpu6050简单数据透传驱动
linux·驱动开发·stm32·嵌入式硬件