陈小凤 贾威 龙袁 开跃
摘 要:分析比较了已有的几种智能照明系统方案,将检测单元阵列引入智能电灯控制装置的设计中,从而实现了可精确定位使用者位置及检测此位置的自然光水平,进而实现照明灯的精确控制,实现了真正的智能照明。实际应用验证了本文所述方法的可行性,根据室内自然光及使用者情况自动进行智能照明控制可达到节能目的,且方便操作管理,具有很好的应用前景,此外加入了手动控制,在自动控制系统出现故障时可以人为的手动控制,提高了整个系统的稳定性。考虑到智能电灯控制装置的作用时域,本系统加入了时钟显示、熄灯时间定时和语音提醒及自动熄灯功能,大大的拓展了系统的实用性。
关键词:智能教室照明控制;人体检测;自然光检测;检测单元阵列;手动;作用时域;稳定性;时钟显示;熄灯时间定时;语音提醒;自动熄灯;实用性;
Intelligent Lighting Control System Classroom xiaofengchen weijia yuanlong yuekai
Abstract: The comparison of the existing programs of several intelligent lighting system, will detect the introduction of smart classroom lighting element array control system design, enabling users to pinpoint the location and detection of the level of natural light in this location, then making lighting precise control to achieve a truly intelligent lighting. Verify the practical feasibility of the method, according to natural light and indoor conditions the user can be automatically controlled intelligent lighting to save energy, and facilitate the operation and management, has good prospects, in addition to adding a manual control, automatic control system failure can be man-made manual control, to improve the stability of the whole system. Taking into account the smart classroom lighting control system in the time domain, the system joined the clock display, lights-out time, timing and voice reminder and automatic lights-out functionality, greatly expanding the system's practicality.
Keywords: intelligent classroom lighting control; human body detection; natural light detection; detection unit array; manual; role in time domain; stability; clock display; extinguished it; voice reminded; automatically turn off the lights; practicality;
1 引言
长期以来,与自然光结合的室内智能照明系统在国内一直被忽视,大多室内公用场所仍沿用传统的照明控制方式⋯。在学校教室、车站候车室、医院等公用的场
所里,如果灯打开了,则照明灯从早上一直亮到晚上,甚至彻夜长明的现象并不少见。这一现象在各大学校园内表现尤为突出,导致了能源的极大浪费。为解决这一问题,一些室内智能照明方案被提出,但这些方案在不同程度上有不够完善或者根本无法实行的问题。本文根据目前已有的各种方案的优缺点,将检测单元阵列引入智能电灯控制装置的设计中,从而解决了原有智能照明方案中的问题,成功设计实现了真正意义上的室内智能照明系统。
2 现有方案问题分析
现有的室内智能照明方案一般有以下几种:
第一种方法是在公用的室内出入口安装人数流量计,对室内的人数进行统计,当有人时开灯,没人时关灯。这一方法理论上可以实现没人时照明灯自动熄灭的功能,但由于统计室内人数是一件十分艰难的工作,在人员集中进出时,甚至根本无法正确统计人数;由于没有自然光检测装置,导致在白天光线充足时只要室内有人照明灯也打开的情况;在室内仅有1人的情况下,由于无法定位使用者的具体位置,只能打开全部照明灯,这样反而造成更大的浪费。
另一种方法是和自然光检测结合起来,在自然光充足的情况下,关闭照明灯以达到节能的目的,在光线不足时打开照明灯。依据这一设计思想实现的方案主要有下列问题:由于不能进行室内是否有人的判断,所以会导致在室内无人但光线不足时打开照明系统;如果仅使用模拟比较器的方式实现自然光充足与否的判断,可能在光线充足与否的临界点产生频繁切换,导致照明灯寿命缩减,影响照明系统的正常工作。
与上述两种方案相比,一种更简单的方法是基于时间控制,即设定在某一段时间内打开照明灯,其他时间则关闭,而不考虑有无人的情况,不考虑阴天、晴天光线不同等情况。以上各种方案都有缺点,目前比较成熟的方案是把上述几种方法结合起来实现,相互弥补不足,从而具备一定的智能水平和实际应用价值。但还是存在由于不能定位室内人员位置,导致不能对室内灯光进行分区域控制等缺点。本文提出了一种可以实现室内人员具体位置定位的方法,结合自然光检测技术,根据管理者设定的照明控制策略,成功设计出了真正意义上的室内智能照明系统。
3 系统总体设计
下面以一个挂有18盏照明灯的12*8m 的室内照明区域(如图1所示)为例,对室内智能照明系统进行分析。图1中,1,2,⋯⋯18分别为18盏照明灯,I,II,III,IV,V分别为5个检测单元,以各检测单元为圆心的圆弧分别代表了各检测单元的检测范围,依据5个检测单元检测范围的交叉情况,可将整个室内区域划分为(1),(2)⋯⋯ (17)这17个区域。系统工作时,可以检测有人或者光线偏暗的具体区域,进而控制相应区域的照明灯开关。以I,II,V三个检测单元同时检测到有人且须开灯为例,则可定位出(5)区域有人,从而可以打开灯14,15,10,11为其提供照明。系统通过对5个检测单元的输出进行一定的逻辑判断,从而实现高精确度地定位照明控制,弥补了原有各种方案的缺点。
图1 系统总体结构
4 系统硬件设计
智能电灯控制装置的硬件结构如图2所示,主要包括电源模块、MCU、开关、语音功放板、语音芯片、LCD、LED、检测单元、受控单元、受控单元的驱动器等。电源模块采用了高储能大功率的锂电池,可直接输出+5V,可保持长期工作(4月左右)。由于采用了隔离技术及稳压措施,其输出电压十分平稳,为整个系统提供了稳定可靠的工作电源。MCU要求的3.3V电源由+5V电源经AMS1117-3.3处理后获得。检测单元由人体检测单元、自然光检测单元及简单的逻辑电路组成。人体检测单元由热释电红外传感器(PIR)、红外传感信号处理器BISS0001[ 圾菲涅尔透镜组成,用于检测其检测范围内有无人存在。本设计中,人体发射的1 0微米左右的红外线通过菲涅尔滤光片增强后聚集到PIR,PIR输出的电信号经BISS0001及逻辑电路处理后,输出逻辑1代表检测区域内有人,否则无人。自然光检测单元采用主要采用了ON9668,其为开关型可见光照度传感器,具有可见光范围内敏感度高,光开关阀值通过外围电阻线性可调,直接输出高低电平,外围电路简单等优点。
本设计中自然光检测单元设定当光照度大于设定值时,输出低电平,否则输出高电平。人体检测单元和自然光检测单元的输出经过与逻辑,输出到MCU接口,故整个检测单元只有在该检测区域内有人且照度小于设定值时输出高电平,否则输出低电平。受控单元采用了西子固体继电器有限公司的SSR-038D05来控制照明灯的开关。默认状态下,照明灯是关闭的。只有M CU输出的控制信号出现高电平时,继电器才控制打开照明灯。采用固体继电器主要因为其具有工作可靠,寿命长,无噪声,无火花,无电磁干扰,开关速度快,抗干扰能力强等众多优点,且可直接由MCU的逻辑电平驱动。
本设计中,按键可以实现整个系统工作方式的设定,如校对系统的时间,控制系统进入手动或自动工作状态,设定系统的开关灯策略等。开关用于手动控制照明灯开关。当系统工作于手动方式时,控制对应的照明灯开关,且各照明灯之间的控制是相互的。当系统工作于自动工作方式时,开关失效,MCU根据来自检测单元的信号以及设定的控制方式自动对室内的照明灯进行开关控制。LCD采用了点阵液晶YELMB1602LDC,用于显示当前的时钟和熄灯定时时钟,同时为设定系统工作方式时提供友好的人机界面。LCD工作于并行方式。语音主要用于在管理部门制定的关灯时间快要到来时进行发声提示,给室内人员以一定的准备时间。当用户设定的报警条件产生时,语音可以用于发出语音提醒,并倒计时。MCU采用了TI公司的MCU51C,该处理器具有极为丰富的I/O资源,且低功耗特征。LCD、开关、语音及对受控单元的控制采用I/0端口模拟控制时序实现。
图2 系统硬件结构图
图3 DC5V 稳压模块
图4 XF-S3111语音功放模块
5 系统软件设计
软件系统采用了模块化设计思想,主要包括L CD显示子程序,开关检测处理子程序,按键检测处理程序,检测单元输入处理子程序,照明灯开关控制子程序。系统主要的软件流程如图5所示。
图5 系统主要软件流程图
按键检测处理子程序主要实现用户对系统的一系列操作,如工作方式设定,照明控制策略设定,报警/提示设备等功能。开关检测处理子程序实现当系统工作于手动方式时,按照当前的开关状态对照明灯进行相应的控制。检测单元输入处理子程序主要实现对各检测单元的输入信号进行计时消抖等处理后,按照用户设定的控制策略,确定具体的照明位置。LCD显示子程序用于更新当前的时间及一些基本信息,提供了一个方便的人机界面。
6 结束语
本文提出了一种改进的智能电灯控制装置设计,通过布置检测单元阵列实现对室内人员位置的具体定位,进而实现更加有效精确地控制对应照明灯,解决了原有各种方案中的缺点,达到了节能明显、操作方便、人性化等效果。根据本文所述方法开发的室内智能照明系统应用于某一演示教室已达半年,运行稳定可靠,没有出现照明灯的错误控制,实现了真正的室内智能照明,将在校园内逐步推广。应用结果表明本文所述方法具有较好的实际应用价值。
参考文献:
【i】高小敬.智能照明系统中室内的自然光水平预测【J】.低压电器,2004(6):12-30.
【2】熊涛,丁辛芳,陈德英.一种新颖的照明控制电路【J】.传感器技术,1999,i8(5):50—53.
【3】王海伦,叶冬芬.单片机控制的照明智能控制系统【J】.电气时代,2005(1):121—122.
【4】陈九江,吴桐,王术,孙言.教室照明系统的智能控制[J】.黑龙江大学
自然科学学报,2006,23(3)
附件
程序代码
主函数:
#include"Lcd1602C.h"
#include"yuyin.h"
#include"set_time.h"
#include"sention.h"
void time_player(void );
void timer0_init(void);
void Lcd1602C_context(char ) ;
extern char second,min,hour ;
extern int ms_5;
extern char DT_hour,DT_min,DT_second;
extern unsigned char flag_sen_0 ,flag_sen_1 ,flag_sen_2 ,flag_sen_3 ;
extern unsigned char DT_time_0,
main()
{
char yuyin_num=0,yuyin_Num=3;
natural_sen_0=0;
timer0_init();
Time1();
USART_INIT();
while(1)
{
time_player();
Lcd1602C_context(4) ;
Lcd1602C(Table);
delay_LCD();
mode_change();
time_check() ;
mode_palyer();
light_con();
熄灯时间快到了,请同学们尽快离开
请同学们一分钟时间内离开");
熄灯倒计时
熄灯"); delay_yuyin();
1602C_context(4) ;
1602C(Table);
}
}
void timer0() interrupt 1
{
}
void time_player()
{
}
void timer0_init()
{
}
char Set_yuyin_time()
{ //if(Hour>=hour&&Min>=min)
}
void Lcd1602C
{
}
传感器检测程序:
#include"Lcd1602C.h"
#include"sention.h"
#define DT_delay 1 延迟熄灯时间
extern char second,min,hour ;
extern int ms_5;
extern char DT_hour,DT_min,DT_second;
unsigned char flag_sen=0;
extern char Set_yuyin_time() ;
unsigned char flag_sen_0=0,flag_sen_1=0,flag_sen_2=0,flag_sen_3=0;
unsigned char DT_time_0=DT_delay,
void light_con(void)
{
static unsigned char flag_rem=0;
}
{
;
}
时间校准和熄灯定时程序:
#ifndef _set_time_H_
#define _set_time_H_
#include"Lcd1602C.h"
#include"yuyin.h"
#define DT_SECOND 0
void mode_change(void ) ;
void mode_palyer(void )
void time_check();
#endif
#include"set_time.h"
#include char flag_mode=0,flag_CT=0; char second=0,min=0,hour=0 ; int ms_5=0; void mode_palyer() { if(flag_CT==0) { if(flag_mode==1) {MODE_player=0;UP_player=1; else if(flag_mode==2) {MODE_player=1;UP_player=0; else if(flag_mode==3) {MODE_player=1;UP_player=1; else if(flag_mode==4) {MODE_player=1;UP_player=1; } else } void mode_change(void ) { 时间校准模式 { MODE_player=1;UP_player=1; 定时时间设置成功"); } void time_check() { 时间校准模式 { 时间校正成功"); } 液晶显示程序: #ifndef _LCD1602C_H_ #define _LCD1602C_H_ #include #define uchar unsigned char #define uint unsigned int void Lcd1602C(char Table[]); void delay_LCD(void ); sbit RS = P1^0; sbit RW = P1^1; sbit E sbit BF = P0^7; sbit ENT=P3^2; sbit senctor_0=P3^4; //人体热释传感器0 1 2 3 sbit senctor_1=P3^5; sbit senctor_2=P3^6; sbit senctor_3=P3^7; sbit led_0=P1^4; sbit led_1=P1^5; sbit led_2=P1^6; sbit led_3=P1^7; sbit MODE_player=P2^3; sbit UP_player= P2^4; sbit DOWN_player =P2^5; sbit ENT_player =P2^6; sbit MODE=P2^0; sbit UP = sbit DOWN=P2^2; sbit natural_sen_0=P2^7; 室外自然光检测 #endif #include"Lcd1602C.h" #include #define Lcd1602CPort P0 void Lcd1602CWait() { } void Lcd1602CWriteCmd( unsigned char Cmd) { } void Lcd1602CWriteData( unsigned char D ) { } void Lcd1602C(char Table[]) { 0c); } void delay_LCD() {int i=0; for(i=0;i<2000;i++);} 语音提醒程序: #ifndef _yuyin_H_ #define _yuyin_H_ #include"Lcd1602C.h" void USART1_SEND(char x); void USART2_SEND(char x); void USART_INIT(); void delay_yuyin(); void Yuyin_BOBAO(unsigned char *x); void Time1(void) ; char Set_yuyin_time() ; #endif #include"Lcd1602C.h" #include"yuyin.h" #include"set_time.h" void Time1() { } void USART1_SEND(char x) { SBUF=x; while(TI==0); TI=0; } void USART_INIT() { } char Length ( unsigned char *x ) { char length=0; } void Yuyin_BOBAO(unsigned char *x ) { unsigned char length=0; 发送帧头标志 0xFE USART1_SEND(0x01) ; //发送合成命令 USART1_SEND(0x00) ; //发送字节长度的高8位 USART1_SEND(length) ; //发送字节长度 } void delay_yuyin() { long i= 0,j=0; for(i=0;i<50000;i++) ; }