研究型文章

基于51单片机检测环境光照度与自动补光系统研究

江苏师范大学
文章指标
浏览量 下载量

摘要

本文设计并实现了一种基于51单片机的环境光照度检测与自动补光系统。系统以STC89C52RC单片机为核心控制器,采用光敏电阻配合电阻分压电路实现光照强度的实时检测,并通过信号调理电路对电压信号进行滤波与放大处理后送入单片机内部AD转换接口。同时,系统集成RE200B热释电红外传感器与BISS0001信号处理器,用于准确感知人体活动,从而构建“光照不足且有人存在时启动补光”的智能化控制策略,避免无人时无效照明。软件部分采用汇编语言编写主控程序,完成信号判别、LED补光驱动、四位八段数码管动态扫描显示运行时间,以及蜂鸣器定时提示等多项功能。实验测试表明,当环境照度低于设定阈值且检测到人体活动时,系统可自动开启LED补光,在达到预设工作时间后自动关闭,同时数码管实时显示剩余时间,蜂鸣器发出声音提示。各功能模块响应准确,系统整体运行稳定可靠。该方案电路结构简洁、元器件成本低廉,适用于小型室内空间、楼道走廊及实验演示等场景,并预留了光照阈值调节与通信接口等扩展功能,具有良好的实用价值与升级潜力。

正文

0 引言

随着电子信息技术、传感检测技术和嵌入式控制技术的发展,照明系统的智能化、自动化与节能化成为重要趋势。传统照明设备多采用手动开关控制,在实际使用中难以根据环境光线变化及时响应,不仅造成使用不便,也常导致电力资源浪费[1-3]。尤其是在室内光线强度频繁变化的场景下,人工操作无法实现最优控制。因此,研究一种能自主检测环境光照并自动进行补光的装置具有重要的现实意义。

目前,自动照明控制主要分为声控、定时和光控等方式。声控灯易受环境噪声干扰产生误动作;定时控制无法适应光照的动态变化;而传统光控电路在光照阈值附近易产生频繁开关的振荡现象,稳定性和抗干扰性较差。相比之下,基于单片机的智能控制方案能融合多种传感信息,实现更优的判断逻辑[4]

国外在智能照明领域研究起步较早,已从简单的自动开关发展到调光控制、网络化管理及多传感器融合应用,并在DALI、KNX、ZigBee等标准下形成了成熟的商用系统[5-7]。国内研究虽起步稍晚,但发展迅速,基于51单片机、STM32等低成本控制器的照明系统在智能家居、教学实验等领域得到广泛应用[8-9]。然而,现有不少方案功能较为单一,主要依赖阈值判断进行开关控制,在鲁棒性、可扩展性方面仍有提升空间。

针对上述问题,本文提出并实现一种基于51单片机的环境光照度检测与自动补光系统。该系统以STC89C52RC为控制核心,结合光敏检测、人体红外感应、数码管显示和蜂鸣器提示,旨在以低成本实现“有人且光照不足时补光”的智能控制,并具备良好的人机交互性,为小型场景提供一种实用的自动照明解决方案。

1 系统总体设计

1.1 系统架构

系统总体架构如图1所示,主要由信号采集与调理模块、中央控制模块、执行与提示模块三大部分组成。信号采集模块包括光敏电阻分压电路和RE200B热释电红外传感器及其处理芯片BISS0001。中央控制模块以STC89C52RC单片机为核心。执行与提示模块包括LED补光灯、四位八段数码管和蜂鸣器。

工作流程为:光敏电阻检测环境光照,其分压值控制BISS0001的触发禁止端(VC)。当环境照度低于设定阈值时,BISS0001被允许触发。此时,若RE200B检测到人体活动信号,经BISS0001内部放大、比较和整形后,输出触发电平至单片机外部中断引脚。单片机响应中断后,按预设程序点亮LED补光,启动定时器进行计时,并通过数码管动态显示运行时间。当计时达到设定值时,单片机熄灭补光灯,并驱动蜂鸣器发出提示音。

图1 系统总体结构框图

1.2 核心硬件选型

1.主控芯片:采用STC89C52RC单片机。该芯片基于8051内核,支持ISP编程,片内集成8KB Flash、512B RAM、三个16位定时/计数器及两个外部中断源[10],资源足以满足本系统的控制、计时与中断响应需求,且成本低廉、开发资料丰富。

2.光照传感器:选用光敏电阻。其阻值随光照强度变化,与固定电阻构成分压电路即可将光强转换为电压信号,电路简单、成本极低,适用于阈值判断型光控系统[11]

3.人体感应传感器:选用RE200B热释电红外传感器。其能被动检测人体发射的7~14μm红外线,配合菲涅尔透镜可有效探测人体移动[12]。其输出信号微弱,需经专用芯片处理。

4.信号处理器:采用BISS0001芯片。该芯片内部集成了高输入阻抗运算放大器、双向鉴幅器、延时及封锁定时器等模块,可将RE200B的微弱信号进行两级放大、滤波和比较,最终输出稳定的数字电平信号,可直接连接至单片机I/O口[13]

2 硬件电路设计

2.1 中央控制单元与显示电路

单片机最小系统包括电源、复位电路和晶振电路(11.0592MHz)。其I/O资源分配如下:P0口作为段码输出口,连接四位共阳极数码管的段选引脚,并外接10kΩ上拉电阻;P2.0~P2.3作为位选控制口,通过PNP三极管驱动数码管公共阳极;P3.0用于控制LED补光灯;P3.4用于控制蜂鸣器;P3.2和P3.3分别作为外部中断0和中断1的输入端,接收来自BISS0001的触发信号。

数码管采用动态扫描方式显示。P0口输出段码,P2口依次选中各个数码管,通过快速循环实现多位稳定显示。位选使用PNP三极管驱动,可提供足够的电流,避免单片机I/O口直接驱动导致的亮度不足问题。

2.2 信号采集与调理电路

信号采集与调理电路是系统的关键部分,其原理如图2所示。

光照检测部分由光敏电阻(型号不详)和固定电阻R1串联构成分压电路,分压点连接至BISS0001的VC引脚。VC电压与芯片内部参考电压VR比较,控制触发是否被允许。当环境光照充足时,光敏电阻阻值小,VC > VR,触发被禁止;当光照不足时,光敏电阻阻值增大,VC < VR,触发被允许。

人体红外信号处理部分基于BISS0001典型应用电路设计。RE200B的D极经电阻R2供电,其S极输出信号送入BISS0001内部第一级运算放大器的同相输入端(1IN+)。芯片外接电阻电容(如R3~R8,C2~C5)构成反馈和滤波网络,设定两级放大器的增益和频带特性。根据理想运放“虚短虚断”原理,通过选择R5=1MΩ、R6=10kΩ、R7=2MΩ、R8=47kΩ等阻值,可获得足够的信号增益,使有效信号超过内部鉴幅器的上下门限电平(VH≈0.7VDD,VL≈0.3VDD)。经比较器整形后,有效触发信号从VO引脚输出。此外,R9和C6用于设定输出脉冲宽度Tx,R10和C7用于设定触发封锁时间Ti,以抑制干扰和防止负载频繁动作。VO输出信号经反相器后,连接至单片机的外部中断引脚。

图2 信号采集与调理电路原理图

3 软件设计与仿真

3.1 Keil编程软件

单片机系统除了有硬件电路之外,还需有软件实现其功能。汇编语言程序要通过汇编器生成机器码才能被CPU所识别执行。人工编写汇编程序效率低下且易发生地址、跳转以及机器码等错误,一般采用集成开发工具来完成编写、汇编、连接与调试等工作。对于MCS-51系列单片机而言,Keil C51以及μVision都有较为完善的开发环境。本设计选用汇编语言的原因是由于汇编语言可以非常直观地看到寄存器、端口以及中断的具体操作,方便理解51单片机内部工作原理。对资源有限、功能单一的小型系统来说,汇编语言仍然有其优越性即代码紧凑以及速度快。

Keil开发环境提供了编辑器、汇编器、C编译器、链接器、库管理和调试器等功能,在一个窗口即可完成项目创建、编写代码、生成目标代码以及仿真实现等。因为大部分51单片机开发板及示例程序都支持Keil,所以本文选用Keil进行程序开发,用汇编语言编写主要控制程序。在编写程序时不仅要实现相应功能,还要注意程序的整体条理性。比如把初始化、显示刷新、延时以及中断服务分别写出,可以避免思路不清,也有利于分步排查问题。

(1). 打开Keil软件之后新建一个工程项目并且选择好保存位置,如图3所示。

图3 新建工程

(2).保存工程为.uvproj工程文件并且指定目标单片机类型,在这里因为STC89C52RC支持标准8051指令集所以在仿真及编译过程中可以使用AT89C51来代替它,如图4所示:

图4 选择单片机类型

(3).如果要生成可以下载到单片机的HEX文件,则需在项目属性上设置,在Target1上右击,在弹出菜单中选择“Properties”中的“Target Properties”选项卡,在Output选项卡中勾选“Create HEX File”,如下图5。

图5 添加程序文件到工程中

(4).源程序编写完成之后编译及调试,在无语法错误的情况下,Keil生成目标文件及HEX文件,调试界面如图6所示。

图6程序的编写与调试界面

(5).将生成的.HEX文件下载至单片机,在连接开发板之后需要在设备管理器查看串口号,在STC下载工具里选择相应的COM口以及程序文件进行下载,在下载时要注意单片机电源、复位情况及串口是否连接好,如果不能下载成功则要检查晶振、复位电路、下载线驱动以及目标芯片型号等。

完成以上操作之后,就可以把程序烧录到单片机上面,再用开发板或者仿真电路调试。如果系统的反应、显示或者计时等不符合要求,则回到程序或者硬件连接上进行调整,直到符合设计要求为止。

3.2单片机程序设计

本系统从软件方面主要是红外触发、补光控制、计时以及声音报警等几方面实现。系统工作时,单片机会先检查红外输入是否有信号。若有有效触发信号,则立刻让补光LED点亮,然后开始计数并将当前时间传递给数码管显示,在之后如果检测到有人离开或者关闭信号,则不会立即熄灭补光LED,而是等待一定时间之后再熄灭补光LED,以免由于短促的干扰导致补光LED不断开关。而在运行期间如果没有再次检测到触发信号,在达到一定的运行时间之后,就会通过蜂鸣器发出提示音,提示之后再熄灭补光LED。

本设计中的数码管是采用动态扫描方式进行显示,在程序中不能只有当有变化才刷新,而应该在主循环中不断刷新显示缓存并每隔一定时间顺序点亮每一个数码管,若扫描时间太长就会造成显示不稳定,而若延时不合理又会造成数码管亮度不足或者显示不稳定的问题,所以在编写代码的过程中尽量减少主循环中的阻塞延时。

为了兼顾显示效果以及控制响应速度,程序把显示扫描、红外信号检测、补光控制等工作放在主循环中不断进行,但是对计时要求较高的工作由定时器中断来完成。这样可以使得数码管有较好的连续性,计时也较准确,而且单片机对于红外触发以及关灯信号也能较快地作出反应,整个补光过程也就更为可靠。程序分为三个模块:一个是开关灯与蜂鸣器控制程序,用来点亮LED以及报警电路;第二个是定时与延时程序,用来计算点亮时间并且产生一定延时;第三个是数码管显示程序,将当前计时信息转化为段码后送到P0、P2口上显示。主程序流程如图7所示,而开关灯程序要涉及状态标志位,计时程序要进行秒、分、时的进位,显示程序要通过数值查表得到相应的段码,在这三者之间互相协作才能完成整个自动控制系统的工作。

图7 主程序流程图

3.3数码管动态扫描程序

四位八段数码管采用动态扫描方式显示。程序要不断读取显示缓冲区,把相应的段码送入P0,然后用P2依次点亮各个数码管。定时器0定期更新计时值以实现显示变化效果。动态扫描过程如图8所示。 因为每个数码管亮的时间非常短,所以扫描顺序以及延时长短都会影响显示质量,在扫描期间不宜做过多工作以免造成部分数码管亮度差异。

图8 数码管动态扫描流程图

根据图8所示步骤,在单片机读取相应缓存区段码后通过P0口送出再设置P2口位选信号使得相应数码管点亮,因为扫描时间较短所以人眼由于视觉暂留会产生连续显示效果,为了使LED段充分点亮程序中设置了大约1ms延迟时间,延迟时间太短会造成亮度不够而延迟时间较长又会出现闪烁现象,接下来将介绍几个重要操作以及计时方式。在这里显示缓存区起到程序与数码管之间桥梁作用,计时中断仅用于刷新缓存区内容而扫描程序用于将缓存区内容送到物理引脚上从而降低不同部分之间相互干扰程度。

(1). 定时/计数器0使用方式1工作。如果晶振约等于12MHz,则一个机器周期大约是1μs。方式1是16位计数,最大计数值是65535。这里我们设定计数模为50000,那么初始值就是65535-50000=15535,也就是3CB0H,所以把TH0设置为3CH,TL0设置为0B0H;定时溢出20次大约是1秒,再累加就可以得到分钟以及小时等。代码如下: MOV TMOD,#01H ;定时/计数器0用作方式1该方法虽然不能像专用时钟那样准确,但是对于台灯定时提醒及实验演示足够。若对计时精度要求更高,可采用更精确的晶振或外接实时时钟模块。

MOV TL0,#0B0H ;设定低8位初始值

MOV TH0,#3CH ;设定高8位初始值

SETB TR0 ;定时/计数器0开始计时

SETB IT0 ;设置外部中断0为下降沿触发

(2).扫描字段程序:MOV A, SEC;把秒缓存的数据传送到累加器

CJNE A,#60,TT1 ;判断是否已经每秒钟60次,不是就退出中断

INC MIN ;分钟缓存数据加1

MOV A,MIN ;把分钟缓冲区内容送入寄存器A

MOV B,#10 ;将除数10赋值给暂存器B

DIV AB ; 将A除以B,商在A中,余数在B中

MOV DPTR,#TABLE ;调用字段代码表

MOVC A, @A + DPTR;查表,获取数码管显示的数值

MOV 51H,A ; 将分钟十位数存入地址51H中

MOV A,B

MOVC A,@A+DPTR

MOV 52H, A ; 将分钟个位数存入地址52H中

(3).位选端程序:MOV ACC,#077H ;定义数码管位选(选择显示分钟十位数码管)

MOV P2,ACC ; 数码管根据ACC所指位置显示字

ACALL DELAY ;延迟

RR A ;选择下一位

(4).延时子程序:DELAY:MOV R1, #2 ;总共执行两遍

D1:MOV R7,#248 ;二级循环248次

D2: DJNZ R7, D2 ; R7减1不等于0就一直减1

DJNZ R1, D1 ;当R1减一后结果仍不等于零时继续减一

RET ;退出延时子程序[18]

延时程序时间可以用机器周期来估算,已知MOV Rn,#data这种指令需要一个机器周期,而DJNZ Rn,rel这种指令需要两个机器周期,在12MHz晶振的情况下一个机器周期大约为1us,所以这个延时程序大约是T=1+2×(1+248×2+2)+1=1000us,即大约为1ms。以上程序只是其中一部分,完整的程序可以参考附件。

3.4中断程序

该程序包含外部中断0、定时器0中断以及外部中断1。51单片机有固定中断入口地址,即外部中断0入口是0003H,定时器0入口是000BH,外部中断1入口是0013H,在一般情况下优先级由高到低是外部中断0大于定时器0,定时器0大于外部中断1[26]。因为本设计中有多个中断,所以要合理安排它们的开中断、关中断以及恢复次序,以免发生中断嵌套或者重复中断影响程序执行过程。中断处理流程见图9。

图9 中断程序

在执行外部中断0或者外部中断1中断服务程序之前,要清除此中断对应的中断允许位置位,以免同一个中断源,在中断服务程序尚未执行完的情况下再次被触发。外部中断1用来控制点亮灯以及开始计时,在完成之后允许外部中断0中断;而当外部中断0被触发时,系统首先关闭灯并在此之后将相关的标志位重置以便下次能够正确地检测是否需要点亮灯。定时器0用于计数更新以及数码管显示等工作,它开启的时间应该和灯亮的时间一致,不能在灯还没有亮起的时候就开始计数。外部中断0以及外部中断1在本设计中代表着不同的阶段,在未正确设置中断标志位和中断允许位的情况下,就会出现刚点亮LED就熄灭、多次计时或者蜂鸣器误动作等现象。所以中断服务程序不仅要对引脚进行操作,还需要在进入和退出的时候保存当前的状态。

3.2 系统仿真

在硬件制作前,使用Proteus软件进行了系统级仿真验证。在Proteus中搭建了包含AT89C51(替代STC89C52RC)、光敏电阻(用可变电阻模拟)、RE200B(用信号源模拟)、BISS0001、数码管、LED和蜂鸣器的仿真电路。为了在Proteus上测试单片机的功能,要将用Keil编译出的HEX文件下载到仿真器上,在Proteus中双击单片机,在弹出的“Edit Component”对话框内点击“Program File”,选择相应的.HEX文件并确定即可,然后就可以运行仿真,查看LED、数码管以及蜂鸣器是否符合预期的效果如图10所示。

图10 仿真图

在仿真时曾经出现过:“Simulation is not running in real time because of too much CPU usage”,这是因为原来的动态扫描时间间隔太小,造成仿真刷新率过高,超过了软件所能承受的最大值。这就要适当增大扫描时间或者降低显示刷新率,使得仿真可以流畅进行的同时也使数码管显示更加清楚。

仿真结果表明,通过改变模拟光照的可变电阻值,以及模拟人体红外信号,系统能够正确执行以下逻辑:

当“光照”充足时,即使有“人体信号”,LED不点亮,如图11所示;

图11 光照充足时系统状态

  1. 当“光照”不足且有“人体信号”时,LED点亮,数码管开始计时,并在计时达到预设值时,LED熄灭,蜂鸣器报警如图12所示。

图12 光照不足触发补光时系统状态

仿真验证了硬件连接和程序逻辑的正确性。

4 系统实现与测试

4.1 系统实现

在仿真验证通过后,进行了实物系统搭建,实物图如图13所示。在实验板上完成了单片机最小系统、数码管驱动、信号调理电路以及补光LED和蜂鸣器的焊接与连接。在调试过程中,重点检查了P0口上拉电阻的连接、数码管位选三极管的工作状态以及BISS0001外围电路的焊接。通过示波器和万用表测量关键点电平,确保各模块正常工作。

图13 系统硬件连接实物图

4.2 功能测试

系统实现后,在实验室环境下进行了功能测试,测试条件与结果如表1所示。

1 系统功能测试结果

测试项目

测试条件

预期结果

实测结果

环境光照检测

用强光照射光敏电阻

系统禁止触发补光,LED保持熄灭

与预期一致

暗光触发补光

遮挡光敏电阻,并产生红外触发信号

LED补光开启,数码管开始计时

与预期一致

数码管显示

补光运行过程中

显示时间按程序刷新,无明显闪烁

显示稳定,亮度均匀

定时与蜂鸣提示

让系统连续运行至预设时间(如60s)

补光LED熄灭,蜂鸣器发出提示音

补光在60s时关闭,蜂鸣器鸣响

测试结果表明,系统各功能模块工作正常,能够根据环境光照和人体信号准确执行补光、计时和提示操作,实现了设计目标。

5 结论

本文设计并实现了一种基于STC89C52RC单片机的环境光照度检测与自动补光系统。该系统利用光敏电阻实现低成本光照检测,结合RE200B热释电红外传感器和BISS0001信号处理器进行人体存在判断,实现了“环境照度低且有人”条件下自动补光的智能控制。同时,系统集成了数码管显示与蜂鸣器提示功能,提升了人机交互性。硬件测试与功能验证表明,系统运行稳定,控制逻辑准确,达到了预期的设计目标。

本系统的优势在于电路简洁、成本低廉、原理清晰,适用于智能照明入门教学、小型实验室或家庭局域补光等场景。不足之处在于光敏电阻检测精度有限,补光控制仅为开关量,无法实现线性调光。未来的工作将考虑引入高精度数字光照传感器(如OPT3001[14])和PWM调光技术,以提升光照检测精度和补光舒适度;并可增加蓝牙或Wi-Fi通信模块,以实现远程监控和与智能家居系统的联动[15]

参考文献

  1. Boyce P R. Human Factors in Lighting[M]. 3rd ed. Boca Raton:CRC Press,2014.

  2. Williams A,Atkinson B,Garbesi K,et al. A Meta-Analysis of Energy Savings from Lighting Controls in Commercial Buildings[J]. LEUKOS,2012,8(3):161-180.

  3. Lowry G. Energy saving claims for lighting controls in commercial buildings[J]. Energy and Buildings,2016,133:489-497.

  4. Mazidi M A,McKinlay R D,Causey D. The 8051 Microcontroller and Embedded Systems: Using Assembly and C[M]. 2nd ed. Upper Saddle River:Pearson,2006.

  5. Garg V,Bansal N K. Smart occupancy sensors to reduce energy consumption[J]. Energy and Buildings,2000,32(1):81-87.

  6. de Bakker C,Aries M,Kort H,et al. Occupancy-based lighting control in open-plan office spaces: A state-of-the-art review[J]. Building and Environment,2017,112:308-321.

  7. Kandasamy N K,Karunagaran G,Spanos C J,et al. Smart lighting system using ANN-IMC for personalized lighting control and daylight harvesting[J]. Building and Environment,2018,139:170-180.

  8. 张毅刚,彭喜元. 单片机原理及应用[M]. 3版. 北京:高等教育出版社,2016.

  9. 李朝青. 单片机原理及接口技术[M]. 5版. 北京:北京航空航天大学出版社,2017.

  10. STCmicro Technology Co.,Ltd. STC89C52RC Datasheet[EB/OL]. (2023)[2026-05-07]. URL. https://www.stcmicro.com/datasheet/STC89C51RC-en.pdf.

  11. 童诗白,华成英. 模拟电子技术基础[M]. 5版. 北京:高等教育出版社,2015.

  12. Nippon Ceramic Co.,Ltd. RE200B Pyroelectric Passive Infrared Sensor Datasheet[EB/OL]. [2026-05-07]. URL. https://www.sensorcn.cn/upfiles/file/RE200B.pdf.

  13. Silvan Chip Electronics Tech. Co.,Ltd. BISS0001 PIR Controller Datasheet[EB/OL]. [2026-05-07]. URL. https://www.sc-tech.cn/en/BISS0001.pdf.

  14. Texas Instruments. OPT3001 Ambient Light Sensor(ALS) Datasheet[EB/OL]. (2023)[2026-05-17]. URL. https://www.ti.com/lit/gpn/OPT3001.

  15. Bluetooth SIG. Mesh Profile 1.0.1[EB/OL]. (2023)[2026-05-17]. URL. https://www.bluetooth.com/specifications/specs/mesh-profile-1-0-1/.

— 10 —

Shape1