APP下载

基于STM32 的智能语音药盒设计

2023-02-23胡秋霞

电子设计工程 2023年4期
关键词:药盒调用按键

胡秋霞,田 杰,陈 诺

(西安航空学院计算机学院,陕西西安 710077)

许多老人的记忆力差,在生病时经常忘记吃药。针对老龄患者吃药困难的实际情况,设计了基于STM32 的智能语音药盒,该设计可以更好地处理老年人的吃药问题[1-2]。MEMO BOX 电子药盒是由英国剑桥的卢山研发的,这是一款智能电子药盒,造型时尚、携带方便、功能强大,能准确提示患者及时服药。该智能药盒具有对应的手机应用,可用手机提前记录服药情况,利用蓝牙与其进行数据交换[3-4]。

秦宁等[5]设计的电子药盒能够减少高龄患者按时用药中遭遇的部分阻碍,但有一些功能上的不完善现象。比如其蓝牙由于协议问题可能会导致网速慢,高龄患者在使用复杂手机APP 时容易操作失误[5]。国内对于智能语音药盒的相关研究较晚,在21 世纪初才逐渐在大城市里出现。

以上研究者在智能语音药盒方面取得了一定效果,但存在使用蓝牙时数据连接不稳定、设计复杂导致容易误操作等问题,因此需要设计一种具备较好智能提醒功能、造型简约和操作简单的电子药盒[6-7]。鉴于此,文中设计了基于STM32 的智能语音药盒系统,该系统能够提前提示患者服药并能语音提示服药时间,到了系统设置的时间后将自动进行语音提示,具有成本低廉、便于携带、操作容易等特点,并具有语音提醒功能。

1 系统概述

该系统设计了以STM32 单片机为核心的适用于普通家庭的电子药盒。该设计基于时钟程序进行计时,实时时间会被打印到液晶显示屏上,可通过键盘更改时间点。如果达到提前设置的时间,STM32 通过调用功能函数完成语音播报功能,同时向输出端持续输出低电平。系统采用STM32 为核心控制芯片[8],连接复位电路、时钟电路,共同组成控制系统。搭配稳定的时钟电路,显示模块完成状态时间显示功能,红外模块检测当前药盒盖子是否打开,使用语音播报模块接收STM32 控制核心发送的数据,从而实现定时提示功能。在程序的设计上,STM32对各个模块的函数资源进行集中执行,调用检测按键扫描功能函数消除抖动等,然后调用信息数据更新函数,使按键与屏幕进行信息交互,电子屏用于接收并打印出屏幕显示信息。系统总体结构如图1所示。

图1 系统总体结构

2 智能语音药盒设计

2.1 STM32单片机

单片机的最小系统STM32F103C8T6 核心板如图2 所示。该系统拥有最多128 kB 闪存,同时具有功耗需求小(在最小电流为36 mA 时功耗最小)和性能强等特点。该系统包含了CPU 处理芯片中央处理器、I/O 口和存储器等,只需要用相应的编译器编写程序就可以实现对外围器件的控制[8-10]。

图2 单片机的最小系统STM32核心板

2.2 硬件设计

2.2.1 显示电路

时间显示部分使用LCD1602 液晶显示器,该显示器可支持最多三十六个数字或者字符的显示,通过单片机对D0 至D9 进行控制即可显示数据,可通过软件编程自由调整刷新率。通过发送八位数据确定显示数据的位置,再通过发送八位数据判断输出的数据。当RS 引脚电平为零时,发送的是数据,当其为低电平时发送位置信息[11-12]。LCD1602 具有显示效果良好、方便携带等优点,方便数码显示。LCD1602 主要分为背光显示器与非背光显示器两种,背光显示器厚度大,该设计使用非背光显示器,它是一款工业数码液晶显示器。LCD1602 引脚功能如表1 所示。

表1 LCD1602引脚功能

2.2.2 按键电路

该设计有三个按键,分别为K1、K2、K3。K1按键用来设置时、分、秒、年、月、日。K2按键用于设置参数的加法运算,可以将设置完成的时间变量赋值给系统的时间变量,从而更改时间。K3按键与K2按键相反,用于设置参数的减法运算,当I/O 口检测到低电平时,说明K3按键已经被按下,单片机通过分析电平的变化来决定下一步调用的函数。但是当按键被按下时会产生抖动,需要使用去抖函数。系统按键电路连接图如图3 所示[13]。

图3 系统按键电路连接图

2.2.3 语音播报

电子药盒使用WT588D 芯片完成语音提示功能,WT588D 是一款可重复烧写的高性价比的模块封装语音芯片,其中芯片负责输出语音文件,喇叭可以发出声音进行提示。WT588D 还拥有完善的软件配套支持,大大降低了语音开发难度。在使用WT588D芯片之前需要先下载语音资源,STM32 需要播报音频文件时,会向WT588D 模块发送进行语音提示的命令。需要将数据下载到SPI-Flash 中,下载时只需要进行电路复位就可以同步数据,无需断电[14]。

WT588D 内置高速音频处理器以及功能强大的DA 转换器,支持两种形式的输出。WT588D 的P03端口作为信息输入,核心控制模块通过它实现对整个芯片的控制,而其他I/O 口一般被当做按键使用。PWM 输出端不能接地,P15 口为忙信号的输出口,使用之前需要检测忙信号,作用是检测当前模块是否正在处理其他工作,如果是低电平,则表示可以接收新的数据;如果是高电平,则表示当前模块正忙。VDD 可连接VCC,是电源的输入端,两端口的电压可以自动实现均衡。WT588D 引脚图如图4 所示。

图4 WT588D引脚图

2.2.4 短信模块

短信模块选用SIM800 芯片[15],SIM800 使用串口的方式联系单片机,而该设计主要用到部分AT 指令。首先使用CNMI 指令设置新任务并选择要发送的位置,当SIM 卡未满且接收到新信息时,芯片会返回信息给相应的串口,然后把数据存储到设置好的位置上。CMGF 与CSMP 命令分别用来设置发送的模式和参数,CSCS 用来设置字符编码,在发送含中文的字符时必须设置CSCS 为UCS2 并重新设置CSMP 参数,否则会出现乱码现象。发送CMGR 命令读取信息。CMGS 指令用来发送信息,一般最多可以发送70 个汉字字符,180 字节的英文字母。通过发送CPMS 指令设置和查找信息储存器,发送该命令可以查询当前SIM 卡里存储的短信信息量。CPMS 命令可以查询当前SIM 卡的短信存储空间,以及已使用的空间[16]。

SIM800 芯片电路如图5 所示,引脚2 接单片机的TXD 引脚,引脚3 连接单片机的RXD 引脚。引脚1 与引脚5 接地,在完成信息发送后电流可能会达到峰值,为了防止芯片被击穿,可以外接一个二极管。

图5 SIM800芯片电路

2.2.5 DS1302时钟

DS1302 是一种性价比高,但易受环境影响,容易出现时钟混乱的时钟电路,它可在5 V 的电压下正常工作,内部有12 个寄存器[17]。

DS1302 引脚图如图6 所示,引脚1 与引脚8 分别为连接主电源和备用电源的引脚,两者可以同时连接,芯片会选择其中电压更大的一个引脚。引脚2和引脚3 接外部晶振。引脚4 及GND 为接地引脚。引脚5 为复位或者片选线,可以把RST 从低电平升到高电平,从而完成一次信息传输。引脚6 为数据输入输出口,在控制字被输入后的下一个SCLK 时钟的上升沿,信息将被输入时钟芯片,信息每次从零开始到高位七输出。在接着的控制字后的下一个下降沿,从零位至七位读取芯片的数据。引脚7 为SCLK,一般在一个上升下降沿的间隔中进行数据操作。

图6 DS1302引脚图

2.3 软件设计

该设计整体的流程图如图7 所示。具体步骤如下:①完成各个部分如GPIO 引脚、LED、时钟电路和GSM 等的初始化工作。②读取时钟电路的时间并显示。③用一个标记变量判断是否应发送短信,如果标记变量为1,则调用发送短信函数,否则不发送并将标记变量置为0。④判断是否到吃药时间,若是,则将语音标志位置为1,并进行播报。⑤语音播报使用红外技术,其思想是判断红外是否遮挡,若遮挡则语音标志位置为0,则停止语音播报。⑥判断GSM 是否发送完毕,如果不是,则继续语音播报,否则结束[18]。

图7 主程序流程图

2.3.1 GSM模块程序设计

GSM 模块程序设计主要步骤如下:

1)调用void Sim800_init()函数进行初始化,调用其他子函数时都需要调用清除函数清空接收的缓存。

2)调用模式设置函数子函数Sim_SendStr("AT+CMGF=1 "),将其设置为文本发送模式。因为SMS信息为全英文,所以将Sim_SendStr("AT+CSCS="GSM" ")设置成字符模式,含中文时必须设置为UCS2 编码。

3)调用发送处理函数void Send_Sms(char*number,char * content),先清空发送缓存区,然后调用Sms_SendStr(gsm_shuzu)函数给预设的手机号发送文本短信,其中gsm_shuzu 是一个字符串,它是AT 指令CMGS 与号码的拼接。

4)经延迟后,调用Sms_SendStr(gsm_wenben)函数,其中gsm_wenben 为发送的内容。

2.3.2 WT588D模块程序设计

WT588D 模块程序主要步骤如下:

1)设置存储器容量,装载.WAV 格式的音频文件并设置其格式,比如采样率、时长等信息。

2)进行忙信号设置,可自由选择高低电平输出,然后进行地址选择,同一地址可装载不同的语音段。

3)设置一个标志位yuyin_flag 标志是否进行语音播报,当它为1 时进行语音提示,为0 时则不进行语音提示。

4)使用或判断系统设置的三次吃药时间与当前时间是否相同,只要有一次相同则调用void Line_1A(unsigned char dat)函数获取语音地址,然后将yuyin_flag 标志位置为1,进行语音播报。同时,使用if 判断当yuyin_flag 标志位为1 时,开始每秒自增1,当自增到50 s 时,将yuyin_flag 标志位置为0,停止语音提示。

5)当红外感应的标志位Hw_flag 为0 时,表示药盒被打开,此时yuyin_flag 标志位也变为0,即停止播报。

3 结束语

文中设计选用的模块在功能完备的情况下最大可能地选择性价比高的器件,电子药盒使用STM32单片机,显示屏使用LCD1602,语音模块采用WT588D芯片以及DS1302 时钟芯片。

文中主要实现了SMS 提示信息发送,使用液晶显示屏显示信息,按键电路完成对三次吃药时间的确定,方便到了系统设定时间进行语音提示。短信功能是该设计的一个亮点,在程序中主要调用AT 命令AT+CMGS、AT+CSCS 等函数,实现数据和指令的传输,完成短信发送功能。

猜你喜欢

药盒调用按键
基于有限状态机的按键检测程序设计
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
按键消抖在单片机和FPGA实验教学中的应用
一种免排序方便避光药盒的设计与应用
基于系统调用的恶意软件检测技术研究
一种多方向导光按键结构设计
红外光谱法鉴别维药盒果藤根药材模型研究
“七彩药盒”在艾滋病抗病毒药物治疗中的应用
旅行便携随身药盒