基于STM32的智能语音浴缸设计

发布于:2025-09-03 ⋅ 阅读:(11) ⋅ 点赞:(0)

基于STM32的智能语音浴缸设计

1. 系统功能介绍

智能家居的概念不断发展,现代家庭对于舒适性与智能化的需求日益增长,智能浴缸的出现正是这一趋势下的产物。传统浴缸仅具备简单的储水功能,而智能浴缸能够结合温度、水位检测、自动加热、自动注水以及语音交互,从而显著提升用户的使用体验与安全性。

本设计以 STM32单片机 为核心控制器,结合温度传感器DS18B20、水位传感器、OLED显示屏、语音识别模块及继电器控制电路,构建了一套完整的 智能语音浴缸系统。系统既能通过传感器自动采集数据并进行判断控制,也能通过语音交互实现个性化操作。

系统主要功能包括:

  1. 数据采集与显示

    • 使用 DS18B20 温度传感器检测水温;
    • 使用水位传感器实时监测水位高度;
    • 通过 OLED显示屏 实时显示水温与水位。
  2. 按键设置与自动控制

    • 提供按键操作,用户可设置水温与水位阈值;
    • 系统根据设置值自动控制加热器与水泵工作;
    • 当温度低于阈值时自动加热,当水位低于设定值时自动加水。
  3. 语音控制

    • 集成语音识别模块,用户通过语音口令控制浴缸;
    • 例如说“加水”,系统启动水泵进行加水;说“加热”,系统开启加热器。
  4. 安全保护

    • 超过设定阈值时自动停止加水或加热,避免溢水与过热;
    • 系统设计有延时与故障检测机制,提高安全性与可靠性。

2. 系统电路设计

系统硬件部分由以下几个主要模块构成: STM32最小系统、温度传感器电路、水位传感器电路、OLED显示电路、继电器驱动电路、语音识别电路、电源电路

2.1 STM32最小系统

  • 选用 STM32F103C8T6 单片机作为主控;
  • 具有丰富的GPIO资源,支持多外设接口;
  • 内部集成定时器、USART、I2C、SPI,方便与传感器和模块通信;
  • 提供时钟电路与复位电路,保证稳定运行。

2.2 温度采集电路(DS18B20)

  • DS18B20 是一种数字温度传感器,采用单总线通信;
  • 测量范围广(-55℃~125℃),精度可达 ±0.5℃;
  • 单片机通过单总线协议读取温度数据;
  • 数据经过计算后显示在OLED屏上,并用于加热控制。

2.3 水位传感器电路

  • 采用数字式水位传感器,输出电平信号;
  • 当水位高于某点时,传感器输出高电平;
  • 单片机通过GPIO口读取水位信号,实现水位检测;
  • 可与按键设定的阈值比较,判断是否需要加水。

2.4 OLED显示电路

  • 显示屏采用 0.96寸 OLED,分辨率128×64;
  • 通信方式为 I2C接口,节省IO口资源;
  • 用于显示实时水温、水位以及系统状态;
  • 界面清晰直观,用户体验良好。

2.5 继电器控制电路

  • 继电器由单片机GPIO口驱动,控制 水泵加热器
  • 当系统判断需要加水时,继电器闭合驱动水泵;
  • 当温度低于阈值时,继电器闭合驱动加热模块;
  • 继电器电路增加二极管保护,避免反向电流损坏单片机。

2.6 语音识别电路

  • 采用常见的语音识别模块(如LD3320、Elechouse语音模块);
  • 模块与STM32通过串口通信;
  • 用户通过语音下达指令,单片机解析后控制水泵或加热器;
  • 支持简单的语音命令,例如“加水”、“加热”、“停止”。

2.7 电源电路

  • 系统采用 +5V 电源供电;
  • 单片机及OLED通过 AMS1117-3.3V稳压芯片 转换为3.3V电源;
  • 继电器与水泵、加热模块单独供电,避免电流冲击影响控制部分。

3. 程序设计

系统软件部分采用 C语言 编写,基于STM32标准库开发。整体结构包括:

  1. 主程序框架
  2. 温度采集与处理模块
  3. 水位采集与处理模块
  4. OLED显示模块
  5. 按键设置与存储模块
  6. 继电器控制模块
  7. 语音识别控制模块

3.1 主程序框架

#include "stm32f10x.h"
#include "oled.h"
#include "ds18b20.h"
#include "water_level.h"
#include "relay.h"
#include "voice.h"
#include "key.h"

float temperature = 0;
uint8_t water_level = 0;
float temp_threshold = 40;   // 默认水温阈值40℃
uint8_t level_threshold = 2; // 默认水位阈值,等级制
uint8_t voice_cmd = 0;

int main(void)
{
    OLED_Init();
    DS18B20_Init();
    WaterLevel_Init();
    Relay_Init();
    Voice_Init();
    Key_Init();
    
    OLED_ShowString(0,0,"Smart Bath");
    
    while(1)
    {
        temperature = DS18B20_ReadTemp();
        water_level = WaterLevel_Read();
        
        OLED_ShowString(2,0,"Temp:");
        OLED_ShowNum(2,6,temperature,2);
        
        OLED_ShowString(3,0,"Level:");
        OLED_ShowNum(3,6,water_level,1);
        
        Key_Scan(&temp_threshold, &level_threshold);
        voice_cmd = Voice_GetCommand();
        
        ControlSystem(temperature, water_level, temp_threshold, level_threshold, voice_cmd);
    }
}

3.2 温度采集模块

float DS18B20_ReadTemp(void)
{
    int temp;
    float t;
    DS18B20_Start();
    DelayMs(750); // 转换时间
    DS18B20_Read(&temp);
    t = temp * 0.0625; // 分辨率0.0625℃
    return t;
}

说明:

  • 通过单总线协议读取温度;
  • 温度值经过换算后以浮点数形式返回。

3.3 水位采集模块

uint8_t WaterLevel_Read(void)
{
    if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == 1)
        return 3; // 高水位
    else if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 1)
        return 2; // 中水位
    else
        return 1; // 低水位
}

说明:

  • 将水位划分为低、中、高三级;
  • 通过多路水位探针信号判断水位高度。

3.4 OLED显示模块

void Display_Info(float temp, uint8_t level)
{
    OLED_ShowString(2,0,"Temp:");
    OLED_ShowNum(2,6,temp,2);
    
    OLED_ShowString(3,0,"Level:");
    OLED_ShowNum(3,6,level,1);
}

说明:

  • OLED显示实时水温与水位;
  • 提示用户当前浴缸状态。

3.5 按键设置模块

void Key_Scan(float *temp_threshold, uint8_t *level_threshold)
{
    if(Key1_Pressed()) (*temp_threshold)++;
    if(Key2_Pressed()) (*temp_threshold)--;
    if(Key3_Pressed()) (*level_threshold)++;
    if(Key4_Pressed()) (*level_threshold)--;
}

说明:

  • 提供四个按键用于设置水温与水位阈值;
  • 可存储在EEPROM中,掉电不丢失。

3.6 继电器控制模块

void ControlSystem(float temp, uint8_t level, float temp_thr, uint8_t level_thr, uint8_t voice_cmd)
{
    if(temp < temp_thr || voice_cmd == CMD_HEAT)
        Relay_Heat_On();
    else
        Relay_Heat_Off();
    
    if(level < level_thr || voice_cmd == CMD_WATER)
        Relay_Water_On();
    else
        Relay_Water_Off();
}

说明:

  • 根据阈值自动判断是否加水或加热;
  • 语音命令可直接触发继电器动作。

3.7 语音识别模块

uint8_t Voice_GetCommand(void)
{
    uint8_t cmd = 0;
    if(USART_ReceiveData(USART1) == 'H') cmd = CMD_HEAT;
    if(USART_ReceiveData(USART1) == 'W') cmd = CMD_WATER;
    return cmd;
}

说明:

  • 语音模块通过串口向单片机发送识别结果;
  • 例如“加热”返回字符‘H’,对应加热命令。

4. 总结

本设计基于 STM32单片机,结合温度采集、水位检测、OLED显示、继电器控制与语音识别模块,实现了一个功能完善的 智能语音浴缸系统

系统优势:

  1. 多模控制:既可按键设置,也可语音控制,灵活性强;
  2. 自动化程度高:水温、水位自动调节,避免用户频繁操作;
  3. 安全可靠:设有阈值保护机制,避免过热与溢水;
  4. 人机交互友好:OLED显示直观,语音交互自然。

应用前景:

  • 可广泛应用于家庭智能卫浴系统;
  • 可扩展接入物联网,实现手机APP远程控制;
  • 进一步增加智能分析功能,例如学习用户习惯,自动设定舒适模式。

通过本系统的实现,不仅能够提升浴缸的使用体验,还能增强生活的智能化水平,是智能家居发展中的重要组成部分。


网站公告

今日签到

点亮在社区的每一天
去签到