一、項目背景
智能家居設備在現代生活中起著越來越重要的作用。智能臺燈作為其中的一種,具有調節光照亮度、色溫等功能,更加符合人們對于光照環境的個性化需求。當前設計一款基于STM32微控制器設計的智能臺燈,該臺燈具備可調節亮度和色溫的特點,為用戶提供了更加舒適的使用體驗。
二、設計目標
【1】實現燈光的亮度和色溫的可調節功能;
【2】添加人體感應模塊,實現自動開關燈;
【3】實現手機遠程控制燈光的功能;
【4】設計簡潔、穩定的硬件電路和用戶友好的操作界面。
三、系統架構
3.1 硬件部分
** (1) 主控芯片:選用STM32系列微控制器,具有豐富的外設資源和強大的處理能力;**
** (2) 電源部分:采用穩壓電源模塊,提供適宜電壓的供電;**
** (3) 光源部分:選擇高亮度LED作為光源,配備透明燈罩,提供均勻柔和的光照; **
**(4) 人體感應模塊:采用紅外傳感器,檢測到人體活動時自動開啟燈光; **
(5) 無線通信模塊:使用WiFi或藍牙模塊,實現手機遠程控制。
3.2 軟件部分
(1) 嵌入式軟件:使用Keil MDK作為開發環境,編寫嵌入式C語言程序,實現燈光亮度和色溫的調節、人體感應控制等功能;
** (2) 手機控制端:設計并開發手機App,通過與智能臺燈連接,實現遠程控制燈光的功能。**
3.3 硬件選型說明
【1】主控芯片:
采用STM32F103RCT6
【2】光源部分:
** (1) 高亮度LED:選擇高亮度、節能的LED作為光源,推薦選擇LED燈珠。**
** (2) 透明燈罩:選擇高透光性的材料制作燈罩,保證光照均勻柔和。**
【3】人體感應模塊:
(1) 紅外傳感器:選擇靈敏度較高的紅外傳感器,能夠快速、準確地檢測到人體活動。
** (2) 光敏電阻:用于在光線不足時自動開啟臺燈,確保人體感應功能的正常工作。**
【4】無線通信模塊
選擇HC05藍牙模塊,以便與手機設備進行通信。
3.4 硬件設計
【1】主控芯片選擇:STM32F103RCT6,具有較高的性能和豐富的外設資源,適合作為智能臺燈的核心處理器;
【2】人體紅外傳感器:用于檢測周圍是否有人靠近;
【3】光敏傳感器:用于檢測環境光的強度;
【4】LED燈:作為臺燈的光源,通過PWM控制其亮度;
【5】HC05藍牙模塊:用于與手機APP通信,接收控制命令并發送狀態信息。
3.5 軟件設計
【1】GPIO配置:配置主控芯片的GPIO引腳,包括人體紅外傳感器輸入引腳、光敏傳感器輸入引腳和LED燈控制引腳等;
【2】外部中斷配置:通過外部中斷來監聽人體紅外感應引腳的狀態變化,在觸發時進行相應操作;
【3】PWM配置:使用PWM控制LED燈的亮度,根據光敏傳感器檢測到的環境光強度動態調整PWM輸出占空比;
【4】藍牙通信:通過UART配置HC05藍牙模塊,與手機APP建立藍牙連接,接收控制命令并發送臺燈狀態信息;
【5】主循環邏輯:在主循環中實時檢測光敏傳感器的數據以及人體紅外感應引腳的狀態,并根據相應條件進行臺燈的開啟和關閉操作;同時,檢測藍牙模塊接收到的控制命令,并根據命令內容進行相應操作。
四、主要功能實現
【1】光照調節功能: 通過按鍵或旋鈕操作,調節臺燈光照的亮度和色溫。亮度調節通過PWM控制LED的亮度,色溫調節通過調節白光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燈的亮度。在主函數中,通過循環逐漸增加和減小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);
}
?
// 主循環函數
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發送來的命令,例如控制臺燈亮度
}
?
// 主函數
int main() {
setup(); // 初始化
while (1) {
loop(); // 主循環
}
return 0;
}
六、總結
當前文章介紹了基于STM32F103RCT6主控芯片的智能臺燈的設計過程和實現原理。通過集成人體紅外感應、光敏檢測和與手機APP連接的功能,實現了臺燈的自動開關和亮度調節等智能化操作。通過手機APP與藍牙模塊的連接,用戶可以遠程控制臺燈的開關、亮度和模式等,提供了更加方便和智能化的使用體驗。
審核編輯 黃宇
-
STM32
+關注
關注
2266文章
10876瀏覽量
354922 -
智能臺燈
+關注
關注
9文章
82瀏覽量
21002
發布評論請先 登錄
相關推薦
評論