本文介绍了一种基于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分钟检测不到有人,则把台灯熄灭
}
}
}
如需资料请关注公众号“单片机实例设计”,首页回复“台灯”获取资料;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)