一、項目背景
智能家居設備在現代生活中起著越來越重要的作用。智能臺燈作為其中的一種,具有調節(jié)光照亮度、色溫等功能,更加符合人們對于光照環(huán)境的個性化需求。當前設計一款基于STM32微控制器設計的智能臺燈,該臺燈具備可調節(jié)亮度和色溫的特點,為用戶提供了更加舒適的使用體驗。
二、設計目標
【1】實現燈光的亮度和色溫的可調節(jié)功能;
【2】添加人體感應模塊,實現自動開關燈;
【3】實現手機遠程控制燈光的功能;
【4】設計簡潔、穩(wěn)定的硬件電路和用戶友好的操作界面。
三、系統(tǒng)架構
3.1 硬件部分
** (1) 主控芯片:選用STM32系列微控制器,具有豐富的外設資源和強大的處理能力;**
** (2) 電源部分:采用穩(wěn)壓電源模塊,提供適宜電壓的供電;**
** (3) 光源部分:選擇高亮度LED作為光源,配備透明燈罩,提供均勻柔和的光照; **
**(4) 人體感應模塊:采用紅外傳感器,檢測到人體活動時自動開啟燈光; **
(5) 無線通信模塊:使用WiFi或藍牙模塊,實現手機遠程控制。
3.2 軟件部分
(1) 嵌入式軟件:使用Keil MDK作為開發(fā)環(huán)境,編寫嵌入式C語言程序,實現燈光亮度和色溫的調節(jié)、人體感應控制等功能;
** (2) 手機控制端:設計并開發(fā)手機App,通過與智能臺燈連接,實現遠程控制燈光的功能。**
3.3 硬件選型說明
【1】主控芯片:
采用STM32F103RCT6
【2】光源部分:
** (1) 高亮度LED:選擇高亮度、節(jié)能的LED作為光源,推薦選擇LED燈珠。**
** (2) 透明燈罩:選擇高透光性的材料制作燈罩,保證光照均勻柔和。**
【3】人體感應模塊:
(1) 紅外傳感器:選擇靈敏度較高的紅外傳感器,能夠快速、準確地檢測到人體活動。
** (2) 光敏電阻:用于在光線不足時自動開啟臺燈,確保人體感應功能的正常工作。**
【4】無線通信模塊
選擇HC05藍牙模塊,以便與手機設備進行通信。
3.4 硬件設計
【1】主控芯片選擇:STM32F103RCT6,具有較高的性能和豐富的外設資源,適合作為智能臺燈的核心處理器;
【2】人體紅外傳感器:用于檢測周圍是否有人靠近;
【3】光敏傳感器:用于檢測環(huán)境光的強度;
【4】LED燈:作為臺燈的光源,通過PWM控制其亮度;
【5】HC05藍牙模塊:用于與手機APP通信,接收控制命令并發(fā)送狀態(tài)信息。
3.5 軟件設計
【1】GPIO配置:配置主控芯片的GPIO引腳,包括人體紅外傳感器輸入引腳、光敏傳感器輸入引腳和LED燈控制引腳等;
【2】外部中斷配置:通過外部中斷來監(jiān)聽人體紅外感應引腳的狀態(tài)變化,在觸發(fā)時進行相應操作;
【3】PWM配置:使用PWM控制LED燈的亮度,根據光敏傳感器檢測到的環(huán)境光強度動態(tài)調整PWM輸出占空比;
【4】藍牙通信:通過UART配置HC05藍牙模塊,與手機APP建立藍牙連接,接收控制命令并發(fā)送臺燈狀態(tài)信息;
【5】主循環(huán)邏輯:在主循環(huán)中實時檢測光敏傳感器的數據以及人體紅外感應引腳的狀態(tài),并根據相應條件進行臺燈的開啟和關閉操作;同時,檢測藍牙模塊接收到的控制命令,并根據命令內容進行相應操作。
四、主要功能實現
【1】光照調節(jié)功能: 通過按鍵或旋鈕操作,調節(jié)臺燈光照的亮度和色溫。亮度調節(jié)通過PWM控制LED的亮度,色溫調節(jié)通過調節(jié)白光LED和彩光LED的相對亮度來實現。
【2】人體感應控制: 采用紅外傳感器,檢測到人體活動后自動開啟燈光,一段時間內沒有人活動則自動關閉。
【3】遠程控制功能: 手機App與智能臺燈通過藍牙通信,用戶可以通過App控制燈光的開關、亮度和色溫,實現遠程控制功能。
五、代碼實現
仿真工程代碼下載: [https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?from=from_copylink]
5.1 PWM波形控制LED燈亮度
include "stm32f10x.h"
?
void PWM_Configuration(void);
void Delay(__IO uint32_t nCount);
?
int main(void) {
PWM_Configuration();
?
while (1) {
// 逐漸增加LED亮度
for (uint16_t i = 0; i <= 1000; i++) {
TIM_SetCompare1(TIM2, i); // 設置PWM占空比,范圍:0-1000
Delay(5000); // 延時一段時間
}
?
// 逐漸減小LED亮度
for (uint16_t i = 1000; i > 0; i--) {
TIM_SetCompare1(TIM2, i);
Delay(5000);
}
}
}
?
void PWM_Configuration(void) {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
?
// 配置GPIO口
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
?
// 配置TIM2為PWM模式
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
?
TIM_TimeBaseStructure.TIM_Period = 1000; // 設置周期
TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1; // 設置預分頻
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
?
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // PWM模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0; // 初始占空比為0
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM2, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
?
TIM_Cmd(TIM2, ENABLE); // 使能TIM2
}
?
void Delay(__IO uint32_t nCount) {
for (; nCount != 0; nCount--);
}
代碼中使用了STM32的定時器TIM2和GPIOA的第0號引腳(PA0)來控制LED燈的亮度。在主函數中,通過循環(huán)逐漸增加和減小PWM的占空比,從而改變LED燈的亮度。
5.2 智能臺燈邏輯代碼
// 引入所需的庫
#include < stdio.h >
#include < stdbool.h >
?
// 定義引腳和設備地址
#define PIR_SENSOR_PIN 2
#define LIGHT_SENSOR_PIN 3
#define LED_PIN 4
#define HC05_BAUD_RATE 9600
?
// 聲明全局變量
bool isPersonDetected = false;
int lightIntensity = 0;
?
// 初始化函數
void setup() {
// 配置引腳模式
pinMode(PIR_SENSOR_PIN, INPUT);
pinMode(LIGHT_SENSOR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
?
// 初始化串口通信
Serial.begin(HC05_BAUD_RATE);
}
?
// 主循環(huán)函數
void loop() {
// 檢測人體紅外感應
if (digitalRead(PIR_SENSOR_PIN) == HIGH) {
isPersonDetected = true;
} else {
isPersonDetected = false;
}
?
// 檢測光敏傳感器
lightIntensity = analogRead(LIGHT_SENSOR_PIN);
?
// 根據條件控制臺燈
if (isPersonDetected && lightIntensity < 500) {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
?
// 處理藍牙通信
if (Serial.available()) {
char command = Serial.read();
handleBluetoothCommand(command);
}
}
?
// 處理藍牙命令函數
void handleBluetoothCommand(char command) {
// 處理從手機APP發(fā)送來的命令,例如控制臺燈亮度
}
?
// 主函數
int main() {
setup(); // 初始化
while (1) {
loop(); // 主循環(huán)
}
return 0;
}
六、總結
當前文章介紹了基于STM32F103RCT6主控芯片的智能臺燈的設計過程和實現原理。通過集成人體紅外感應、光敏檢測和與手機APP連接的功能,實現了臺燈的自動開關和亮度調節(jié)等智能化操作。通過手機APP與藍牙模塊的連接,用戶可以遠程控制臺燈的開關、亮度和模式等,提供了更加方便和智能化的使用體驗。
審核編輯 黃宇
-
STM32
+關注
關注
2270文章
10895瀏覽量
355715 -
智能臺燈
+關注
關注
9文章
83瀏覽量
21020
發(fā)布評論請先 登錄
相關推薦
評論