1. 項目開發背景
隨著物聯網(IoT)技術的發展,智能家居系統逐漸融入到我們的日常生活中,成為提高生活質量、增強家庭安全、提升健康管理的重要工具。特別是在健康醫療領域,借助物聯網技術,智能家居不僅能夠實時監測用戶的身體狀況,還能對異常情況進行及時報警,幫助家庭成員及時應對突發健康問題。
本項目設計一種智能家居健康醫療系統,通過利用物聯網技術對家庭成員的健康狀態進行動態監控,及時獲取溫度、脈搏等生理參數,結合跌倒檢測和吸煙警告功能,在發生健康異常時進行報警和干預。本系統不僅可以為家庭成員提供實時的健康數據監測,還能通過云平臺實時上傳數據,便于長期健康管理。
2. 設計實現的功能
本項目設計的智能家居健康醫療系統包括以下核心功能:
- 溫度測量及設置閾值: 通過溫度傳感器實時測量用戶體溫,并根據需求設置體溫閾值。閾值初始值為36.5℃,用戶可以通過按鍵調整,閾值范圍在35℃到42℃之間。溫度值超出閾值時,系統會發出報警。
- 脈搏測量: 使用微震動傳感器檢測用戶脈搏,通過信號采集與解算判斷脈搏的健康情況。
- 跌倒檢測及報警: 通過加速度傳感器檢測用戶的姿態變化,當系統檢測到跌倒事件時,立即觸發報警,發出蜂鳴聲以引起周圍人的注意。
- 吸煙警告: 使用煙霧傳感器檢測環境中的煙霧濃度,當檢測到吸煙信號時,系統會發出持續警報,直到香煙熄滅。
- 數據上傳至OneNet云平臺: 實時將溫度、脈搏、姿態、煙霧濃度等數據通過藍牙技術發送至遠程智能設備,并上傳至OneNet云平臺,以便用戶通過云平臺查看健康數據或圖表分析。
- 系統穩定性與安全性: 系統設計必須保證數據采集、傳輸和處理過程的穩定性,確保用戶健康數據的準確性與實時性。同時,系統具備一定的安全防護措施,防止數據泄漏和被篡改。
3. 項目硬件模塊組成
該系統的硬件模塊主要包括以下幾個部分:
- STM32F103RCT6主控芯片: 作為系統的核心控制單元,負責處理來自各傳感器的數據,并控制其他模塊的工作。
- 溫度傳感器(如DS18B20): 用于實時測量用戶體溫,并與主控芯片進行數據交互。
- 微震動傳感器: 用于檢測脈搏,微震動傳感器通過監測微小的震動信號來獲取脈搏頻率信息。
- 加速度傳感器(如MPU6050): 用于監測用戶的姿態變化,實現跌倒檢測功能。
- 煙霧傳感器(如MQ-2): 用于監測空氣中的煙霧濃度,當濃度超過設定值時發出警報。
- 蜂鳴器: 在跌倒檢測和吸煙警告時發出報警聲音,提醒周圍的人注意。
- 藍牙模塊(如HC-05): 用于將采集到的健康數據通過藍牙傳輸到智能手機或其他智能設備。
- OneNet云平臺: 用于接收從藍牙模塊上傳的數據,提供實時監控與數據分析功能。
- 按鍵模塊: 用于用戶設置溫度閾值,提供增減溫度的功能。
- OLED顯示屏: 用于顯示當前體溫、脈搏、煙霧濃度等實時數據,提供直觀的用戶界面。
4. 設計思路
本系統的設計思路主要圍繞以下幾個核心點展開:
- 硬件設計: 采用STM32F103RCT6作為主控芯片,通過其豐富的IO口與各傳感器模塊進行連接,完成數據采集、傳輸、顯示等功能。同時,系統采用低功耗設計,確保在實際應用中的長期穩定性。
- 傳感器信號采集與處理: 各傳感器(溫度傳感器、微震動傳感器、加速度傳感器、煙霧傳感器)負責不同的生理信號采集。傳感器采集到的原始數據將通過STM32F103RCT6進行處理和解算,并根據設定的閾值判斷是否觸發報警。
- 通信與數據上傳: 系統通過藍牙模塊與智能手機或其他設備進行通信,將采集到的健康數據傳輸至遠程設備。同時,系統也會將數據上傳至OneNet云平臺,用戶可以通過云平臺進行數據查詢和查看。
- 報警機制: 系統通過蜂鳴器發出聲音報警,提醒用戶跌倒或吸煙異常情況。報警系統的設計要保證能夠及時、清晰地提醒用戶或周圍人注意到異常情況。
- 用戶界面設計: 采用OLED顯示屏展示用戶的實時健康數據,提供溫度、脈搏、姿態、煙霧濃度等信息,便于用戶進行健康監測。
- 系統安全與穩定性: 系統設計需要保證數據的準確性與穩定性,尤其是健康數據傳輸過程中的可靠性。同時,系統要具備一定的安全防護機制,防止數據泄漏或遭到攻擊。
5. 系統功能總結
功能模塊 | 描述 | 技術要求 |
---|---|---|
溫度監測 | 通過溫度傳感器實時測量體溫,設定閾值并報警 | 溫度范圍:35℃ ~ 42℃,0.25℃增減 |
脈搏測量 | 使用微震動傳感器測量脈搏信號 | 實時采樣與解算脈搏頻率 |
跌倒檢測 | 通過加速度傳感器檢測用戶姿態變化,判斷是否跌倒并發出報警 | 敏感的加速度傳感器,跌倒判定閾值 |
吸煙警告 | 使用煙霧傳感器檢測煙霧濃度,吸煙時發出警報 | 煙霧濃度閾值設定,警報觸發條件 |
數據上傳 | 通過藍牙模塊將數據發送至智能設備,上傳至OneNet云平臺 | 藍牙通信協議,OneNet平臺接口 |
用戶界面 | 通過OLED顯示屏顯示實時的健康數據 | 顯示溫度、脈搏、煙霧濃度等數據 |
按鍵設置 | 用戶通過按鍵設置體溫閾值,增加或減少溫度閾值 | 按鍵控制溫度增減,0.25℃步進 |
6. 使用的模塊的技術詳情介紹
STM32F103RCT6主控芯片
- 32位ARM Cortex-M3內核,工作頻率最高72 MHz。
- 具有豐富的I/O接口,適合傳感器模塊的連接。
- 支持多種通信協議,如UART、I2C、SPI等,便于與外部模塊進行數據交換。
DS18B20溫度傳感器
- 通過單總線協議與STM32連接,能夠準確測量-55°C到+125°C的溫度。
- 分辨率可調,最高為0.0625°C。
MPU6050加速度傳感器
- 集成三軸加速度計與三軸陀螺儀,用于姿態變化檢測。
- 通過I2C通信與STM32連接,采樣頻率可調。
MQ-2煙霧傳感器
- 可檢測空氣中的煙霧、甲烷、一氧化碳等氣體。
- 模擬輸出信號,與STM32的ADC模塊連接。
HC-05藍牙模塊
- 提供與智能設備(如手機、平板)的無線通信。
- 支持藍牙串口協議(SPP),簡便的數據傳輸方式。
OLED顯示屏
- 采用I2C協議與STM32連接,顯示實時健康數據。
- 分辨率通常為128x64像素,顯示清晰、直觀。
7. STM32代碼設計
#include "stm32f1xx_hal.h"
#include "temperature_sensor.h" // 溫度傳感器相關頭文件
#include "pulse_sensor.h" // 脈搏傳感器相關頭文件
#include "fall_detection.h" // 跌倒檢測相關頭文件
#include "smoke_sensor.h" // 煙霧傳感器相關頭文件
#include "bluetooth.h" // 藍牙通信相關頭文件
#include "oled_display.h" // OLED顯示相關頭文件
#include "keypad.h" // 按鍵輸入相關頭文件
#include "onenet.h" // OneNet云平臺上傳相關頭文件// 全局變量
float temperature = 36.5f; // 初始體溫設為36.5℃
float pulse = 0.0f; // 初始脈搏值
uint8_t fall_detected = 0; // 跌倒檢測標志
uint8_t smoking_detected = 0; // 吸煙檢測標志
float smoke_level = 0.0f; // 煙霧濃度// 按鍵設置的體溫閾值
float temp_threshold = 36.5f;// 初始化所有模塊
void System_Init(void) {HAL_Init();MX_GPIO_Init(); // GPIO初始化MX_USART1_UART_Init(); // UART初始化MX_I2C1_Init(); // I2C初始化MX_SPI1_Init(); // SPI初始化MX_ADC1_Init(); // ADC初始化OLED_Init(); // 初始化OLED顯示Bluetooth_Init(); // 初始化藍牙模塊OneNet_Init(); // 初始化OneNet云平臺Keypad_Init(); // 初始化按鍵模塊
}// 更新溫度閾值
void Update_Temperature_Threshold(void) {if (Keypad_IsPressed()) { // 檢測按鍵輸入if (Keypad_GetValue() == KEY_UP) {temp_threshold += 0.25f; // 增加溫度閾值if (temp_threshold > 42.0f) temp_threshold = 42.0f;}if (Keypad_GetValue() == KEY_DOWN) {temp_threshold -= 0.25f; // 減少溫度閾值if (temp_threshold < 35.0f) temp_threshold = 35.0f;}}
}// 獲取溫度數據
void Get_Temperature(void) {temperature = Temperature_Sensor_Read(); // 從溫度傳感器獲取當前體溫if (temperature > temp_threshold) {// 如果體溫超過閾值,觸發報警OLED_DisplayText("Temp: High Alert!", 0, 0);HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_SET); // 蜂鳴器報警} else {OLED_DisplayText("Temp: Normal", 0, 0);HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET); // 蜂鳴器關閉}
}// 獲取脈搏數據
void Get_Pulse(void) {pulse = Pulse_Sensor_Read(); // 從脈搏傳感器獲取數據OLED_DisplayText("Pulse: ", 0, 1);OLED_DisplayFloat(pulse, 1, 1);
}// 獲取跌倒檢測數據
void Detect_Fall(void) {fall_detected = Fall_Detection_Read(); // 獲取跌倒檢測狀態if (fall_detected) {OLED_DisplayText("Fall Detected!", 0, 2);HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_SET); // 蜂鳴器報警}
}// 獲取煙霧濃度數據
void Get_Smoke_Level(void) {smoke_level = Smoke_Sensor_Read(); // 從煙霧傳感器讀取數據if (smoke_level > 500) { // 假設煙霧濃度超過500表示吸煙smoking_detected = 1;OLED_DisplayText("Smoke Detected!", 0, 3);HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_SET); // 蜂鳴器報警} else {smoking_detected = 0;}
}// 上傳數據到OneNet云平臺
void Upload_Data_To_Cloud(void) {OneNet_SendData("Temperature", temperature); // 上傳體溫數據OneNet_SendData("Pulse", pulse); // 上傳脈搏數據OneNet_SendData("FallStatus", fall_detected); // 上傳跌倒狀態OneNet_SendData("SmokeLevel", smoke_level); // 上傳煙霧濃度數據
}// 主函數
int main(void) {System_Init(); // 初始化所有模塊while (1) {// 持續監測溫度、脈搏、跌倒、煙霧Get_Temperature();Get_Pulse();Detect_Fall();Get_Smoke_Level();Update_Temperature_Threshold(); // 更新溫度閾值// 上傳數據到云平臺Upload_Data_To_Cloud();}
}
代碼功能解釋:
- System_Init(): 初始化系統所需的各個模塊,包括GPIO、UART、I2C、SPI、ADC以及OLED顯示、藍牙模塊等。
- Update_Temperature_Threshold(): 通過按鍵輸入(假設是上下鍵),動態調整溫度閾值。每按一次上鍵,閾值增加0.25℃,下鍵則減少0.25℃,范圍限定在35℃到42℃之間。
- Get_Temperature(): 通過調用溫度傳感器的讀取函數獲取當前體溫。如果體溫超過設定的閾值,則觸發報警并激活蜂鳴器。
- Get_Pulse(): 獲取脈搏傳感器的數據并顯示在OLED屏幕上。
- Detect_Fall(): 通過跌倒檢測傳感器判斷是否發生跌倒,如果跌倒則觸發報警,顯示在OLED屏幕上。
- Get_Smoke_Level(): 獲取煙霧傳感器的數據,如果煙霧濃度超過設定值(例如500)則認為是吸煙,觸發警報。
- Upload_Data_To_Cloud(): 將實時采集到的數據(溫度、脈搏、跌倒狀態、煙霧濃度)通過OneNet云平臺接口上傳至云平臺,便于遠程監控。
- 主循環:
- 主循環持續進行健康監測:溫度、脈搏、跌倒、煙霧濃度數據采集。
- 每次監測完后,會上傳數據至OneNet云平臺。
- 通過
HAL_Delay(1000)
控制更新頻率(每秒一次)。