1 基于单片机与WiFi通信的教室人数与照明上位机监控系统设计
点击链接下载protues仿真设计资料:https://download.csdn.net/download/m0_51061483/91964733
1.1 设计背景与意义
在高校、中小学以及培训机构等教学楼场景中,教室照明属于长期、高频使用的公共能耗项目。传统教室照明管理通常采用人工开关控制或简单的定时开关方式,存在明显不足:
1)能源浪费严重:在白天自然光充足时仍然开灯,或教室空闲时灯光未及时关闭。
2)管理效率低:教学楼教室数量多,管理人员无法实时掌握每间教室的照明状态,只能依靠巡检。
3)缺乏数据支撑:无法获得教室实时人数信息与照明使用数据,导致管理决策缺乏依据。
4)安全与维护困难:灯具故障、线路异常或照明异常开启无法及时反馈。
随着物联网与智能楼宇技术发展,将“环境感知 + 远程控制 + 数据采集 + 集中管理”应用到教学楼照明管理成为趋势。通过单片机作为下位机控制核心,结合WiFi通信模块实现上位机与多间教室之间的双向通信,可以构建一套教室人数与照明监控系统:
- 下位机采集光照度与人数信息,自动控制灯具开关并上传状态。
- 上位机实时显示每间教室编号、人数、光照度与灯具状态,并支持远程控制全楼或单间教室照明。
- 通过智能策略实现节能管理,减少浪费,提升公共建筑能效水平。
该系统既适用于课程设计、毕业设计,也具有很强的工程应用价值,可进一步扩展为智慧校园中的“教室占用率分析”“能耗统计”“智慧排课”“设备状态管理”等综合系统。
1.2 系统总体目标与设计要求
本系统以“多教室集中监控、自动节能控制、WiFi双向通信、上位机可视化管理”为总体目标,提出以下设计要求:
1)光照度检测:实时采集教室内亮度数据,作为自动开关灯与分区控制依据。
2)人数检测:实现教室人数实时统计,并周期上传到上位机,用于管理与分析。
3)上位机监控:界面可同时显示多教室数据,包括教室编号、人数、光照度、分区灯状态、通信状态等。
4)上位机控制:可对全部教室或指定教室进行照明控制,支持开/关/分区开关。
5)下位机控制:具备按键人工控制、自动控制模式切换、照明执行器驱动、数据采集与上传功能。
6)无线通信:WiFi模块实现双向数据传输,采用协议帧确保可靠性与实时性。
7)节能策略:根据自然光与人数分布动态控制灯具,达到节能管理目的。
8)可靠性:考虑网络丢包、数据误差、传感器波动、误计数等问题,采用滤波、回差、锁存等策略保证稳定运行。
2 系统功能设计
2.1 光照度与人数检测功能设计
2.1.1 光照度检测功能
光照度检测用于判断教室环境亮度是否足以满足教学需求,并作为自动照明控制的关键依据。系统应具备以下能力:
1)采集环境亮度:能够得到光照强度值(ADC数值或Lux值)。
2)稳定可靠:避免灯光开关导致的光照波动产生频繁抖动开关。
3)分区控制依据:根据教室不同区域亮度差异,可选择分区亮度检测(如靠窗区、中央区、靠门区)。
光照传感器实现方案:
建议方案:
- 若系统以51为主控且追求简化,可选LDR + ADC。
- 若系统面向工程化,建议使用BH1750获取Lux值,提高一致性与标定便利性。
光照控制策略(核心思想为“回差 + 延时确认”):
- 当光照 < 下限阈值 L_low 且持续N秒 → 开灯(或开部分灯)。
- 当光照 > 上限阈值 L_high 且持续N秒 → 关灯(或关部分灯)。
其中 L_high > L_low,形成回差,避免频繁切换。
2.1.2 人数检测功能
人数检测用于统计教室占用情况,是智能管理的重要数据来源。人数检测可用于:
- 决定是否需要开启照明:无人时可关闭灯具或保持最低照度。
- 形成教室利用率统计:辅助排课与资源优化。
- 安全管理:异常人数变化或夜间占用可触发提示。
常见人数检测方案:
1)红外对射/反射计数(门口):
- 门口安装双红外对射传感器,利用先后遮挡判断进/出方向,实现人数加减计数。
- 成本低、实现简单,适合教学。
2)热释电人体感应(PIR): - 只能检测有人/无人,不能精确计数。
- 适合“占用检测”,不适合精确人数统计。
3)超声波/毫米波: - 可检测存在与运动,部分可估计人数,但复杂度高。
4)摄像头AI识别: - 精度高但隐私与成本高,不适合基础单片机设计。
本设计“人数实时统计”更符合红外计数方案:
- 使用两路红外对射(A、B)间隔一定距离。
- 方向判定逻辑:
- A先遮挡后B遮挡 → 进入人数+1
- B先遮挡后A遮挡 → 离开人数-1
- 设置超时与异常序列处理,避免错误计数。
人数统计应具备:
- 最小人数为0,防止出现负数。
- 定期上报人数值至上位机。
- 可通过上位机或按键进行“人数清零/校准”(扩展功能)。
2.2 上位机控制与监测功能设计
2.2.1 上位机界面显示功能
上位机软件应具备直观、可扩展的数据展示能力,建议界面元素如下:
1)教室列表:显示所有教室编号(如101、102、103…)。
2)实时人数:显示每间教室当前人数。
3)光照度:显示光照值或等级(亮/中/暗)。
4)灯具状态:显示各分区灯状态(如窗边区、讲台区、后排区)。
5)通信状态:显示在线/离线、最后更新时间、信号强度(扩展)。
6)控制区域:全开、全关、分区控制按钮,单教室控制按钮。
7)日志区域:记录控制操作、报警、通信异常、人数变化等事件。
显示方式建议:
- 使用表格形式呈现:一行对应一间教室,一列对应一个指标。
- 颜色标识:如离线为灰色、报警为红色、无人为空置标记为蓝色等(UI层实现)。
2.2.2 上位机远程控制功能
上位机需要支持两类控制:
1)全局控制:对全部教室执行同一操作,如全部开灯、全部关灯、进入节能模式。
2)单教室控制:对指定教室编号发送控制命令。
控制内容包括:
- 开灯 / 关灯
- 分区控制:例如只开启讲台区或靠窗区
- 模式控制:自动模式 / 手动模式 / 强制关闭模式
- 阈值设置:调整教室光照阈值(扩展)
上位机控制应确保:
- 指令具备确认机制:发送后下位机应反馈执行结果与最新状态。
- 失败重发机制:若超时未收到反馈,可重发或提示“教室离线”。
- 权限控制(扩展):防止非授权用户操作。
2.3 下位机(单片机)控制功能设计
2.3.1 按键控制电路与人工控制逻辑
下位机需配备按键,实现人工开关灯与模式切换,原因包括:
- 网络断开时仍能本地控制照明。
- 便于维护人员现场调试与应急操作。
按键功能建议:
1)MODE:切换自动/手动模式。
2)L1/L2/L3:分区灯开关(手动模式下有效)。
3)RESET:人数清零或故障复位(可选)。
按键消抖必须实现,建议采用10ms扫描与状态锁定。按键优先级建议:
- 人工强制关灯 > 自动开灯
- 报警或安全策略 > 人工开灯(若扩展电源保护)
2.3.2 自动照明控制策略
自动照明控制核心为“依据光照与人数动态控制灯具”。系统应考虑以下场景:
1)无人:
- 若人数=0,灯具全部关闭或保持最小照明(可选)。
- 若人数长期为0,可进入节能待机模式。
2)有人且光照不足: - 开启必要区域照明。
- 若靠窗区亮度足够,可只开启中央区/后排区。
3)有人且光照充足: - 关闭部分或全部灯具,利用自然光节能。
分区控制的节能优势:
- 白天靠窗区域通常亮度较高,可关闭靠窗区灯具,仅开启后排或中央区域。
- 晚上整体光照低,需开启全部区域灯具。
控制策略可分级:
- 光照很暗:全开
- 光照一般:开2个区域
- 光照较亮:开1个区域
- 光照很亮:全关
并结合人数数量进行加权,例如人数较多时提高照度要求。
2.3.3 数据采集与上传功能
下位机应周期性采集并上传以下数据:
- 教室编号ID
- 人数count
- 光照light
- 灯具状态L1/L2/L3
- 模式状态AUTO/MANUAL
- 故障标志(如传感器异常、计数异常)
上传策略:
- 周期上传:每1秒或2秒发送一次状态帧。
- 事件触发上传:人数变化、灯状态变化、报警发生时立即上传一次,提高实时性。
- 心跳机制:若无事件也定时发送,便于上位机判断在线状态。
2.4 无线通信功能设计(WiFi双向通信)
2.4.1 WiFi模块选型与通信模式
常用WiFi模块:ESP8266、ESP32等。对于本系统:
- ESP8266性价比高、资料丰富,适合与51单片机配合。
- ESP32功能更强,可直接作为主控,但本题强调“单片机+WiFi通信”,可作为下位机通信模块。
通信模式可选择:
1)TCP客户端模式:下位机连接上位机服务器,可靠性高,适合状态监控。
2)UDP广播/组播:实时性高,但丢包可能导致数据缺失,需应用层补偿。
3)MQTT协议:适合物联网集中管理,但需要Broker,复杂度较高。
推荐方案:TCP通信:
- 上位机作为TCP服务器监听端口。
- 各教室下位机作为TCP客户端连接服务器。
- 数据帧采用应用层协议,支持命令下发与状态上报。
2.4.2 通信协议设计
为保证可靠性与可解析性,建议设计帧格式(ASCII文本协议,便于调试):
- 上报帧:
#ID=101,PEO=25,LUX=320,L1=1,L2=1,L3=0,MODE=A* - 控制帧:
@ID=101,CMD=SET,L1=1,L2=0,L3=0* - 模式切换:
@ID=101,CMD=MODE,VAL=A* - 上位机查询:
@ID=101,CMD=GET*
协议设计要点:
1)帧头:#表示下位机上报,@表示上位机命令。
2)帧尾:*表示结束,避免粘包解析困难。
3)字段键值对:便于扩展新增参数。
4)校验(可选):可加入简单异或校验或CRC,提高抗干扰。
5)应答机制:下位机执行命令后返回ACK帧:
#ID=101,ACK=OK* 或 #ID=101,ACK=ERR*
2.5 节能与管理优势分析
系统节能与管理优势主要体现在:
1)按需照明:基于光照度自动控制,避免白天自然光充足仍开灯。
2)占用联动:无人自动关灯,减少空置照明浪费。
3)分区调节:根据光照分布与人数情况动态开启部分灯具,实现精细化节能。
4)集中管理:上位机可统一管理多间教室,不必人工逐间巡检。
5)数据可视化:人数与灯具使用数据可用于教室利用率统计、节能评估、管理决策。
6)维护便利:通过通信与日志可快速定位异常教室,提高运维效率。
从长期使用来看,该系统能够显著降低教学楼照明能耗,提高管理效率,并为智慧校园提供基础数据支撑。
3 系统电路设计
3.1 硬件总体结构
系统硬件由“下位机控制板 + WiFi通信 + 传感器 + 灯具驱动 + 上位机”组成。下位机主要模块如下:
1)单片机最小系统模块
2)光照度检测模块
3)人数检测模块(红外对射双通道)
4)按键与指示模块
5)灯具驱动模块(继电器/固态继电器/可控硅方案)
6)WiFi通信模块(ESP8266)
7)电源模块(5V/3.3V稳压)
8)安全隔离与抗干扰模块
上位机为电脑软件,通过WiFi路由器/局域网与多下位机通信。
3.2 单片机最小系统模块
- STC89C52经典易用,资源足够实现采样、控制与串口通信。
- STC15自带ADC与多串口,开发更便利,适合工程优化。
最小系统包括:
1)晶振电路(11.0592MHz/12MHz)
2)复位电路(上电复位+按键复位)
3)去耦电容(0.1uF贴近芯片供电脚)
4)串口接口(与ESP8266通信)
5)IO口分配:红外对射输入、按键输入、继电器控制输出、LCD或指示灯输出等
3.3 光照度检测模块电路设计
3.3.1 光敏电阻方案
光敏电阻与固定电阻构成分压电路,输出模拟电压送入ADC采样:
电路设计要点:
1)电阻选值:使亮/暗状态的分压电压范围尽量覆盖ADC输入范围,提高分辨率。
2)滤波:分压输出加0.1uF电容可减小高频噪声。
3)标定:不同光敏电阻一致性差,需要软件阈值校准。
3.3.2 BH1750方案
BH1750通过I2C输出Lux值:
- 精度高、稳定性好
- 标定简单
- 抗干扰更强
但对51而言需要软件I2C或硬件I2C资源,开发复杂度略高。
3.4 人数检测模块电路设计
采用“双红外对射”方案:
1)红外发射管持续发射红外光。
2)接收管输出电平信号(有遮挡时电平变化)。
3)两组对射安装在门口,形成A/B两通道。
电路实现方式:
抗干扰设计要点:
1)对射位置固定,防止误遮挡。
2)软件加入去抖与超时判断,过滤异常遮挡序列。
3)若门口通行密集,可提升算法(例如队列检测),但课程设计一般可满足单人通过计数。
3.5 按键控制模块电路设计
按键采用独立按键方式:
- 一端接GND,另一端接IO口并上拉。
- 按下为低电平。
按键建议:MODE、L1、L2、L3、RESET(可选)。
软件消抖为主,必要时可加RC硬件消抖提升可靠性。
3.6 灯具驱动模块电路设计
教室照明通常为220VAC灯具,单片机必须通过隔离驱动:
1)继电器驱动:
- 适合开关控制,隔离好,成本低。
- 继电器线圈由三极管驱动,线圈加续流二极管。
2)固态继电器(SSR): - 无触点寿命长,适合频繁动作,噪声小。
- 成本略高。
3)可控硅调光(扩展): - 可实现亮度调节,但需要过零检测与相位控制,复杂度高。
本系统以开/关控制为主,推荐继电器或SSR。分区灯具可采用3路输出:
- L1:靠窗区
- L2:中央区
- L3:靠门/后排区
安全要点:
3.7 WiFi通信模块电路设计(ESP8266)
ESP8266与单片机通过串口通信:
- ESP8266工作电压为3.3V,必须使用3.3V稳压供电。
- 单片机TX输出为5V电平,需要电平转换或分压进入ESP8266 RX。
- ESP8266 TX输出3.3V一般可被51识别为高电平(通常可行),但建议确认阈值或加电平转换。
电路设计要点:
1)电源稳定:ESP8266瞬时电流较大,需加100uF电解+0.1uF陶瓷电容。
2)串口波特率:常用9600或115200。
3)复位与使能:RST/EN脚需正确上拉,保证模块稳定启动。
3.8 电源模块设计
系统至少需要两路电压:
- 5V:单片机、继电器线圈(视继电器而定)、部分传感器
- 3.3V:ESP8266、BH1750、部分数字传感器
电源设计建议:
1)使用AC-DC模块或适配器供电(实际工程),仿真可直接使用DC电源。
2)使用AMS1117-3.3或DC-DC降压输出3.3V。
3)继电器供电与单片机供电尽量隔离,至少在电源线上加大电容缓冲。
4)增加TVS、保险丝等保护(扩展)。
4 系统程序设计
4.1 软件总体架构
系统软件采用“分层驱动 + 任务调度 + 状态机”结构,核心原则是:
- 采集任务与控制任务分离
- 自动模式与手动模式状态明确
- 通信收发异步处理
- 关键事件(人数变化、通信指令)优先响应
软件模块划分:
1)初始化模块(时钟、串口、IO、LCD/指示灯)
2)传感器采集模块(光照、红外计数)
3)人数计数算法模块(进出方向判定)
4)照明控制模块(自动控制策略、分区开关)
5)按键扫描模块(消抖、模式切换、手动控制)
6)WiFi通信模块(协议解析、状态上报、指令执行)
7)显示/指示模块(本地状态显示可选)
8)异常处理模块(离线策略、传感器故障处理)
调度建议:
- 10ms:按键消抖、红外信号状态机
- 100ms:光照采样滤波、自动控制判断
- 1s:状态上报、心跳发送、上位机数据刷新
4.2 光照度采集与滤波模块程序设计
若使用ADC读取光敏电阻:
1)定时采集ADC值。
2)滑动平均滤波:采样N次求平均。
3)与阈值比较,得出亮度等级。
若使用BH1750:
1)I2C读取Lux值。
2)对Lux值进行简单滤波(如递推滤波)。
滤波意义:
- 减少灯光开关瞬间引起的光照突变导致频繁开关。
- 使系统行为更稳定,更符合实际照明控制需求。
4.3 人数统计模块程序设计(双红外方向判定)
人数统计关键在于正确识别“进”和“出”。
基本逻辑:
1)两路红外传感器A、B。
2)当检测到遮挡序列:
- A先触发再B触发:进门(人数+1)
- B先触发再A触发:出门(人数-1)
为提高可靠性,需要加入:
- 超时机制:若A触发后长时间未触发B,则判定无效并复位状态。
- 防抖:对每个传感器触发增加最小间隔过滤,避免同一次遮挡多次触发。
- 下限限制:人数最小为0。
- 并发情况处理:若多人同时通过,可能出现误差,可在设计说明中给出限制条件并提出扩展方案。
4.4 自动照明控制模块程序设计
自动控制输入:
- 人数count
- 光照light
- 当前灯状态L1/L2/L3
输出:
- 灯具开关控制
控制策略示例:
1)count == 0:全部关闭。
2)count > 0:
- light < 阈值1:全开
- 阈值1 ≤ light < 阈值2:开2路
- 阈值2 ≤ light < 阈值3:开1路(优先后排或中央)
- light ≥ 阈值3:全关
同时加入回差与延时:
- 每次模式切换需满足条件持续500ms~2s才执行,避免频繁变化。
- 灯具切换后最短保持时间(例如10s)再允许改变,防止“闪灯”。
4.5 按键控制模块程序设计
按键扫描采用10ms周期:
- 计数消抖(连续检测低电平3次确认按下)
- 按键锁定(松手才允许再次触发)
模式逻辑:
- 自动模式:灯具状态由自动控制模块决定,按键仅用于切换模式与紧急全关/全开。
- 手动模式:按键直接控制分区灯开关,上位机控制仍可覆盖(可设计优先级)。
建议优先级设计:
- 本地紧急全关 > 上位机控制 > 自动控制
这种策略可以保证现场安全与管理权限。
4.6 WiFi通信模块程序设计(串口协议解析)
通信模块包括两部分:
1)接收:从ESP8266接收上位机命令帧,解析后执行控制动作。
2)发送:周期发送状态帧,事件触发即时发送。
关键点:
- 串口接收缓冲:必须使用循环缓冲或帧拼接,避免粘包导致解析错误。
- 帧头帧尾识别:以
@和*为边界解析。 - 命令执行反馈:执行后发送ACK或带状态的上报帧。
- 超时机制:若长时间无上位机心跳,可提示离线并进入本地自动策略。
4.7 上位机软件设计思路
上位机软件可使用多种开发方式:
- C# WinForms/WPF(常用于串口/网络上位机)
- Python + PyQt(快速开发)
- Java(跨平台)
核心模块:
1)网络监听:作为TCP服务器,接收多个教室客户端连接。
2)协议解析:解析状态上报帧,更新表格数据。
3)控制下发:点击按钮生成控制帧发送给对应教室。
4)数据管理:记录在线状态、更新时间、日志、历史数据(扩展)。
5)异常处理:断线重连提示、超时离线标记、错误帧记录。
上位机设计中需要重点考虑多连接管理,例如每个教室一个Socket连接,通过教室ID进行映射管理。
5 关键程序代码示例(51单片机C语言:采集+人数计数+控制+通信上报)
#include <reg52.h>
#include <string.h>
/* ====== 硬件定义(示例) ====== */
sbit IR_A = P3^2; // 红外A(建议接INT0)
sbit IR_B = P3^3; // 红外B(建议接INT1)
sbit KEY_MODE = P3^0; // 模式切换按键
sbit KEY_L1 = P3^1; // 手动控制L1
sbit LAMP1 = P1^0; // 分区灯1
sbit LAMP2 = P1^1; // 分区灯2
sbit LAMP3 = P1^2; // 分区灯3
/* ====== 参数 ====== */
#define CLASS_ID 101
#define LIGHT_TH1 200
#define LIGHT_TH2 400
#define LIGHT_TH3 650
/* ====== 系统变量 ====== */
volatile unsigned int ms_tick = 0;
bit flag_10ms = 0, flag_100ms = 0, flag_1s = 0;
unsigned int people = 0;
unsigned int light_val = 300;
bit mode_auto = 1; // 1=自动模式,0=手动模式
/* 红外状态机 */
typedef enum { IR_IDLE=0, IR_A_FIRST, IR_B_FIRST } IRSTATE;
IRSTATE ir_state = IR_IDLE;
unsigned char ir_timeout = 0;
/* 串口发送 */
void uart_send_char(char c) {
SBUF = c;
while(!TI);
TI = 0;
}
void uart_send_str(char *s) {
while(*s) uart_send_char(*s++);
}
/* ====== 串口初始化(与ESP8266通信) ====== */
void uart_init(void) {
SCON = 0x50;
TMOD |= 0x20;
TH1 = 0xFD; TL1 = 0xFD; // 9600bps@11.0592MHz
TR1 = 1;
}
/* ====== 定时器0 1ms ====== */
void timer0_init(void) {
TMOD |= 0x01;
TH0 = 0xFC; TL0 = 0x66;
ET0 = 1; EA = 1; TR0 = 1;
}
void timer0_isr(void) interrupt 1 {
TH0 = 0xFC; TL0 = 0x66;
ms_tick++;
if(ms_tick % 10 == 0) flag_10ms = 1;
if(ms_tick % 100 == 0) flag_100ms = 1;
if(ms_tick % 1000 == 0) flag_1s = 1;
}
/* ====== 光照采样(示例:此处用模拟值,实际应读取ADC) ====== */
unsigned int read_light(void) {
return light_val;
}
/* ====== 人数计数状态机(10ms节拍) ====== */
void people_count_task_10ms(void) {
bit a_block = (IR_A == 0);
bit b_block = (IR_B == 0);
if(ir_timeout > 0) ir_timeout--;
switch(ir_state) {
case IR_IDLE:
if(a_block) { ir_state = IR_A_FIRST; ir_timeout = 50; } // 500ms
else if(b_block) { ir_state = IR_B_FIRST; ir_timeout = 50; }
break;
case IR_A_FIRST:
if(b_block) {
people++;
ir_state = IR_IDLE;
} else if(ir_timeout == 0) {
ir_state = IR_IDLE;
}
break;
case IR_B_FIRST:
if(a_block) {
if(people > 0) people--;
ir_state = IR_IDLE;
} else if(ir_timeout == 0) {
ir_state = IR_IDLE;
}
break;
}
}
/* ====== 自动照明控制(100ms) ====== */
void auto_light_ctrl_100ms(void) {
unsigned int lv = light_val;
if(people == 0) {
LAMP1 = 0; LAMP2 = 0; LAMP3 = 0;
return;
}
if(lv < LIGHT_TH1) {
LAMP1 = 1; LAMP2 = 1; LAMP3 = 1;
} else if(lv < LIGHT_TH2) {
LAMP1 = 0; LAMP2 = 1; LAMP3 = 1;
} else if(lv < LIGHT_TH3) {
LAMP1 = 0; LAMP2 = 0; LAMP3 = 1;
} else {
LAMP1 = 0; LAMP2 = 0; LAMP3 = 0;
}
}
/* ====== 按键扫描(10ms) ====== */
void key_task_10ms(void) {
static unsigned char c_mode=0;
static bit lock_mode=0;
if(KEY_MODE == 0) {
if(c_mode < 3) c_mode++;
else if(!lock_mode){
mode_auto = !mode_auto;
lock_mode = 1;
}
} else { c_mode = 0; lock_mode = 0; }
/* 手动模式下L1按键控制 */
if(!mode_auto) {
static unsigned char c_l1=0;
static bit lock_l1=0;
if(KEY_L1 == 0) {
if(c_l1 < 3) c_l1++;
else if(!lock_l1) {
LAMP1 = !LAMP1;
lock_l1 = 1;
}
} else { c_l1 = 0; lock_l1 = 0; }
}
}
/* ====== 状态上报(1s) ====== */
void report_task_1s(void) {
char msg[120];
char buf[12];
strcpy(msg, "#ID=");
sprintf(buf, "%u", CLASS_ID);
strcat(msg, buf);
strcat(msg, ",PEO=");
sprintf(buf, "%u", people);
strcat(msg, buf);
strcat(msg, ",LUX=");
sprintf(buf, "%u", light_val);
strcat(msg, buf);
strcat(msg, ",L1=");
strcat(msg, LAMP1 ? "1" : "0");
strcat(msg, ",L2=");
strcat(msg, LAMP2 ? "1" : "0");
strcat(msg, ",L3=");
strcat(msg, LAMP3 ? "1" : "0");
strcat(msg, ",MODE=");
strcat(msg, mode_auto ? "A" : "M");
strcat(msg, "*rn");
uart_send_str(msg);
}
void main(void) {
LAMP1 = 0; LAMP2 = 0; LAMP3 = 0;
uart_init();
timer0_init();
while(1) {
if(flag_10ms) {
flag_10ms = 0;
key_task_10ms();
people_count_task_10ms();
}
if(flag_100ms) {
flag_100ms = 0;
light_val = read_light();
if(mode_auto) auto_light_ctrl_100ms();
}
if(flag_1s) {
flag_1s = 0;
report_task_1s();
}
}
}
6 系统可靠性设计与关键问题分析
6.1 人数统计误差与优化策略
双红外对射计数在实际中可能出现误差,原因包括:
1)多人并行通过门口导致遮挡序列混乱。
2)传感器安装位置不合理,遮挡时间过短或过长。
3)光线干扰、传感器抖动、误触发。
优化策略:
- 增加通道间距,提高方向判定准确性。
- 设置最小触发间隔与超时机制,滤除异常序列。
- 对密集通行场景可增加门禁通道结构(单人通行),或升级为视觉识别方案。
- 提供“人数校准”机制:管理员可在上位机一键清零或设定人数值。
6.2 光照控制稳定性与避免“闪灯”
光照与灯光存在闭环关系:灯开→光照上升→系统判定亮→关灯→光照下降→再开灯,可能造成闪烁。
解决办法:
1)回差控制:设置L_low与L_high。
2)最小保持时间:灯开后至少保持10秒再允许关闭。
3)滤波处理:对光照采样取平均,减少瞬时波动影响。
4)分区调节:优先开某些区域,减少整体光照变化幅度。
6.3 WiFi通信丢包与离线策略
WiFi网络可能出现延迟或断线,上位机必须识别离线教室并采取策略:
1)下位机定期发送心跳,上位机若超过3个周期未收到则标记离线。
2)离线时下位机仍保持本地自动控制,不影响教室正常使用。
3)恢复连接后,下位机主动上报最新状态,上位机自动刷新。
4)重要控制指令可采用“发送—等待ACK—重发”机制,提高可靠性。
6.4 系统安全性与强电控制注意事项
照明灯具属于市电负载,强弱电控制必须注意:
- 继电器触点容量与灯具功率匹配,避免触点粘连。
- 强弱电线路分离,PCB保持足够爬电距离。
- 增加保险丝、漏保等外部保护装置。
- 建议使用光耦隔离驱动,提高安全性与抗干扰能力。
- 设备外壳与接线端子做好绝缘防护,防止触电风险。
7 系统总结与扩展方向
7.1 系统设计总结
基于单片机与WiFi通信的教室人数与照明上位机监控系统,通过光照度检测与人数检测实现教室环境感知,通过下位机自动控制照明开关并支持按键人工控制,同时通过WiFi实现与上位机的双向通信,使管理人员能够集中监控多间教室的编号、人数与分区灯状态,并可远程对全部或单个教室进行照明控制。系统实现了“按需照明、分区调节、无人关灯、集中管理”等节能与管理优势,具备较强的实用价值与扩展能力。
7.2 可扩展功能方向
为进一步提升系统性能与工程化程度,可扩展:
1)多传感器融合:增加CO₂浓度、温湿度传感器,辅助判断教室舒适度与通风需求。
2)更精确占用检测:引入毫米波雷达或AI摄像头,提高人数统计准确率。
3)能耗统计:记录每个分区灯具的开灯时长与估算能耗,形成节能报表。
4)云平台管理:采用MQTT/HTTP上传到服务器,实现跨楼宇集中管理。
5)权限与安全:增加用户登录、操作权限控制与加密通信,防止非法控制。
6)故障检测:检测灯具异常(如继电器粘连、灯具损坏)并上报维护提示。
8 结论
本设计完成了一套基于单片机与WiFi通信的教室人数与照明上位机监控系统,具备光照度与人数实时检测、下位机自动/手动照明控制、上位机集中监控与远程控制、WiFi双向通信等功能,可实现教学楼多教室照明的节能化、智能化与集中化管理。系统结构清晰、模块化程度高,既可用于仿真验证与教学设计,也具备向智慧校园照明管理平台升级的良好基础。
252