基于AIR32单片机的智能药盒 - 嘉立创EDA开源硬件平台

编辑器版本 ×
标准版 Standard

1、简单易用,可快速上手

2、流畅支持300个器件或1000个焊盘以下的设计规模

3、支持简单的电路仿真

4、面向学生、老师、创客

专业版 professional

1、全新的交互和界面

2、流畅支持超过3w器件或10w焊盘的设计规模,支持面板和外壳设计

3、更严谨的设计约束,更规范的流程

4、面向企业、更专业的用户

专业版 基于AIR32单片机的智能药盒

简介:基于单片机的智能药盒设计。

开源协议: GPL 3.0

(未经作者授权,禁止转载)

已参加:星火计划2023

创建时间: 2023-05-29 10:55:37
更新时间: 2023-10-26 10:06:21
描述

项目说明

        随着科技的发展和人们对生活品质要求的提高,人们对健康的追求越来越高,人们也越来越关注用药安全和药品健康问题。如果错误的服用药物往往会引起各种不良反应,严重的甚至危及生命。与此同时,人们平均寿命的延长,随之而来的是老年人数量逐年增加,人口老龄化是全球各个国家都在面临的问题,随着年龄的增长,老年人身体容易出现各种慢性病或者需要补充各种微量元素,因此日常需要持续吃药。

       在现实生活中,老年人经常会因为记忆力减退甚至丧失而导致遗忘,难免会出现漏服药的现象,而当今社会老年人的子女往往会因为工作等原因无法及时提醒老年人按时服药。

因此,设计一款帮助老年人服药减少错服、误服药品等问题的智能药盒对于保障老年人身体健康和减轻子女负担具有重要意义。

本项目设计的基于单片机的智能药盒系统,能够检测用户是否在设定的服药时间内打开药盒并服药的实时监测,能在到达服药时间后通过闹钟提醒用户准时用药。

此外,智能药盒可以通过 WIFI 无线模块连接到用户的移动应用程序中,通过微信小程序实时检查药物的使用和存储。能帮助患者更好地管理和控制他们的用药,减少健康风险,并提高治疗效果,以便患者能够以最佳方式获得最大治疗效益。

 

开源协议

GPL 3.0 

    这是GUN的通用公共许可证,只要在工程项目中使用了GPL协议下的产品,那么这个工程项目必须采用GPL协议,也就是说必须开源和免费。

    GPL的出发点是代码的开源与免费使用和引用、修改、衍生代码的开源与免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。

    GPL最显著的特点是“病毒性传播”和“不允许闭源的商业发布”,我们熟悉的Linux就是使用了GPL许可。 

 

项目相关功能

 

项目主要包括嵌入式软硬件设计和微信小程序设计。

 

项目属性

本项目为首次公开,为本人原创项目。项目未曾在别的比赛中获奖。

 

项目进度

项目目前已经全部完成。

 

设计原理

本地提醒服药

智能药盒最主要的功能是提醒病人按时按量服药。因此智能药盒需要实现在本地离线情况下能够完成提醒病人服药的功能,且需要有明显的声光等信息进行明显的提示。

因此本设计选择32位单片机作为系统主控,通过C语言编程进行整个系统的功能实现。为实现本地服药时间的确定,选择DS1302时钟芯片为智能药盒提供时间信息同时选择蜂鸣器和LED来实现声光提醒功能。

当单片机通过SPI协议读取当前时间,检测到达设定的服药时间时能够驱动蜂鸣器和LED来提醒服药。

药品数据上传

作为智能药盒具有联网能力是最基本的需求。为实现不在父母身边的子女能实时查看父母的服药情况,采用WIFI方式联网。

通过MQTT协议连接云服务器进行药品数据的上传,方便监护人能够远程查看服药信息。

终端查看设备方面在对比APP和微信小程序后选择微信小程序。理由如下:

1.微信小程序无需安装,打开即用。

2.微信小程序依托于微信,微信基本是每人手机的必备软件。

相关数据前端显示

对于智能药盒,服药时间、服药数量和服药种类等信息的显示也是至关重要。

详细的信息展示有利于在不打开药盒的情况下了解存储药品的信息,方便老人在服药时通过观察屏幕信息知道服药数量和服药种类,避免额外的提醒。

本设计采用OLED屏幕作为相关信息的显示设备。OLED有着色彩鲜、精致灵敏、功耗低、分辨率高的优点,OLED同时还具有自发光的特性,因此无论是在夜晚还是白天阳光强烈的时候都能保证能看清屏幕所显示的服药信息。

服药和剩余数量检测

智能药盒具有检测剩余药品数量的功能,以便于用户随时监控服药情况和补充药品。

由于取药时手指能够对红外线进行阻挡,因此本设计采用红外线传感器进行剩余药品的检测,当红外线传感器在服药时间检测到有取药的行为即认为完成了服药,同时内部程序将剩余药品数量进行减少。

 

软件说明

 

代码逻辑结构框架

 

通电开机后,系统首先进行各硬件部分的初始化,初始化成功之后进行ESP01S联网获取当前时间,并将时间写入DS1302的对应寄存器。

然后ESP01S连接到阿里云物联网平台的云服务器。智能药盒屏幕显示实施时间。此时用户可以操作按键或者通过小程序进行服药时间的设定,

共可以设置三组闹钟,如果到达设定的服药时间,蜂鸣器报警提醒,对应药盒提示打开,屏幕上出现服药的信息。如果在到达服药时间后未及时服药则发送短信通知监护人。

并且将服药信息上传云端,可以便于通过微信小程序远程查看。

 

信息显示函数:

 

 

小时显示函数:

 

 

药品数量显示:

 

药品数量显示

 

分钟显示:

 

 

药品数量显示:

 

 

解析时间:

 

void cJSON_Time_Parse(void)
{
    char *data_pt;
    char *day_string;
    char *moon_string;
    char *year_string;
    char *hour_string;
    char *minute_string;
    char *second_string;


//   data_pt = strstr((const char *)Time_buff, (const char *)"sysTime1");  //寻找到时间结果的地址
//   data_pt = strstr((const char *)Time_buff, (const char *)"datetime_1");  //寻找到时间结果的地址
    UsartPrintf(USART_DEBUG, "时间%s\r\n",Time_buff);


    if(data_pt != NULL)
    {
        
        hour_string = data_pt + 24;       //小时地址
        minute_string = data_pt + 27;   //分钟地址
        second_string = data_pt + 30;   //秒中地址        
        strncpy(dest,hour_string,2);
        hour_return =  atoi(dest);
        strncpy(dest,minute_string,2);
        min_return  =  atoi(dest);
        UsartPrintf(USART_DEBUG, "时间%d:%d\r\n",    hour_return, min_return );

        UsartPrintf(USART_DEBUG, "时间获取并处理成功\r\n");

    }
    else
    {

        UsartPrintf(USART_DEBUG, "时间获取失败\r\n");
    
    }
}

//得到年函数(以年开始的字符串长度过长,因此使用不一样的方法)
//输入值是年位置的地址
//返回值是 整型的10进制四位数
int Get_Year(char *y)
{

    int year_return;
    char *year_temp;
    char year[5] = {0};
    char i;
//年的获取须要提取一次字符串,不然没法读取
    year_temp = y;

    for(i = 0; i < 4; i++)
    {
        year[i] = *year_temp;
        year_temp ++;
    }

    year_return =  atoi(&year[0]);
    return year_return;
}

//得到月份函数
//输入值是月份位置的地址
//返回值是 整型的10进制两位数
int Get_Moonth(char *m)
{
    int moonth_return;
    moonth_return = atoi(m) / 100000000; //取月份
    return moonth_return;
}

//得到日期函数
//输入值是日期位置的地址
//返回值是 整型的10进制两位数
int Get_Day(char *d)
{


    int day_return;
    day_return = atoi(d) / 1000000; //取日期

    return day_return;
}

//得到时间
//输入值是时间的位置的地址
//返回值是 整型的10进制的时间总秒数
int Get_Times(char *h, char *m, char *s)
{
    int time_return;
    int hour_return;
    int min_return;
    int sec_return;

    hour_return = atoi(h) / 10000; //取小时
    min_return = atoi(m) / 100; //取分钟
    sec_return = atoi(s);   //取秒数

    time_return = hour_return * 3600 + min_return * 60 + sec_return; //转换成总秒数

    return time_return;
}

微信小程序关键代码

使用picker-view 组件实现滚动分类选择功能。

创建scrollSelecter.vue文件来进行选择器样式的编写,在添加服药计划界面通过import的方式进行功能的导入。

通过创建bindChange(e)事件来将设置的时间存储到数组当中,便于显示和下发给智能药盒。

在添加服药计划界面通过 getSelectRes(res)函数得到设置的服药时间等信息。

 

实物展示

 

 

三维猴树脂3D打印外壳,嘉立创PCB制作,TypeC供电,控制主体为两层PCB叠加,通过铜柱连接,底层PCB为红外检测模块和联网模块。顶层PCB为AIR32主控和OLED显示屏,整体控制通过按键或者微信小程序控制。

 

微信小程序展示

 

设计注意事项

本工程只包含智能药盒的控制显示部分,底层传感器PCB请参考附件或者如下链接:

传感器底板链接

其他

演示视频:基于合宙air32开发的家庭智能药盒

因某些原因,项目源码只提供基础部分。

工程附件:嵌入式代码

微信小程序

 

设计图
原理图
1 /
PCB
1 /
未生成预览图,请在编辑器重新保存一次
工程视频/附件
序号 文件名称 下载次数
1

智能药盒外壳文件.zip

34
工程成员
侵权投诉
相关工程
换一批
加载中...
添加到专辑 ×

加载中...

温馨提示 ×

是否需要添加此工程到专辑?

温馨提示
动态内容涉嫌违规
内容:
  • 153 6159 2675

服务时间

周一至周五 9:00~18:00
  • 技术支持

support
  • 开源平台公众号

MP