基于STM32单片机智能坐垫座椅设计

举报
DS小龙哥 发表于 2024/12/25 15:27:04 2024/12/25
【摘要】 随着人们生活节奏的加快,长时间久坐已成为现代人普遍存在的健康问题。久坐不仅会增加患心血管疾病、脊椎疾病等风险,还会导致肌肉僵硬、血液循环不畅等问题。因此,开发一种可以监测久坐并及时提醒用户的智能座椅,成为了现代智能家居和健康管理领域的重要需求。

 

目录

  1. 1. 项目开发背景
  2. 2. 设计实现的功能
  3. 3. 项目硬件模块组成
  4. 4. 设计思路
  5. 5. 系统功能总结
  6. 6. 使用的模块技术详情介绍
  7. 7. 总结

1. 项目开发背景

随着人们生活节奏的加快,长时间久坐已成为现代人普遍存在的健康问题。久坐不仅会增加患心血管疾病、脊椎疾病等风险,还会导致肌肉僵硬、血液循环不畅等问题。因此,开发一种可以监测久坐并及时提醒用户的智能座椅,成为了现代智能家居和健康管理领域的重要需求。

本项目设计一款基于STM32单片机的智能坐垫座椅,通过集成多个传感器和控制模块,达到以下目的:

  1. 1. 久坐监测:通过压力传感器监测座椅是否有人坐下,并在用户久坐时发出语音提醒,帮助用户养成健康的生活习惯。
  2. 2. 温湿度调控:通过温湿度传感器采集坐垫的环境数据,根据设定的温度范围自动调节坐垫的加热或散热功能,提供舒适的坐垫体验。
  3. 3. 手动控制功能:提供按键控制,允许用户手动调整加热、散热和久坐时长。
  4. 4. 蓝牙无线控制:通过HC-05蓝牙模块实现数据的无线传输,使用户能够通过手机APP实时监控坐垫的状态,进行远程控制。

项目采用STM32单片机作为核心控制器,结合多种传感器和执行器,通过硬件和软件的协同工作,实现了上述智能功能。

image-20241225152343886

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. 1. 传感器采集:温湿度传感器和压力传感器实时采集环境数据,并将数据传输到STM32进行处理。
  2. 2. 久坐监测:压力传感器判断是否有用户坐下,当用户久坐时,通过语音播报模块提醒用户活动。
  3. 3. 温湿度调节:温湿度数据超过设定值时,自动控制继电器开启加热或散热功能,保持舒适的坐垫环境。
  4. 4. 手动控制:提供按键控制功能,允许用户手动调整坐垫的工作模式。
  5. 5. 蓝牙无线控制:通过HC-05蓝牙模块与手机APP通信,提供实时数据监控和远程控制功能。
  6. 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. 1. 系统初始化 (System_Init): 初始化系统的硬件模块,包括延时、LCD显示、传感器、继电器、语音播报、蓝牙和按键等。
  2. 2. 座椅检查 (Seat_Check): 检查压力传感器数据,判断是否有用户坐下。如果坐下则开始计时,久坐超过设置时间则发出提醒。
  3. 3. 座椅控制 (Seat_Control): 根据座椅占用状态和温度数据,控制加热和散热。超时后会播放语音并提醒用户起身活动。
  4. 4. 温湿度控制 (Temperature_Humidity_Control): 通过温湿度传感器控制加热器和散热器的开关。温度过低开启加热,温度过高开启散热。
  5. 5. LCD显示更新 (Display_Update): 更新LCD屏幕上的信息,如座椅状态、温湿度、座椅计时等。
  6. 6. 按键轮询 (Button_Polling): 按键控制座椅的加热、散热和久坐时长的设置。
  7. 7. 蜂鸣器提醒 (Buzzer_Alert): 久坐提醒时蜂鸣器发出提示音。
  8. 8. 蓝牙数据传输 (Bluetooth_Transmit): 将坐垫的状态数据(如温湿度、座椅占用时间等)通过蓝牙传输到手机APP,供用户查看和控制。

总结

 main.c 文件实现了智能坐垫座椅系统的基本控制逻辑,包括温湿度控制、座椅占用检测、久坐提醒、按键控制、蓝牙通信等功能。各个模块通过 STM32 控制器协调工作,满足系统设计的需求。如果其他硬件模块和驱动已经完成,可以将这些代码与相应的硬件集成,实现智能坐垫的功能。

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。