问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

STM32项目分享:智能家电控制系统

创作时间:
作者:
@小白创作中心

STM32项目分享:智能家电控制系统

引用
CSDN
1.
https://blog.csdn.net/qq_44016222/article/details/145367851

本文分享了一个基于STM32的智能家电控制系统项目,详细介绍了其功能、硬件组成、原理图设计、PCB设计以及程序实现。项目通过STM32单片机控制温湿度监测、远程控制和自动报警等功能,具有很高的实用价值和学习参考意义。

一、前言

项目成品图片:

二、项目简介

1.功能详解

基于STM32的智能家电控制系统,主要功能包括:

  1. STM32F103C8T6单片机系统板作为主控单元
  2. 显示功能:温湿度数据实时显示在OLED屏幕上
  3. 自动控制:判断温湿度是否在阈值范围内,否则蜂鸣器报警
  4. 阈值更改:按键可调节阈值大小
  5. 远程控制:通过机智云APP远程控制灯光、风扇和窗帘的开关
  6. 远程监视:机智云APP可以远程监视环境温湿度数据信息

2.主要器件

  • STM32F103C8T6单片机
  • OLED 屏幕
  • DHT11温湿度传感器
  • ESP8266-01S WiFi模块
  • 继电器
  • 大功率LED灯模块
  • 风扇模块
  • 步进电机

三、原理图设计

四、PCB硬件设计

PCB图

五、程序设计

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    OLED_Init();
    DHT11_UserConfig();
    MOTOR_UserConfig();
    Key_Init();
    USB_Init();
    Buzzer_Init();
    
    Temp_value = FLASH_R(FLASH_START_ADDR);	//从指定页的地址读FLASH
    Humi_value = FLASH_R(FLASH_START_ADDR+2);	//从指定页的地址读FLASH
    
    Timer2_Init(9,14398);
    uart2_init(9600);
    uart1_init(115200);
    
    GENERAL_TIM_Init();
    userInit();	//完成初始赋值
    gizwitsInit();
    IWDG_Init();
    
    while (1)
    {
        IWDG_ReloadCounter(); //重新加载计数值 喂狗
        switch(Menu)
        {
            case 1:
                Menu1();	//显示菜单1
                
                /*判断电机启动标志位是否为1*/
                if(Curtain_ON_Flag == 1)
                {
                    MOTOR_Direction_Angle(1,0,180,1);	//顺时针电机旋转 180度
                    MOTOR_STOP();	//电机停止
                    Curtain_ON_Flag = 0;
                }
                
                /*判断电机关闭标志位是否为1*/
                if(Curtain_OFF_Flag == 1)
                {
                    MOTOR_Direction_Angle(0,0,180,1);	//逆时针电机旋转 180度
                    MOTOR_STOP();	//电机停止
                    Curtain_OFF_Flag = 0;
                }
                break;
                
            case 2:
                OLED_Clear();	//清屏
                Menu2();	//显示菜单2
                Menu = 3;	
            case 3:
                OLED_Option(SetNum);	//显示当前选择的位置
                OLED_ShowNum(2,10,Temp_value,2);	//显示温度阈值数据
                OLED_ShowNum(3,10,Humi_value,2);	//显示湿度阈值数据
                
                /*累计按键1按下的次数*/
                if(KeyNum == 1)
                {
                    KeyNum = 0;
                    SetNum++;
                    if(SetNum > 2)
                    {
                        SetNum = 1;
                    }
                }
                
                /*当位置指向温度阈值根据按键3或4调节数值*/
                if(SetNum == 1)
                {
                    if(KeyNum == 3)
                    {
                        KeyNum = 0;
                        Temp_value++;
                        if(Temp_value >= 100)
                        {
                            Temp_value = 0;
                        }
                    }
                    if(KeyNum == 4)
                    {
                        KeyNum = 0;
                        Temp_value--;
                        if(Temp_value >= 100)
                        {
                            Temp_value = 99;
                        }
                    }
                }
                /*当位置指向湿度阈值根据按键3或4调节数值*/
                if(SetNum == 2)
                {
                    if(KeyNum == 3)
                    {
                        KeyNum = 0;
                        Humi_value++;
                        if(Humi_value >= 100)
                        {
                            Humi_value = 0;
                        }
                    }
                    if(KeyNum == 4)
                    {
                        KeyNum = 0;
                        Humi_value--;
                        if(Humi_value >= 100)
                        {
                            Humi_value = 99;
                        }
                    }
                }
                
                /*当按键2按下时回到主菜单*/
                if(KeyNum == 2)
                {
                    KeyNum = 0;
                    
                    /*将更改过的阈值存入Flash中*/
                    FLASH_W(FLASH_START_ADDR,Temp_value,Humi_value);
                    OLED_Clear();	//清屏
                    Menu = 1;	//显示菜单1
                }
                break;
                
            default : break;
        }
        userHandle();
        gizwitsHandle((dataPoint_t *)&currentDataPoint);
    }
}  

六、实验效果

七、包含内容

项目分享


© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号