news 2026/5/1 8:01:43

基于单片机的教室智能照明和人数统计系统探索

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于单片机的教室智能照明和人数统计系统探索

基于单片机的教室智能照明和人数统计系统功能概述: 1.用51单片机AT89C52、时钟芯片DS1302、液晶屏LCD1602、光敏电阻、红外对管、设计一个教室智能照明控制系统; 2.使用4个LED灯模拟教室的照明灯,在符合条件开启时,人数小于10人亮一个灯,10-20人亮二个灯,20-30人亮三个灯,大于30人则全亮四个灯; 3.教室使用两个红外对管来检测是否有人进入并进行人数统计,人数可以统计到二位数99人,并实时将人数显示到液晶屏LCD上,液晶屏同时显示实时日期/时间/星期; 4.利用光敏电阻检测教室的光线强弱; 5.系统分自动/手动模式,可以通过按键切换模式,并有LED指示当前所在模式,在自动模式下,可以设定定时时间段,在定时时间段内,当教室有人(人数大于0)的情况下,如果光线暗弱则自动打开照明灯,照明灯点亮个数根据人数而定,不在定时时间段或者教室无人的情况下,关闭所有照明灯,另外在手动模式下,可以通过手动开关控制照明灯的亮灭,人数统计部分仍然生效。 代码有注释!!! 包含: 仿真、程序、原理图、PCB、报告【仅供参考】

在现代智能化的浪潮下,教室的智能管理系统也备受关注。今天咱们就来聊聊基于 51 单片机 AT89C52 的教室智能照明和人数统计系统,这个系统融合了时钟芯片 DS1302、液晶屏 LCD1602、光敏电阻以及红外对管等有趣的硬件,实现了一系列超实用的功能。

一、系统功能总览

  1. 硬件搭建:选用 51 单片机 AT89C52 作为核心,搭配时钟芯片 DS1302 来获取精准时间,用液晶屏 LCD1602 显示关键信息,光敏电阻感知光线,红外对管负责检测人员进出。
  2. 照明智能控制:用 4 个 LED 灯模拟教室照明。当满足开启条件时,人数不同,亮灯数量不同。小于 10 人亮 1 个灯,10 - 20 人亮 2 个灯,20 - 30 人亮 3 个灯,大于 30 人 4 个灯全亮。
  3. 人数统计与显示:利用两个红外对管检测人员进出,能统计到 99 人,并且实时在液晶屏上显示人数,同时还显示实时日期、时间和星期。
  4. 光线检测:通过光敏电阻检测教室光线强弱,为智能照明提供依据。
  5. 双模式切换:系统分为自动和手动模式,可通过按键切换,还有 LED 指示当前模式。自动模式下能设定定时时间段,在此期间若教室有人且光线暗就自动开灯,灯亮数量依人数而定;不在定时段或无人则关灯。手动模式下,可手动控制灯的亮灭,人数统计功能依旧生效。

二、代码部分解析

下面咱们看部分关键代码,以 C 语言为例:

#include <reg51.h> #include <intrins.h> #include <ds1302.h> #include <lcd1602.h> sbit mode_key = P3^0; // 模式切换按键 sbit auto_led = P1^0; // 自动模式指示灯 sbit manual_led = P1^1; // 手动模式指示灯 sbit light1 = P2^0; // 第一个灯 sbit light2 = P2^1; // 第二个灯 sbit light3 = P2^2; // 第三个灯 sbit light4 = P2^3; // 第四个灯 sbit ir_in = P3^1; // 红外对管输入 sbit ir_out = P3^2; // 红外对管输出 unsigned char count = 0; // 人数统计变量 bit auto_mode = 1; // 初始为自动模式 unsigned char time[7]; // 存储时间信息 unsigned char date[3]; // 存储日期信息 unsigned char week[1]; // 存储星期信息 unsigned char light_count = 0; // 亮灯数量 // 红外对管中断服务函数,用于人数统计 void ir_interrupt() interrupt 0 { if (ir_in == 0) { _nop_(); _nop_(); // 消抖 if (ir_in == 0) { while (!ir_out); // 等待红外对管输出恢复 count++; // 人数加一 if (count > 99) { count = 99; // 限制人数最大值为 99 } } } } // 根据人数控制亮灯数量 void control_light() { if (count < 10) { light_count = 1; } else if (count < 20) { light_count = 2; } else if (count < 30) { light_count = 3; } else { light_count = 4; } switch (light_count) { case 1: light1 = 1; light2 = 0; light3 = 0; light4 = 0; break; case 2: light1 = 1; light2 = 1; light3 = 0; light4 = 0; break; case 3: light1 = 1; light2 = 1; light3 = 1; light4 = 0; break; case 4: light1 = 1; light2 = 1; light3 = 1; light4 = 1; break; } } void main() { lcd_init(); // 初始化液晶屏 ds1302_init(); // 初始化 DS1302 时钟芯片 EA = 1; // 开总中断 EX0 = 1; // 开外部中断 0,用于红外对管检测 IT0 = 1; // 外部中断 0 下降沿触发 while (1) { if (mode_key == 0) { // 检测模式切换按键 _nop_(); _nop_(); // 消抖 if (mode_key == 0) { auto_mode = ~auto_mode; // 切换模式 while (!mode_key); // 等待按键释放 if (auto_mode) { auto_led = 1; manual_led = 0; // 自动模式指示灯亮 } else { auto_led = 0; manual_led = 1; // 手动模式指示灯亮 } } } if (auto_mode) { ds1302_read_time(time); // 读取时间 ds1302_read_date(date); // 读取日期 ds1302_read_week(week); // 读取星期 // 这里假设还有读取光敏电阻值的函数 get_light_value() if (get_light_value() < threshold && count > 0) { control_light(); // 自动模式下,光线暗且有人时控制灯 } else { light1 = 0; light2 = 0; light3 = 0; light4 = 0; // 关闭所有灯 } } else { // 手动模式下,通过按键或其他方式控制灯,这里简单示意 if (manual_control_signal) { light1 = 1; light2 = 1; light3 = 1; light4 = 1; // 手动开灯示例 } else { light1 = 0; light2 = 0; light3 = 0; light4 = 0; // 手动关灯示例 } } // 显示人数、日期、时间和星期到液晶屏 lcd_string(0, 0, "Count: "); lcd_number(6, 0, count); lcd_string(11, 0, date); lcd_string(14, 0, time); lcd_string(0, 1, "Week: "); lcd_number(6, 1, week[0]); } }

这段代码实现了系统的基本逻辑。在中断服务函数irinterrupt中,通过红外对管检测人员进出并统计人数。controllight函数根据人数控制亮灯数量。main函数里,初始化各个模块后,不断检测模式切换按键,在不同模式下执行相应的操作,并且实时更新并显示信息到液晶屏。

三、仿真、原理图、PCB 及报告

  1. 仿真:可以使用 Proteus 软件进行仿真,搭建电路连接,模拟实际运行情况,在软件里调整参数和测试功能,提前发现问题并解决。比如,验证红外对管检测人数是否准确,液晶屏显示是否正常,模式切换是否有效等。
  2. 原理图:绘制原理图是设计的重要一步,清晰展示各个硬件模块之间的连接关系,像单片机与时钟芯片、液晶屏、光敏电阻、红外对管以及按键、LED 灯等的连接,确保电路设计合理,为后续 PCB 设计打下基础。
  3. PCB:基于原理图设计 PCB,考虑布线规则、电气性能、散热等因素,将各个元件合理布局,制作出实际可用的印刷电路板,让系统有了硬件载体。
  4. 报告:撰写报告详细记录系统设计的整个过程,从需求分析、方案论证,到硬件设计、软件设计,再到测试结果与总结,方便他人理解和借鉴,也是对自己设计过程的一个梳理。

通过这个基于单片机的教室智能照明和人数统计系统,不仅能提升教室管理的智能化水平,还能在实际应用中实现节能与便捷的双重目标。感兴趣的小伙伴不妨自己动手尝试一下,探索其中的乐趣与奥秘!

基于单片机的教室智能照明和人数统计系统功能概述: 1.用51单片机AT89C52、时钟芯片DS1302、液晶屏LCD1602、光敏电阻、红外对管、设计一个教室智能照明控制系统; 2.使用4个LED灯模拟教室的照明灯,在符合条件开启时,人数小于10人亮一个灯,10-20人亮二个灯,20-30人亮三个灯,大于30人则全亮四个灯; 3.教室使用两个红外对管来检测是否有人进入并进行人数统计,人数可以统计到二位数99人,并实时将人数显示到液晶屏LCD上,液晶屏同时显示实时日期/时间/星期; 4.利用光敏电阻检测教室的光线强弱; 5.系统分自动/手动模式,可以通过按键切换模式,并有LED指示当前所在模式,在自动模式下,可以设定定时时间段,在定时时间段内,当教室有人(人数大于0)的情况下,如果光线暗弱则自动打开照明灯,照明灯点亮个数根据人数而定,不在定时时间段或者教室无人的情况下,关闭所有照明灯,另外在手动模式下,可以通过手动开关控制照明灯的亮灭,人数统计部分仍然生效。 代码有注释!!! 包含: 仿真、程序、原理图、PCB、报告【仅供参考】

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 10:32:33

OSS-Fuzz 模糊测试使用指南

文章目录1. 简介2. 环境部署2.1 系统前置准备2.2 Docker 安装与配置2.2.1 安装 Docker2.2.2 配置 Docker 加速&#xff08;可选&#xff0c;根据网络情况&#xff09;2.2.3 配置 Docker 权限2.3 克隆 OSS-Fuzz 仓库并验证基础工具2.3.1 克隆官方仓库2.3.2 验证 OSS-Fuzz 核心辅…

作者头像 李华
网站建设 2026/4/29 5:29:59

基于MATLAB与CNN的语音信号分类探索

基于MATLAB的语音信号生成小波时频图&#xff0c;然后利用cnn进行分类&#xff0c;网络结构为简单cnn网络和resnet18网络 在信号处理与机器学习交叉的领域中&#xff0c;对语音信号的分析与分类一直是热门话题。今天咱们就来唠唠如何基于MATLAB生成语音信号的小波时频图&#x…

作者头像 李华
网站建设 2026/4/10 1:49:13

探索新能源汽车电池包热管理:从理论到 StarCCM+ 仿真实战

starccm电池包热管理-新能源汽车电池包共轭传热仿真-电池包热管理视屏 可学习模型如何搭建&#xff0c;几何清理网格划分&#xff0c;学习重要分析参数如何设置。 内容: 0.电池包热管理基础知识讲解&#xff0c;电芯发热机理&#xff0c;电池热管理系统介绍等 1:三维数模的几何…

作者头像 李华
网站建设 2026/4/23 8:44:21

三菱Q系列PLC大型自动化生产线程序案例分享

三菱PLC程序三菱Q系列案例三菱plc大型自动化程序生产线程序 规格如下&#xff1a;Q系列大型程序伺服12轴Q01URS232通讯CCD 应用 实际使用中程序&#xff0c;详细中文注释 2个模块QD70P8&#xff0c;QD70P4控制12轴 模块QD62外接欧姆龙编码器E6C2-CWZ6C 模块QJ71C24N-R2和基恩士…

作者头像 李华
网站建设 2026/4/19 1:00:46

部署安装 K8s 为什么要关闭 swap 分区?

在虚拟内存中swap虽然能增加内存可使用空间&#xff0c;但是也间接增加了磁盘io的使用量&#xff0c;因为在对于不需要的进程数据会以页面的方式写入内存&#xff0c;此时是需要占用总线的&#xff0c;而总线是只有一根&#xff0c;在高负载情况下会与容器对磁盘io等需求会产生…

作者头像 李华
网站建设 2026/4/27 20:30:51

配电网故障重构:基于Matlab与Yalmip的二阶锥实现

配电网故障重构matlab 二阶锥 编程方法&#xff1a;matlabyalmip&#xff08;cplex为求解器&#xff09; 基本内容&#xff1a;以33节点为研究对象&#xff0c;编制配电网故障重构模型&#xff0c;采用图论知识保证配电网的连通性和辐射性&#xff0c;以网损和负荷损失作为目标…

作者头像 李华