基于51单片机的智能台灯设计

基于51单片机的智能台灯设计,第1张

一.硬件方案

本文介绍了一种基于PWM调光的智能台灯设计。把单片机技术和PWM调光技术结合起来实现台灯光强的调节。即在不改变PWM方波周期的前提下,利用单片机控制PWM的占空比,从而来改变电压的大小实现灯光亮度的调节。
当人体在台灯的范围内且环境光线较弱时,自动感应开灯,且灯的亮度随着环境光线的改变而自动调节,一旦人离开台灯范围,即红外热释传感器检测不到有人时,1分钟后自动熄灯。
主要由51单片机+光线检测雾传感+ADC0832模数芯片+人体检测模块+按键+LED灯等;如图:

二.设计功能

(1)上电之后,绿色的 LED 灯点亮,代表当前是自动控制模式。
(2)通过按键 1,可以在手动模式(绿灯灭)和自动模式(绿灯亮)之间来回切换 .
(3)在手动模式下,可以通过按键 2 降低亮度,按键 3 增加亮度。
(4)在自动模式下,首先要检测到有人,才进行亮度的自动控制,否则台灯熄灭。 可以挡住光敏电阻的光线,或用手电筒来照射光敏电阻,模拟光照的变化,从而就可以 看到台灯的亮度会随着环境中的光照强度的改变而改变,效果是光照越弱,台灯越亮。 如果人体传感器 1 分钟检测不到有人,台灯就会自动熄灭。
(5)无论是自动模式还是手动模式,都是把亮度分为 10 个等级的。
(6)人体感应检测功能只在自动模式下有效。

三.设计原理图

(1)原理图主要采用AD软件进行设计,如图:

(2)Protues仿真图如下:

(3)PCB图如下:

四.软件设计

(1)程序流程图

(2)主程序源码

/*********************************************************/
// 主函数
/*********************************************************/
void main()
{
	uchar ret;
	
	TimerInit(); 					// 定时器初始化
	
	LED=0;								// 指示灯点亮(自动模式指示灯)
	ret=Get_ADC0832();		// 获取AD采集结果(环境光照强度)
	AutoControl(ret);			// 上电先进行一次自动亮度控制	
	AutoControl(ret+7);
	
	while(1)
	{
		/* 模式切换控制 */
		if(Key1==0)					// 如果按键1被按下去
		{
			LED=~LED;					// 切换LED灯状态
			DelayMs(10);			// 延时消除按键按下的抖动
			while(!Key1);			// 等待按键释放
			DelayMs(10);			// 延时消除按键松开的抖动
		}
			
		/* 亮度控制 */
		if(LED==1)							// 如果LED是灭的
		{
			ManualControl();			// 则进行手动控制
		}
		else										// 如果LED是亮的
		{
			if(gTime<60000)
			{
				ret=Get_ADC0832();		// 获取AD采集结果(环境光照强度)
				AutoControl(ret);			// 进行自动控制	
				DelayMs(200);
			}
		}
		
		/*检测是否有人*/
		if(Module==1)
		{
			gTime=0;										// 检测到有人,则把60秒计时清零
		}
		if(gTime>60000)								// 如果gTime的值超过了60000
		{
			gTime=60000;								// 则把gTime的值重新赋值为60000,避免过大溢出
			gIndex=0;										// 如果1分钟检测不到有人,则把台灯熄灭
		}
	}
}

如需资料请关注公众号“单片机实例设计”,首页回复“台灯”获取资料;

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/757675.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-01
下一篇 2022-05-01

发表评论

登录后才能评论

评论列表(0条)

保存