基于STM32单片机设计的教室节能照明系统
1. 项目开发背景
1.1 项目背景
随着城市化进程的不断推进,建筑物能源消耗问题日益突出,尤其是办公室、教室等公共场所的照明系统在无人的情况下仍然长时间处于开启状态,导致了不必要的能源浪费。因此,设计一款节能照明系统,以减少能源浪费,实现智能化管理,已经成为许多建筑项目和智能家居中的必要组成部分。
传统的照明控制系统往往依赖人工手动开关,这不仅增加了能源浪费,也容易出现因为忘记关灯而产生的资源浪费。此外,随着LED照明技术的成熟,亮度调节、色温调节和定时控制等功能成为了现代照明控制系统中的关键需求。
本项目基于STM32单片机设计一款教室节能照明系统,结合人体红外传感器、光敏传感器、蓝牙控制、液晶显示屏和华为云物联网平台,旨在实现智能化、节能化的照明控制。该系统不仅能够根据教室内的人员数量智能开关灯,还可以根据外界光线变化自动调节灯光亮度,并支持手动调节亮度和灯光颜色。同时,通过蓝牙模块与手机APP连接,实现远程控制功能,进一步提升使用便捷性。
1.2 项目目标
- • 通过人体红外传感器判断环境是否有人,当有人时自动开启灯光,没人时自动关闭灯光。
- • 利用光敏传感器采集环境光照强度,自动调节LED灯条的亮度,以适应当前环境的光线变化。
- • 通过按键控制不同的功能,如自动/手动模式切换、亮度调节、灯色变化、定时关灯等。
- • 实现液晶显示,实时显示系统的工作状态、环境光线、当前亮度等信息。
- • 通过蓝牙模块与手机APP连接,进行灯光的远程控制。
- • 支持数据上云,连接华为云物联网平台,上传灯光控制数据并进行数据存储与历史分析。
2. 设计实现的功能
2.1 功能概述
- • 智能灯光控制:当人体红外传感器检测到有人时,自动开启灯光;当无人时自动关闭灯光。
- • 亮度调节:通过光敏传感器实时监测环境光线强度,自动调节LED灯条的亮度,确保室内光线适宜。
- • 模式选择与控制:通过按键选择灯光控制模式(自动/手动)、亮度调节、灯光颜色切换(白光/黄光/暖白)、定时关灯等功能。
- • 液晶显示:实时显示当前模式、环境光线强度、当前亮度、灯光颜色等信息。
- • 蓝牙控制:通过HC-05蓝牙模块实现与手机APP的无线通信,用户可以通过APP远程控制灯光的开关、亮度、定时等。
- • 云端数据上传:通过WIFI模块和MQTT协议将设备数据上传至华为云物联网平台,进行数据存储、历史数据展示和分析。
- • 服务器功能:采用Python作为后端开发语言,接收物联网平台传输的设备数据,并通过HTML页面展示和控制设备状态。
2.2 系统功能总结表
功能模块 | 描述 | 输入 | 输出 |
人体红外传感器 | 判断当前是否有人员进入教室 | 红外传感器信号 | 自动开关灯 |
光敏传感器 | 采集环境光线强度并调节灯光亮度 | 环境光线强度 | 调节LED灯光亮度 |
按键控制 | 用户通过按键选择不同模式与功能,如自动/手动模式、亮度调节等 | 按键输入 | 控制灯光亮度、模式、定时等 |
液晶显示 | 显示系统状态、光线强度、当前亮度、模式等 | 传感器数据 | 实时显示数据 |
蓝牙控制 | 通过手机APP控制灯光功能 | 蓝牙信号 | 控制灯光的开关、亮度等 |
云端数据上传 | 将设备数据上传至华为云物联网平台 | 设备传感器数据 | 云端数据存储与展示 |
服务器管理 | 后端服务器接收并展示数据,支持设备状态控制 | 设备数据 | 可视化网页、设备控制 |
3. 项目硬件模块组成
3.1 硬件组成
- 1. 主控芯片:STM32F103RCT6
- • 用于控制整个系统的核心部分,包括各个传感器的读取、信号处理、控制输出、液晶显示等。
- 2. 人体红外传感器
- • 用于检测教室内是否有人,当检测到人时,发送信号给主控芯片以控制灯光的开关。
- 3. 光敏传感器(LDR)
- • 用于检测环境的光照强度,根据外界的光照变化自动调节灯光的亮度。
- 4. LED灯条
- • 通过PWM信号调节灯光的亮度。根据光敏传感器的采集值和控制模式自动调整亮度。
- 5. 按键
- • 用于控制系统的手动功能,如模式切换、亮度调节、定时控制、灯色变化等。
- 6. HC-05蓝牙模块
- • 实现与手机APP的无线通信,用于远程控制灯光的开关、亮度调节等。
- 7. 液晶显示屏(LCD)
- • 用于实时显示当前的工作模式、光线强度、灯光亮度等信息。
- 8. WIFI模块(ESP8266)
- • 实现WIFI连接和数据上传功能,通过MQTT协议将数据上传至华为云物联网平台。
- 9. 蜂鸣器
- • 用于提供音频反馈,例如提醒用户操作成功或者警告用户异常情况。
- 10. 电源模块
- • 提供5V稳定电源,支持整个系统的正常运行。
3.2 硬件连接
- • STM32F103RCT6与传感器连接:通过GPIO引脚连接红外传感器、光敏传感器、按键等模块,并使用ADC进行模拟信号的采集。
- • LED灯条连接:通过PWM信号调节LED灯条的亮度,GPIO控制灯条的开关。
- • HC-05蓝牙模块与STM32连接:使用UART通信进行数据传输。
- • ESP8266与STM32连接:通过UART与STM32通信,负责WIFI连接和数据上传。
4. 设计思路
4.1 系统设计
- 1. 系统初始化:
- • 系统上电后,STM32F103RCT6主控芯片初始化所有外设:红外传感器、光敏传感器、LED灯条、按键、LCD显示屏等模块。
- 2. 模式判断与控制:
- • 通过按键选择自动模式或手动模式。
- • 在自动模式下,系统根据红外传感器判断是否有人,当有人的时候开启灯光,没人时关闭灯光;同时,系统根据光敏传感器采集的光线亮度自动调节LED灯条的亮度。
- • 在手动模式下,用户可以通过按键或蓝牙APP手动调节亮度、灯色等。
- 3. 数据上传与云端管理:
- • 系统通过ESP8266与华为云物联网平台进行连接,定期上传设备状态数据,包括当前的亮度、光线强度、模式、开关状态等。
- 4. 手机APP控制:
- • 用户可以通过蓝牙与系统通信,远程控制灯光的开关、亮度、模式等。
4.2 软件设计
- 1. 主循环:
- • 监测各个传感器的输入信号,并根据模式选择进行不同的控制。
- • 根据按键输入切换模式,调节亮度,控制灯光的开关等。
- • 将实时数据上传至华为云物联网平台。
- 2. 灯光调节算法:
- • 基于光敏传感器的值,采用线性映射关系调整LED灯条的亮度,确保环境光线适宜。
- 3. MQTT协议实现:
- • 通过WIFI模块与物联网平台连接,使用MQTT协议进行数据上传和设备状态控制。
5. 使用
的模块技术详情介绍
5.1 STM32F103RCT6
STM32F103RCT6是一款基于ARM Cortex-M3内核的32位微控制器,具有较强的处理能力和丰富的外设支持,适合用于本项目中进行传感器数据采集、信号处理及控制任务。
5.2 HC-05蓝牙模块
HC-05是一款低功耗蓝牙模块,支持串口通信,可以通过蓝牙与手机APP进行数据交换。适用于本项目中的无线控制功能。
5.3 ESP8266 WIFI模块
ESP8266是一款集成了TCP/IP协议栈的低成本Wi-Fi模块,通过UART与STM32通信,负责将设备的数据上传至云平台。
5.4 光敏传感器(LDR)
光敏传感器是一种能够根据光照强度变化输出相应电压的传感器,用于采集当前环境的光线强度,以实现灯光亮度的自动调节。
6. 总结
6.1 系统优势
- • 节能高效:通过人体红外传感器和光敏传感器智能控制灯光开关和亮度调节,有效降低能源浪费。
- • 智能化:通过按键和手机APP远程控制,系统能够根据不同需求灵活调节,实现自动化管理。
- • 云端管理:支持数据上传至云端,用户可以通过网页查看历史数据并进行控制。
6.2 后续改进
- • 扩展功能:未来可以加入更多传感器,如温湿度传感器、PM2.5传感器等,以实现更全面的环境监测。
- • 移动端优化:进一步优化手机APP的用户体验,增加更多控制功能。
7. STM32程序设计
在本项目中,已经完成了其他模块的代码(如红外传感器、光敏传感器、LED灯控制、按键控制、蓝牙通信等模块的功能实现),下面给出一个完整的 main.c
文件,该文件主要实现了STM32单片机的主程序功能,并与各子模块进行连接和交互。
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);
}
代码分析
- 1. 系统初始化 (
System_Init
): - • 初始化了系统中所有的硬件,包括LCD显示、传感器、蓝牙模块、MQTT客户端等。
- 2. 传感器数据采集 (
System_Update
): - • 获取各个传感器(如红外传感器、光敏传感器、温度传感器)的数据,并根据自动/手动模式控制灯光的开关和亮度。
- • 若温度超过设定阈值(37.3℃),触发蜂鸣器报警并在LCD显示上显示警告。
- 3. 灯光控制 (
Light_Control
): - • 在自动模式下,系统根据红外传感器的状态(是否有人员进入)自动控制灯光的开关,同时根据环境光强度调节灯光亮度。
- 4. 蓝牙控制 (
Bluetooth_Control
): - • 通过蓝牙模块与手机APP进行通信,接收并执行控制命令(如开关灯、调节亮度等)。
- 5. 数据上传 (
Upload_Data_To_Cloud
): - • 通过MQTT协议将系统数据上传到华为云物联网平台,用于远程数据存储与分析。
结语
这段代码实现了一个基于STM32的教室节能照明系统的核心功能,集成了人体红外传感器、光敏传感器、蓝牙控制、温度监测、MQTT物联网上传等模块。可以根据不同的环境需求自动调整灯光状态,同时还支持手动调节和远程控制。
- 点赞
- 收藏
- 关注作者
评论(0)