1 系統功能介紹
本設計基于 STC89C52 單片機,結合 脈搏傳感器、溫度傳感器 DS18B20、LCD1602 液晶顯示器、WiFi 模塊 等外設,構建了一個 WiFi 心率計脈搏體溫測量儀 APP 系統。系統能夠實現對人體心率與體溫的實時采集、處理、顯示和遠程上傳,既可作為個人健康監測設備,也可擴展應用于家庭健康管理和遠程醫療監護場景。
系統主要功能如下:
- LCD 實時顯示:LCD1602 的第一行顯示系統設計信息,第二行實時顯示心率和溫度數據。
- 心率測量:用戶將手指輕放在脈搏傳感器上,單片機采集傳感器的脈搏波動信號并計算心率。
- 體溫測量:系統通過 DS18B20 溫度傳感器實時獲取人體溫度,并與心率一同顯示在 LCD1602 上。
- 數據上傳:系統通過 WiFi 模塊(ESP8266)將心率與體溫數據實時傳輸至手機 APP,實現遠程監控與數據存儲。
該系統不僅實現了心率與體溫的基本測量,還通過無線網絡擴展了遠程應用的可能性,具備良好的實用性與拓展性。
2 系統電路設計
整個系統由 單片機最小系統電路、脈搏傳感器電路、溫度傳感器 DS18B20 電路、LCD1602 顯示電路、WiFi 模塊電路、電源電路 等組成。
2.1 單片機最小系統電路
-
核心控制器:STC89C52 單片機作為系統的中央處理單元,負責心率信號采集、溫度測量、數據處理、LCD 驅動以及 WiFi 數據上傳。
-
最小系統:包括復位電路、時鐘電路和電源電路。
- 時鐘一般采用 11.0592 MHz 晶振,保證串口通信的波特率精度。
- 復位電路由上拉電阻和電容構成,保證上電復位可靠性。
-
I/O 資源分配:
- 定時器和外部中斷用于心率信號采集;
- 單總線接口用于溫度傳感器 DS18B20;
- P0/P2 口控制 LCD1602;
- 串口 UART 控制 WiFi 模塊。
2.2 脈搏傳感器電路
- 工作原理:脈搏傳感器利用光電容積脈搏波原理,檢測手指血液流量變化。心臟收縮和舒張時,指尖血液容量變化,引起透射光或反射光變化,進而產生與脈搏同步的波動信號。
- 信號采集:傳感器輸出模擬電壓信號,經放大和濾波后送入單片機的外部中斷口。
- 作用:每次檢測到脈搏信號的有效上升沿/下降沿,單片機計數,從而計算心率。
2.3 溫度傳感器 DS18B20 電路
- 傳感器類型:DS18B20 為數字溫度傳感器,采用單總線協議。
- 優點:測溫范圍寬(-55℃~~+125℃)、分辨率可選(9~~12 位)、無需外接 ADC。
- 接口方式:單線接口連接至單片機 I/O 口,單片機通過時序控制獲取溫度數據。
2.4 LCD1602 顯示電路
-
顯示原理:LCD1602 為字符型液晶,可顯示 2 行,每行 16 個字符。
-
功能實現:
- 第一行顯示系統提示信息,如“Heart&Temp”;
- 第二行實時顯示心率和體溫,例如 “H:075 T:36.5”。
2.5 WiFi 模塊電路
- 選用模塊:ESP8266 WiFi 模塊,通過串口通信與單片機連接。
- 作用:負責將心率與體溫數據上傳至手機 APP。
- 通信協議:常用 AT 指令配置,單片機通過 UART 發送數據,模塊再將數據通過 TCP/UDP 上傳至服務器或 APP。
2.6 電源電路
- 供電方式:系統采用 5V 電源,部分器件需要 3.3V(如 ESP8266),通過 AMS1117-3.3 穩壓芯片提供穩定電源。
- 電源指示:使用 LED 指示電路工作狀態。
3 系統程序設計
程序部分采用 模塊化設計,分為:主程序、心率測量程序、溫度測量程序、LCD 顯示程序、WiFi 通信程序 等。
3.1 主程序框架
#include <reg52.h>
#include "lcd1602.h"
#include "ds18b20.h"
#include "uart.h"
#include "pulse.h"unsigned int heartRate = 0;
float temperature = 0;void main()
{LCD_Init();UART_Init();DS18B20_Init();Pulse_Init();LCD_ShowString(0,0,"Heart&Temp Sys");while(1){heartRate = Get_HeartRate();temperature = DS18B20_ReadTemp();LCD_ShowString(1,0,"H:");LCD_ShowNum(1,2,heartRate,3);LCD_ShowString(1,6,"T:");LCD_ShowFloat(1,8,temperature,4,1);UART_SendData(heartRate, temperature);}
}
3.2 心率測量程序
心率通過外部中斷捕獲脈搏信號波形,根據一定時間內的脈沖數計算。
unsigned int pulseCount = 0;
unsigned int heartRate = 0;void Pulse_Init(void)
{IT0 = 1; // 外部中斷0下降沿觸發EX0 = 1; // 開啟外部中斷0EA = 1; // 總中斷開
}void External_Int0(void) interrupt 0
{pulseCount++;
}unsigned int Get_HeartRate(void)
{unsigned int bpm = 0;// 假設1分鐘統計脈沖數, 實際可縮短時間窗口再折算bpm = pulseCount * 6; // 10秒統計后乘以6pulseCount = 0;return bpm;
}
3.3 溫度測量程序(DS18B20)
通過單總線協議與 DS18B20 通信,讀取溫度并轉換為浮點數。
float DS18B20_ReadTemp(void)
{int temp;float t;DS18B20_Start();DS18B20_WriteByte(0xCC); // 跳過ROMDS18B20_WriteByte(0x44); // 啟動溫度轉換DelayMs(750); // 等待轉換完成DS18B20_Start();DS18B20_WriteByte(0xCC);DS18B20_WriteByte(0xBE); // 讀溫度寄存器temp = DS18B20_ReadByte();temp |= DS18B20_ReadByte() << 8;t = temp * 0.0625; // DS18B20 分辨率 0.0625℃return t;
}
3.4 LCD 顯示程序
void LCD_ShowFloat(unsigned char x, unsigned char y, float num, unsigned char len, unsigned char point)
{unsigned int temp = (unsigned int)(num * 10);LCD_ShowNum(x,y,temp/10,len-point);LCD_ShowString(x,y+len-point,".");LCD_ShowNum(x,y+len-point+1,temp%10,point);
}
3.5 WiFi 通信程序
單片機通過 UART 向 ESP8266 發送心率和溫度數據。
void UART_Init(void)
{SCON = 0x50; // 串口模式1TMOD |= 0x20; // 定時器1方式2TH1 = 0xFD; // 波特率9600TL1 = 0xFD;TR1 = 1;
}void UART_SendByte(unsigned char dat)
{SBUF = dat;while(!TI);TI = 0;
}void UART_SendData(unsigned int hr, float temp)
{char buffer[20];sprintf(buffer,"HR:%d T:%.1f\n",hr,temp);for(unsigned char i=0; buffer[i] != '\0'; i++){UART_SendByte(buffer[i]);}
}
4 總結
本設計基于 STC89C52 單片機,實現了一個具備 心率與體溫測量、LCD 顯示和 WiFi 上傳 功能的完整系統。其特點如下:
- 實時監測:能夠同時獲取心率和體溫,適合日常健康管理。
- 數據可視化:LCD1602 直觀顯示當前心率和溫度。
- 遠程傳輸:通過 ESP8266 模塊實現數據無線上傳,支持手機 APP 端查看。
- 操作簡便:使用者僅需將手指放在傳感器上即可完成心率和溫度采集。
- 可擴展性強:后續可增加血氧、血壓等傳感器,進一步擴展健康監測范圍。
該系統在健康檢測與遠程醫療方面具有一定應用價值,同時也為學習 傳感器應用、單片機控制、串口通信、無線數據傳輸 等技術提供了實踐平臺。