节能照明控制器的基本工作流程可以进一步细化如下:
1)采集环境光强度数据:系统通过光传感器实时获取环境光强度。随着环境光的变化,光传感器会不断地输出新的光强度数据。
2)数据处理和分析:主控芯片(例如stc89c51)负责采集和处理光传感器输出的光强度数据,对其进行滤波、算法处理,并从中提取出符合要求的有效数据。同时,系统也会不断地收集有关环境光强度的信息。
3)控制输出信号并控制灯光开关: 计算后的有效数据会被转化为控制信号,通过硬件电路输出给LED驱动电路,控制LED灯的亮度及开关状态。在光强度越大的情况下,LED灯的亮度会随之降低,这样既可以保证光照质量,又能起到节能减排的效果。
4)显示系统状态信息:系统还可在液晶显示屏上显示当前时间以及环境光的强度信息,以帮助用户更直观地了解目前的灯光状态和环境光的情况。
      总体来说,节能照明系统通过光传感器获取环境光强度数据,通过主控芯片进行数据处理和分析,并将计算后的控制信号输出给LED灯,控制其亮度和开关状态,从而达到节能减排的目的。基本工作过程图如下所示。
image.png


1、STC89c51单片机的最小系统
        STC89c51是节能照明控制器系统的主要控制器之一。台湾宏晶公司生产的STC89C51。主控微控制器的主要功能是执行和控制外部环路。我们使用了基于STC89C51芯片的最小系统板。虽然最低的是原装的,但STC89C51是我设计的节能照明控制器系统中不可或缺的主控制器之一。它具有许多强大的功能和特点,如高速计算能力、强大的存储空间、多种外围接口、可靠的稳定性等。正是因为这些出色的功能,STC89C51才能广泛应用于照明控制领域,为人们创造更舒适、更智能的生活体验。我们只需要调用I/O引脚的代码就可以在系统板上实现输入和输出的功能。计算机的工作电压为12,可以收集其他模块中的输入数据,并将其输出到其他通信模块。因此,节能照明系统的实现得以实现,因为主STC89C51最小系统板是整个节能照明系统设计的核心部分,因此控制每个模块数据的输入和输出,控制每个模块的工作状态。以下单片机最小系统如下图所示,适用于STC89C51中的最小系统板。
image.png


2、OLED显示模块电路设计
       本方案使用的是一块基于IIC通讯的0.96寸黑白两色的OLED显示屏,分辨率最高可达到128*64,这块OLED显示屏有一块SSD1306驱动芯片作为屏幕的显示驱动芯片,还带有稳压芯片来维持稳定的电压,该屏幕还拥有自由发光的视角,可以在多个角度观察屏幕上的数值,这块OLED显示屏是一块基于IIC通讯的屏幕,电路连接如下:0.96寸OLED模块的电路连接方式一般分为以下几步:
1)接口说明:典型的0.96 OLED模块通常有I2C接口或者SPI接口。其中I2C是一种基于两根线(SDA和SCL)的串行通信协议,支持多个设备在同一条总线上进行通信;而SPI则是一种带有片选信号的串行通信协议。
2)VCC引脚和GND引脚:将模块的VCC引脚连接到正极电源,GND引脚连接到负极电源以供电。
3)OLED模块的I2C接口连接方式如下:
   - 将模块的SCL引脚连接到MCU的I2C时钟线上(即SCL)
   - 将模块的SDA引脚连接到MCU的I2C数据线上(即SDA)。
   - 如果硬件配置了多个I2C设备,需要根据具体情况将模块的地址引脚连接到VCC/GND/NC之一。
4)OLED模块的SPI接口连接方式如下:
   - 将模块的CS引脚连接到一个可编程的GPIO引脚上。
   - 将模块的DC引脚连接到一个可编程的GPIO引脚上。
   - 将模块的SCLK引脚连接到MCU的SPI时钟线上。
   - 将模块的SDIN引脚连接到MCU的 MOSI线上。
       在设置好它的参数和程序后在断电后在上电时会自动的复位,OLED显示屏的功耗低对降低系统功耗也有一定的帮助。屏幕的核心 SSD1306驱动芯片可以进行页寻址模式或者水平寻址模式和垂直寻址模式的寻址操作。其寻址方式决定了写入数据的方式。采用IIC 接口方式进行通讯,OLED显示模块有:引脚VCC可以接3.3v电压、引脚GND 为显示屏电源的负极可接地处理、引脚SCL管理IIC通讯的时钟信号通过计算机程序控制时钟来与显示屏通讯, 引脚SDA是IIC通讯使用的数据传输的引脚一共有四个引脚接口 ,对应 OLED 的D1脚(本设计连接STM32F103C8T6单片机GPIOA0脚);OLED显示模块在家庭安防系统里是系统与用户进行人机交互的重要途径之一,用户可通过OLED屏幕显示的数据实时的了解环境数据的变化,将模拟数据转化为可视数据,因此OLED显示模块是家庭防系统的重要组成部分,OLED显示模块的原理图如下图所示:
image.png

3、 光线传感器电路设计
       首先,光敏电阻是一种根据光照强度变化来改变电阻值的元器件。在设计光线传感器电路时,需要将光敏电阻作为核心元器件。
其次,光传感器电路的基本原理是将光敏电阻与电路的其他元器件串联,构成一个反馈电路。当有光照射到光敏电阻上时,根据光照强度的不同,光敏电阻的电阻值发生变化,从而影响整个电路的工作状态。
       最后,为了使得光线传感器电路可以正常工作,需要合理配置其他元器件,如电容、二极管等。此外,为了减少电路中的噪声干扰,在设计过程中还需选择合适的滤波器和放大器等组件。,在环境光线变化时,传感器接口引脚的电压值也会相应变化,适不光线强度。同时,通过传感器模块中的电位器可以调的敏感度。在传感器输出的电压信号经过运放放大处理后,能得到精确的测结果光电阻传感器模块适用于需要自动制域对环境光线进行测量和反的场景。例如动控及内明等。此外它在工业自动化、机器视觉等领域也被广泛采用。比如说,在工业自动化中可以利用它进行物品的位置测,机器利其灵敏度来测物体表面的颜色及亮度等特性。总之,光敏电阻传块易于使用且具可靠的测量结果,已经成为自动控制领域的核心传感器之一。光线传感器电路如下图所示。   
image.png

4、指示灯模块
       指示灯模块就是一个能够发光的小东西,它主要被用于电路中,可以告诉我们电路是否正常工作以及状态是否正常。我们常用的指示灯模块通常由几个基本部分组成,包括一个灯泡、一个电阻和一些连接线等。电路连接如下:VCC 引脚和IN连接到正极电源GND 引脚连接到地,当电路正常工作时,指示灯模块就点亮了,会发出明亮的光芒,而当电路出现故障或者异常时,指示灯模块则不会亮起来。这样我们就可以通过观察指示灯模块的状态来知道电路是否正常,从而保证设备的正常运转。除了在电路中使用外,指示灯模块还可以广泛应用在各种机器设备、电器、汽车等领域中,让我们更加方便地了解设备的状态和。指示灯模块已经被广泛应用在生产制造和科技领域中,它的应用范围还在不断扩大,未来也将会有更多的发展。指示灯模块电路图如下所示。
image.png


5、EEROM存储器
       EEPROM存储器模块是一种可编程存储器,它与传统的ROM存储器不同,可以通过电信号进行数据的擦除和编程,实现数据的读取和修改更方便和灵活。电路连接如下:VCC和GND引脚:将芯片的 VCC 引脚连接到正极电源,GND 引脚连接到负极电源;A0、A1、A2地址引脚:根据实际需要选择使能的地址引脚接地或接高电平,以确定芯片的地址; WP引脚:该引脚可以用于写保护控制。如果需要进行写保护,则将它连接到负极电源;如果不需要写保护,则将其连接到正极电源; SDA、SCL总线引脚:将芯片的 SDA 引脚连接到MCU的I2C数据总线,SCL 引脚连接到MCU的I2C时钟总线EEPROM存储器模块由存储单元阵列、控制逻辑和I/O接口等部分组成,其中存储单元阵列是最关键的部分,主要由一系列场效应晶体管和金属氧化物半导体构成的存储单元组成,可以将电荷存储在介质层中实现数据存储功能。控制逻辑主要负责命令解码、地址检测、数据输入输出等各种功能,在实现EEPROM存储器模块的各项功能过程中起到了至关重要的作用。I/O接口用于EEPROM存储器模块与外部设备之间的数据交互,包含多个位和其他控引脚,用来读取和写入存储器中的数据。EEPROM存储器模块具有电可擦写、可编程、可读取等多种优点,广泛应用于各种电子设备的数据存储和处理中。EEROM存储器原理图如下所示。
image.png

6、DS1302时钟模块

       DS1302为SPI接口实时时钟模块,可连续计数并提供斜率补偿功能。该模块集成了晶体补偿电路,有助于稳定时钟频率并提高时钟精度。 DS1302 是一种基于 SPI 接口的实时时钟模块,它具有连续计数和斜率补偿功能,内置晶体补偿电路,可以提高时钟准确度。电路连接DS1302 模块采用 SPI 接口进行通信,它有四个引脚:VCC、GND、RST、SLCK 和 IO。 其中,VCC 为电源引脚,GND 为地线引脚,RST 为复位引脚,IO 为数据输入输出引脚SLCK 连接时钟信号。DS1302时钟模块电路图如下所示。
image.png

7、oled显示代码
1)初始化I2C总线
先需要在51单片机中初始化IIC总线,包括SCL和SDA两个引脚的设置、时钟频率等参数的设置。以下为本系统的设计核心代码:
#define SCL P2_0  // 定义SCL引脚
#define SDA P2_1  // 定义SDA引脚
void I2C_Init()
{
    SCL = 1;    // 设置SCL为高电平
    SDA = 1;    // 设置SDA为高电平
}
2)发送I2C起始信号
在使用I2C通讯协议进行数据传输时需要先发送起始信号(start signal),即在总线上面拉低SDA引脚时持续时间较长的一个脉冲。以下为本系统的设计核心代码:
void I2C_Start()
{
    SDA = 1;
    SCL = 1;
    SDA = 0;   // 发送起始信号
    SCL = 0;
}
3)发送I2C停止信号
在向OLED写入完数据之后,需要发送I2C停止信号(stop signal)结束本次数据传输。以下为本系统的设计核心代码:
void I2C_Stop()
{
    SDA = 0;
    SCL = 1;
    SDA = 1;  // 发送停止信号
}
4)写入指令或数据
写入数据或指令时,需要按照I2C通讯协议发送对应的控制字节和数据字节。以下为本系统的设计核心代码:
void I2C_WriteByte(unsigned char dat)
{
    unsigned char i = 0;
    for (i = 0; i 8; i++)
    {
        SDA = (dat & 0x80) >> 7;
        dat <<= 1;
        SCL = 1;
        SCL = 0;
    }
    SDA = 1;
    SCL = 1;
    SCL = 0;
}
5)读取数据在从OLED中读取数据时,需要按照I2C通讯协议进行读取,并读取到的数据保存到指定地址中。以下为本系统的设计核心代码:
unsigned char I2C_ReadByte()
{
    unsigned char i, dat = 0;
    SDA = 1;
    for (i = 0; i 8; i++)
    {
        dat <<= 1;
        SCL = 1;
        dat |= SDA;
        SCL = 0;
    }
    return dat;
}