欢迎光临
我们一直在努力

STM32项目开源:智能窗户/窗帘监测控制系统(代码+原理图+仿真)

文章目录

  • 一、前言
  • 二、项目功能简介
  • 三、PCB设计
  • 四、原理图设计
  • 五、程序设计
  • 六、包含内容
  • 七、资料分享

一、前言

实物项目成品: 在这里插入图片描述

仿真项目成品: 在这里插入图片描述

哔哩哔哩开源视频链接(复制浏览器打开): https://www.bilibili.com/video/BV1fD4k6pEsx/?vd_source=10da4d04d580bd6b34f7298120737c50

(资料分享见文末)

二、项目功能简介

功能介绍:

  • 环境检测:通过光敏电阻采集光照强度,DHT11 采集温湿度,MQ‑2 传感器检测烟雾浓度,烟雾超标时触发语音报警提示。
  • 窗帘控制:采用步进电机作为执行机构,完成窗帘开启、关闭的模拟控制。
  • OLED 显示:OLED 屏幕实时显示系统时间、温湿度、光照强度以及当前工作模式信息。
  • 实时时钟模块:使用 DS1302 时钟模块,为系统提供准确的实时时间,作为定时功能的时间基准。
  • 多模式切换:系统支持自动、手动、定时、蓝牙、语音五种工作模式,可通过按键进行模式切换。
  • 手动与定时控制:手动模式下按键直接控制窗帘开合;定时模式可设置窗帘启闭时间,实现定时自动开关窗帘。
  • 自动控制:自动模式根据光照、烟雾状态调控窗帘,光照大于阈值或烟雾超标自动开窗,光照过低自动关窗。
  • 语音与蓝牙远程控制:支持语音指令控制窗帘并播报设备状态;手机蓝牙 APP 可远程操控窗帘、切换模式、查看环境监测数据。
  • 三、PCB设计

    在这里插入图片描述

    四、原理图设计

    在这里插入图片描述

    五、程序设计

    代码如下():

    #include "led.h"
    #include "delay.h"
    #include "key.h"
    #include "sys.h"
    #include "timer.h"
    #include "usart.h"
    #include "usart3.h"
    #include "OLED_I2C.h"
    #include "math.h"
    #include "ds1302.h"
    #include "dht11.h"
    #include "bjdj.h"
    #include "adc.h"
    #include "stdio.h"

    #define Num_i 256 //电机步数

    u16 Flag_adc=0;
    u8 Num_wendu1,Num_wendu2,Num_shidu1,Num_shidu2;
    extern u8 Flag_caidan;
    extern u8 Flag_dakai,dakai,Flag_bankai,bankai,Flag_zhanting;
    extern u8st[50];
    int MQ_res = 0;

    int main(void)
    {
    u16 ii=0;
    delay_init();
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
    uart_init(9600); //语音模块串口初始化
    usart3_init(9600); //蓝牙使用
    DHT11_Init();
    Adc_Init();
    Moto_Init();
    ds1302_gpio_init();
    //ds1032_init();//时间设置
    ds1032_read_realTime(); //读取实时数据
    KEY_Init();
    MQ_Init();
    LED_Init();
    OLED_Init(); //屏幕初始化
    TIM3_Int_Init(719,7199);
    printf("AF:30");//声音调到31档 最大
    delay_ms(100);
    delay_ms(1000);
    printf("A7:00003");//欢迎使用
    delay_ms(1000);
    OLED_CLS();

    while(1)
    {
    if(Flag_caidan==1)//自动模式
    {
    delay_ms(500);
    Flag_adc=Get_Adc_Average(0,10);
    delay_ms(500);

    if(Flag_adc>1000&&Flag_dakai==0)
    {
    printf("A7:00001");//打开
    TIM_Cmd(TIM3,DISABLE);
    for(ii=0;ii<Num_i;ii++)
    {
    Motorcw_angle(1,3);
    MotorStop();
    }
    TIM_Cmd(TIM3, ENABLE);
    Flag_dakai=1;
    dakai=1;
    }
    if(Flag_adc<1000&&Flag_dakai==1)
    {
    printf("A7:00002");//关闭
    TIM_Cmd(TIM3,DISABLE);
    for(ii=0;ii<Num_i;ii++)
    {
    Motorccw_angle(1,3);
    MotorStop();
    }
    TIM_Cmd(TIM3, ENABLE);
    Flag_dakai=0;
    dakai=0;

    }
    // MQ_res = MQ_Scan();
    if(MQ==0)
    {
    LED0 = !LED0;
    delay_ms(100);
    LED0 = !LED0;
    delay_ms(100);
    }
    }
    if(Flag_caidan==2)//手动模式
    {
    if(dakai==1&&Flag_dakai==0)
    {
    printf("A7:00006");//打开
    TIM_Cmd(TIM3,DISABLE);
    for(ii=0;ii<Num_i;ii++)
    {
    Motorcw_angle(1,3);
    MotorStop();
    }
    TIM_Cmd(TIM3, ENABLE);
    Flag_dakai=1;
    }
    if(dakai==0&&Flag_dakai==1)
    {
    printf("A7:00007");//关闭
    TIM_Cmd(TIM3,DISABLE);
    for(ii=0;ii<Num_i;ii++)
    {
    Motorccw_angle(1,3);
    MotorStop();
    }
    TIM_Cmd(TIM3, ENABLE);
    Flag_dakai=0;
    }
    }
    if(Flag_caidan==3)//定时模式
    {
    if(TimeRAM.kai==1&&Flag_dakai==0)
    {
    if(TimeRAM.hour_kai==TimeData.hour&&TimeRAM.minute_kai==TimeData.minute)
    {
    printf("A7:00006");//打开
    TIM_Cmd(TIM3,DISABLE);
    for(ii=0;ii<Num_i;ii++)
    {
    Motorcw_angle(1,3);
    MotorStop();
    }
    TIM_Cmd(TIM3, ENABLE);
    Flag_dakai=1;
    }
    }
    if(TimeRAM.guan==1&&Flag_dakai==1)
    {
    if(TimeRAM.hour_guan==TimeData.hour&&TimeRAM.minute_guan==TimeData.minute)
    {
    printf("A7:00007");//关闭
    TIM_Cmd(TIM3,DISABLE);
    for(ii=0;ii<Num_i;ii++)
    {
    Motorccw_angle(1,3);
    MotorStop();
    }
    TIM_Cmd(TIM3, ENABLE);
    Flag_dakai=0;
    }
    }
    }

    if(Flag_caidan==4)//遥控模式
    {

    if(dakai==1&&Flag_dakai==0)
    {
    printf("A7:00006");//打开
    TIM_Cmd(TIM3,DISABLE);
    ii=0;
    for(ii=0;ii<Num_i;ii++)
    {
    Motorcw_angle(1,3);
    MotorStop();
    }
    TIM_Cmd(TIM3, ENABLE);
    Flag_dakai=1;
    }
    if(dakai==0&&Flag_dakai==1)
    {
    printf("A7:00007");//关闭
    TIM_Cmd(TIM3,DISABLE);
    for(ii=0;ii<Num_i;ii++)
    {
    Motorccw_angle(1,3);
    MotorStop();
    }
    TIM_Cmd(TIM3, ENABLE);
    Flag_dakai=0;
    }
    }
    }
    }

    六、包含内容

    在这里插入图片描述

    七、资料分享

    资料获取:请查看主页介绍搜索或观看开源视频获取

    赞(0)
    未经允许不得转载:171主机测评 » STM32项目开源:智能窗户/窗帘监测控制系统(代码+原理图+仿真)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址