STM32项目分享:智能窗帘系统

目录

一、前言

二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

1.PCB图

2.PCB板打样焊接图

五、程序设计

六、实验效果

七、资料内容

项目分享


一、前言

项目成品图片:

哔哩哔哩视频链接:

https://www.bilibili.com/video/BV1vC411z7hY/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2

(资料分享见文末)

二、项目简介

1.功能详解

基于STM32智能窗帘系统。功能如下:

  1. 光强采集:光敏电阻实时采集环境光强度数据
  2. 温湿度采集:DHT11温湿度传感器采集环境温湿度
  3. 危险气体监测:MQ-7判断危险气体是否超标(超标板子指示灯闪烁)
  4. 窗帘控制:步进电机模拟窗帘驱动开闭
  5. OLED显示:当前时间,温湿度数据,模式信息
  6. 实时时钟:DS1302时钟模块读取记录当前时间
  7. 蓝牙APP控制:手机端蓝牙app远程遥控窗帘
  8. 控制模式:JR6001语音模块驱动扬声器播报提示音
  9. 控制模式:支持四种窗帘控制模式:自动模式、手动模式、定时模式和遥控模块,可按键切换

2.主要器件

  • STM32F103C8T6最小系统板
  • OLED显示屏(4针I2C协议)
  • 光敏电阻
  • DHT11温湿度传感器
  • MQ-7一氧化碳传感器
  • 28BYJ51步进电机
  • ULN2003步进电机驱动芯片
  • 蓝牙模块(BT04-A)
  • JR6001串口语音模块
  • 扬声器

三、原理图设计

四、PCB硬件设计

1.PCB图

2.PCB板打样焊接图

五、程序设计

cpp 复制代码
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;
		    }
            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;
            }	
		}
    }
}

六、实验效果

七、资料内容

项目分享

相关推荐
xuxg20052 小时前
4G 模组 AT 命令解析框架课程正式发布
stm32·嵌入式·at命令解析框架
CODECOLLECT4 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen4 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠7 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_7 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
深圳市九鼎创展科技9 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计9 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
風清掦11 小时前
【江科大STM32学习笔记-05】EXTI外部中断11
笔记·stm32·学习
小龙报11 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机
范纹杉想快点毕业11 小时前
嵌入式与单片机开发核心学习指南——从思维转变到第一性原理的深度实践
单片机·嵌入式硬件