随着城市化进程的不断推进,建筑物能源消耗问题日益突出,尤其是办公室、教室等公共场所的照明系统在无人的情况下仍然长时间处于开启状态,导致了不必要的能源浪费。因此,设计一款节能照明系统,以减少能源浪费,实现智能化管理,已经成为许多建筑项目和智能家居中的必要组成部分。
传统的照明控制系统往往依赖人工手动开关,这不仅增加了能源浪费,也容易出现因为忘记关灯而产生的资源浪费。此外,随着LED照明技术的成熟,亮度调节、色温调节和定时控制等功能成为了现代照明控制系统中的关键需求。
本项目基于STM32单片机设计一款教室节能照明系统,结合人体红外传感器、光敏传感器、蓝牙控制、液晶显示屏和华为云物联网平台,实现智能化、节能化的照明控制。该系统不仅能够根据教室内的人员数量智能开关灯,还可以根据外界光线变化自动调节灯光亮度,并支持手动调节亮度和灯光颜色。同时,通过蓝牙模块与手机APP连接,实现远程控制功能,进一步提升使用便捷性。
功能模块 | 描述 | 输入 | 输出 |
---|---|---|---|
人体红外传感器 | 判断当前是否有人员进入教室 | 红外传感器信号 | 自动开关灯 |
光敏传感器 | 采集环境光线强度并调节灯光亮度 | 环境光线强度 | 调节LED灯光亮度 |
按键控制 | 用户通过按键选择不同模式与功能,如自动/手动模式、亮度调节等 | 按键输入 | 控制灯光亮度、模式、定时等 |
液晶显示 | 显示系统状态、光线强度、当前亮度、模式等 | 传感器数据 | 实时显示数据 |
蓝牙控制 | 通过手机APP控制灯光功能 | 蓝牙信号 | 控制灯光的开关、亮度等 |
云端数据上传 | 将设备数据上传至华为云物联网平台 | 设备传感器数据 | 云端数据存储与展示 |
服务器管理 | 后端服务器接收并展示数据,支持设备状态控制 | 设备数据 | 可视化网页、设备控制 |
的模块技术详情介绍
STM32F103RCT6是一款基于ARM Cortex-M3内核的32位微控制器,具有较强的处理能力和丰富的外设支持,适合用于本项目中进行传感器数据采集、信号处理及控制任务。
HC-05是一款低功耗蓝牙模块,支持串口通信,可以通过蓝牙与手机APP进行数据交换。适用于本项目中的无线控制功能。
ESP8266是一款集成了TCP/IP协议栈的低成本Wi-Fi模块,通过UART与STM32通信,负责将设备的数据上传至云平台。
光敏传感器是一种能够根据光照强度变化输出相应电压的传感器,用于采集当前环境的光线强度,以实现灯光亮度的自动调节。
在本项目中,已经完成了其他模块的代码(如红外传感器、光敏传感器、LED灯控制、按键控制、蓝牙通信等模块的功能实现),下面给出一个完整的 main.c
文件,该文件主要实现了STM32单片机的主程序功能,并与各子模块进行连接和交互。
main.c
示例代码#include "stm32f1xx_hal.h"
#include "lcd.h"
#include "sensor.h"
#include "led_control.h"
#include "keypad.h"
#include "bluetooth.h"
#include "mqtt.h"
// 定义一些常量
#define TEMPERATURE_THRESHOLD 37.3 // 高温报警阈值(假设单位为摄氏度)
#define AUTO_MODE 1
#define MANUAL_MODE 2
// 定义全局变量
uint8_t current_mode = AUTO_MODE; // 当前工作模式(自动模式为1,手动模式为2)
uint8_t light_status = 0; // 当前灯光状态(0:关,1:开)
uint8_t light_brightness = 50; // 当前灯光亮度(0到100)
uint8_t light_color = 1; // 当前灯光颜色(1:白色,2:黄色,3:暖白色)
// 定义系统状态
float ambient_light = 0.0; // 当前环境光强度(从光敏传感器获取)
uint8_t is_person_present = 0; // 是否有人员进入(从红外传感器获取)
float current_temperature = 0.0; // 当前检测温度(从温度传感器获取)
// 函数声明
void System_Init(void);
void System_Update(void);
void Mode_Switch(uint8_t mode);
void Light_Control(void);
void Bluetooth_Control(void);
void Upload_Data_To_Cloud(void);
// 主函数
int main(void)
{
// 初始化系统
HAL_Init();
System_Init();
// 主循环
while (1)
{
// 1. 获取传感器数据
ambient_light = Get_Ambient_Light(); // 获取环境光线强度
is_person_present = Get_Person_Present(); // 获取红外传感器状态
current_temperature = Get_Temperature(); // 获取当前温度
// 2. 根据工作模式控制灯光
Light_Control();
// 3. 根据按键进行控制
current_mode = Keypad_Scan(); // 扫描按键,获取用户输入的模式选择
// 4. 蓝牙控制
Bluetooth_Control(); // 检查是否有蓝牙控制信号
// 5. 上传数据到云
Upload_Data_To_Cloud();
}
}
// 系统初始化
void System_Init(void)
{
// 初始化外设
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 按键、LED等的GPIO初始化
LCD_Init(); // 初始化LCD显示
Sensor_Init(); // 初始化传感器
Bluetooth_Init(); // 初始化蓝牙模块
MQTT_Init(); // 初始化MQTT客户端(物联网上传)
HAL_UART_Init(&huart1); // 初始化串口,用于蓝牙和调试
}
// 系统更新函数:根据传感器数据动态控制系统状态
void System_Update(void)
{
// 获取传感器数据
ambient_light = Get_Ambient_Light();
is_person_present = Get_Person_Present();
current_temperature = Get_Temperature();
// 控制灯光的开关和亮度
if (current_mode == AUTO_MODE)
{
if (is_person_present)
{
// 如果有人的话,开启灯光
if (!light_status)
{
Turn_On_Light(); // 开灯
light_status = 1;
}
}
else
{
// 如果没人,关闭灯光
if (light_status)
{
Turn_Off_Light(); // 关灯
light_status = 0;
}
}
// 调节灯光亮度
light_brightness = (uint8_t)(100 - ambient_light); // 假设光敏传感器值为0-100,亮度值反比
Set_Light_Brightness(light_brightness);
}
else if (current_mode == MANUAL_MODE)
{
// 手动模式下,允许用户控制灯光的亮度和颜色
light_brightness = Keypad_Get_Brightness(); // 获取用户设置的亮度
light_color = Keypad_Get_Color(); // 获取用户设置的颜色
Set_Light_Brightness(light_brightness);
Set_Light_Color(light_color);
}
// 温度检测
if (current_temperature > TEMPERATURE_THRESHOLD)
{
Beep(); // 蜂鸣器报警
LCD_Display_String("High Temperature Alert!"); // 显示温度警告信息
}
else
{
LCD_Clear();
}
}
// 灯光控制函数
void Light_Control(void)
{
// 自动模式下灯光的开关与亮度调节
if (current_mode == AUTO_MODE)
{
if (is_person_present)
{
if (!light_status)
{
Turn_On_Light();
light_status = 1;
}
}
else
{
if (light_status)
{
Turn_Off_Light();
light_status = 0;
}
}
}
}
// 蓝牙控制
void Bluetooth_Control(void)
{
uint8_t command = Bluetooth_Receive_Command();
if (command != 0)
{
// 根据接收到的蓝牙命令进行控制
if (command == 1) // 开灯
{
Turn_On_Light();
light_status = 1;
}
else if (command == 2) // 关灯
{
Turn_Off_Light();
light_status = 0;
}
else if (command == 3) // 调节亮度
{
light_brightness = Bluetooth_Get_Brightness();
Set_Light_Brightness(light_brightness);
}
}
}
// 上传数据到云
void Upload_Data_To_Cloud(void)
{
// 使用MQTT协议上传数据到华为云物联网平台
char message[100];
snprintf(message, sizeof(message), "Light: %d, Brightness: %d, Temp: %.2f, Person: %d",
light_status, light_brightness, current_temperature, is_person_present);
MQTT_Publish("lighting_system/data", message);
}
System_Init
): System_Update
): Light_Control
): Bluetooth_Control
): Upload_Data_To_Cloud
): 这段代码实现了一个基于STM32的教室节能照明系统的核心功能,集成了人体红外传感器、光敏传感器、蓝牙控制、温度监测、MQTT物联网上传等模块。可以根据不同的环境需求自动调整灯光状态,同时还支持手动调节和远程控制。