当前位置:   article > 正文

【单片机毕业设计】【mcuclub-dz-043】基于单片机的智能衣柜系统_基于单片机的智能衣柜的系统框图

基于单片机的智能衣柜的系统框图

  最近设计了一个项目基于单片机的智能衣柜系统,与大家分享一下:

一、基本介绍

项目编号:mcuclub-dz-043
项目名:基于单片机的衣柜的设计
单片机:STM32F103C8T6
功能简介:
1、通过DHT11检测衣柜内温湿度,当温度低于设置值,进行加热,当湿度高于设置值,进行加热和通风
2、通过内部RTC时钟获取当前时间,并能定时进行衣柜内紫外线消毒;
3、通过霍尔传感器检柜门状态,关闭时,自动打开消毒灯,打开时,消毒灯关闭
4、通过光敏电阻检测光照值,当光照值低于设置最小值且衣柜门打开,则LED照明灯自动打开
5、通过两对红外计数管分别记录衣柜内上衣和裤子数量
6、通过按键修改时间、设置消毒灯打开和关闭时间、设置各阈值
7、通过OLED显示屏显示测量值
8、通过WIFI模块将测量数据发送到手机端,并可以控制加热、通风、消毒、照明以及模式切换

二、32实物图

单片机型号:STM32F103C8T6

板子为绿色PCB板,两层板,厚度1.2,上下覆铜接地。元器件基本上为插针式,个别降压芯片会使用贴片式。

供电接口:TYPE-C

三、原理图

软件版本:AD2013

电路连线方式:网络标号连线方式

注意:原理图只是画出了模块的引脚图,而并不是模块的内部结构原理图

 四、PCB图

由原理图导出,封装很大一部分都是作者自己绘制,不提供封装库,只提供连接好的源文件。中间有一个项目编号,隐藏在单片机底座下,插入单片机后不会看到。

两层板,上下覆铜接地。

 五、系统框图

本设计以单片机为核心控制器,加上其他模块一起组成此次设计衣柜的整个系统,其中包括中控部分、输入部分和输出部分。中控部分采用了单片机控制器,其主要作用是获取输入部分的数据,经过内部处理,逻辑判断,最终控制输出部分。输入由六部分组成,第一部分是温湿度检测模块,通过该模块检测衣柜的温湿度;第二部分是霍尔传感器模块,通过该模块监测当前衣柜门是否打开;第三部分是红外对射管模块,通过红外对射管监测当前衣柜内上衣和裤子的数量;第四部分是光照强度监测模块,通过该模块监测当前衣柜内的光照强度;第五部分是按键模块,通过该模块可以切换界面、设置阈值、切换模式等;第六部分是供电模块,通过该模块可给整个系统进行供电。输出由三部分组成,第一部分是显示模块,通过该模块可以显示监测衣物的数数量,环境情况以及设置的阈值等;第二部分是继电器模块,通过两个继电器分别控制加热、通风、消毒、照明;第三部分是声光报警模块,当监测值不在设置的阈值内时进行声光报警。除此之外,WIFI模块既作为输入又作为输出,WIFI模块和手机进行连接,可以将监测的数据传输到用户手机端,用户也可以通过手机端发送指令控制继电器的工作及其模式的切换。具体系统框图如图3.1所示。

六、软件设计流程

系统的主流程图如图4-2所示。在主程序中:首先对各个模块进行初始化,随后进入while主循环,在主循环中,首先进入第一个函数按键函数,该函数主要分为两部分,第一部分为调用按键扫描函数获取按键键值,第二部分通过键值进行相应的处理操作,包括切换界面、设置阈值等;紧接着进入第二个函数监测函数,该函数主要通过调用相应的驱动函数获取测量值,并通过WIFI模块将监测的数据传输到手机端,用户也可以通过手机端发送指令,设备根据用户发送的指令执行对应的处理;紧接着进入第三个函数显示函数,该函数显示监测值及阈值;最后进入第四个函数处理函数,柜门关闭,且在定时时间范围内紫外线消毒,温度低于设置值,进行加热,湿度正常才能关闭,加热,温度正常才能关闭,加热,当光照值过低,则进行补光

 七、部分程序展示

软件版本:keil5

逻辑程序和驱动程序分开,分布于main.c和其他.c文件

  1. *******处理函数
  2. *****/
  3. void Manage_function(void)
  4. {
  5. if(flag_display == 0) //测量界面
  6. {
  7. if(flag_mode == 0) //如果处于自动模式
  8. {
  9. if(time_shi_begin*60+time_fen_begin > time_shi_end*60+time_fen_end) //开始时间>结束时间
  10. {
  11. 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)) //当前时间不在设置的时间内
  12. flag_time_on = 0;
  13. else //否则
  14. flag_time_on = 1;
  15. }
  16. else if(time_shi_begin*60+time_fen_begin < time_shi_end*60+time_fen_end) //开始时间<结束时间
  17. {
  18. 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)) //当前时间在设置的时间内
  19. flag_time_on = 1;
  20. else //否则
  21. flag_time_on = 0;
  22. }
  23. if(flag_time_on == 1&& DOOR == 0) //柜门关闭,且在定时时间范围内紫外线消毒
  24. {
  25. RELAY_XD = 1;
  26. }
  27. else
  28. {
  29. RELAY_XD = 0;
  30. }
  31. if(temp_value < temp_min*10) //温度低于设置值,进行加热
  32. {
  33. RELAY_JR = 1;
  34. }
  35. else if(temp_value >= temp_min*10)
  36. {
  37. if(humi_value <= humi_max*10) //湿度正常才能关闭,加热
  38. RELAY_JR = 0;
  39. }
  40. if(humi_value > humi_max*10)
  41. {
  42. RELAY_JR = 1;
  43. RELAY_TF = 1;
  44. }
  45. else if(humi_value <= humi_max*10) //温度正常才能关闭,加热
  46. {
  47. RELAY_TF = 0;
  48. if(temp_value >= temp_min*10)
  49. RELAY_JR = 0;
  50. }
  51. if(light_value < light_min) //当光照值过低,则进行补光
  52. {
  53. RELAY_BG = 1;
  54. }
  55. else
  56. {
  57. RELAY_BG = 0;
  58. }
  59. }
  60. }
  61. else //设置界面,继电器关闭
  62. {
  63. RELAY_JR = 0;
  64. RELAY_XD = 0;
  65. RELAY_TF = 0;
  66. RELAY_BG = 0;
  67. }
  68. 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 ||
  69. 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 ||
  70. 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) //有状态改变,发送状态值
  71. {
  72. flag_timer_begin_5s = 0;
  73. Aliyun_Send_Data();
  74. temp_old = temp_value;
  75. temp_min_old = temp_min;
  76. humi_old = humi_value;
  77. humi_max_old = humi_max;
  78. state_mode = flag_mode;
  79. state1 = RELAY_JR;
  80. state2 = RELAY_XD;
  81. state3 = RELAY_BG;
  82. state4 = RELAY_TF;
  83. state5 = DOOR;
  84. light_old = light_value;
  85. light_min_old = light_min;
  86. yi_num_old = yi_num;
  87. shang_num_old = shang_num;
  88. time_shi_begin_old = time_shi_begin;
  89. time_fen_begin_old = time_fen_begin;
  90. time_shi_end_old = time_shi_end;
  91. time_fen_end_old = time_fen_end;
  92. }
  93. else //没有数据改变,每5s发送一次数据,防止设备掉线
  94. {
  95. flag_timer_begin_5s = 1;
  96. if(flag_5s == 1)
  97. {
  98. flag_5s = 0;
  99. flag_timer_begin_5s = 0;
  100. Aliyun_Send_Data();
  101. temp_old = temp_value;
  102. temp_min_old = temp_min;
  103. humi_old = humi_value;
  104. humi_max_old = humi_max;
  105. state_mode = flag_mode;
  106. state1 = RELAY_JR;
  107. state2 = RELAY_XD;
  108. state3 = RELAY_BG;
  109. state4 = RELAY_TF;
  110. state5 = DOOR;
  111. light_old = light_value;
  112. light_min_old = light_min;
  113. yi_num_old = yi_num;
  114. shang_num_old = shang_num;
  115. time_shi_begin_old = time_shi_begin;
  116. time_fen_begin_old = time_fen_begin;
  117. time_shi_end_old = time_shi_end;
  118. time_fen_end_old = time_fen_end;
  119. Delay_ms(5);
  120. flag_timer_begin_5s = 1;
  121. }
  122. }
  123. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/283141?site
推荐阅读
相关标签
  

闽ICP备14008679号