0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32项目分享:智能鞋柜

机智云 ? 2025-05-27 18:04 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

项目成品图片:


edc154c0-3ae1-11f0-986f-92fbcf53809c.jpg


项目简介


1.功能详解


STM32智能鞋柜

功能如下:


DHT11检测鞋柜温湿度,温度低于阈值开启加热,湿度高于阈值开启加热和通风;

PM2.5传感器检测粉尘浓度,当粉尘浓度值大于设置最大值,进行通风

MQ-135检测鞋柜空气质量,过高时启动紫外线杀菌

光电红外传感器检测柜门状态,关闭时,自动打开消毒灯,打开时,消毒灯关闭

光敏传感器检测光照值,光照值低于阈值且鞋柜门打开时,开启灯光

按键可调节阈值

显示屏显示当前测量值

蓝牙模块将测量数据发送到手机端,并可以控制加热、除湿、通风、消毒、照明以及模式切换


2.材料清单

STM32F103C8T6单片机

OLED 屏幕

DHT11温湿度传感器

PM2.5粉尘传感器

MQ-135空气质量传感器

光电红外传感器

光敏传感器

BT04A蓝牙模块

加热片

风扇模块

UV消毒灯

照明灯

有源蜂鸣器


02


原理图设计


ede7edb0-3ae1-11f0-986f-92fbcf53809c.png


03

PCB硬件设计


PCB图

ee2300d0-3ae1-11f0-986f-92fbcf53809c.pngee51acd2-3ae1-11f0-986f-92fbcf53809c.png


04

程序设计

#include"sys.h"#include"stdio.h"#include"usart.h"#include"stdlib.h"#include"math.h"#include"delay.h"#include"gpio.h"#include"key.h"#include"oled.h"#include"usart.h"#include"dht11.h"#include"adc.h"#include"pm25.h"

/**********************************变量定义**********************************/uint8_tkey_num =0;//按键扫描标志位uint8_tflag_display =0;//显示界面标志位uint32_ttime_num =0;//10ms计时chardisplay_buf[32];//显示缓存区
_Bool flag_mode =0; //模式标志位intjr_flag =0;intxd_flag =0;inttf_flag =0;intzm_flag =0;
u16 humi_value =0;//鞋柜湿度值u16 humi_max =70;//鞋柜湿度最大值u16 temp_value =0;//鞋柜温度值u16 temp_min =10; //最小温度变量
u16 light_value =0;//光照值u16 light_min =50; //光照最小值
u16 pm25_value =0; //粉尘值u16 pm25_max =250; //粉尘最大值
u16 nh_value =0; //氨气值u16 nh_max =80; //氨气最大值
externuint8_tusart1_buf[256];//串口1接收数组

/**********************************函数声明**********************************/voidKey_function(void);//按键函数voidMonitor_function(void);//监测函数voidDisplay_function(void);//显示函数voidManage_function(void);//处理函数

/***********主函数*****/intmain(void){Delay_Init(); //延时初始化 Gpio_Init(); //IO初始化Key_Init(); //按键初始化Oled_Init(); //OLED初始化Oled_Clear_All();//清屏Usart1_Init(9600); //串口1初始化Adc_Init();//ADC初始化PM25_Init();//PM2.5初始化 while(DHT11_Init());//DHT11初始化Delay_ms(1000);Delay_ms(1000);
while(1){Key_function();//按键函数Monitor_function();//监测函数Display_function();//显示函数Manage_function();//处理函数
time_num++;//计时变量+1Delay_ms(10); if(time_num %10==0) LED_SYS = ~LED_SYS;if(time_num >=5000){time_num =0;}}}
/***********按键函数*****/voidKey_function(void){key_num =Chiclet_Keyboard_Scan(0);//按键扫描if(key_num !=0)//有按键按下{switch(key_num){case1://按键1:切换界面flag_display++; if(flag_display >=6) flag_display =0;Oled_Clear_All();//清屏break;
case2://按键2:加键switch(flag_display){case0://界面0:
break;
case1://界面1:温度最小值+1if(temp_min case2://界面2:湿度最大值+1if(humi_max case3://界面3:粉尘最大值+1if(pm25_max case4://界面4:氨气最大值+1if(nh_max case5://界面5:光照最小值+1if(light_min
default:break;}break;
case3://按键3:减键switch(flag_display){case0://界面0:自动模式flag_mode =0;break;
case1://界面1:温度最小值-1if(temp_min >0)temp_min--;break;
case2://界面2:湿度最大值-1if(humi_max >0)humi_max--;break;
case3://界面3:粉尘最大值-1if(pm25_max >0)pm25_max--;break;
case4://界面4:氨气最大值-1if(nh_max >0)nh_max--;break;
case5://界面5:光照最小值-1if(light_min >0)light_min--;break;
default:break;}break;
default:break;}}}
/***********监测函数*****/voidMonitor_function(void){if(flag_display ==0)//测量界面{if(time_num %10==0){Dht11_Get_Temp_Humi_Value(&temp_value,&humi_value);//获取温湿度值light_value =100-30*(Get_Adc_Average(0,3)*3.3/4096.0);//获取光照强度
pm25_value =Pm25_Get_Value(3);//获取PM2.5
if(NH ==0)nh_value =90*(Get_Adc_Average(4,3)*3.3/4096.0);//获取氨气值elsenh_value =0;
if(time_num %30==0)//发送测量数据{UsartPrintf(USART1,"\r\n温度:%d.%dC 湿度:%d.%d%%",temp_value/10,temp_value%10,humi_value/10,humi_value%10);UsartPrintf(USART1,"\r\n粉尘:%d 空气质量:%d",pm25_value,nh_value);UsartPrintf(USART1,"\r\n光照:%d ",light_value);
if(DOOR ==1)UsartPrintf(USART1," 柜门:关");elseUsartPrintf(USART1," 柜门:开");
if(flag_mode ==0)UsartPrintf(USART1,"\r\n模式:自动");elseUsartPrintf(USART1,"\r\n模式:手动");}}
if(USART1_WaitRecive() ==0){if(usart1_buf[0] =='A')flag_mode =0; //切换自动模式elseif(usart1_buf[0] =='B'){flag_mode =1; //切换手动模式jr_flag++;if(jr_flag%2==1){RELAY_JR=1; //开加热}elseRELAY_JR =0;}
elseif(usart1_buf[0] =='C'){flag_mode =1; //切换手动模式tf_flag++;if(tf_flag%2==1){RELAY_TF=1; //开通风}elseRELAY_TF =0;}
elseif(usart1_buf[0] =='D'){flag_mode =1; //切换手动模式xd_flag++;if(xd_flag%2==1){RELAY_XD =1; //开消毒}elseRELAY_XD =0;}
elseif(usart1_buf[0] =='E'){flag_mode =1; //切换手动模式zm_flag++;if(zm_flag%2==1){RELAY_ZM =1; //开照明}elseRELAY_ZM =0;
}

USART1_Clear();}}}
/***********显示函数*****/voidDisplay_function(void){switch(flag_display)//根据不同的显示模式标志位,显示不同的界面{case0://界面0:测量界面,显示测量值及模式Oled_ShowCHinese(1,0,"温");sprintf(display_buf,":%d.%dC ",temp_value/10,temp_value%10);Oled_ShowString(1,2, display_buf);
Oled_ShowCHinese(1,4,"湿");sprintf(display_buf,":%d.%d%% ",humi_value/10,humi_value%10);Oled_ShowString(1,10, display_buf);
Oled_ShowCHinese(2,0,"粉");sprintf(display_buf,":%d ",pm25_value);Oled_ShowString(2,2, display_buf);
Oled_ShowCHinese(2,4,"气");sprintf(display_buf,":%d ",nh_value);Oled_ShowString(2,10, display_buf);
Oled_ShowCHinese(3,0,"光");sprintf(display_buf,":%d ",light_value);Oled_ShowString(3,2, display_buf);
Oled_ShowCHinese(3,4,"柜门");Oled_ShowString(3,12,":");
if(DOOR ==1)Oled_ShowCHinese(3,7,"关");elseOled_ShowCHinese(3,7,"开");
if(flag_mode ==1)Oled_ShowCHinese(4,2,"手动模式");elseOled_ShowCHinese(4,2,"自动模式");
break;
case1://界面1:显示设置温度最小值Oled_ShowCHinese(1,0,"设置温度最小值");if(time_num %5==0){sprintf(display_buf,"%d ",temp_min);Oled_ShowString(2,7, display_buf);}if(time_num %10==0){Oled_ShowString(2,7," ");}break;
case2://界面2:显示设置湿度最大值Oled_ShowCHinese(1,0,"设置湿度最大值");if(time_num %5==0){sprintf(display_buf,"%d ",humi_max);Oled_ShowString(2,7, display_buf);}if(time_num %10==0){Oled_ShowString(2,7," ");}break;
case3://界面3:显示设置粉尘最大值Oled_ShowCHinese(1,0,"设置粉尘最大值");if(time_num %5==0){sprintf(display_buf,"%d ",pm25_max);Oled_ShowString(2,7, display_buf);}if(time_num %10==0){Oled_ShowString(2,7," ");}break;
case4://界面4:显示设置氨气最大值Oled_ShowCHinese(1,0,"空气质量最大值");if(time_num %5==0){sprintf(display_buf,"%d ",nh_max);Oled_ShowString(2,7, display_buf);}if(time_num %10==0){Oled_ShowString(2,7," ");}break;
case5://界面5:显示设置光照最小值Oled_ShowCHinese(1,0,"设置光照最小值");if(time_num %5==0){sprintf(display_buf,"%d ",light_min);Oled_ShowString(2,7, display_buf);}if(time_num %10==0){Oled_ShowString(2,7," ");}break;
default:break;}}
/***********处理函数*****/voidManage_function(void){if(flag_display ==0)//测量界面{if(flag_mode ==0){if(DOOR ==1) //如果鞋柜门是关闭的,关照明灯,如果氨气超高,开消毒灯 { RELAY_ZM =0;if(nh_max < nh_value){RELAY_XD =?1;
} else{RELAY_XD =0;} } else //如果鞋柜门是打开的,关消毒,如果光照低于最小值开照明灯 { RELAY_XD =0; if(light_value < light_min)? ? ? ? {? ? ? ? ? RELAY_ZM =?1;? ? ? ? }? ? ? ? else? ? ? ? {? ? ? ? ? RELAY_ZM =?0;? ? ? ? }? ? ? }
if(temp_value < temp_min*10?|| humi_value > humi_max*10) { //如果温度低于最小值或湿度大于最大值,那么打开加热 RELAY_JR =1; } else { RELAY_JR =0; }
if(humi_value > humi_max*10||pm25_value > pm25_max){//如果是湿度大于最大值或粉尘大于最大值开通风RELAY_TF =1;}else{RELAY_TF =0;}

if(nh_max < nh_value||pm25_value > pm25_max){BEEP=1;}elseBEEP=0;
}}else//设置界面,关闭所有继电器{RELAY_ZM =0; RELAY_TF =0; RELAY_JR =0; RELAY_XD =0;}}


05

实验效果

ee85a5be-3ae1-11f0-986f-92fbcf53809c.jpgeea74462-3ae1-11f0-986f-92fbcf53809c.jpg


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6069

    文章

    45071

    浏览量

    653602
  • pcb
    pcb
    +关注

    关注

    4372

    文章

    23545

    浏览量

    411652
  • STM32
    +关注

    关注

    2296

    文章

    11038

    浏览量

    366545
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    诚接stm32项目

    诚接stm32项目价格私聊
    发表于 05-17 10:20

    stm32项目搭建基础

    初学者吧stm32项目搭建基础好吧进入主题,我们现在要搭建一个stm32项目我还是把问题写在最开始把1. 注册keil你的keil需要注册当你编写了几行类似于helloworld的小
    发表于 08-23 08:47

    如何在IAR for ARM中创建STM32项目

    如何在IAR for ARM中创建STM32项目
    发表于 11-30 07:16

    STM32项目开发中超级实用技巧分享

    STM32项目开发中超级实用技巧一. 利用软启动打补丁二. 优化等级尽量选择不优化三. 合理利用开关总中断所有的热爱都要不遗余力,真正喜欢它便给它更高的优先级,和更多的时间吧!关于STM32其它
    发表于 01-21 06:22

    CubeMX如何创建stm32项目

    CubeMX如何创建stm32项目
    发表于 02-14 06:24

    基于HAL库的STM32项目问题描述

    问题描述最近在做的一个基于HAL库的STM32项目需要从多个SPI总线设备读取数据并通过DMA从串口发送,程序如下:(RxData为从SPI总线读取到的数据)sprintf(tempt, "
    发表于 02-28 11:25

    STM32项目设计:基于STM32F4的mp3、wav音乐播放器 (UCOSIII操作系统、GUI控件)

    STM32项目设计:基于STM32F4的mp3、wav音乐播放器 (UCOSIII操作系统、GUI控件)
    发表于 11-15 15:21 ?50次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>项目</b>设计:基于<b class='flag-5'>STM32</b>F4的mp3、wav音乐播放器 (UCOSIII操作系统、GUI控件)

    ADF2022项目开源

    电子发烧友网站提供《ADF2022项目开源.zip》资料免费下载
    发表于 07-05 09:42 ?2次下载
    ADF2022<b class='flag-5'>项目</b>开源

    STM32项目分享:智能家居(机智云)系统

    STM32项目分享:智能家居(机智云)系统
    的头像 发表于 07-28 08:10 ?3469次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>项目</b>分享:<b class='flag-5'>智能</b>家居(机智云)系统

    STM32项目实战:基于STM32F4的智能灯光控制系统(LVGL),附项目教程/源码

    智能灯光控制系统_STM32F4》项目完整文档、项目源码,私信小雯老师免费领取。STM32项目
    的头像 发表于 10-17 16:16 ?1963次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>项目</b>实战:基于<b class='flag-5'>STM32</b>F4的<b class='flag-5'>智能</b>灯光控制系统(LVGL),附<b class='flag-5'>项目</b>教程/源码

    STM32项目实战:基于STM32U5的智能灯光控制系统(LVGL),附项目教程/源码

    智能灯光控制系统_STM32U5》项目完整文档、项目源码,点击免费领取。项目资料领取:https://s.c1ns.cn/F5XyU
    的头像 发表于 11-07 18:50 ?2534次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>项目</b>实战:基于<b class='flag-5'>STM32</b>U5的<b class='flag-5'>智能</b>灯光控制系统(LVGL),附<b class='flag-5'>项目</b>教程/源码

    STM32项目实战:基于STM32U5的火灾报警系统(LVGL),附项目教程/源码

    《火灾报警系统_STM32U5》项目完整文档、项目源码,点击下方链接免费领取。项目资料领取https://s.c1ns.cn/F5XyUSTM32
    的头像 发表于 11-13 14:18 ?1990次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>项目</b>实战:基于<b class='flag-5'>STM32</b>U5的火灾报警系统(LVGL),附<b class='flag-5'>项目</b>教程/源码

    STM32项目实战:基于STM32U5的智能大棚温控系统(LVGL),附项目教程/源码

    智能大棚温控系统_STM32U5》项目完整文档、项目源码,点击下方链接免费领取。项目资料领取https://s.c1ns.cn/F5XyU
    的头像 发表于 11-13 17:08 ?2033次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>项目</b>实战:基于<b class='flag-5'>STM32</b>U5的<b class='flag-5'>智能</b>大棚温控系统(LVGL),附<b class='flag-5'>项目</b>教程/源码

    STM32项目分享:智能台灯系统

    01—项目简介1.功能详解基于STM32智能台灯系统。功能如下:亮度控制:按键控制照明灯的亮度(5挡亮度)计时功能:按键启动计时,累
    的头像 发表于 11-29 01:02 ?2164次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>项目</b>分享:<b class='flag-5'>智能</b>台灯系统

    STM32项目分享:STM32智能语音台灯

    项目简介1.功能详解STM32智能语音台灯功能如下:1.STM32F103C8T6单片机系统板作为主控单元2.按键切换模式,支
    的头像 发表于 03-15 10:02 ?1618次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>项目</b>分享:<b class='flag-5'>STM32</b><b class='flag-5'>智能</b>语音台灯