基于wifi控制的stm32单片机智能窗帘设计

本设计的硬件构成:

STM32F103C8T6单片机最小系统板(包含+3.3V稳压电路+时钟晶振电路+复位电路(上电自复位,手动复位)),光敏电阻,ULN2003驱动电路,LCD液晶显示屏、按键、蜂鸣器、LED灯,wifi通信模块,步进电机,电源接口组成;

功能介绍:

1、采用LCD显示屏对窗帘的开关状态、光照强度和控制模式进行实时显示。

2、用户可通过按键,在手动模式下,对窗帘进行开启或者关闭;

3、在自动模式下,系统可通过检测光照强度的亮暗来控制窗帘的开关;

4、系统使用步进电机的正传和反转来模拟窗帘的开启和关闭;

5、实物共有四个按键,按键一:手动、自动模式切换键;按键二:设置键;按键三:在设置状态下,加一键;在手动模式下,窗帘开启键;按键四:在设置状态下,减一键;在手动模式下,窗帘关闭键;

5、 手机APP可以连接wifi模块,APP可实时显示窗帘当前的状态、环境的光强度,也可以发送控制指令,对窗帘进行控制。(具体控制指令可见视频)

主要物料清单及型号:

显示屏:LCD1602-5V;

单片机:STM32F103C8T6;

Wifi模块:ESP-M1;

电机驱动芯片:ULN2003;

光敏电阻:5516-10k;

步进电机:28YBJ48-4相5线;

PCB:

部分程序源码:

int main(void)
 {    
   u8 key=0;
  u8 dir=1;  
  delay_init();         //延时函数初始化    
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);    //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  uart_init(9600);   //串口初始化为115200
   KEY_Init();
   LED_Init();           //LED端口初始化
    Lcd_Init();
   TIM2_PWM_Init(3999,18);   //不分频。PWM频率=72000000/4000=18Khz,占空比最大为(3999+1)
   TIM3_Int_Init(499,7199);//10Khz的计数频率,计数到500为50ms 
   Adc_Init();
   motor_init();
   ascii_light[4]=0;
   ascii_setlight[4]=0;
   Lcd_Puts(0,0,"Light:0000xL  AU");
   Lcd_Puts(0,1,"State:OFF S:0000");
     while(1)
  {
    key=KEY_Scan(0);
    key_handle(key);
    
    
    APP_Command_Process();
    
    if(T_100ms>=15)
    {
      T_100ms=0;
      
      light=(Get_Adc_Average(8,10)-700)*1.2;
      
      if(refresh==1)
      {
        ascii_light[0]=light/1000+0x30;
        ascii_light[1]=light%1000/100+0x30;
        ascii_light[2]=light%100/10+0x30;
        ascii_light[3]=light%10+0x30;
        
        ascii_setlight[0]=set_light/1000+0x30;
        ascii_setlight[1]=set_light%1000/100+0x30;
        ascii_setlight[2]=set_light%100/10+0x30;
        ascii_setlight[3]=set_light%10+0x30;
        printf("当前光强度为:");
        printf("%s",ascii_light);
        printf("xL \t\n");
        
        printf("当前设置光强度为:");
        printf("%s",ascii_setlight);
        printf("xL \t\n");
        
        if(ctl_mode==AUTO_MODE)
          printf("当前状态为自动模式!!\t\n");
        else
          printf("当前状态为手动模式!!\t\n");
        
        if(state==OFF)
          printf("当前为关窗状态!!\t\n");
        else
          printf("当前为开窗状态!!\t\n");
        
        printf("\t\n");
        
        
      }
      
      
      if(ctl_mode==AUTO_MODE &&(set==0))
      {
        if(light>set_light)
        {
          if(state!=OFF)
          {
            motor_close();
            motor_close();
            state=OFF;
            printf("已关窗!!\r\n");
          }
        }
        else
        {
          if(state!=ON)
          {
            motor_open();
            motor_open();
            state=ON;
            printf("已开窗!!\r\n");
          }
        }
      }

      if(set==0)
        LCD_Refresh();
        
    }
    
     
  }   
 }

资料

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值