基于STM32单片机智能坐垫座椅设计
目录
- 1. 项目开发背景
- 2. 设计实现的功能
- 3. 项目硬件模块组成
- 4. 设计思路
- 5. 系统功能总结
- 6. 使用的模块技术详情介绍
- 7. 总结
1. 项目开发背景
随着人们生活节奏的加快,长时间久坐已成为现代人普遍存在的健康问题。久坐不仅会增加患心血管疾病、脊椎疾病等风险,还会导致肌肉僵硬、血液循环不畅等问题。因此,开发一种可以监测久坐并及时提醒用户的智能座椅,成为了现代智能家居和健康管理领域的重要需求。
本项目设计一款基于STM32单片机的智能坐垫座椅,通过集成多个传感器和控制模块,达到以下目的:
- 1. 久坐监测:通过压力传感器监测座椅是否有人坐下,并在用户久坐时发出语音提醒,帮助用户养成健康的生活习惯。
- 2. 温湿度调控:通过温湿度传感器采集坐垫的环境数据,根据设定的温度范围自动调节坐垫的加热或散热功能,提供舒适的坐垫体验。
- 3. 手动控制功能:提供按键控制,允许用户手动调整加热、散热和久坐时长。
- 4. 蓝牙无线控制:通过HC-05蓝牙模块实现数据的无线传输,使用户能够通过手机APP实时监控坐垫的状态,进行远程控制。
项目采用STM32单片机作为核心控制器,结合多种传感器和执行器,通过硬件和软件的协同工作,实现了上述智能功能。
2. 设计实现的功能
本系统设计的核心功能如下:
2.1 久坐监测与提醒
- • 使用压力传感器检测座椅是否有人坐下,并开启一个计时器。如果用户持续坐着超过预定时间(如30分钟),系统通过语音模块播报提醒:“请劳逸结合,注意起身运动”。
2.2 温湿度调节
- • 通过温湿度传感器采集坐垫的温度和湿度,并根据设定的范围控制坐垫的加热和散热功能,确保用户在不同环境下的舒适体验。
- • 系统自动控制加热器和散热器的开关,保持合适的温度和湿度。
2.3 手动控制功能
- • 提供三路按键,分别用于手动控制坐垫的散热功能、加热功能以及久坐时长的选择。
- • 用户可以根据自己的需求,调整坐垫的工作模式。
2.4 蓝牙无线控制
- • 使用HC-05蓝牙模块,用户可以通过手机APP实现对坐垫状态的远程监控和控制。手机APP端显示坐垫的湿度、温度、是否散热、是否加热等信息,并提供控制功能,如切换工作模式、开启/关闭加热散热、设置久坐时间等。
2.5 自动按摩功能
- • 系统通过电机驱动模块控制座椅的按摩功能,模拟手动按摩的效果,帮助用户放松身心,减缓久坐带来的不适。
3. 项目硬件模块组成
本项目的硬件模块包括STM32单片机、压力传感器、温湿度传感器、语音播报模块、继电器模块、按键控制模块、OLED液晶显示屏、HC-05蓝牙模块、电机驱动控制模块等。
3.1 STM32单片机
- • 型号:STM32F103RCT6
- • 作用:作为系统的核心控制单元,负责处理各个传感器的数据,控制继电器、语音模块、蓝牙模块等外设,并实现久坐监测和温湿度控制等功能。
3.2 压力传感器
- • 型号:Fsr402
- • 作用:用于检测座椅是否有用户坐下,根据压力的变化来判断用户的坐姿状态。
3.3 温湿度传感器
- • 型号:SHT30
- • 作用:监测坐垫的环境温度和湿度数据,为温湿度调节提供实时数据支持。
3.4 语音播报模块
- • 型号:DFPlayer Mini
- • 作用:通过内置的语音模块,实现用户久坐时的语音提醒功能,帮助用户养成健康的生活习惯。
3.5 继电器模块
- • 型号:2路继电器模块
- • 作用:控制坐垫的加热和散热功能,当温湿度传感器的读数超出设定范围时,通过继电器模块控制加热器和散热器的开关。
3.6 按键控制模块
- • 类型:三路按键
- • 作用:提供手动控制选项,允许用户调整座椅的加热/散热、久坐时长等功能。
3.7 OLED液晶显示屏
- • 型号:0.96寸OLED显示屏
- • 作用:用于实时显示当前的环境温湿度、坐下计时、久坐时长等状态信息,方便用户查看和调整坐垫设置。
3.8 HC-05蓝牙模块
- • 型号:HC-05
- • 作用:实现与手机APP的无线连接,通过蓝牙传输坐垫的实时数据,并接收来自手机APP的控制指令。
3.9 电机驱动控制模块
- • 型号:L298N电机驱动模块
- • 作用:控制座椅的自动按摩功能,通过驱动电机实现按摩座椅的动作。
4. 设计思路
本设计采用STM32单片机作为核心控制单元,通过多种传感器采集环境数据,并通过蓝牙、按键和语音模块实现与用户的交互。系统的整体设计思路如下:
- 1. 传感器采集:温湿度传感器和压力传感器实时采集环境数据,并将数据传输到STM32进行处理。
- 2. 久坐监测:压力传感器判断是否有用户坐下,当用户久坐时,通过语音播报模块提醒用户活动。
- 3. 温湿度调节:温湿度数据超过设定值时,自动控制继电器开启加热或散热功能,保持舒适的坐垫环境。
- 4. 手动控制:提供按键控制功能,允许用户手动调整坐垫的工作模式。
- 5. 蓝牙无线控制:通过HC-05蓝牙模块与手机APP通信,提供实时数据监控和远程控制功能。
- 6. 电机驱动按摩:使用电机驱动模块控制座椅的按摩功能,提供额外的舒适体验。
5. 系统功能总结
功能模块 | 描述 |
久坐监测与提醒 | 通过压力传感器监测是否有人坐下,超时后通过语音模块提醒用户活动 |
温湿度调节 | 自动控制坐垫的加热和散热功能,保持舒适的环境温湿度 |
手动控制 | 提供按键控制,允许用户手动调整加热/散热、久坐时长等功能 |
蓝牙无线控制 | 手机APP实时监控和控制坐垫状态,包括温湿度、加热/散热、久坐时长 |
自动按摩功能 | 通过电机驱动控制座椅按摩,提供额外的舒适体验 |
6. 使用的模块技术详情介绍
6.1 STM32单片机
STM32系列单片机具有较强的处理能力和丰富的外设接口,适合用于控制和数据处理。通过STM32,可以实现对多传感器数据的实时处理和系统控制。
6.2 压力传感器
压力传感器可以精准地测量坐椅上的压力变化,当用户坐下时,压力值会发生变化,STM32根据这些数据判断座椅是否被占用。
6.3 温湿度传感器
SHT30是一款高精度的数字温湿度传感器,具有较快的响应时间和较低的功耗,适合用于环境监测。
6.4 语音播报模块
DFPlayer Mini是一款小型语音播放模块,可以存储语音文件,并通过串口控制播放。当久坐时间超过设定时,通过语音提示用户。
6.5 继电器模块
继电器模块用于控制高功率负载如加热器和散热器的开关。它可以通过低电压的STM32控制高电压电器。
7. 总结
本项目设计的智能坐垫座椅系统结合了温湿度调节、久坐监测、蓝牙控制、自动按摩等多种智能功能,旨在提升用户的舒适性和健康性。通过使用STM32单片机作为核心控制平台,系统能够实时监测坐垫的环境数据,并通过蓝牙与手机APP实现无线控制。未来,可以进一步扩展系统的功能,如增加运动提醒、心率监测等,进一步提升智能坐垫的健康管理功能。
8. STM32代码设计
下面是一个完整的 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);
}
代码分析
- 1. 系统初始化 (
System_Init
): 初始化系统的硬件模块,包括延时、LCD显示、传感器、继电器、语音播报、蓝牙和按键等。 - 2. 座椅检查 (
Seat_Check
): 检查压力传感器数据,判断是否有用户坐下。如果坐下则开始计时,久坐超过设置时间则发出提醒。 - 3. 座椅控制 (
Seat_Control
): 根据座椅占用状态和温度数据,控制加热和散热。超时后会播放语音并提醒用户起身活动。 - 4. 温湿度控制 (
Temperature_Humidity_Control
): 通过温湿度传感器控制加热器和散热器的开关。温度过低开启加热,温度过高开启散热。 - 5. LCD显示更新 (
Display_Update
): 更新LCD屏幕上的信息,如座椅状态、温湿度、座椅计时等。 - 6. 按键轮询 (
Button_Polling
): 按键控制座椅的加热、散热和久坐时长的设置。 - 7. 蜂鸣器提醒 (
Buzzer_Alert
): 久坐提醒时蜂鸣器发出提示音。 - 8. 蓝牙数据传输 (
Bluetooth_Transmit
): 将坐垫的状态数据(如温湿度、座椅占用时间等)通过蓝牙传输到手机APP,供用户查看和控制。
总结
该 main.c
文件实现了智能坐垫座椅系统的基本控制逻辑,包括温湿度控制、座椅占用检测、久坐提醒、按键控制、蓝牙通信等功能。各个模块通过 STM32 控制器协调工作,满足系统设计的需求。如果其他硬件模块和驱动已经完成,可以将这些代码与相应的硬件集成,实现智能坐垫的功能。
- 点赞
- 收藏
- 关注作者
评论(0)