基于STM32的智能语音控制药箱

2022-09-14 02:30杨沛聪余汉泉谢依依李政乐
中国新技术新产品 2022年11期
关键词:药箱药盒舵机

杨沛聪 余汉泉 谢依依 相 钊 李政乐

(佛山科学技术学院,广东 佛山 528231)

0 引言

根据第7次人口普查数据,我国65岁以上人口比重达到13.50%,已高于世界平均水平,而针对衍生出的老年人的健康问题引发了很多社会关注。其中部分老人长期为疾病困扰需要长期服药,但由于记忆力 的衰退会忘服、错服、漏服药,造成疾病的恶性循环。为了解决这一难题,设计了一款智能语音控制药箱,能通过语音控制实现开关取药,并配有手机App设置提醒时间和数据云端实时上传服药数据功能,方便监护人照看老人并解决服药问题。

1 硬件设计简介

1.1 硬件设计原理

该药箱采用模块化设计,主要包括主控模块、语言识别模块、Wi-Fi模块、舵机控制模块和光敏传感器模块。总体功能框架如图1所示。

图1 药箱设计框架图

药箱可通过Wi-Fi模块连接服务器,与手机App建立连接,能够通过手机App设置提醒老人服药时间,定时提醒老人按时服药。通过光敏传感器识别药盒是否打开过,进而确认老人是否按时服药,并将服药情况发送给手机App,手机App上会记录药箱使用情况。药箱能够通过语言识别模块识别所需药品,并通过舵机控制模块控制舵机打开对应药盒,老人可以直接取药服药。监护人可通过手机App了解老人服药情况。

1.2 模块化功能设计总述

STM32F4-ARM Cortex-M4作为主控模块,并连接以下几大硬件模块:语音识别模块ICLD3320、Wi-Fi模块ATKESP8266、舵机控制模块和光敏传感器模块。

主控模块与Wi-Fi模块之间通过串口建立双向通信,主控模块可以向Wi-Fi模块发送数据,并通过Wi-Fi模块发送数据到云平台。Wi-Fi模块可以接收云平台的数据,并发送给主控模块。

主控模块与语言识别模块之间通过串口建立单向通信,语言识别模块识别语音后,向主控模块发送识别到的语音对应的信号。主控模块接收信号并进行相应操作。

主控模块与光敏传感器之间通过IO口建立连接,主控模块识别IO口电平高、低判断药盒的开、关。在药箱未打开的情况下,药箱内部是无光环境或光强达不到设定值,此时光敏传感器模块输出高电平,由此判断用户未打开药箱取药;当用户打开药箱后,药箱内部光照强度超过设定值,光敏传感器模块会输出低电平。

主控模块与舵机控制模块之间通过IIC协议进行通信,主控模块通过IIC协议设置舵机模块各路PWM输出的占空比大小,进而控制舵机转动,控制药盒的开、关。

药箱设计流程图如图2所示。

图2 程序流程图

1.3 语音识别模块简介

语音信号的采集和识别功能主要由基于LD3320芯片的语音识别模块实现。该芯片内部设计有专门的语音信号处理器,最多支持50条关键词的输入;LD3320是非特定人语音识别芯片,即语音声控芯片。

工作模式如下。普通模式:直接说话,模块直接识别;按键模式:按键触发开始ASR进程。口令模式:需要一级唤醒词。

使用前需要在模块的程序代码中添加识别的关键词。识别语音后语音识别模块以JSON格式发送数据至串口,主控模块接收并解析相应数据,然后执行对应动作。

其中的语音识别的操作顺序是:通用初始化→语音识别初始化→写入识别列表→开始识别,并准备好中断响应函数,打开中断允许位。

1.4 Wi-Fi模块简介

该药箱采用的是ATK-ESP8266的UART-Wi-Fi模块,ATK-ESP8266模块采用串口(LVTTL)与 MCU(或其他串口设备)通信,内置TCP/IP协议栈,能够实现串口与Wi-Fi之间的转换。通过ATK-ESP8266模块,传统的串口设备只是需要简单的串口配置,即可通过网络(Wi-Fi)传输自己的数据。利用TCP/IP协议线能够实现串口和Wi-Fi的转换。利用AT指令配置网络参数,使用STA模式即可通过路由器连接互联网,手机App则可实现对设备的远程控制。通过STM32单片机程序设计,将ESP8266接入路由器或者电脑热点,再将ESP8266配置成TCP客户端模式,将自己的云服务器设置成TCP服务端模式,ESP8266就能够将数据发送给服务端,手机App端也接入云服务器,就能够实现手机与药箱的远程通信。药箱物联网部分设计框架如图3所示。

图3 物联网远程控制功能设计框架

1.5 舵机控制模块简介

该药箱的设计采用的舵机控制模块的驱动板使用PCA9685芯片,是16通道12bit PWM舵机驱动,用2个引脚通过I2C就可以驱动16个舵机。

模块参数如下。

电压:舵机供电5 V~7 V,接受高一点的电压;逻辑电路电压:3 V~5 V;通信接口:使用i2c通信,及SCL、SDA引脚;OE反使能脚:引脚低电平为使能,不接时模块内部默认已接地使能;工作频率:40 Hz~1000 Hz。

通过控制主控模块向16路舵机控制模块的特定PWM输出路输入特定占空比的PWM信号,就可以使其对应的舵机旋转特定的角度,进而旋转到指定的位置,实现对药箱的开启与关闭。使用16路舵机控制模块最多可以同时控制16个舵机的不同旋转角度,即最多可以控制16个药盒的开、关。

1.6 光敏传感器模块简介

该药箱采用的光敏传感器模块为光敏电阻模块,光敏电阻模块对环境光线最敏感,用来检测周围环境的光线的亮度,进而触发STM32单片机。该模块在环境光线亮度达不到设定阈值时,DO端输出高电平,当外界环境光线亮度超过设定阈值时,DO端输出低电平。STM32通过识别D0端的电平高、低能够判断药盒是否打开,进而确定是否已服药。

2 软件设计简介

2.1 软件设计原理

软件设计主要分为STM32单片机编程和手机端App编程。

STM32单片机设计是通过keil5软件对STM32F4-ARM Cortex-M4芯片进行编程,分别对芯片串口2和串口3初始化,配置其波特率都为9600,使其分别与基于LD3320芯片的语音识别模块和ATK-ESP8266 WiFi模块建立连接,进而实现与它们的数据传输,同时初始化IIC,通过IIC协议,编写pca9685 16路舵机控制模块的控制函数,实现16路舵机控制模块各路PWM输出的控制,并且实时识别连接光敏传感器的IO口的电平高、低,判断药盒的开、关情况。通过编写程序,STM32F4-ARM Cortex-M4芯片主控芯片能够通过各串口、IO口和IIC协议,实现对各模块的控制以及模块间的数据传输,实现药箱所需功能。

手机端App编写是通过Eclipse开发环境进行编程,利用Activity完成操作可视化界面,使用线性布局对页面控件分布实现自适应。手机端通过HTTP协议以POST方式连接指定IP服务器,通过JavaScript Object Notation(JSON)格式获取服务器传输的包括药箱状态、定时状态的加密信息,在手机端完成解密并显示在手机上,同时可通过发送JSON格式指令向服务器发起药箱操作命令。

2.2 STM32单片机编程

STM32单片机编程主要是通过STM32主控模块对其他各模块进行初始化和调用。初始化药箱,主控模块通过串口通信IO口连接Wi-Fi模块和语音识别模块,通过IIC端口连接舵机控制模块,并对各模块进行初始化和调用。

药箱串口与Wi-Fi模块建立双向通信,并通过编写程序,使用AT指令初始化Wi-Fi模块,配置其模式为STA模式以及TCP客户端模式,再通过TCP/IP协议连接到云服务器。然后STM32接收Wi-Fi模块通过TCP/IP协议在云服务器读取到的数据,并进行数据解析处理,然后执行相应的操作。

Wi-Fi模块配置部分相关函数如下。

ESP8266_Clear();

UsartPrintf(USART_DEBUG, "0.AT ");

while(ESP8266_SendCmd("AT ", "OK"))

delay_ms(500);

UsartPrintf(USART_DEBUG, "1.RST ");

ESP8266_SendCmd("AT+RST ", "");

delay_ms(500);

ESP8266_SendCmd("AT+CIPCLOSE ", ""); //关闭TCP或UDP

delay_ms(500);

UsartPrintf(USART_DEBUG, "2.CWMODE ");

while(ESP8266_SendCmd("AT+CWMODE=1 ","OK")) //sta模式

delay_ms(500);

UsartPrintf(USART_DEBUG, "3.AT+CWDHCP ");

while(ESP8266_SendCmd("AT+CWDHCP=1,1 ","OK"))

delay_ms(500);

UsartPrintf(USART_DEBUG, "4.CWJAP ");

while(ESP8266_SendCmd(ESP8266_WIFI_INFO,"GOT IP")) //wifi名和密码

delay_ms(500);

UsartPrintf(USART_DEBUG, "5.CIPSTART ");

while(ESP8266_SendCmd(ESP8266_ONENET_INFO,"CONNECT")) ////服务器名和服务器号

delay_ms(500);

UsartPrintf(USART_DEBUG, "6.ESP8266 Init OK ");

语言识别模块使用前需先修改模块的程序代码中识别的关键词,如“gan mao yao”“fa shao yao”和“chang yong yao”等,并设置其为口令模式,即需要通过“xiao ying”唤醒语音识别功能,然后再进行语音识别对应语句。STM32通过串口与语音识别模块建立单向连接,数据只能从语音识别模块发送给STM32主控模块。语音识别模块识别语音信号,并将识别到的信息通过串口发送给STM32主控模块,STM32主控模块接收数据后,进行数据解析,通过解析结果执行相应的操作。

STM32通过IIC通信及SCL、SDA这2个引脚与舵机控制模块进行通信,通过使用IIC协议的C语言函数对舵机控制模块进行初始化以及控制各路PWM输出口的输出PWM的占空比,从而实现单个或多个舵机的转动,进而实现对药盒开关的控制。STM32主控模块通过WiFi模块接收到打开药盒的信号或者通过语音识别模块接收到打开药盒的信号后,控制舵机控制模块输出打开或关闭对应药盒的PWM信号,实现对应药盒的开启和关闭。

2.3 手机端Java编程

手机终端的设计使用Java语言完成,分别设计编写安卓的页面布局文件和Activity类文件。该设计中手机端有3个功能。使用http类连接后台系统,云服务器会自动向App发送数据,App每隔1 s自动接收云服务器发来的药箱数据;通过对接收到的数据进行解密,解析出药箱的打开和关闭情况,以及是否按时开启过药箱;实时监控服药情况,如出现异常则立即在手机App界面上弹出提示;软件能够获取药箱操作的历史记录,并在软件界面中显示,实现对老人服药情况的监控。

App端能够获取云服务器端发送过来的数据,同时也可以对药箱发送请求指令或数据。App的设计采用腾讯云服务器,云服务器后端采用Linux+Nginx+Php+Mysql架构,药箱和手机App发送和接收的数据均由云服务器进行存储和转发,进而实现数据和指令的远距离传输以及保存。

3 结语

该智能语音控制药箱具有App远程控制及实时监测功能,语言识别功能,提醒按时服药及未及时服药提醒功能,能够帮助老人按时按量服药,对保障老人身体健康有极其重要的作用。药箱能够将药箱的使用情况实时发送到手机端App,监护人能够通过手机端App实时获取老人的服药情况,关注老人的身体健康,也可以为老人设置服药提醒时间,降低老人不按时服药的风险。该药箱满足有需要服药的老人的家庭的需求,能够让子女对家长老人身体情况的了解,防止意外的发送。随着我国人口老龄化加重,该产品的市场前景广阔。

猜你喜欢
药箱药盒舵机
牛奶盒小药箱
含齿隙弹载舵机的全局反步模糊自适应控制
来来来,看看古时药箱里装了什么
基于dsPIC单片机的飞艇舵机控制实现
基于高速同步485总线通信的多通道舵机控制器设计
红外光谱法鉴别维药盒果藤根药材模型研究
“七彩药盒”在艾滋病抗病毒药物治疗中的应用
旅行便携随身药盒
基于云模型的舵机同步控制
药盒计数器的设计方案及特点