张力弓,蒋一笔,邹林宏,印 松
(上海电机学院机械学院,上海 201306)
目前,许多家庭中会常备一些药物以应对常见的疾病,例如治疗感冒、咳嗽的药品,但是这些药品通常直到过期都极少被使用,而现有普通的家用药箱缺少过期提醒功能,如果使用者稍不注意误服过期药物会导致意外发生[1]。此外,许多老年人会受一些慢性疾病的困扰,需要长期服用各种药品,因此,药品的存放管理是必须面对的一个问题。许多家庭通常将药品随意存放在床头柜、抽屉等地方,不仅容易造成找寻困难,甚至有可能导致小孩误食药品而威胁生命。同时,在无监护人陪伴时,家中的老人或小孩经常由于遗忘、视力不好等原因,容易出现错服、漏服药品的情况[2]。
针对以上问题,基于Arduino 设计了一种具有药品信息存储功能的家用智能药箱,该药箱可实现对药品的智能化管理,可监控药箱内所存放药品的保质期,同时可以设置闹钟定时提醒用户服药,解决了现有药箱存在的问题,可有效避免药品误服、错服、漏服的情况。
该家用智能药箱结构设计如图1 所示。其箱体为三层抽屉结构,每个抽屉通过隔板分隔成多数量的存储格,抽屉两侧设置有滑轨,抽屉通过滑轨设置在箱体中,并在抽屉两侧设有电磁锁,用以控制抽屉的开闭。在每层抽屉以及抽屉的存储格中均设有LED 灯,用以指示药品所处位置。触摸显示屏嵌在箱体的上表面,用于和用户交互,通过触摸显示屏实现对药箱的控制。上表面还设有开关,用以控制药箱的开启、关闭。箱体底部设有蜂鸣器,通过蜂鸣器向用户发出声音提醒,提醒用户按时吃药,或者提醒药箱内有药品即将过期。箱体顶部设有电气层,用以放置控制器、电源及继电器等电气元件。
图1 家用智能药箱结构设计示意图
家用智能药箱主菜单界面设计如图2 所示。该家用智能药箱除具有现有家用药箱的存储功能外,还具有存储药品相关信息,自动计算过期时间、及时提醒用户更换,定时提醒用药等功能。
图2 家用智能药箱主菜单界面设计
用户通过电容触摸屏编辑存放药品的名称、生产日期、保质期、主要疗效的相关信息,系统会依据药品信息给出存储位置建议供用户选择,用户确定存放位置后,相应层抽屉的电磁锁开关被打开,使药箱相应层的抽屉沿导轨自动弹出,同时存储位置的LED 灯亮起,用户将药品放入后将抽屉关上,电容触摸屏会显示存放成功的字样。
药品取出过程与存放过程类似,用户通过电容触摸屏输入药品名称或是药品存放位置确认所要取出的药品,相应层抽屉的电磁锁开关被打开,使药箱相应层的抽屉自动弹出,同时存储位置的LED 灯亮起,用户将药品取出后将抽屉关上,电容触摸屏会显示存放成功的字样。
通过药品信息存储系统,用户可以查看药箱中所存药品的名称、存放位置、过期时间等相关信息,并在药品过期前30 d 通过药箱底部的蜂鸣器提醒用户及时处理,并通过电容触摸屏显示过期药品相关信息。如药品已过期,则会在药品列表中显示已过期的状态,同时在用户取药时也会判断药品是否过期,以防止服用过期药物导致意外发生。此外,用户还可以根据医嘱,设置服药闹钟,药箱会在指定时间通过蜂鸣器和触摸显示屏提醒用户服药,最多可支持设置4 个服药闹钟。
药品建议部分列举了多数家用药箱中常备的列表清单供用户参考[3]。用户可以根据此清单来储备药品,以备不时之需,也可以在此基础上添加自己需要的药品。
本文控制部分基于Arduino UNO 开发板设计。控制系统如图3 所示,9 V 电源模块为控制电路供电,Arduino 与电容触摸屏使用I2C 方式通信,完成控制命令和数据传输,从DS1302 时钟模块获取实时时间,并通过I/O 口控制指示灯、蜂鸣器、电磁锁做出相应动作。
图3 控制系统组成
相较于其他单片机(例如STM32 等)而言,Arduino具有编程简单、易于上手的优点,且价格相对便宜。Arduino UNO 采用ATmega328 微控制器,有14 个数字输入/输出引脚、6 个模拟输入引脚,支持UART 串口通信、I2C 通信和SPI 通信等多种通信模式。可通过官方提供的Arduino IDE对其进行编程,使用便捷,并支持加载第三方的函数库。
Arduino UNO 与vLcds HMI 电容触摸屏通过I2C 数字化串口连接,采用双线(SDA、SCL)方式进行双向分时通信,该方式可以通过串口地址识别总线上的不同类型器件,是器件间主要接口类型。I2C 接口利用这两条线上信号的变化,实现物理比特传输,并按规定的数据格式进行信息交换,完成控制命令和数据传输[4],其具体接线方式如表1 所示,VCC和GND 引脚分别连接Arduino 的5 V 和GND 引脚,为触摸屏供电;SDA、SCL 引脚连接Arduino I2C 通信接口SDA 和SCL;INT 信号引脚连接Arduino 外部中断复用端口D2,用于接收中断触发信号,进入中断服务程序。
表1 Arduino UNO 与vLcds HMI 电容触摸屏接线方式
MH 实时时钟模块集成了DS1302 实时时钟芯片、32 768 Hz晶振和CR2032 纽扣电池。在Arduino 控制程序中通过DS1302 函数库驱动DS1302 时钟芯片获取时间、日期等信息。使用DS1302_SetTime 函数设置当前时间和日期,把程序烧录至时钟芯片后将该命令注释掉,再次烧录,所设置时间便储存在时钟芯片的内存中。使用DS1302_GetTime 函数将实时的时间、日期信息作为返回值输出,即可获得实时的时间、日期信息。当药品的生产日期和保质期信息被录入后,控制程序自动计算过期时间,通过比较实时日期以判断药品是否过期。
药箱的单层抽屉采用12 V 四线电磁锁开关进行控制,由单独的12 V 电源模块供电,使用Arduino 的数字I/O 引脚驱动继电器对其进行控制,只需对其提供0.5 s 的高电平即可开启。该电磁锁除电源线和接地线外,还有2 根线,具有检测开关状态的功能,根据不同的返回值,可以对电磁锁开关的状态进行判断,进而判断单层抽屉的开关状态,从而避免忘记关闭药箱情况的发生。
本文提出的家用智能药箱相较于传统药箱实现了对药品信息的存储与管理,且方便存取,可提醒人们药品过期,对常见病症可提供用药建议,具有传统家用药箱不具有的智能化功能。同时为适应智能家居的发展,这套信息存储系统可应用于智能衣柜、智能冰箱等其他智能家居领域。未来,还可以设计配套的手机应用程序,可实现远程操作,能够随时随地了解家中药箱的一切情况,避免家中常备药品过期情况的发生。