基于wifi控制的51单片机智能照明控制系统设计

一.硬件方案

本设计主要由51单片机+最小系统+LCD1602液晶显示模块+GY-30亮度传感器模块+ESP-M1 wifi模块+LED照明灯电路++DS1302时钟电路+按键模块;如图:
在这里插入图片描述

二.设计功能

(1)本设计主要涉及了环境光强度的测量、显示,对LED亮度的PWM控制以及通过WIFI实现APP软件开关控制。
(2)本设计带有日期及时间的显示,可通过按键调整当前的时间及日期,带有纽扣电池,掉电后重新上电不需要重新调整时间;
(3)主要分为自动和手动两种控制模式,自动模式下可根据对比当前的环境亮度与设定的亮度值,通过PWM来调整当前的LED灯光强;
(4)本设计共有5个按键,独立的按键为复位按键;并排的四个按键,一为手动/自动模式切换键,二为设置键,三为加一键(手动模式下为LED亮度增大键),四为减一键(手动模式下为LED亮度减小键);
(5)本系统可以通过wifi,实现app软件远程查看当前系统的状态及控制系统的工作;

三.设计原理图

原理图主要采用AD软件进行设计,如图:
在这里插入图片描述

四.软件设计

主程序源码

void main()
{
	u8 t = 0;						//用于判断秒数
	u8 cnt = 0;	 					//计数秒的闪烁
	u16 send_cnt = 0;				//串口打印间隔
	u16 def = 0;	
	u8 pwm;	

   delay_ms(500);

	lcd_init();		//LCD1602初始化
	Initial_DS1302();
	display_init();		//显示初始化
	UartInit();
	time_init(); //初始化定时器
	my_set_time(&initail_time);
	DS1302_GetTime(&current_time);
	LED=1;
	while(1)
	{
		key_scan();			//按键扫描	   时间设置
		delay_ms(10);
		if(set==0)			//不是时间设置模式,显示时间
		{
			if(t!=current_time.Second)
			{
				t = current_time.Second;
				cnt++;		
				GetBH1750();
			}
			DS1302_GetTime(&current_time);
			setting_time.Year = current_time.Year;      //显示当前年份
			setting_time.Month = current_time.Month;   	//显示当前月份
			setting_time.Day = current_time.Day;        //显示当前日期
			setting_time.Hour = current_time.Hour;      //显示当前小时
			setting_time.Minute = current_time.Minute;  //显示当前分钟
			setting_time.Second = current_time.Second;  //显示当前秒钟
			
			if(set==0)
				Time_display();		//时间刷新
		}
		if(handMode==1)   //是否为自动模式
		{
			if(setLight>curLight)
			{
				def= setLight/8;
				duty=(setLight-curLight)/def;
				if((setLight-curLight)%def>0)
					duty=duty+1;
			}
			else
				duty=0;
		}
			if(t_2ms>=800)
			{
				t_2ms=0;
				if(light_refresh==1)       //APP刷新当前数据
					{
						GetBH1750();
						Send_string("The current light intensity is: ");   //APP刷新当前设置光强度
						Send_string(light);
						Send_string(" xL\r\n");
						Send_string("The Setting light is: ");
						Send_Data(settingLight[0]+0x30);
						Send_Data(settingLight[1]+0x30);
						Send_Data(settingLight[2]+0x30);
						Send_Data(settingLight[3]+0x30);
						Send_Data(settingLight[4]+0x30);
						Send_string(" xL\r\n");
						
						Send_string("PWM Duty is: ");    //APP刷新当前PWM占空比
						pwm=((u8)duty*12.5);
						Send_Data(pwm/100+0x30);
						Send_Data(pwm%100/10+0x30);
						Send_Data(pwm%10+0x30);
						Send_string("%\r\n");
						Send_string("Control Mode is: ");
						if(handMode==0)
							Send_string("Manual Mode\r\n");
						else
							Send_string("AUTO Mode\r\n");
						Send_string("%\r\n");
						
					}
			}
		
		//串口接收信息
		if(revFlag == 1)
		{
			switch(Rx_Data)
			{
				case 'A':        //APP自动刷新状态使能
					light_refresh^=1;
				if(light_refresh==0)
					Send_string("Stop refresh!\r\n");
					
				break;
				
				case 'B':         //手/自动模式切换
				{
						handMode ^=1;
						if(handMode==0)
							Send_string("Manual Mode\r\n");
						else
							Send_string("AUTO Mode\r\n");
				}
				break;
				
				case 'C':        //提高当前LED光强度
				{
					if(handMode==0)
					{
						duty++;
						if(duty>=8)
							duty=8;
						Send_string("PWM Duty is: ");
						pwm=((u8)duty*12.5);
						Send_Data(pwm/100+0x30);
						Send_Data(pwm%100/10+0x30);
						Send_Data(pwm%10+0x30);
						Send_string("%\r\n");
						
					}
					else
						Send_string("Please operate in manual mode!!\r\n");
				}
				break;
				
				case 'D':        //降低当前LED光强度
					if(handMode==0)
					{
						if(duty<=0)
							duty=0;
						else
							duty--;
						Send_string("PWM Duty is: ");
						pwm=((u8)duty*12.5);
						Send_Data(pwm/100+0x30);
						Send_Data(pwm%100/10+0x30);
						Send_Data(pwm%10+0x30);
						Send_string("%\r\n");
						
					}
					else
						Send_string("Please operate in manual mode!!\r\n");

				break;
						
				
				
				case 'E':         //获取设置值
				{
//					auto_Flag ^= 1;
//					if(auto_Flag == 1)
//					{
//						Uart_SendString("Now is AutoMode!\r\n");
//						write_1602com(0xc0);
//						write_1602dat('A');
//					}
//					else
//					{
//						Uart_SendString("Now is TimeMode!\r\n");
//						write_1602com(0xc0);
//						write_1602dat('T');
//					}
					
				}
				break;
				
				default:
					revFlag = 0;
					break;
			}
			revFlag = 0;
		}
//		
		
	}
}

资料

  • 3
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值