基于单片机的楼道声光人体红外智能控制灯设计

基于单片机的楼道声光人体红外智能控制灯设计

点击链接下载资料:https://download.csdn.net/download/m0_51061483/92081496


1. 系统功能概述

本系统以STC89C52单片机 为核心控制器,实现了一种适用于居民楼道、地下通道及公共走廊的声光人体红外智能控制灯系统 。传统的楼道照明通常依靠人工控制或单一的声控、光控电路,存在能耗大、响应不及时、控制逻辑简单等问题。而本系统通过红外传感器、光敏传感器、声控模块及单片机智能逻辑判断,实现对环境亮度和人体活动的综合感知,从而实现高效节能与舒适照明控制。

系统的主要功能如下:

  1. 光照检测:通过ADC0832模块采集光敏电阻的电压信号,当检测到环境光照强度高于设定阈值(即白天)时,系统自动关闭灯光,防止浪费电能。
  2. 夜间声光控制:当检测到环境较暗(夜晚模式),红外人体传感器检测到有人经过或声音传感器检测到声音信号时,系统自动点亮照明灯。
  3. 延时关闭功能:当人体离开或声音消失后,系统通过定时器实现30秒延时熄灯,避免频繁启停。
  4. 自动模式切换:系统根据环境光线自动在"日间关闭模式"和"夜间自动感应模式"之间切换,整个过程无需人工干预。
  5. 可靠性与扩展性:系统具有较高的响应速度与稳定性,并预留扩展接口,可增加蓝牙、WIFI模块以实现远程控制功能。

2. 系统电路设计

系统电路由以下几个部分组成:

  1. 单片机控制核心电路
  2. 光敏传感器信号采集电路
  3. 红外人体感应电路
  4. 声控信号检测电路
  5. ADC0832模数转换电路
  6. 继电器灯光控制电路
  7. 电源模块电路

下面对各个模块的设计原理进行详细说明。


2.1 单片机最小系统电路

单片机采用STC89C52芯片,其内部带有丰富的I/O口资源与定时器,可轻松实现信号采集、逻辑判断与输出控制。最小系统包括以下部分:

  • 时钟电路:使用12MHz晶振,为系统提供稳定的时钟信号。
  • 复位电路:采用RC复位电路,在上电时自动复位单片机,确保系统可靠启动。
  • 电源接口:系统使用+5V直流供电,通过稳压芯片7805实现从12V到5V的转换。

单片机P1口连接到ADC0832的数据接口,用于光照信号采样;P2口分别与红外模块、声控模块、继电器控制端相连;P3口部分用于调试与串口通信。


2.2 光敏传感器电路

光敏电阻(LDR)与分压电阻构成电压分压电路,输出电压随光强变化而变化。由于单片机无法直接处理模拟信号,需通过ADC0832模数转换芯片进行采样。

当光线较强时,光敏电阻阻值减小,输出电压降低;当光线较暗时,光敏电阻阻值增大,输出电压升高。单片机通过采样结果判断当前是否为夜晚,从而决定是否开启声光控制功能。

设计亮点在于:

  • 可通过软件设置光照阈值;
  • 可根据不同场所自动调整灵敏度。

2.3 红外人体感应模块电路

红外传感器采用常用的HC-SR501模块,该模块能够检测到人体红外辐射信号。当有人靠近时,输出高电平;当无人时,输出低电平。

模块内部包含热释电红外传感器与信号处理电路,具有以下特点:

  • 检测距离可达3~7米;
  • 输出信号稳定,抗干扰能力强;
  • 低功耗,响应时间短。

红外模块输出端连接到单片机P2.0口,作为人体检测信号输入。


2.4 声控信号检测电路

声控模块由驻极体麦克风、信号放大电路与比较器组成。当检测到较大的声音(如脚步声、讲话声等)时,比较器输出高电平信号。

设计中采用LM324运放芯片进行信号放大与阈值比较:

  • 当声音信号幅度超过设定值时,输出高电平;
  • 声音消失后,信号恢复低电平。

声控信号输入连接到单片机P2.1口,用于触发照明开启。


2.5 ADC0832模数转换电路

ADC0832是一款8位双通道A/D转换芯片,采用串行通信方式,与单片机接口简单、占用I/O资源少。

在本系统中:

  • CH0通道接光敏传感器输出;
  • 单片机通过时序控制信号(CS、CLK、DI、DO)实现模拟电压采样;
  • 采样结果用于判断光照强度。

采样公式如下:

复制代码
亮度值 = (ADC0832输出 / 255) * 5.0 (单位:V)

该电压值与设定阈值比较后,用于决定系统的白天/夜晚状态。


2.6 灯光控制电路

照明灯采用继电器控制,由单片机P2.2端输出控制信号。继电器驱动电路采用三极管放大方式,确保单片机输出能够可靠驱动继电器线圈。

当系统检测到需要点灯的条件(夜晚+有人/有声)时,单片机输出高电平,继电器吸合,灯点亮;当条件解除后延时30秒,输出低电平,继电器断开,灯熄灭。


2.7 电源模块电路

系统采用AC220V转DC12V模块供电,再通过7805稳压芯片降压至5V,为单片机及传感器模块供电。所有传感器共用地线,保证系统信号基准一致,避免误触发。


3. 程序设计

系统程序采用C语言编写,开发环境为Keil uVision,程序结构模块化,主要包括:

  1. 主程序框架
  2. 光照检测模块
  3. 红外检测模块
  4. 声控检测模块
  5. 灯光控制与延时模块
  6. 定时器中断程序

下面对程序设计的各个模块进行详细说明。


3.1 主程序设计

主程序完成系统初始化与主循环逻辑判断。系统在上电后,首先完成ADC初始化、定时器设置、IO口配置,然后进入主循环,不断采集光照与传感器状态。

主程序核心代码如下:

复制代码
#include <reg52.h>
#include "adc0832.h"

sbit Relay = P2^2;
sbit PIR = P2^0;
sbit Sound = P2^1;

unsigned char light_value;
bit light_flag;

void delay(unsigned int t) {
    unsigned int i,j;
    for(i=0;i<t;i++)
        for(j=0;j<120;j++);
}

void main() {
    Relay = 0;
    while(1) {
        light_value = ADC0832_Read(0);
        if(light_value < 100) light_flag = 1; // 夜晚
        else light_flag = 0; // 白天
        
        if(light_flag == 1) {
            if(PIR || Sound) {
                Relay = 1; // 开灯
                delay(30000); // 延时30秒
                Relay = 0; // 关灯
            }
        } else {
            Relay = 0; // 白天关闭
        }
    }
}

该程序根据光照强度决定是否启用红外和声控检测逻辑,简洁高效,具有较高实用性。


3.2 光照检测模块程序

光照检测模块负责通过ADC0832读取光敏电阻的电压值,判断环境亮度是否低于设定阈值。

复制代码
#include "adc0832.h"
#include <reg52.h>

unsigned char ADC0832_Read(unsigned char channel) {
    unsigned char i, dat1=0, dat2=0;
    CS = 0;
    CLK = 0;
    DI = 1;
    // 发送起始信号
    CLK = 1; CLK = 0;
    DI = 1; CLK = 1; CLK = 0;
    DI = channel; CLK = 1; CLK = 0;
    for(i=0;i<8;i++) {
        CLK = 1;
        dat1 = (dat1<<1) | DO;
        CLK = 0;
    }
    for(i=0;i<8;i++) {
        dat2 = (dat2<<1) | DO;
        CLK = 0;
    }
    CS = 1;
    if(dat1==dat2) return dat1;
    else return 0;
}

通过ADC0832模块采样并返回光照值,供主程序判断使用。


3.3 红外检测模块程序

红外模块通过检测PIR端口电平实现人体感应判断。

复制代码
bit check_PIR() {
    if(PIR == 1)
        return 1;
    else
        return 0;
}

当检测到高电平时,说明有人靠近,返回1,系统点亮灯。


3.4 声控检测模块程序

声控模块的输出信号同样通过数字输入口检测,实现如下:

复制代码
bit check_Sound() {
    if(Sound == 1)
        return 1;
    else
        return 0;
}

当检测到声音信号时,返回1,系统触发点灯。


3.5 灯光延时控制程序

系统在灯亮后需延时30秒再关闭,防止因人短暂停留造成频繁启停。延时程序使用定时器中断实现。

复制代码
void Timer0_Init() {
    TMOD = 0x01;
    TH0 = (65536-46080)/256;
    TL0 = (65536-46080)%256;
    ET0 = 1;
    EA = 1;
    TR0 = 1;
}

unsigned int timer_count = 0;

void Timer0_ISR(void) interrupt 1 {
    TH0 = (65536-46080)/256;
    TL0 = (65536-46080)%256;
    timer_count++;
    if(timer_count >= 650) { // 约30秒
        Relay = 0;
        timer_count = 0;
    }
}

3.6 程序逻辑说明

系统通过三个信号(光照、红外、声音)进行综合判断,实现以下控制逻辑:

  1. 白天模式下,灯光始终关闭;
  2. 夜晚模式下,若有人或声音触发,灯亮;
  3. 灯亮后计时30秒,若期间再次检测到活动,计时重置;
  4. 若无活动,30秒后自动关闭。

此设计确保系统在保证照明的同时,最大限度节能,符合智能建筑节能理念。


4. 系统总结

本系统通过STC89C52单片机 为核心,集成光敏传感器、红外传感器、声控模块及ADC0832采样电路,实现了楼道照明的智能化控制。其设计结构清晰、功能完备,具有以下优点:

  1. 节能高效:在白天自动关闭照明,仅在必要时点亮。
  2. 响应迅速:红外与声控并行检测,触发速度快。
  3. 稳定可靠:软硬件冗余设计,避免误触发。
  4. 扩展性强:可接入无线模块,实现远程控制与数据统计。

通过该系统,可有效降低公共区域照明能耗,提升使用便利性与安全性,具有良好的推广应用价值。

相关推荐
苹果醋33 小时前
JAVA面试汇总(二)多线程(五)
运维·vue.js·spring boot·nginx·课程设计
hazy1k3 小时前
51单片机基础-红外遥控(NEC协议)
stm32·单片机·嵌入式硬件·51单片机·1024程序员节
子不语1804 小时前
STM32——按钮实验
stm32·单片机·嵌入式硬件
牛马大师兄5 小时前
STM32实现低功耗管理使用配置知识梳理笔记
笔记·stm32·单片机·嵌入式硬件·物联网·低功耗
大志若愚YYZ6 小时前
STM32——使用定时器+按键中断来实现长按事件检测触发
stm32·单片机·嵌入式硬件
朱嘉鼎7 小时前
ARM内部寄存器
arm开发·单片机·嵌入式硬件
随机惯性粒子群7 小时前
使用STM32H723VGT6芯片驱动达妙电机
stm32·单片机·嵌入式硬件
嘿嘿嘿x38 小时前
F280025的时钟设置
单片机·嵌入式硬件
GilgameshJSS8 小时前
STM32H743-ARM例程30-Modbus
c语言·arm开发·stm32·单片机·嵌入式硬件