• 【单片机毕业设计选题24009】-基于单片机的智能窗帘控制系统设计


    系统功能:

    采用STM32最小系统板控制,采集传感器数据显示在OLED上并可通过按键或红外遥控器控制两路继电器和步进电机。

    1. 使用DHT11模块采集环境温湿度

    2. 使用光敏传感器采集光照强度

    3. 继电器模拟加温(采集温度小于设定温度时)

    4. 继电器模拟加湿(采集湿度小于设定湿度时)

    5. 步进电机模拟控制窗帘开关

    6. 读取DS1302系统时间

    7. OLED显示系统信息

    主要功能模块原理图:

    电源时钟烧录接口:

    单片机和按键输入电路:

    传感器采集电路:

    资料获取地址

    系统主要功能模块代码

    初始化代码:

    1. /* USER CODE BEGIN 1 */
    2. /* USER CODE END 1 */
    3. /* MCU Configuration--------------------------------------------------------*/
    4. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    5. HAL_Init();
    6. /* USER CODE BEGIN Init */
    7. InitVar();
    8. /* USER CODE END Init */
    9. /* Configure the system clock */
    10. SystemClock_Config();
    11. /* USER CODE BEGIN SysInit */
    12. /* USER CODE END SysInit */
    13. /* Initialize all configured peripherals */
    14. MX_GPIO_Init();
    15. MX_USART1_UART_Init();
    16. MX_ADC1_Init();
    17. MX_USART2_UART_Init();
    18. /* USER CODE BEGIN 2 */
    19. HAL_Delay(100);
    20. SetUart1RxToInput();
    21. HAL_Delay(50);
    22. //uart1打开接收中断
    23. HAL_UART_Receive_IT(&huart1, (uint8_t*)&uart1RecBuff, 1);
    24. //uart2打开接收中断
    25. HAL_UART_Receive_IT(&huart2, (uint8_t*)&uart2RecBuff, 1);
    26. //初始化显示
    27. InitOled();
    28. InitOledDisp();
    29. //测试写DS1302时间
    30. // TestSetTime();
    31. ResetDHT11();
    32. /* USER CODE END 2 */

    系统控制代码:

    1. //系统信息更新
    2. void SystemControl(void)
    3. {
    4. UpdateTempData();
    5. GetSystemTime();
    6. GetSensorState();
    7. }

    获取系统状态:
     

    1. //处理系统采集到的传感器值
    2. void GetSensorState(void)
    3. {
    4. //读光照传感器值
    5. getLightVal = ReadADCChannel(ADC_CHANNEL_0);
    6. //DHT11采集到的温度值
    7. getTempVal = DHT11_Data.temp_int;
    8. if(getTempVal//采集温度比设定温度低
    9. {
    10. //自动模式下,打开加热继电器,手动模式下不处理
    11. if(sysMode==SYS_MODE_AUTO)
    12. {
    13. heatState = true;
    14. RELAY1_ON();
    15. }
    16. }
    17. else
    18. {
    19. //自动模式下,关闭加热继电器
    20. if(sysMode==SYS_MODE_AUTO)
    21. {
    22. heatState = false;
    23. RELAY1_OFF();
    24. }
    25. }
    26. //DHT11采集到的湿度值
    27. getHumiVal = DHT11_Data.humi_int;
    28. if(getHumiVal>setHumiVal) //采集湿度比设定湿度高
    29. {
    30. //自动模式下,打开通风继电器
    31. if(sysMode==SYS_MODE_AUTO)
    32. {
    33. fanState = true;
    34. RELAY2_ON();
    35. }
    36. }
    37. else
    38. {
    39. //自动模式下,关闭通风继电器
    40. if(sysMode==SYS_MODE_AUTO)
    41. {
    42. fanState = false;
    43. RELAY2_OFF();
    44. }
    45. }
    46. //自动模式下的开窗关窗,到时间后只执行一次操作
    47. if(sysMode==SYS_MODE_AUTO)
    48. {
    49. //到达设置的开窗帘时间
    50. if(getTimeHour==setOpenHour)
    51. {
    52. //只执行一次开窗帘的操作
    53. if(alreadyOpen==false)
    54. {
    55. alreadyOpen = true;
    56. //窗帘是关闭状态的情况下才打开窗帘
    57. if(windState==false)
    58. {
    59. windState = true;
    60. OpenTheWindow();
    61. }
    62. }
    63. }
    64. else
    65. {
    66. alreadyOpen = false;
    67. }
    68. //到达设置的关窗帘的时间
    69. if(getTimeHour==setCloseHour)
    70. {
    71. //只执行一次关窗帘的操作
    72. if(alreadyClose==false)
    73. {
    74. alreadyClose = true;
    75. //窗帘是打开状态的情况下才关闭窗帘
    76. if(windState==true)
    77. {
    78. windState = false;
    79. CloseTheWindow();
    80. }
    81. }
    82. }
    83. else
    84. {
    85. alreadyClose = false;
    86. }
    87. }
    88. }

    此设计提供的资料包含原理图PCB(包含PDF,AD,立创EDA三个版本),源代码,系统框图,主程序流程图,物料清单(包含使用到的器件手册),功能操作说明等。

  • 相关阅读:
    【Java开发语言 00】环境搭建(配置java环境+‘javac’不是内部或外部命令,也不是可运行的程序+安装idea+idea基本用法)
    局部线性嵌入(Locally Linear Embedding, LLE)
    Intellij插件之ExtensionPoints
    Jmeter接口自动化(四)配置元件
    Nacos注册中心
    Jar包常见的反编译工具介绍与使用
    如何在2023年学习React
    《洛谷深入浅出进阶篇》P1995 程序自动分析——并查集,离散化
    【口罩识别】基于matlab GUI RGB滤波+YCbCr+肤色标定口罩识别【含Matlab源码 1895期】
    vue-创建项目
  • 原文地址:https://blog.csdn.net/mcu_fang/article/details/139713146