赞
踩
项目编号:mcuclub-dz-043
项目名:基于单片机的衣柜的设计
单片机:STM32F103C8T6
功能简介:
1、通过DHT11检测衣柜内温湿度,当温度低于设置值,进行加热,当湿度高于设置值,进行加热和通风
2、通过内部RTC时钟获取当前时间,并能定时进行衣柜内紫外线消毒;
3、通过霍尔传感器检柜门状态,关闭时,自动打开消毒灯,打开时,消毒灯关闭
4、通过光敏电阻检测光照值,当光照值低于设置最小值且衣柜门打开,则LED照明灯自动打开
5、通过两对红外计数管分别记录衣柜内上衣和裤子数量
6、通过按键修改时间、设置消毒灯打开和关闭时间、设置各阈值
7、通过OLED显示屏显示测量值
8、通过WIFI模块将测量数据发送到手机端,并可以控制加热、通风、消毒、照明以及模式切换
单片机型号:STM32F103C8T6
板子为绿色PCB板,两层板,厚度1.2,上下覆铜接地。元器件基本上为插针式,个别降压芯片会使用贴片式。
供电接口:TYPE-C
软件版本:AD2013
电路连线方式:网络标号连线方式
注意:原理图只是画出了模块的引脚图,而并不是模块的内部结构原理图
由原理图导出,封装很大一部分都是作者自己绘制,不提供封装库,只提供连接好的源文件。中间有一个项目编号,隐藏在单片机底座下,插入单片机后不会看到。
两层板,上下覆铜接地。
本设计以单片机为核心控制器,加上其他模块一起组成此次设计衣柜的整个系统,其中包括中控部分、输入部分和输出部分。中控部分采用了单片机控制器,其主要作用是获取输入部分的数据,经过内部处理,逻辑判断,最终控制输出部分。输入由六部分组成,第一部分是温湿度检测模块,通过该模块检测衣柜的温湿度;第二部分是霍尔传感器模块,通过该模块监测当前衣柜门是否打开;第三部分是红外对射管模块,通过红外对射管监测当前衣柜内上衣和裤子的数量;第四部分是光照强度监测模块,通过该模块监测当前衣柜内的光照强度;第五部分是按键模块,通过该模块可以切换界面、设置阈值、切换模式等;第六部分是供电模块,通过该模块可给整个系统进行供电。输出由三部分组成,第一部分是显示模块,通过该模块可以显示监测衣物的数数量,环境情况以及设置的阈值等;第二部分是继电器模块,通过两个继电器分别控制加热、通风、消毒、照明;第三部分是声光报警模块,当监测值不在设置的阈值内时进行声光报警。除此之外,WIFI模块既作为输入又作为输出,WIFI模块和手机进行连接,可以将监测的数据传输到用户手机端,用户也可以通过手机端发送指令控制继电器的工作及其模式的切换。具体系统框图如图3.1所示。
系统的主流程图如图4-2所示。在主程序中:首先对各个模块进行初始化,随后进入while主循环,在主循环中,首先进入第一个函数按键函数,该函数主要分为两部分,第一部分为调用按键扫描函数获取按键键值,第二部分通过键值进行相应的处理操作,包括切换界面、设置阈值等;紧接着进入第二个函数监测函数,该函数主要通过调用相应的驱动函数获取测量值,并通过WIFI模块将监测的数据传输到手机端,用户也可以通过手机端发送指令,设备根据用户发送的指令执行对应的处理;紧接着进入第三个函数显示函数,该函数显示监测值及阈值;最后进入第四个函数处理函数,柜门关闭,且在定时时间范围内紫外线消毒,温度低于设置值,进行加热,湿度正常才能关闭,加热,温度正常才能关闭,加热,当光照值过低,则进行补光。
软件版本:keil5
逻辑程序和驱动程序分开,分布于main.c和其他.c文件
- *******处理函数
- *****/
- void Manage_function(void)
- {
- if(flag_display == 0) //测量界面
- {
- if(flag_mode == 0) //如果处于自动模式
- {
- if(time_shi_begin*60+time_fen_begin > time_shi_end*60+time_fen_end) //开始时间>结束时间
- {
- if((time_shi_end*60+time_fen_end <= calendar.hour*60+calendar.min) && (calendar.hour*60+calendar.min < time_shi_begin*60+time_fen_begin)) //当前时间不在设置的时间内
- flag_time_on = 0;
- else //否则
- flag_time_on = 1;
- }
- else if(time_shi_begin*60+time_fen_begin < time_shi_end*60+time_fen_end) //开始时间<结束时间
- {
- if((time_shi_begin*60+time_fen_begin <= calendar.hour*60+calendar.min) && (calendar.hour*60+calendar.min < time_shi_end*60+time_fen_end)) //当前时间在设置的时间内
- flag_time_on = 1;
- else //否则
- flag_time_on = 0;
- }
-
- if(flag_time_on == 1&& DOOR == 0) //柜门关闭,且在定时时间范围内紫外线消毒
- {
- RELAY_XD = 1;
- }
- else
- {
- RELAY_XD = 0;
- }
-
- if(temp_value < temp_min*10) //温度低于设置值,进行加热
- {
- RELAY_JR = 1;
- }
- else if(temp_value >= temp_min*10)
- {
- if(humi_value <= humi_max*10) //湿度正常才能关闭,加热
- RELAY_JR = 0;
- }
-
- if(humi_value > humi_max*10)
- {
- RELAY_JR = 1;
- RELAY_TF = 1;
- }
- else if(humi_value <= humi_max*10) //温度正常才能关闭,加热
- {
- RELAY_TF = 0;
- if(temp_value >= temp_min*10)
- RELAY_JR = 0;
- }
-
- if(light_value < light_min) //当光照值过低,则进行补光
- {
- RELAY_BG = 1;
- }
- else
- {
- RELAY_BG = 0;
- }
- }
- }
- else //设置界面,继电器关闭
- {
- RELAY_JR = 0;
- RELAY_XD = 0;
- RELAY_TF = 0;
- RELAY_BG = 0;
- }
-
- if(temp_old != temp_value ||temp_min_old != temp_min || state_mode != flag_mode || state5 != DOOR || yi_num != yi_num_old || shang_num != shang_num_old ||
- humi_old != humi_value || humi_max_old != humi_max || light_old != light_value || light_min_old != light_min || time_shi_begin != time_shi_begin_old || time_fen_begin != time_fen_begin_old ||
- time_shi_end != time_shi_end_old || time_fen_end != time_fen_end_old || state1 != RELAY_JR || state2 != RELAY_XD || state3 != RELAY_BG || state4 != RELAY_TF) //有状态改变,发送状态值
- {
- flag_timer_begin_5s = 0;
- Aliyun_Send_Data();
- temp_old = temp_value;
- temp_min_old = temp_min;
- humi_old = humi_value;
- humi_max_old = humi_max;
- state_mode = flag_mode;
- state1 = RELAY_JR;
- state2 = RELAY_XD;
- state3 = RELAY_BG;
- state4 = RELAY_TF;
- state5 = DOOR;
- light_old = light_value;
- light_min_old = light_min;
- yi_num_old = yi_num;
- shang_num_old = shang_num;
- time_shi_begin_old = time_shi_begin;
- time_fen_begin_old = time_fen_begin;
- time_shi_end_old = time_shi_end;
- time_fen_end_old = time_fen_end;
- }
- else //没有数据改变,每5s发送一次数据,防止设备掉线
- {
- flag_timer_begin_5s = 1;
- if(flag_5s == 1)
- {
- flag_5s = 0;
- flag_timer_begin_5s = 0;
- Aliyun_Send_Data();
- temp_old = temp_value;
- temp_min_old = temp_min;
- humi_old = humi_value;
- humi_max_old = humi_max;
- state_mode = flag_mode;
- state1 = RELAY_JR;
- state2 = RELAY_XD;
- state3 = RELAY_BG;
- state4 = RELAY_TF;
- state5 = DOOR;
- light_old = light_value;
- light_min_old = light_min;
- yi_num_old = yi_num;
- shang_num_old = shang_num;
- time_shi_begin_old = time_shi_begin;
- time_fen_begin_old = time_fen_begin;
- time_shi_end_old = time_shi_end;
- time_fen_end_old = time_fen_end;
- Delay_ms(5);
- flag_timer_begin_5s = 1;
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。