1. 項目開發(fā)背景
隨著人們生活節(jié)奏的加快,長時間久坐已成為現(xiàn)代人普遍存在的健康問題。久坐不僅會增加患心血管疾病、脊椎疾病等風險,還會導(dǎo)致肌肉僵硬、血液循環(huán)不暢等問題。因此,開發(fā)一種可以監(jiān)測久坐并及時提醒用戶的智能座椅,成為了現(xiàn)代智能家居和健康管理領(lǐng)域的重要需求。
本項目設(shè)計一款基于STM32單片機的智能坐墊座椅,通過集成多個傳感器和控制模塊,達到以下目的:
- 久坐監(jiān)測:通過壓力傳感器監(jiān)測座椅是否有人坐下,并在用戶久坐時發(fā)出語音提醒,幫助用戶養(yǎng)成健康的生活習慣。
- 溫濕度調(diào)控:通過溫濕度傳感器采集坐墊的環(huán)境數(shù)據(jù),根據(jù)設(shè)定的溫度范圍自動調(diào)節(jié)坐墊的加熱或散熱功能,提供舒適的坐墊體驗。
- 手動控制功能:提供按鍵控制,允許用戶手動調(diào)整加熱、散熱和久坐時長。
- 藍牙無線控制:通過HC-05藍牙模塊實現(xiàn)數(shù)據(jù)的無線傳輸,使用戶能夠通過手機APP實時監(jiān)控坐墊的狀態(tài),進行遠程控制。
項目采用STM32單片機作為核心控制器,結(jié)合多種傳感器和執(zhí)行器,通過硬件和軟件的協(xié)同工作,實現(xiàn)了上述智能功能。
2. 設(shè)計實現(xiàn)的功能
本系統(tǒng)設(shè)計的核心功能如下:
2.1 久坐監(jiān)測與提醒
- 使用壓力傳感器檢測座椅是否有人坐下,并開啟一個計時器。如果用戶持續(xù)坐著超過預(yù)定時間(如30分鐘),系統(tǒng)通過語音模塊播報提醒:“請勞逸結(jié)合,注意起身運動”。
2.2 溫濕度調(diào)節(jié)
- 通過溫濕度傳感器采集坐墊的溫度和濕度,并根據(jù)設(shè)定的范圍控制坐墊的加熱和散熱功能,確保用戶在不同環(huán)境下的舒適體驗。
- 系統(tǒng)自動控制加熱器和散熱器的開關(guān),保持合適的溫度和濕度。
2.3 手動控制功能
- 提供三路按鍵,分別用于手動控制坐墊的散熱功能、加熱功能以及久坐時長的選擇。
- 用戶可以根據(jù)自己的需求,調(diào)整坐墊的工作模式。
2.4 藍牙無線控制
- 使用HC-05藍牙模塊,用戶可以通過手機APP實現(xiàn)對坐墊狀態(tài)的遠程監(jiān)控和控制。手機APP端顯示坐墊的濕度、溫度、是否散熱、是否加熱等信息,并提供控制功能,如切換工作模式、開啟/關(guān)閉加熱散熱、設(shè)置久坐時間等。
2.5 自動按摩功能
- 系統(tǒng)通過電機驅(qū)動模塊控制座椅的按摩功能,模擬手動按摩的效果,幫助用戶放松身心,減緩久坐帶來的不適。
3. 項目硬件模塊組成
本項目的硬件模塊包括STM32單片機、壓力傳感器、溫濕度傳感器、語音播報模塊、繼電器模塊、按鍵控制模塊、OLED液晶顯示屏、HC-05藍牙模塊、電機驅(qū)動控制模塊等。
3.1 STM32單片機
- 型號:STM32F103RCT6
- 作用:作為系統(tǒng)的核心控制單元,負責處理各個傳感器的數(shù)據(jù),控制繼電器、語音模塊、藍牙模塊等外設(shè),并實現(xiàn)久坐監(jiān)測和溫濕度控制等功能。
3.2 壓力傳感器
- 型號:Fsr402
- 作用:用于檢測座椅是否有用戶坐下,根據(jù)壓力的變化來判斷用戶的坐姿狀態(tài)。
3.3 溫濕度傳感器
- 型號:SHT30
- 作用:監(jiān)測坐墊的環(huán)境溫度和濕度數(shù)據(jù),為溫濕度調(diào)節(jié)提供實時數(shù)據(jù)支持。
3.4 語音播報模塊
- 型號:DFPlayer Mini
- 作用:通過內(nèi)置的語音模塊,實現(xiàn)用戶久坐時的語音提醒功能,幫助用戶養(yǎng)成健康的生活習慣。
3.5 繼電器模塊
- 型號:2路繼電器模塊
- 作用:控制坐墊的加熱和散熱功能,當溫濕度傳感器的讀數(shù)超出設(shè)定范圍時,通過繼電器模塊控制加熱器和散熱器的開關(guān)。
3.6 按鍵控制模塊
- 類型:三路按鍵
- 作用:提供手動控制選項,允許用戶調(diào)整座椅的加熱/散熱、久坐時長等功能。
3.7 OLED液晶顯示屏
- 型號:0.96寸OLED顯示屏
- 作用:用于實時顯示當前的環(huán)境溫濕度、坐下計時、久坐時長等狀態(tài)信息,方便用戶查看和調(diào)整坐墊設(shè)置。
3.8 HC-05藍牙模塊
- 型號:HC-05
- 作用:實現(xiàn)與手機APP的無線連接,通過藍牙傳輸坐墊的實時數(shù)據(jù),并接收來自手機APP的控制指令。
3.9 電機驅(qū)動控制模塊
- 型號:L298N電機驅(qū)動模塊
- 作用:控制座椅的自動按摩功能,通過驅(qū)動電機實現(xiàn)按摩座椅的動作。
4. 設(shè)計思路
本設(shè)計采用STM32單片機作為核心控制單元,通過多種傳感器采集環(huán)境數(shù)據(jù),并通過藍牙、按鍵和語音模塊實現(xiàn)與用戶的交互。系統(tǒng)的整體設(shè)計思路如下:
- 傳感器采集:溫濕度傳感器和壓力傳感器實時采集環(huán)境數(shù)據(jù),并將數(shù)據(jù)傳輸到STM32進行處理。
- 久坐監(jiān)測:壓力傳感器判斷是否有用戶坐下,當用戶久坐時,通過語音播報模塊提醒用戶活動。
- 溫濕度調(diào)節(jié):溫濕度數(shù)據(jù)超過設(shè)定值時,自動控制繼電器開啟加熱或散熱功能,保持舒適的坐墊環(huán)境。
- 手動控制:提供按鍵控制功能,允許用戶手動調(diào)整坐墊的工作模式。
- 藍牙無線控制:通過HC-05藍牙模塊與手機APP通信,提供實時數(shù)據(jù)監(jiān)控和遠程控制功能。
- 電機驅(qū)動按摩:使用電機驅(qū)動模塊控制座椅的按摩功能,提供額外的舒適體驗。
5. 系統(tǒng)功能總結(jié)
功能模塊 | 描述 |
---|---|
久坐監(jiān)測與提醒 | 通過壓力傳感器監(jiān)測是否有人坐下,超時后通過語音模塊提醒用戶活動 |
溫濕度調(diào)節(jié) | 自動控制坐墊的加熱和散熱功能,保持舒適的環(huán)境溫濕度 |
手動控制 | 提供按鍵控制,允許用戶手動調(diào)整加熱/散熱、久坐時長等功能 |
藍牙無線控制 | 手機APP實時監(jiān)控和控制坐墊狀態(tài),包括溫濕度、加熱/散熱、久坐時長 |
自動按摩功能 | 通過電機驅(qū)動控制座椅按摩,提供額外的舒適體驗 |
6. 使用的模塊技術(shù)詳情介紹
6.1 STM32單片機
STM32系列單片機具有較強的處理能力和豐富的外設(shè)接口,適合用于控制和數(shù)據(jù)處理。通過STM32,可以實現(xiàn)對多傳感器數(shù)據(jù)的實時處理和系統(tǒng)控制。
6.2 壓力傳感器
壓力傳感器可以精準地測量坐椅上的壓力變化,當用戶坐下時,壓力值會發(fā)生變化,STM32根據(jù)這些數(shù)據(jù)判斷座椅是否被占用。
6.3 溫濕度傳感器
SHT30是一款高精度的數(shù)字溫濕度傳感器,具有較快的響應(yīng)時間和較低的功耗,適合用于環(huán)境監(jiān)測。
6.4 語音播報模塊
DFPlayer Mini是一款小型語音播放模塊,可以存儲語音文件,并通過串口控制播放。當久坐時間超過設(shè)定時,通過語音提示用戶。
6.5 繼電器模塊
繼電器模塊用于控制高功率負載如加熱器和散熱器的開關(guān)。它可以通過低電壓的STM32控制高電壓電器。
7. 總結(jié)
本項目設(shè)計的智能坐墊座椅系統(tǒng)結(jié)合了溫濕度調(diào)節(jié)、久坐監(jiān)測、藍牙控制、自動按摩等多種智能功能,旨在提升用戶的舒適性和健康性。通過使用STM32單片機作為核心控制平臺,系統(tǒng)能夠?qū)崟r監(jiān)測坐墊的環(huán)境數(shù)據(jù),并通過藍牙與手機APP實現(xiàn)無線控制。未來,可以進一步擴展系統(tǒng)的功能,如增加運動提醒、心率監(jiān)測等,進一步提升智能坐墊的健康管理功能。
8. STM32代碼設(shè)計
下面是一個完整的 main.c
代碼,涵蓋了 STM32F103RCT6 單片機的主要功能。
#include "stm32f10x.h"
#include "delay.h" // 延時函數(shù)
#include "lcd.h" // LCD 顯示模塊
#include "pressure_sensor.h" // 壓力傳感器
#include "humidity_temperature_sensor.h" // 溫濕度傳感器
#include "relay_control.h" // 繼電器模塊
#include "buzzer.h" // 蜂鳴器模塊
#include "bluetooth.h" // 藍牙模塊
#include "button.h" // 按鍵控制模塊
#include "dfplayer.h" // 語音播報模塊
// 全局變量
uint8_t seatOccupied = 0; // 座椅是否有人坐下
uint32_t seatTimer = 0; // 座椅計時器,單位:秒
uint8_t heatStatus = 0; // 加熱器狀態(tài)(0 關(guān),1 開)
uint8_t coolStatus = 0; // 散熱器狀態(tài)(0 關(guān),1 開)
uint8_t idleTimeout = 30; // 久坐提醒倒計時,單位:分鐘
// 按鍵設(shè)置
#define KEY_HEAT_PIN GPIO_Pin_0 // 加熱按鍵
#define KEY_COOL_PIN GPIO_Pin_1 // 散熱按鍵
#define KEY_TIME_PIN GPIO_Pin_2 // 久坐時長設(shè)置按鍵
void System_Init(void);
void Seat_Check(void);
void Seat_Control(void);
void Temperature_Humidity_Control(void);
void Display_Update(void);
void Button_Polling(void);
void Buzzer_Alert(void);
void Bluetooth_Transmit(void);
int main(void)
{
// 初始化系統(tǒng)
System_Init();
while (1)
{
// 檢查座椅是否有人坐下
Seat_Check();
// 控制座椅加熱和散熱
Seat_Control();
// 溫濕度調(diào)節(jié)
Temperature_Humidity_Control();
// 更新LCD顯示
Display_Update();
// 按鍵輪詢控制
Button_Polling();
// 藍牙數(shù)據(jù)傳輸
Bluetooth_Transmit();
}
}
// 系統(tǒng)初始化
void System_Init(void)
{
// 初始化各模塊
delay_init();
LCD_Init();
PressureSensor_Init();
HumidityTemperatureSensor_Init();
Relay_Init();
Buzzer_Init();
Bluetooth_Init();
Button_Init();
// 初始化系統(tǒng)時間和設(shè)置默認值
seatTimer = 0;
seatOccupied = 0;
heatStatus = 0;
coolStatus = 0;
}
// 座椅檢查函數(shù)
void Seat_Check(void)
{
// 檢測座椅是否有人坐下
seatOccupied = PressureSensor_Read();
// 如果有人坐下,開始計時
if (seatOccupied)
{
if (seatTimer < idleTimeout * 60) // 如果尚未超過設(shè)定的久坐時間
{
seatTimer++;
}
}
else
{
seatTimer = 0; // 如果座椅上沒有人,計時器歸零
}
}
// 座椅控制函數(shù)
void Seat_Control(void)
{
// 如果久坐時間超過設(shè)定時間,發(fā)出語音提示
if (seatOccupied && seatTimer >= idleTimeout * 60)
{
// 播報語音提示
DFPlayer_Play("Please take a break and stretch.");
Buzzer_Alert(); // 久坐提醒時,蜂鳴器響起
}
// 溫濕度控制(自動加熱或散熱)
Temperature_Humidity_Control();
}
// 溫濕度調(diào)節(jié)函數(shù)
void Temperature_Humidity_Control(void)
{
float temperature = HumidityTemperatureSensor_ReadTemperature();
float humidity = HumidityTemperatureSensor_ReadHumidity();
// 控制加熱器
if (temperature < 20.0 && !heatStatus)
{
Relay_Control(HEAT_RELAY_PIN, 1); // 開啟加熱
heatStatus = 1;
}
else if (temperature >= 22.0 && heatStatus)
{
Relay_Control(HEAT_RELAY_PIN, 0); // 關(guān)閉加熱
heatStatus = 0;
}
// 控制散熱器
if (temperature > 28.0 && !coolStatus)
{
Relay_Control(COOL_RELAY_PIN, 1); // 開啟散熱
coolStatus = 1;
}
else if (temperature <= 25.0 && coolStatus)
{
Relay_Control(COOL_RELAY_PIN, 0); // 關(guān)閉散熱
coolStatus = 0;
}
// 顯示溫濕度信息
LCD_DisplayTemperatureHumidity(temperature, humidity);
}
// LCD顯示更新函數(shù)
void Display_Update(void)
{
// 顯示座椅占用狀態(tài)
LCD_DisplaySeatStatus(seatOccupied);
// 顯示座椅計時
LCD_DisplaySeatTimer(seatTimer);
// 顯示加熱和散熱狀態(tài)
LCD_DisplayHeatCoolStatus(heatStatus, coolStatus);
}
// 按鍵輪詢函數(shù)
void Button_Polling(void)
{
// 檢測按鍵是否被按下并控制相應(yīng)功能
if (Button_Read(KEY_HEAT_PIN) == BUTTON_PRESSED)
{
heatStatus = !heatStatus;
Relay_Control(HEAT_RELAY_PIN, heatStatus);
}
if (Button_Read(KEY_COOL_PIN) == BUTTON_PRESSED)
{
coolStatus = !coolStatus;
Relay_Control(COOL_RELAY_PIN, coolStatus);
}
if (Button_Read(KEY_TIME_PIN) == BUTTON_PRESSED)
{
idleTimeout++; // 增加久坐時長
if (idleTimeout > 60) idleTimeout = 60; // 最大時長60分鐘
}
}
// 蜂鳴器提醒函數(shù)
void Buzzer_Alert(void)
{
// 播放久坐提醒音
Buzzer_On();
delay_ms(500);
Buzzer_Off();
}
// 藍牙數(shù)據(jù)傳輸函數(shù)
void Bluetooth_Transmit(void)
{
// 發(fā)送當前坐墊狀態(tài)(濕度、溫度、久坐計時等)
char buffer[64];
snprintf(buffer, sizeof(buffer), "Temp: %.2f, Humidity: %.2f, Seat Time: %d",
HumidityTemperatureSensor_ReadTemperature(),
HumidityTemperatureSensor_ReadHumidity(),
seatTimer);
Bluetooth_SendData(buffer);
}
代碼分析
- 系統(tǒng)初始化 (
System_Init
): 初始化系統(tǒng)的硬件模塊,包括延時、LCD顯示、傳感器、繼電器、語音播報、藍牙和按鍵等。 - 座椅檢查 (
Seat_Check
): 檢查壓力傳感器數(shù)據(jù),判斷是否有用戶坐下。如果坐下則開始計時,久坐超過設(shè)置時間則發(fā)出提醒。 - 座椅控制 (
Seat_Control
): 根據(jù)座椅占用狀態(tài)和溫度數(shù)據(jù),控制加熱和散熱。超時后會播放語音并提醒用戶起身活動。 - 溫濕度控制 (
Temperature_Humidity_Control
): 通過溫濕度傳感器控制加熱器和散熱器的開關(guān)。溫度過低開啟加熱,溫度過高開啟散熱。 - LCD顯示更新 (
Display_Update
): 更新LCD屏幕上的信息,如座椅狀態(tài)、溫濕度、座椅計時等。 - 按鍵輪詢 (
Button_Polling
): 按鍵控制座椅的加熱、散熱和久坐時長的設(shè)置。 - 蜂鳴器提醒 (
Buzzer_Alert
): 久坐提醒時蜂鳴器發(fā)出提示音。 - 藍牙數(shù)據(jù)傳輸 (
Bluetooth_Transmit
): 將坐墊的狀態(tài)數(shù)據(jù)(如溫濕度、座椅占用時間等)通過藍牙傳輸?shù)绞謾CAPP,供用戶查看和控制。
總結(jié)
該 main.c
文件實現(xiàn)了智能坐墊座椅系統(tǒng)的基本控制邏輯,包括溫濕度控制、座椅占用檢測、久坐提醒、按鍵控制、藍牙通信等功能。各個模塊通過 STM32 控制器協(xié)調(diào)工作,滿足系統(tǒng)設(shè)計的需求。如果其他硬件模塊和驅(qū)動已經(jīng)完成,可以將這些代碼與相應(yīng)的硬件集成,實現(xiàn)智能坐墊的功能。