1. 項(xiàng)目開發(fā)背景
1.1 項(xiàng)目背景
隨著城市化進(jìn)程的不斷推進(jìn),建筑物能源消耗問題日益突出,尤其是辦公室、教室等公共場所的照明系統(tǒng)在無人的情況下仍然長時(shí)間處于開啟狀態(tài),導(dǎo)致了不必要的能源浪費(fèi)。因此,設(shè)計(jì)一款節(jié)能照明系統(tǒng),以減少能源浪費(fèi),實(shí)現(xiàn)智能化管理,已經(jīng)成為許多建筑項(xiàng)目和智能家居中的必要組成部分。
傳統(tǒng)的照明控制系統(tǒng)往往依賴人工手動(dòng)開關(guān),這不僅增加了能源浪費(fèi),也容易出現(xiàn)因?yàn)橥涥P(guān)燈而產(chǎn)生的資源浪費(fèi)。此外,隨著LED照明技術(shù)的成熟,亮度調(diào)節(jié)、色溫調(diào)節(jié)和定時(shí)控制等功能成為了現(xiàn)代照明控制系統(tǒng)中的關(guān)鍵需求。
本項(xiàng)目基于STM32單片機(jī)設(shè)計(jì)一款教室節(jié)能照明系統(tǒng),結(jié)合人體紅外傳感器、光敏傳感器、藍(lán)牙控制、液晶顯示屏和華為云物聯(lián)網(wǎng)平臺(tái),旨在實(shí)現(xiàn)智能化、節(jié)能化的照明控制。該系統(tǒng)不僅能夠根據(jù)教室內(nèi)的人員數(shù)量智能開關(guān)燈,還可以根據(jù)外界光線變化自動(dòng)調(diào)節(jié)燈光亮度,并支持手動(dòng)調(diào)節(jié)亮度和燈光顏色。同時(shí),通過藍(lán)牙模塊與手機(jī)APP連接,實(shí)現(xiàn)遠(yuǎn)程控制功能,進(jìn)一步提升使用便捷性。
1.2 項(xiàng)目目標(biāo)
- 通過人體紅外傳感器判斷環(huán)境是否有人,當(dāng)有人時(shí)自動(dòng)開啟燈光,沒人時(shí)自動(dòng)關(guān)閉燈光。
- 利用光敏傳感器采集環(huán)境光照強(qiáng)度,自動(dòng)調(diào)節(jié)LED燈條的亮度,以適應(yīng)當(dāng)前環(huán)境的光線變化。
- 通過按鍵控制不同的功能,如自動(dòng)/手動(dòng)模式切換、亮度調(diào)節(jié)、燈色變化、定時(shí)關(guān)燈等。
- 實(shí)現(xiàn)液晶顯示,實(shí)時(shí)顯示系統(tǒng)的工作狀態(tài)、環(huán)境光線、當(dāng)前亮度等信息。
- 通過藍(lán)牙模塊與手機(jī)APP連接,進(jìn)行燈光的遠(yuǎn)程控制。
- 支持?jǐn)?shù)據(jù)上云,連接華為云物聯(lián)網(wǎng)平臺(tái),上傳燈光控制數(shù)據(jù)并進(jìn)行數(shù)據(jù)存儲(chǔ)與歷史分析。
2. 設(shè)計(jì)實(shí)現(xiàn)的功能
2.1 功能概述
- 智能燈光控制:當(dāng)人體紅外傳感器檢測到有人時(shí),自動(dòng)開啟燈光;當(dāng)無人時(shí)自動(dòng)關(guān)閉燈光。
- 亮度調(diào)節(jié):通過光敏傳感器實(shí)時(shí)監(jiān)測環(huán)境光線強(qiáng)度,自動(dòng)調(diào)節(jié)LED燈條的亮度,確保室內(nèi)光線適宜。
- 模式選擇與控制:通過按鍵選擇燈光控制模式(自動(dòng)/手動(dòng))、亮度調(diào)節(jié)、燈光顏色切換(白光/黃光/暖白)、定時(shí)關(guān)燈等功能。
- 液晶顯示:實(shí)時(shí)顯示當(dāng)前模式、環(huán)境光線強(qiáng)度、當(dāng)前亮度、燈光顏色等信息。
- 藍(lán)牙控制:通過HC-05藍(lán)牙模塊實(shí)現(xiàn)與手機(jī)APP的無線通信,用戶可以通過APP遠(yuǎn)程控制燈光的開關(guān)、亮度、定時(shí)等。
- 云端數(shù)據(jù)上傳:通過WIFI模塊和MQTT協(xié)議將設(shè)備數(shù)據(jù)上傳至華為云物聯(lián)網(wǎng)平臺(tái),進(jìn)行數(shù)據(jù)存儲(chǔ)、歷史數(shù)據(jù)展示和分析。
- 服務(wù)器功能:采用Python作為后端開發(fā)語言,接收物聯(lián)網(wǎng)平臺(tái)傳輸?shù)脑O(shè)備數(shù)據(jù),并通過HTML頁面展示和控制設(shè)備狀態(tài)。
2.2 系統(tǒng)功能總結(jié)表
功能模塊 | 描述 | 輸入 | 輸出 |
---|---|---|---|
人體紅外傳感器 | 判斷當(dāng)前是否有人員進(jìn)入教室 | 紅外傳感器信號(hào) | 自動(dòng)開關(guān)燈 |
光敏傳感器 | 采集環(huán)境光線強(qiáng)度并調(diào)節(jié)燈光亮度 | 環(huán)境光線強(qiáng)度 | 調(diào)節(jié)LED燈光亮度 |
按鍵控制 | 用戶通過按鍵選擇不同模式與功能,如自動(dòng)/手動(dòng)模式、亮度調(diào)節(jié)等 | 按鍵輸入 | 控制燈光亮度、模式、定時(shí)等 |
液晶顯示 | 顯示系統(tǒng)狀態(tài)、光線強(qiáng)度、當(dāng)前亮度、模式等 | 傳感器數(shù)據(jù) | 實(shí)時(shí)顯示數(shù)據(jù) |
藍(lán)牙控制 | 通過手機(jī)APP控制燈光功能 | 藍(lán)牙信號(hào) | 控制燈光的開關(guān)、亮度等 |
云端數(shù)據(jù)上傳 | 將設(shè)備數(shù)據(jù)上傳至華為云物聯(lián)網(wǎng)平臺(tái) | 設(shè)備傳感器數(shù)據(jù) | 云端數(shù)據(jù)存儲(chǔ)與展示 |
服務(wù)器管理 | 后端服務(wù)器接收并展示數(shù)據(jù),支持設(shè)備狀態(tài)控制 | 設(shè)備數(shù)據(jù) | 可視化網(wǎng)頁、設(shè)備控制 |
3. 項(xiàng)目硬件模塊組成
3.1 硬件組成
- 主控芯片:STM32F103RCT6
- 用于控制整個(gè)系統(tǒng)的核心部分,包括各個(gè)傳感器的讀取、信號(hào)處理、控制輸出、液晶顯示等。
- 人體紅外傳感器
- 用于檢測教室內(nèi)是否有人,當(dāng)檢測到人時(shí),發(fā)送信號(hào)給主控芯片以控制燈光的開關(guān)。
- 光敏傳感器(LDR)
- 用于檢測環(huán)境的光照強(qiáng)度,根據(jù)外界的光照變化自動(dòng)調(diào)節(jié)燈光的亮度。
- LED燈條
- 通過PWM信號(hào)調(diào)節(jié)燈光的亮度。根據(jù)光敏傳感器的采集值和控制模式自動(dòng)調(diào)整亮度。
- 按鍵
- 用于控制系統(tǒng)的手動(dòng)功能,如模式切換、亮度調(diào)節(jié)、定時(shí)控制、燈色變化等。
- HC-05藍(lán)牙模塊
- 實(shí)現(xiàn)與手機(jī)APP的無線通信,用于遠(yuǎn)程控制燈光的開關(guān)、亮度調(diào)節(jié)等。
- 液晶顯示屏(LCD)
- 用于實(shí)時(shí)顯示當(dāng)前的工作模式、光線強(qiáng)度、燈光亮度等信息。
- WIFI模塊(ESP8266)
- 實(shí)現(xiàn)WIFI連接和數(shù)據(jù)上傳功能,通過MQTT協(xié)議將數(shù)據(jù)上傳至華為云物聯(lián)網(wǎng)平臺(tái)。
- 蜂鳴器
- 用于提供音頻反饋,例如提醒用戶操作成功或者警告用戶異常情況。
- 電源模塊
- 提供5V穩(wěn)定電源,支持整個(gè)系統(tǒng)的正常運(yùn)行。
3.2 硬件連接
- STM32F103RCT6與傳感器連接:通過GPIO引腳連接紅外傳感器、光敏傳感器、按鍵等模塊,并使用ADC進(jìn)行模擬信號(hào)的采集。
- LED燈條連接:通過PWM信號(hào)調(diào)節(jié)LED燈條的亮度,GPIO控制燈條的開關(guān)。
- HC-05藍(lán)牙模塊與STM32連接:使用UART通信進(jìn)行數(shù)據(jù)傳輸。
- ESP8266與STM32連接:通過UART與STM32通信,負(fù)責(zé)WIFI連接和數(shù)據(jù)上傳。
4. 設(shè)計(jì)思路
4.1 系統(tǒng)設(shè)計(jì)
- 系統(tǒng)初始化:
- 系統(tǒng)上電后,STM32F103RCT6主控芯片初始化所有外設(shè):紅外傳感器、光敏傳感器、LED燈條、按鍵、LCD顯示屏等模塊。
- 模式判斷與控制:
- 通過按鍵選擇自動(dòng)模式或手動(dòng)模式。
- 在自動(dòng)模式下,系統(tǒng)根據(jù)紅外傳感器判斷是否有人,當(dāng)有人的時(shí)候開啟燈光,沒人時(shí)關(guān)閉燈光;同時(shí),系統(tǒng)根據(jù)光敏傳感器采集的光線亮度自動(dòng)調(diào)節(jié)LED燈條的亮度。
- 在手動(dòng)模式下,用戶可以通過按鍵或藍(lán)牙APP手動(dòng)調(diào)節(jié)亮度、燈色等。
- 數(shù)據(jù)上傳與云端管理:
- 系統(tǒng)通過ESP8266與華為云物聯(lián)網(wǎng)平臺(tái)進(jìn)行連接,定期上傳設(shè)備狀態(tài)數(shù)據(jù),包括當(dāng)前的亮度、光線強(qiáng)度、模式、開關(guān)狀態(tài)等。
- 手機(jī)APP控制:
- 用戶可以通過藍(lán)牙與系統(tǒng)通信,遠(yuǎn)程控制燈光的開關(guān)、亮度、模式等。
4.2 軟件設(shè)計(jì)
- 主循環(huán):
- 監(jiān)測各個(gè)傳感器的輸入信號(hào),并根據(jù)模式選擇進(jìn)行不同的控制。
- 根據(jù)按鍵輸入切換模式,調(diào)節(jié)亮度,控制燈光的開關(guān)等。
- 將實(shí)時(shí)數(shù)據(jù)上傳至華為云物聯(lián)網(wǎng)平臺(tái)。
- 燈光調(diào)節(jié)算法:
- 基于光敏傳感器的值,采用線性映射關(guān)系調(diào)整LED燈條的亮度,確保環(huán)境光線適宜。
- MQTT協(xié)議實(shí)現(xiàn):
- 通過WIFI模塊與物聯(lián)網(wǎng)平臺(tái)連接,使用MQTT協(xié)議進(jìn)行數(shù)據(jù)上傳和設(shè)備狀態(tài)控制。
5. 使用
的模塊技術(shù)詳情介紹
5.1 STM32F103RCT6
STM32F103RCT6是一款基于ARM Cortex-M3內(nèi)核的32位微控制器,具有較強(qiáng)的處理能力和豐富的外設(shè)支持,適合用于本項(xiàng)目中進(jìn)行傳感器數(shù)據(jù)采集、信號(hào)處理及控制任務(wù)。
5.2 HC-05藍(lán)牙模塊
HC-05是一款低功耗藍(lán)牙模塊,支持串口通信,可以通過藍(lán)牙與手機(jī)APP進(jìn)行數(shù)據(jù)交換。適用于本項(xiàng)目中的無線控制功能。
5.3 ESP8266 WIFI模塊
ESP8266是一款集成了TCP/IP協(xié)議棧的低成本Wi-Fi模塊,通過UART與STM32通信,負(fù)責(zé)將設(shè)備的數(shù)據(jù)上傳至云平臺(tái)。
5.4 光敏傳感器(LDR)
光敏傳感器是一種能夠根據(jù)光照強(qiáng)度變化輸出相應(yīng)電壓的傳感器,用于采集當(dāng)前環(huán)境的光線強(qiáng)度,以實(shí)現(xiàn)燈光亮度的自動(dòng)調(diào)節(jié)。
6. 總結(jié)
6.1 系統(tǒng)優(yōu)勢(shì)
- 節(jié)能高效:通過人體紅外傳感器和光敏傳感器智能控制燈光開關(guān)和亮度調(diào)節(jié),有效降低能源浪費(fèi)。
- 智能化:通過按鍵和手機(jī)APP遠(yuǎn)程控制,系統(tǒng)能夠根據(jù)不同需求靈活調(diào)節(jié),實(shí)現(xiàn)自動(dòng)化管理。
- 云端管理:支持?jǐn)?shù)據(jù)上傳至云端,用戶可以通過網(wǎng)頁查看歷史數(shù)據(jù)并進(jìn)行控制。
6.2 后續(xù)改進(jìn)
- 擴(kuò)展功能:未來可以加入更多傳感器,如溫濕度傳感器、PM2.5傳感器等,以實(shí)現(xiàn)更全面的環(huán)境監(jiān)測。
- 移動(dòng)端優(yōu)化:進(jìn)一步優(yōu)化手機(jī)APP的用戶體驗(yàn),增加更多控制功能。
7. STM32程序設(shè)計(jì)
在本項(xiàng)目中,已經(jīng)完成了其他模塊的代碼(如紅外傳感器、光敏傳感器、LED燈控制、按鍵控制、藍(lán)牙通信等模塊的功能實(shí)現(xiàn)),下面給出一個(gè)完整的 main.c
文件,該文件主要實(shí)現(xiàn)了STM32單片機(jī)的主程序功能,并與各子模塊進(jìn)行連接和交互。
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 // 高溫報(bào)警閾值(假設(shè)單位為攝氏度)
#define AUTO_MODE 1
#define MANUAL_MODE 2
// 定義全局變量
uint8_t current_mode = AUTO_MODE; // 當(dāng)前工作模式(自動(dòng)模式為1,手動(dòng)模式為2)
uint8_t light_status = 0; // 當(dāng)前燈光狀態(tài)(0:關(guān),1:開)
uint8_t light_brightness = 50; // 當(dāng)前燈光亮度(0到100)
uint8_t light_color = 1; // 當(dāng)前燈光顏色(1:白色,2:黃色,3:暖白色)
// 定義系統(tǒng)狀態(tài)
float ambient_light = 0.0; // 當(dāng)前環(huán)境光強(qiáng)度(從光敏傳感器獲?。?
uint8_t is_person_present = 0; // 是否有人員進(jìn)入(從紅外傳感器獲取)
float current_temperature = 0.0; // 當(dāng)前檢測溫度(從溫度傳感器獲?。?
// 函數(shù)聲明
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);
// 主函數(shù)
int main(void)
{
// 初始化系統(tǒng)
HAL_Init();
System_Init();
// 主循環(huán)
while (1)
{
// 1. 獲取傳感器數(shù)據(jù)
ambient_light = Get_Ambient_Light(); // 獲取環(huán)境光線強(qiáng)度
is_person_present = Get_Person_Present(); // 獲取紅外傳感器狀態(tài)
current_temperature = Get_Temperature(); // 獲取當(dāng)前溫度
// 2. 根據(jù)工作模式控制燈光
Light_Control();
// 3. 根據(jù)按鍵進(jìn)行控制
current_mode = Keypad_Scan(); // 掃描按鍵,獲取用戶輸入的模式選擇
// 4. 藍(lán)牙控制
Bluetooth_Control(); // 檢查是否有藍(lán)牙控制信號(hào)
// 5. 上傳數(shù)據(jù)到云
Upload_Data_To_Cloud();
}
}
// 系統(tǒng)初始化
void System_Init(void)
{
// 初始化外設(shè)
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 按鍵、LED等的GPIO初始化
LCD_Init(); // 初始化LCD顯示
Sensor_Init(); // 初始化傳感器
Bluetooth_Init(); // 初始化藍(lán)牙模塊
MQTT_Init(); // 初始化MQTT客戶端(物聯(lián)網(wǎng)上傳)
HAL_UART_Init(&huart1); // 初始化串口,用于藍(lán)牙和調(diào)試
}
// 系統(tǒng)更新函數(shù):根據(jù)傳感器數(shù)據(jù)動(dòng)態(tài)控制系統(tǒng)狀態(tài)
void System_Update(void)
{
// 獲取傳感器數(shù)據(jù)
ambient_light = Get_Ambient_Light();
is_person_present = Get_Person_Present();
current_temperature = Get_Temperature();
// 控制燈光的開關(guān)和亮度
if (current_mode == AUTO_MODE)
{
if (is_person_present)
{
// 如果有人的話,開啟燈光
if (!light_status)
{
Turn_On_Light(); // 開燈
light_status = 1;
}
}
else
{
// 如果沒人,關(guān)閉燈光
if (light_status)
{
Turn_Off_Light(); // 關(guān)燈
light_status = 0;
}
}
// 調(diào)節(jié)燈光亮度
light_brightness = (uint8_t)(100 - ambient_light); // 假設(shè)光敏傳感器值為0-100,亮度值反比
Set_Light_Brightness(light_brightness);
}
else if (current_mode == MANUAL_MODE)
{
// 手動(dòng)模式下,允許用戶控制燈光的亮度和顏色
light_brightness = Keypad_Get_Brightness(); // 獲取用戶設(shè)置的亮度
light_color = Keypad_Get_Color(); // 獲取用戶設(shè)置的顏色
Set_Light_Brightness(light_brightness);
Set_Light_Color(light_color);
}
// 溫度檢測
if (current_temperature > TEMPERATURE_THRESHOLD)
{
Beep(); // 蜂鳴器報(bào)警
LCD_Display_String("High Temperature Alert!"); // 顯示溫度警告信息
}
else
{
LCD_Clear();
}
}
// 燈光控制函數(shù)
void Light_Control(void)
{
// 自動(dòng)模式下燈光的開關(guān)與亮度調(diào)節(jié)
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;
}
}
}
}
// 藍(lán)牙控制
void Bluetooth_Control(void)
{
uint8_t command = Bluetooth_Receive_Command();
if (command != 0)
{
// 根據(jù)接收到的藍(lán)牙命令進(jìn)行控制
if (command == 1) // 開燈
{
Turn_On_Light();
light_status = 1;
}
else if (command == 2) // 關(guān)燈
{
Turn_Off_Light();
light_status = 0;
}
else if (command == 3) // 調(diào)節(jié)亮度
{
light_brightness = Bluetooth_Get_Brightness();
Set_Light_Brightness(light_brightness);
}
}
}
// 上傳數(shù)據(jù)到云
void Upload_Data_To_Cloud(void)
{
// 使用MQTT協(xié)議上傳數(shù)據(jù)到華為云物聯(lián)網(wǎng)平臺(tái)
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);
}
代碼分析
- 系統(tǒng)初始化 (
System_Init
):- 初始化了系統(tǒng)中所有的硬件,包括LCD顯示、傳感器、藍(lán)牙模塊、MQTT客戶端等。
- 傳感器數(shù)據(jù)采集 (
System_Update
):- 獲取各個(gè)傳感器(如紅外傳感器、光敏傳感器、溫度傳感器)的數(shù)據(jù),并根據(jù)自動(dòng)/手動(dòng)模式控制燈光的開關(guān)和亮度。
- 若溫度超過設(shè)定閾值(37.3℃),觸發(fā)蜂鳴器報(bào)警并在LCD顯示上顯示警告。
- 燈光控制 (
Light_Control
):- 在自動(dòng)模式下,系統(tǒng)根據(jù)紅外傳感器的狀態(tài)(是否有人員進(jìn)入)自動(dòng)控制燈光的開關(guān),同時(shí)根據(jù)環(huán)境光強(qiáng)度調(diào)節(jié)燈光亮度。
- 藍(lán)牙控制 (
Bluetooth_Control
):- 通過藍(lán)牙模塊與手機(jī)APP進(jìn)行通信,接收并執(zhí)行控制命令(如開關(guān)燈、調(diào)節(jié)亮度等)。
- 數(shù)據(jù)上傳 (
Upload_Data_To_Cloud
):- 通過MQTT協(xié)議將系統(tǒng)數(shù)據(jù)上傳到華為云物聯(lián)網(wǎng)平臺(tái),用于遠(yuǎn)程數(shù)據(jù)存儲(chǔ)與分析。
結(jié)語
這段代碼實(shí)現(xiàn)了一個(gè)基于STM32的教室節(jié)能照明系統(tǒng)的核心功能,集成了人體紅外傳感器、光敏傳感器、藍(lán)牙控制、溫度監(jiān)測、MQTT物聯(lián)網(wǎng)上傳等模塊??梢愿鶕?jù)不同的環(huán)境需求自動(dòng)調(diào)整燈光狀態(tài),同時(shí)還支持手動(dòng)調(diào)節(jié)和遠(yuǎn)程控制。