基于STM32单片机智能药盒定时吃药喂水蓝牙APP设计

1 系统功能介绍

随着现代医疗水平的提升和人们健康意识的增强,越来越多的人需要长期规律性地服药。然而在实际生活中,很多人因工作繁忙、记忆疏忽而出现漏服或错服药物的情况,这不仅影响治疗效果,甚至可能危害身体健康。针对这一问题,本文设计了一款 基于 STM32 单片机的智能药盒。该系统结合了 定时提醒、LED 指示、蜂鸣器报警、到位检测、蓝牙通信 等功能,并配套 手机 APP 实现远程交互,能够显著提升用户的服药依从性。

系统功能概述如下:

  1. 定时提醒功能:通过 APP 端设定 3 个吃药时间点,当到达设定时间时,单片机控制相应药盒底部的 LED 灯点亮,同时蜂鸣器发出报警提示。
  2. 开盒检测功能:每个药盒盖子上安装了到位开关,当用户打开药盒后,开关触发信号传输给单片机。
  3. 信息反馈功能:开盒动作通过蓝牙模块传输到手机 APP,用户或家属可以实时查看是否按时服药。
  4. 人机交互功能:用户可在 APP 上灵活设置服药时间,APP 显示每天的吃药记录和提醒信息。
  5. 多药盒管理:系统支持 3 个药盒的独立管理,可以分别设定不同的服药时间,适合需要多种药物同时管理的患者。
  6. 扩展性强:本系统可进一步扩展到更多药盒、加入语音播报或联网功能,以实现更智能的健康管理。

该智能药盒设计具有 提醒及时、交互便捷、信息可追溯 的优点,特别适合老年人、慢性病患者等需要长期服药的人群。


2 系统电路设计

整个系统的硬件电路由 STM32 单片机电路、LED 灯电路、到位开关检测电路、蜂鸣器电路、蓝牙模块电路、电源电路 六部分组成。

2.1 STM32 单片机电路

  • 核心作用:STM32F103C8T6 作为主控芯片,负责定时功能管理、LED 控制、蜂鸣器驱动、开关状态检测以及蓝牙数据通信。

  • 选型理由:STM32F103C8T6 性能稳定,带有丰富的定时器和串口接口,能满足定时提醒和蓝牙通信的需要,同时拥有足够的 I/O 口用于连接 LED、按键和蜂鸣器。

  • 电路特点

    • 串口用于与蓝牙模块通信;
    • GPIO 用于驱动 LED 灯和检测开关信号;
    • 另一路 GPIO 控制蜂鸣器报警。

2.2 LED 灯指示电路

  • 功能:药盒底部安装的 LED 用于提示用户哪个药盒需要取药。
  • 电路设计:每个 LED 与限流电阻串联后接到单片机 GPIO,由程序控制其亮灭。
  • 特点:视觉直观,用户看到对应药盒 LED 亮起即可取药。

2.3 到位开关检测电路

  • 功能:检测药盒是否被打开。
  • 电路原理:在药盒盖子处安装微动开关或霍尔开关,用户打开药盒时,开关状态变化,单片机检测到该信号。
  • 作用:用于确认用户是否按照提醒取药,并将结果反馈到 APP。

2.4 蜂鸣器报警电路

  • 功能:在定时时间到达时,蜂鸣器发出声音,配合 LED 灯增强提醒效果。
  • 电路特点:采用有源蜂鸣器,由 STM32 GPIO 控制,输出高电平时蜂鸣器响。
  • 优点:相比 LED 灯,声音提示更容易引起用户注意,尤其适合老年人。

2.5 蓝牙模块电路

  • 功能:实现药盒与手机 APP 之间的无线通信。

  • 模块选择:常用 HC-05 或 HC-06 蓝牙串口模块,支持与 STM32 串口通信。

  • 电路设计

    • TXD → STM32 RXD
    • RXD → STM32 TXD(必要时加电平转换)
    • VCC 接 5V,GND 接地

2.6 电源电路

  • 功能:为整个系统供电。

  • 电路特点

    • 使用 5V 电源输入,通过 AMS1117 等稳压芯片输出 3.3V,为 STM32 和蓝牙供电;
    • LED 与蜂鸣器由 5V 供电。

3 程序设计

程序设计部分主要包括 主程序、定时管理模块、LED 控制模块、开关检测模块、蜂鸣器模块、蓝牙通信模块

3.1 主程序逻辑

主程序主要负责初始化外设,并在主循环中处理定时任务和蓝牙通信。

#include "stm32f10x.h"
#include "lcd.h"
#include "led.h"
#include "beep.h"
#include "switch.h"
#include "bluetooth.h"
#include "timer.h"

uint8_t medicine_status[3] = {0,0,0}; // 记录三个药盒是否已取药
uint8_t medicine_time[3] = {8,12,20}; // 默认定时时间(小时)

int main(void)
{
    LED_Init();
    Beep_Init();
    Switch_Init();
    Bluetooth_Init();
    Timer_Init();

    while(1)
    {
        Timer_Check(medicine_time, medicine_status); // 检查是否到吃药时间
        Switch_Check(medicine_status);               // 检测药盒开关
        Bluetooth_Task(medicine_status);             // 蓝牙数据处理
    }
}

3.2 定时管理模块

定时模块用于判断是否到达预设的吃药时间,如果到时,则点亮相应 LED 并启动蜂鸣器。

void Timer_Check(uint8_t *time_set, uint8_t *status)
{
    uint8_t now = Get_Current_Hour(); // 获取当前时间(RTC 提供)

    for(int i=0; i<3; i++)
    {
        if(now == time_set[i] && status[i] == 0)
        {
            LED_On(i);
            Beep_On();
        }
    }
}

3.3 LED 控制模块

void LED_On(uint8_t index)
{
    switch(index)
    {
        case 0: GPIO_ResetBits(GPIOB, GPIO_Pin_0); break;
        case 1: GPIO_ResetBits(GPIOB, GPIO_Pin_1); break;
        case 2: GPIO_ResetBits(GPIOB, GPIO_Pin_2); break;
    }
}

void LED_Off(uint8_t index)
{
    switch(index)
    {
        case 0: GPIO_SetBits(GPIOB, GPIO_Pin_0); break;
        case 1: GPIO_SetBits(GPIOB, GPIO_Pin_1); break;
        case 2: GPIO_SetBits(GPIOB, GPIO_Pin_2); break;
    }
}

3.4 开关检测模块

用于检测药盒是否被打开,若检测到开盒,则关闭对应 LED、停止蜂鸣器,并标记已服药。

void Switch_Check(uint8_t *status)
{
    if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0) // 药盒1
    {
        status[0] = 1;
        LED_Off(0);
        Beep_Off();
        Bluetooth_Send("Box1 Opened\n");
    }
    if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) == 0) // 药盒2
    {
        status[1] = 1;
        LED_Off(1);
        Beep_Off();
        Bluetooth_Send("Box2 Opened\n");
    }
    if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2) == 0) // 药盒3
    {
        status[2] = 1;
        LED_Off(2);
        Beep_Off();
        Bluetooth_Send("Box3 Opened\n");
    }
}

3.5 蜂鸣器模块

void Beep_On(void)
{
    GPIO_ResetBits(GPIOB, GPIO_Pin_10); // 假设蜂鸣器接PB10
}

void Beep_Off(void)
{
    GPIO_SetBits(GPIOB, GPIO_Pin_10);
}

3.6 蓝牙通信模块

蓝牙模块负责与手机 APP 进行通信,传输药盒开启状态和接收定时设置信息。

void Bluetooth_Task(uint8_t *status)
{
    if(Bluetooth_ReceiveFlag)
    {
        char *cmd = Bluetooth_Read();
        if(strncmp(cmd,"SET",3)==0)  // 例如指令:SET 8 12 20
        {
            sscanf(cmd,"SET %d %d %d",&medicine_time[0],&medicine_time[1],&medicine_time[2]);
            Bluetooth_Send("Time Updated\n");
        }
    }

    // 每次更新状态给 APP
    char msg[32];
    sprintf(msg,"Status:%d%d%d\n",status[0],status[1],status[2]);
    Bluetooth_Send(msg);
}

4 总结

本文设计了一种 基于 STM32 单片机的智能药盒系统,实现了 定时吃药提醒、LED 灯提示、蜂鸣器报警、开盒检测、蓝牙信息反馈 等功能。主要特点如下:

  1. 智能化提醒:定时提醒用户按时吃药,避免漏服。
  2. 多方式提示:LED 灯 + 蜂鸣器结合,增强提醒效果,尤其适合老年人。
  3. 实时监控:通过蓝牙将开盒信息反馈到 APP,方便用户和家属查看。
  4. 操作便捷:APP 可直接设置吃药时间,灵活调整。
  5. 扩展性强:可扩展到更多药盒,增加联网功能,实现远程监控和数据存储。

该系统不仅可以应用于家庭,还可推广到养老院、医院等场景,为用药管理提供了有效的技术支持,具有较强的实用性和应用前景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值