亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

智能药丸分配器

组件和用品

Microchip Technology AVR-IoT WA 开发板
× 1
Arduino Mega 2560
× 1
SG90 微伺服电机
× 4
Itead Nextion NX8048T070 - 通用 7.0" HMI TFT LCD 触摸显示器
× 1
Adafruit 16 通道 12 位 PWM/伺服驱动器 I2C
× 1
扬声器:0.25W,8 ohms
× 1
Adafruit 光电晶体管红外光传感器
× 4
Adafruit 5mm IR LED - 940nm
× 4
超声波传感器 - HC-SR04(通用)
× 1
视差反馈 360° 高速伺服
× 1
Adafruit 5V 2A 墙壁开关电源
× 1

必要的工具和机器

3D 打印机(通用)
烙铁(通用)
焊锡丝,无铅

应用和在线服务

Microchip Technology MPLAB X IDE
Arduino IDE
Autodesk Fusion 360
亚马逊网络服务 AWS IoT
亚马逊网络服务 AWS DynamoDB
亚马逊网络服务 AWS API 网关
亚马逊网络服务 AWS Lambda
微软 VS 代码

关于这个项目

为什么是这个项目?

目前市场上有两种类型的药丸分配器:非电动和自动分配器。虽然它们中的大多数都有提醒机制(并不总是适合有视觉或感官障碍的人),但这两种类型通常都需要一个人每天或每周在不同的隔间里整理药丸,使患者成为一个依赖者。如今,由于Covid-19,老人的家人或助手在照顾受抚养人方面遇到了更多困难。

这就是为什么我们认为有必要创建一个智能药丸分配器,它不需要手工制作的药丸组织,残疾人可以使用,并且有能力帮助患者更加独立。

下面我们向您展示 2020 年的 10 款最佳药丸分配器:

如您所见,在药盒世界中还有很多需要改进的地方。而这正是 SmartPill 将要解决的问题。

它是如何工作的?

SmartPill系统由2个子系统组成:

  • Smartpill 分配器: 将组织、存储和分配药丸的物理设备。它将作为患者的主界面。
  • Smartpill 网络应用程序: 允许医生或患者负责人配置和跟踪患者摄入量的 Web 用户界面。

借助具有友好用户界面的 Web 应用程序,医生可以为每个 Smartpill 分配器配置多达 4 种不同的药丸,并且可以为每个药丸每天最多选择 3 种摄入量。这使医生可以在需要时远程更改剂量,而无需患者自己干预。

SmartPill 系统的设计考虑了老年痴呆症、阿尔茨海默病或视觉或听觉障碍患者可能遇到的困难。出于这个原因,分配器有一个大屏幕屏幕,可以让患者以舒适的方式填充药丸,以及声音和光反馈,提醒患者在正确的时间服用药丸。

用户不必担心不同药丸的放置位置或放置方式。这是因为有一种智能机制可以将药丸分配到药丸分配器内,并在正确的时间分配必要的剂量。

由于 Microchip AVR-IoT 板的 WiFi 连接,SmartPill Dispenser 与 AWS 云建立了无线互联网连接,因此可以通过 Web 应用程序进行远程监控和配置。

该应用程序还会显示已服用药丸的时间,如果未服用药丸,则会通知家人。

SmartPill 分配器

配药系统

您可能想知道,分配系统是如何工作的?本节展示了所有不同的部分并解释了它们的功能。

我们必须澄清,除了屏幕之外,所有东西都是用 PLA 塑料 3D 打印的。您还可以在下方查看整个分配器的 .STL 文件。

1.基地 :它支持分配器的其余部分。它有两个孔以使运动传感器起作用。它包含一个翻盖,可将药片放入杯子中。

2.滑块 :滑块顶部支撑药丸容器。在下面有一个斜坡,药丸一直向下到皮瓣。底部有一个缺口,准备将所有电子设备放入其中。

3.侧面部分 :用于保护硬件和药丸免受潮湿、温度、污垢和灰尘的影响。

4. Nextion NX8048T070 :屏幕用作分配器和用户之间的接口。

5.顶部 :

  • 用于保护硬件和药丸免受潮湿、温度、污垢和灰尘的影响(顶部)。
  • 将滚筒与药丸容器分开(底部)。

6.视差伺服 900-0005 :360º 电动马达,放置在正确位置的零件编号 7。

7.鼓 :外部和药丸容器之间的连接管。它旋转以到达正确的容器。

8.后门 :需要用滑块进出药盒。

9.演讲者 :他们会向用户传达所有需要的信息。

10.超声波传感器 - HC SR04 :此设备将检测杯子是否已移开。

11.药丸容器 :它们含有药丸,它们会在正确的时间以正确的数量分发它们。作为原型,我们设计了带有 4 个容器的药丸分配器。但是,它可以适应更大的容量。

您想要自己的 SmartPill 分配器吗?去下载底部的 STL 文件并用你的 3D 打印机打印所有部件!该项目是完全开源的。

在下一节中,我们将逐步解释如何组装分配系统。

组装

  • 为了 3d 打印滑块 (第 2 部分 -总图) 我们把它分成三个部分。所以,首先我们组装它。挑选坚果 (2.3.2 - 滑块绘图 ) 并将它们放入滑块 (2.2 - 滑块绘图 ) 与焊工。然后拧紧两个部分(2.3.1 &2.2 - 滑块绘图 )。等着放帽子(2.4 - 滑块绘图) 直到电子设备接线完毕。
  • 将电子元件放在滑块的间隙内,包括 超声波传感器 - HC SR4 (第 10 部分 - 总图) 并拧紧滑块盖 (2.4)。
  • 组装药丸容器(查看药丸容器图 ) 各有一个 SG90 伺服器。首先将第 1 部分与第 7 部分结合起来 并将 SG90 拧到 第 7 部分 .然后将第 3 部分与第 4 部分(车轮轴承)合并,最后添加第 2 部分。然后将药丸容器拧到滑块顶部(第 2 部分 - 总图) .
  • 拧紧屏幕(第 4 部分 - 总图)。 到适当的侧面部分并安装插头。然后将 Sider 部件组装在一起 (第 3 部分 - 总图) 到基地,直到他们点击。
  • 顶部有两个部分((第 5 部分 - 总图) .我们通过再次挑选螺母并将它们安装在零件中来组装它们。这次不需要焊工。安装鼓(第 7 部分 -总图) 和视差伺服(第 6 部分 - 总图) 在它们之间,我们将两个顶部部件拧在一起。
  • 最后拧紧后门(第 8 部分 -总图) 到顶部部件的装配。

电子

主要的电子大脑是 Arduino Mega,它将负责控制分配药丸的伺服电机,以及 Nextion 触摸屏、实时时钟 (RTC)、音效和 AVR-IoT 通信板。

  • AVR-IoT 通过串行 UART 连接连接到 Arduino Mega。
  • 伺服电机由 PWM 控制。
  • RTC 通过 I2C 连接到 Arduino Mega。
  • 用于检测药丸的红外屏障传感器连接到 Arduino 板的模拟引脚。

为了复制项目,您应该在原型板或自制 PCB 的帮助下按照原理图进行所有连接。我们强烈建议将电路安装在如上图所示的木板上。

原理图见页面末尾。

SmartPill 网络应用程序

SmartPill 网络应用程序旨在促进需要设置电子设备和控制其他人的药物的体验。

  • 设置简单的 SmartPill 分配器,其中包含患者信息、必须服用的药丸、所需剂量和时间间隔。
  • 监测药丸的摄入量。

它是如何开发的?

要从一开始就开发 Web,您需要使用编程的基本领域:后端和前端。 Smartpill WebApp 是通过以下方式创建的:

  • 后端。 AWS API 网关 (HTTT API Rest)。
  • 前端。 离子和角度。要从一开始就开发网络,您需要处理编程的基本领域:后端和前端。

Ionic 是一个基于 AngularJS 的完全免费和开源的 NodeJS 框架,它通过适用于 iOS 和 Android 的本机组件库提供特定于平台的 UI 元素。它使用 HTML、CSS、JavaScript 和 Angular 等前端技术进行应用程序开发。 Ionic 可以使用 Angular CLI(命令行界面)来创建功能齐全的移动应用程序。

请记住,在使用 Ionic 开始您的网络之前,必须安装 Node.js 才能运行,因为 Ionic 是大型 JavaScript 生态系统的一部分。

离子框架文档页面可以在您的应用程序开始时毫无问题地指导您。但是,我将简要提及创建 Smartpill 应用程序的第一步:

1. 转到代码编辑器的命令行并使用 npm 安装 ionic CLI:

$ npm install -g @ionic/cli 

2. 创建一个新应用:

$ ionic start smartpill-webui空白 

3. 进入你的前端文件夹并运行它:

$ cd smartpill-webui
$ ionic serve

运行您的应用程序意味着您可以在设备的浏览器中对其进行测试。这个 Ionic 函数对于调试和测试是必不可少的。

Smartpill Web 应用基本结构。

Smartpill Web 应用程序以简单的方式组织,以简化​​导航。在应用的文件夹中,我们可以找到应用路由模块、应用组件文件、“服务”文件夹和每个路由的文件夹。

如果您从未接触过前端技术,您会在此代码的概述中注意到不同语言如何相互交互。但是,如果我们简要描述它的工作原理,您将看到的 Web 部分是文件夹的 html 文件,而 typescript 文件是用户与页面交互时运行的功能。 modules.ts 用于路由目的。

Smartpill 应用程序最重要的文件是:

  • app-routing.module.ts. 它允许用户浏览所有可用的不同路线。某些路径允许 Web 开发人员将变量从一条路径传送到另一条路径。
const routes:Routes =[
{
path:'',
redirectTo:'page-login',
pathMatch:'full'
},
{
path:'page-config',
loadChildren:() => import('./page-config/page-config.module').then( m => m.PageConfigPageModule)
},
{
path:'page-status',
loadChildren:() => import('./page-status/page- status.module').then( m => m.PageStatusPageModule)
},
...
  • post.service.ts。 它与 API 通信。此处定义了主要接口(Post、Dep 和 Log)以及 PostService 类。 PostService与API通信的主要基础功能有:get函数,从API接收信息; post,在 API 中创建新文章;删除,删除文章;并放置,在界面中编辑现有文章,但删除其中包含的先前数据。
getPosts() {
return this.http.get(this.API);
}

getDeposit() {
return this.http.get(this.DEPOSIT);
}


getLogs(){
return this.http.get (this.LOGS);
}

createPost(药丸:字符串,存款:字符串,重量:字符串,上午:布尔值,下午:布尔值,晚上:布尔值) {
return this.http.post(this.API, {
药丸,
押金,
体重,
早上,
下午,
晚上,
});
}

removePost(id:string) {
return this.http.delete(` ${this.API}/${id}`);
}
...

配置和编辑药丸页面。
Smartpill 有一个专门用于显示所有被编程为“页面配置”的帖子的路由。要创建一个新的帖子来配置药丸,用户必须按下右下角的一个按钮,这会将它们重新路由到编辑页面“page-edit-pill”。但是,如果他们不想创建而是要编辑,通过按下已创建帖子的编辑按钮,网络也会将他们重定向到“页面编辑丸”,但带有帖子的 id。这两个语句的定义如下:

  • 创建一个新的帖子按钮




  • 编辑帖子按钮
​​

Edit

“page-edit-pill”页面识别用户是否进入了带id或不带id的路由,并在简单的ifs的帮助下执行相应的功能。

  • 在路由模块中定义了 Id 的路径
{
path:'pill/edit/:postId',
loadChildren:() => import('./page-edit-pill/page-edit-pill.module ').then( m => m.PageEditPillPageModule)
},
  • 读取路由是否带有 Id
ngOnInit() {
this.actiavtedRoute.paramMap.subscribe((paramMap) => {
if(ParamMap.get("postId")) {
this. postService
.getPostById(paramMap.get("postId"))
.subscribe((res) => {
this.post =res;
this.editing =true;
});
}
});
}
  • 如果显示示例

{{editing?
'Update Your':
'Create your'
}} 存款
  • If 按钮示例

{{editing ? '更新':'提交'}}

“edit-pill-page”通过输入和选择等离子 UI 组件与用户交互,这些组件稍后将发送到 API:

  • 时间多选

单击此处选择一天中的时间。
cancelText="Cancel" okText="Submit">
早上
下午
夜晚

  • 药片输入

药丸名称:

“config-page”已使用 Angular Life Cycle 进行编程,因此当您从“page-edit-pill”或任何其他页面返回时,页面将刷新并重新加载帖子,自动更新更改。

  • 加载后期功能
loadPosts(){
this.postService.getPosts().subscribe(
(res) => {
this.posts =res;
},
(err) => console.log(err)
);
this.postService.getDeposit().subscribe(
(res) => {
this .dep =res;
console.log(this.dep);
};
(err) => console.log(err)
);

“配置页面”还有一个按钮,允许用户删除任何药丸。它是一个异步函数,显示消息警报以验证他们是否确定要执行此操作。

  • 删除帖子
async removePost(id:string){
const alert=await this.alertController.create({
header:"Alert",
subHeader:"Are you sure you要删除此存款吗?”,
消息:“您将无法恢复它。”,
按钮:[
“取消”,
{
text:"Yes",
handler:() => {
this.postService.removePost(id).subscribe(
(res) => {
console.log (res);
this.loadPosts();
},
(err) => console.log(err)
);
},
},
],
});
await alert.present();
}

日志页面

日志页面获取分配的药丸信息,并将其显示为历史路线上的日志。它的工作原理类似于“config-page”,但它只加载位于 API 中的信息:

  • 获取日志
loadPosts() {
this.postService.getLogs().subscribe(
(res) => {
this.log =res;
控制台。 log(this.log);
},
(err) => console.log(err)
);
}

ngOnInit() {
this.loadPosts();
}

ionViewWillEnter(){
this.loadPosts();
}
  • 显示日志








{{ log.date |日期:'dd/MM/yyy' }} - {{ log.date |日期:'HH_mm' }}h


{{log.patient_name}}


{{log.pills}}






亚马逊网络服务

AWS 是选择部署 SmartPill System 的服务提供商,因为它在同一生态系统中提供广泛的服务,使我们能够采用完全无服务器的方法。这允许应用程序升级到用户的需求,并且只需为使用的内容付费。

智能药丸 云架构

Smartpill 系统使用 Amazon Web Services 的完全无服务器架构。这允许应用程序按比例放大和缩小,以适应用户的需要。架构如下图所示:

Smartpill Dispenser 使用具有 WiFi 功能的 Microchip AVR-IoT 板与 AWS 生态系统进行通信。 AVR-IoT 通过 MQTT 协议通过 AWS IoT Core 连接。这允许云生态系统和硬件本身之间的双向连接。此通信用于向 Dispenser 发送分配消息以及从分配器向云端发送确认事件。

编译使用 Ionic Angular NodeJS 框架开发的 Web 应用程序前端,并将其静态文件上传到 AWS S3 存储服务。 Web 应用程序的后端是使用 AWS API Gateway 开发的调用 Lambda 函数的 HTTT API Rest 服务。这些 Lambda 函数与存储药丸配置和摄入日志的 DynamoDB 数据库进行通信。

AWS Event Bridge 用作调度程序,以便在正确的时间触发分配事件。此事件触发 Lambda 函数,该函数将在数据库中搜索每次摄入所需的药丸,并将此信息通过 IoT Core 发送到 SmartPill Dispenser。

AWS-物联网 核心

为了开始使用 AWS IoT Core 运行 AVR-IoT 板,您需要做的第一件事是将板连接到您的 AWS 账户。 Microchip 在适用于 AWS 的 IoT 开发人员指南中描述了此过程

有了这个,您的 AVR-IoT 板就可以准备好进入您的 AWS 账户了。您可以在 AWS IoT Core 的 Manage 下看到这一点 事物标签。

然后通过使用您的 WiFi 凭据配置 AVR-IoT 板来确保您的 AVR-IoT 板可以访问 Internet,如入门指南中所述:

AWS 动态数据库

然后您需要配置 Web 应用程序,为此,您需要做的第一件事是注册 Web 应用程序所需的 DynamoDB 表:

  • smartpill-history:将存储所有服用药丸的日志
  • smartpill-pills:将存储您配置的药丸

点击创建表:

给它确切的名称并选择“id”作为主键。

AWS Lambda

确保您已附加 AmazonDynamicDBFullAccess。以便 Lambda 函数可以从 DynamoDB 数据库读取/写入。为此,请转到“权限”选项卡:

然后单击角色名称。这会将您重定向到此 Lambda 函数的执行角色。我们建议每个 Lambda 函数都有自己的执行角色。

AmazonDynamoDBFullAccess 必须出现,如果没有点击附加策略并搜索“dynamodb”:

仅就本教程而言,为 Lambda 函数提供完整的 DynamoDB 访问权限是安全的,不适用于生产环境。

现在转到配置并添加来自 Github 存储库的功能代码(链接如下):

对存储库中的所有 Lambda 函数重复此操作。

然后,我们将配置 Lambda 和 IoT Core 之间的集成,以便在板发送消息时执行适当的功能。

我们将配置AVR-IoT发送的配药确认消息,以便在数据库上生成相应的日志条目和通知。

我们转到 AWS-IoT Core,点击添加和规则来配置规则:

单击创建新规则并命名:smartpill_confirmationpill 和简短说明

然后输入如下查询语句:

SELECT * FROM 'confirmationpill' 

并配置“向 Lambda 函数发送消息”操作以指向先前创建的“smartpill-confirmationpill”:

您已准备好进入下一部分。

AWS 事件桥

Event Bridge 将负责启动 lambda 函数,该函数会将消息发送到 SmartPill Dispenser,以便在正确的时间分配药丸。我们将配置 3 个触发计划事件来做到这一点。早上一班,下午一班,晚上一班。

转到 AWS Event Bridge 服务并单击“创建规则”。

给它一个名字并将 de Schedule 事件模式配置为 cron 表达式:

注意:考虑到这些 cron 表达式是 UTC 时间。

选择“smartpill-dispensepill”Lambda 函数作为目标:

该 Lambda 函数将在定义的时间执行。

为早上、下午和晚上的进餐时间再定义两条规则。

AWS API 网关

转到 AWS API 网关并单击创建 API。选择 HTTP API 并点击构建:

给它命名为“smartpill-webui”(或者任何你想要的,这并不重要)

并将所有 Lambda 函数配置为集成:

点击下一步,按照下表配置所有路由:

Finally, deploy the API to get a HTTP endpoint.

Alternatively you can import the JSON file 'smartpill-api.json' on the repository down below.

AWS S3

AWS S3 storage service is made for storing files but it can also act as a static web server for example a web page. In order to do so, you first need to create a Bucket.

Go to S3 and Click on "Create a Bucket":

Give a friendly name (this will be your DNS).

Now you will have to activate Static website hosting feature. Go to properties and go straight to the bottom. You will find this:

Click on "Edit" and Enable the Static website hosting feature and select 'index.html' as your index and error document:

Then upload your website static files that Angular has compiled and access your DNS. You are ready to go!

AVR-IoT Board

AVR-IoT board from Microchip is used as a communication interface in order to provide connectivity to the Cloud to the Dispenser. It is connected to the Main Arduino Board by means of a Serial interface.

Firmware for the AVR-IoT WA Development Board based on the original example

The already implemented CLI have been extended including the command "pill" , its corresponding callback pill_command() that parses the message and sends th confirmation JSON by MQTT to the topic "confirmationpill". Also, the message in case of unknown message is customized as well as in the callback in case of incorrect parameter.

The original CLI used the USART2, which is connected to the debugger by the PCB but is not accessible. For this version, the CLI structure and the funtionality printf() are now implemented on the USART1, which is avaliable with the pin conectors RX and TX . This alows us to use this CLI with any external device, taking into account the following configuration:

We have also managed to add a custom MQTT topic subscription with a JSON parser. On the aplication_manager.c could be found the modified version of subscribeToCloud() to subscribe to "dispensepill" custom topic and how it is linked to a custom callback receiveddispenseFromCloud() in which the data from the JSON is extracted.

On IoTPill.h header are defined the main structures used to control the data received and sent.

In order to enable communication between the Main Arduino board and the AVR-IoT we have developed a simple communication bidirectional protocol that has two messages.

  • dispensepill: Will be triggered by AWS Event Bridge at the right time and will send the event to the Dispenser to dispense a pill
  • confirmationpill :Will be send by the AVR-IoT board when the pill has been correctly dispensed in order to announce it to the AWS, which will log into the database.

'dispensepill' message (AWS → IoT Board → Arduino)

Event Bridge will trigger the smartpill-dispensepill Lambda function to send by MQTT to IoT Board a JSON formated string that has this fields:

{
"cmd":"dispensepill",
"npills":2,
"intake":{
"time":"morning"
},
"pills":{
"1":{
"pill":"Ibuprofeno",
"qty":1,
"deposit":1,
"weight":200
},
"2":{
"pill":"Paracetamol",
"qty":2,
"deposit":2,
"weight":500
}
}
}

and the IoT board will send by USART to the Arduino:

D Ibuprofeno 1 1 200 D Paracetamol 2 2 500 \n 

'confirmationpill' messageArduino → IoT Board → AWS

The arduino will send to the command "pill " and, if the delivery was incorrect or correct, it will add a ' 1 ' if it was okay:

pill 1 

This message will be processed by the custom CLI of the IoT Board taking into account the intake previusly send ( specifying the corresponding "time") and it will send the following JSON to AWS:

{
"time":"morning",
"state":"ok"
}

AWS will send the log with Lambda functions triggered to the Web service

任何问题? Leave a comment below and we will do our best to help you!

代码

Smartpill Web Application
Frontend code for the webapp user interfacehttps://github.com/makers-upv/smartpill-webui
Smartpill Backend Lambda functions
https://github.com/makers-upv/smartpill-lambda
Smartpill AVR-IoT Code
https://github.com/makers-upv/smartpill-avriot
Smartpill Arduino Code
https://github.com/makers-upv/smartpill-arduinofw

定制零件和外壳

Thingiverse Repository
Thingiverse Repository for SmartPill DispenserCAD file on thingiverse.com Pill Dispenser Mechanism that will take care of dispensing the correct quantity of pills. It is controlled by a servo.SmartPill Dispenser enclousureThe full assembly of the project. It's in STEP format so it can be modified by everyone. smartpill_full_assembly_ybV7DD7ehX.step

示意图

SmartPill Electronics HW connections

制造工艺

  1. 安眠药
  2. 避孕药
  3. Smart Bartender
  4. 智能交通灯
  5. 智能垃圾桶
  6. 智能工厂物联网
  7. UnifiedWater v1
  8. 智能百叶窗
  9. 真正的智能盒子
  10. 智能触控开关板
  11. 欧特克智能制造
  12. 什么是智能制造?