随着人们生活节奏的加快,长时间久坐已成为现代人普遍存在的健康问题。久坐不仅会增加患心血管疾病、脊椎疾病等风险,还会导致肌肉僵硬、血液循环不畅等问题。因此,开发一种可以监测久坐并及时提醒用户的智能座椅,成为了现代智能家居和健康管理领域的重要需求。
本项目设计一款基于STM32单片机的智能坐垫座椅,通过集成多个传感器和控制模块,达到以下目的:
项目采用STM32单片机作为核心控制器,结合多种传感器和执行器,通过硬件和软件的协同工作,实现了上述智能功能。
本系统设计的核心功能如下:
本项目的硬件模块包括STM32单片机、压力传感器、温湿度传感器、语音播报模块、继电器模块、按键控制模块、OLED液晶显示屏、HC-05蓝牙模块、电机驱动控制模块等。
本设计采用STM32单片机作为核心控制单元,通过多种传感器采集环境数据,并通过蓝牙、按键和语音模块实现与用户的交互。系统的整体设计思路如下:
功能模块 | 描述 |
---|---|
久坐监测与提醒 | 通过压力传感器监测是否有人坐下,超时后通过语音模块提醒用户活动 |
温湿度调节 | 自动控制坐垫的加热和散热功能,保持舒适的环境温湿度 |
手动控制 | 提供按键控制,允许用户手动调整加热/散热、久坐时长等功能 |
蓝牙无线控制 | 手机APP实时监控和控制坐垫状态,包括温湿度、加热/散热、久坐时长 |
自动按摩功能 | 通过电机驱动控制座椅按摩,提供额外的舒适体验 |
STM32系列单片机具有较强的处理能力和丰富的外设接口,适合用于控制和数据处理。通过STM32,可以实现对多传感器数据的实时处理和系统控制。
压力传感器可以精准地测量坐椅上的压力变化,当用户坐下时,压力值会发生变化,STM32根据这些数据判断座椅是否被占用。
SHT30是一款高精度的数字温湿度传感器,具有较快的响应时间和较低的功耗,适合用于环境监测。
DFPlayer Mini是一款小型语音播放模块,可以存储语音文件,并通过串口控制播放。当久坐时间超过设定时,通过语音提示用户。
继电器模块用于控制高功率负载如加热器和散热器的开关。它可以通过低电压的STM32控制高电压电器。
本项目设计的智能坐垫座椅系统结合了温湿度调节、久坐监测、蓝牙控制、自动按摩等多种智能功能,旨在提升用户的舒适性和健康性。通过使用STM32单片机作为核心控制平台,系统能够实时监测坐垫的环境数据,并通过蓝牙与手机APP实现无线控制。未来,可以进一步扩展系统的功能,如增加运动提醒、心率监测等,进一步提升智能坐垫的健康管理功能。
下面是一个完整的 main.c
代码,涵盖了 STM32F103RCT6 单片机的主要功能。
#include "stm32f10x.h"
#include "delay.h" // 延时函数
#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; // 加热器状态(0 关,1 开)
uint8_t coolStatus = 0; // 散热器状态(0 关,1 开)
uint8_t idleTimeout = 30; // 久坐提醒倒计时,单位:分钟
// 按键设置
#define KEY_HEAT_PIN GPIO_Pin_0 // 加热按键
#define KEY_COOL_PIN GPIO_Pin_1 // 散热按键
#define KEY_TIME_PIN GPIO_Pin_2 // 久坐时长设置按键
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)
{
// 初始化系统
System_Init();
while (1)
{
// 检查座椅是否有人坐下
Seat_Check();
// 控制座椅加热和散热
Seat_Control();
// 温湿度调节
Temperature_Humidity_Control();
// 更新LCD显示
Display_Update();
// 按键轮询控制
Button_Polling();
// 蓝牙数据传输
Bluetooth_Transmit();
}
}
// 系统初始化
void System_Init(void)
{
// 初始化各模块
delay_init();
LCD_Init();
PressureSensor_Init();
HumidityTemperatureSensor_Init();
Relay_Init();
Buzzer_Init();
Bluetooth_Init();
Button_Init();
// 初始化系统时间和设置默认值
seatTimer = 0;
seatOccupied = 0;
heatStatus = 0;
coolStatus = 0;
}
// 座椅检查函数
void Seat_Check(void)
{
// 检测座椅是否有人坐下
seatOccupied = PressureSensor_Read();
// 如果有人坐下,开始计时
if (seatOccupied)
{
if (seatTimer < idleTimeout * 60) // 如果尚未超过设定的久坐时间
{
seatTimer++;
}
}
else
{
seatTimer = 0; // 如果座椅上没有人,计时器归零
}
}
// 座椅控制函数
void Seat_Control(void)
{
// 如果久坐时间超过设定时间,发出语音提示
if (seatOccupied && seatTimer >= idleTimeout * 60)
{
// 播报语音提示
DFPlayer_Play("Please take a break and stretch.");
Buzzer_Alert(); // 久坐提醒时,蜂鸣器响起
}
// 温湿度控制(自动加热或散热)
Temperature_Humidity_Control();
}
// 温湿度调节函数
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); // 关闭加热
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); // 关闭散热
coolStatus = 0;
}
// 显示温湿度信息
LCD_DisplayTemperatureHumidity(temperature, humidity);
}
// LCD显示更新函数
void Display_Update(void)
{
// 显示座椅占用状态
LCD_DisplaySeatStatus(seatOccupied);
// 显示座椅计时
LCD_DisplaySeatTimer(seatTimer);
// 显示加热和散热状态
LCD_DisplayHeatCoolStatus(heatStatus, coolStatus);
}
// 按键轮询函数
void Button_Polling(void)
{
// 检测按键是否被按下并控制相应功能
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分钟
}
}
// 蜂鸣器提醒函数
void Buzzer_Alert(void)
{
// 播放久坐提醒音
Buzzer_On();
delay_ms(500);
Buzzer_Off();
}
// 蓝牙数据传输函数
void Bluetooth_Transmit(void)
{
// 发送当前坐垫状态(湿度、温度、久坐计时等)
char buffer[64];
snprintf(buffer, sizeof(buffer), "Temp: %.2f, Humidity: %.2f, Seat Time: %d",
HumidityTemperatureSensor_ReadTemperature(),
HumidityTemperatureSensor_ReadHumidity(),
seatTimer);
Bluetooth_SendData(buffer);
}
System_Init
): 初始化系统的硬件模块,包括延时、LCD显示、传感器、继电器、语音播报、蓝牙和按键等。Seat_Check
): 检查压力传感器数据,判断是否有用户坐下。如果坐下则开始计时,久坐超过设置时间则发出提醒。Seat_Control
): 根据座椅占用状态和温度数据,控制加热和散热。超时后会播放语音并提醒用户起身活动。Temperature_Humidity_Control
): 通过温湿度传感器控制加热器和散热器的开关。温度过低开启加热,温度过高开启散热。Display_Update
): 更新LCD屏幕上的信息,如座椅状态、温湿度、座椅计时等。Button_Polling
): 按键控制座椅的加热、散热和久坐时长的设置。Buzzer_Alert
): 久坐提醒时蜂鸣器发出提示音。Bluetooth_Transmit
): 将坐垫的状态数据(如温湿度、座椅占用时间等)通过蓝牙传输到手机APP,供用户查看和控制。该 main.c
文件实现了智能坐垫座椅系统的基本控制逻辑,包括温湿度控制、座椅占用检测、久坐提醒、按键控制、蓝牙通信等功能。各个模块通过 STM32 控制器协调工作,满足系统设计的需求。如果其他硬件模块和驱动已经完成,可以将这些代码与相应的硬件集成,实现智能坐垫的功能。