**功能:**基于51单片机的智能照明控制系统,以51系列单片机为核心,使用光敏传感模块(采用ADC0832对光敏电路进行AD转换)、红外传感模块与声敏传感模块组成检测装置,并采用PWM对照明灯的光强度进行控制。
1.本设计分为手动模式和自动模式,可通过模式切换键切换模式;自动模式下绿灯亮,手动模式下,绿灯灭;
2.在自动模式下,照明灯根据环境光照强度和是否区域内检测到人体、声音来智能开启和关闭照明器,并根据不同环境光照强度,自动调节灯泡的照明亮度。
3.当检测到光照强度大于300LX(人眼对可见光感觉最舒适的照明强度)或未检测到人体、声音时,照明器自动关闭。
4.只有在满足光亮强度低于300LX和红外检测区域被有人员活动或声敏模块检测有声音这两个条件时才自动开启照明器。
Protues仿真:
程序:
/*********************************************************/
// 主函数
/*********************************************************/
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||Sound==1)
{
gTime=0; // 检测到有人,则把60秒计时清零
}
if(gTime>60000) // 如果gTime的值超过了60000
{
gTime=60000; // 则把gTime的值重新赋值为60000,避免过大溢出
gIndex=0; // 如果1分钟检测不到有人,则把台灯熄灭
}
}
}
/*********************************************************/
// 定时器0服务程序,1毫秒
/*********************************************************/
void Timer0(void) interrupt 1
{
TH0 = 252; // 给定时器0的TH0装初值
TL0 = 24; // 给定时器0的TL0装初值
gTime++; // 每1毫秒,gTime变量加1
gCount++; // 每1毫秒,gCount变量加1
if(gCount==10) // 如果gCount加到10了
{
gCount=0; // 则将gCount清零,进入新一轮的计数
if(gIndex!=0) // 如果说台灯不是最暗的(熄灭)
{
Lamp=0; // 则把台灯点亮
}
}
if(gCount==gIndex) // 如果gCount计数到和gIndex一样了
{
if(gIndex!=9) // 如果说台灯不是最亮的
{
Lamp=1; // 则把台灯熄灭
}
}
}
关注公众号-电子应用学习馆,首页回复智能照明获取。