Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

Composants et fournitures

Composant Quantité
Carte de développement Microchip AVR-IoT WA 1
Arduino Mega 2560 1
Micro-servomoteur SG90 4
Écran tactile TFT HMI Nextion NX8048T070 7.0" 1
Pilote PWM/Servo 16 canaux 12-bit I2C Adafruit 1
Haut-parleur 0.25W, 8 ohms 1
Capteur IR Photo-transistor Adafruit 4
LED IR 5mm 940nm Adafruit 4
Capteur ultrasonique HC-SR04 (générique) 1
Servo à retour 360° haute vitesse Parallax 1
Alimentation murale 5V 2A Adafruit 1

Outils et machines nécessaires

Applications et services en ligne

À propos de ce projet

Pourquoi ce projet ?

Actuellement, il existe sur le marché deux types de distributeurs de pilules : non-électriques et automatiques. Bien que la plupart disposent d'un mécanisme de rappel (pas toujours adapté aux personnes malvoyantes ou ayant des troubles sensoriels), les deux types nécessitent normalement qu'une personne organise les pilules quotidiennement ou hebdomadairement dans différents compartiments, rendant le patient dépendant. Aujourd'hui, en raison du Covid-19, les proches ou assistants des personnes âgées ont plus de difficultés à prendre soin des personnes dépendantes.

C'est pourquoi nous avons vu la nécessité de créer un distributeur de pilules intelligent qui :

Voici ci-dessous les 10 meilleurs distributeurs de pilules de 2020 :

(L'article original mentionnait une liste mais ne l'incluait pas dans le contenu fourni)

Comme vous pouvez le constater, il reste beaucoup à améliorer dans le monde des piluliers. C'est exactement ce que SmartPill va résoudre.

Comment ça marche ?

Le système SmartPill est composé de 2 sous-systèmes :

Grâce à l'application web avec une interface conviviale, le médecin peut configurer jusqu'à 4 pilules différentes par distributeur et sélectionner jusqu'à 3 prises par jour pour chaque pilule. Cela permet au médecin de modifier le dosage à distance quand nécessaire, sans intervention du patient.

Le système SmartPill a été conçu en tenant compte des difficultés des patients atteints de démence sénile, d'Alzheimer, ou de déficiences visuelles/auditives. Le distributeur dispose d'un grand écran pour faciliter le remplissage, ainsi que d'un retour sonore et lumineux pour rappeler la prise au bon moment.

L'utilisateur n'a pas à se soucier de l'emplacement des pilules : un mécanisme intelligent les répartit dans le distributeur et délivre la dose exacte au moment voulu.

Le SmartPill Dispenser dispose d'une connexion Internet sans fil vers le Cloud AWS grâce au WiFi de la carte Microchip AVR-IoT, permettant une surveillance et une configuration à distance via l'application web.

L'application affiche aussi quand les pilules ont été prises et notifie le proche si une pilule n'a pas été prise.

SmartPill Dispenser

Système de distribution

Vous vous demandez comment fonctionne le système de distribution ? Cette section détaille toutes les pièces et leur fonctionnalité.

Précisons que hormis l'écran, tout a été imprimé en 3D avec du PLA. Vous pouvez aussi consulter le fichier .STL complet du distributeur en bas de page.

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

1. Base : Supporte l'ensemble. Deux trous pour le capteur de mouvement. Contient un clapet qui amène les pilules dans le gobelet.

2. Curseur (Slider) : Le dessus supporte les contenants à pilules. En dessous, une pente guide les pilules vers le clapet. En bas, un espace pour l'électronique.

3. Pièces latérales : Protègent le matériel et les pilules de l'humidité, température, saleté et poussière.

4. Écran Nextion NX8048T070 : Interface entre le distributeur et l'utilisateur.

5. Pièces supérieures :

6. Servo Parallax 900-0005 : Moteur électrique 360° qui positionne la pièce n°7.

7. Tambour (Drum) : Tube de connexion entre l'extérieur et les contenants. Tourne pour atteindre le bon contenant.

8. Porte arrière : Permet d'insérer/retirer les contenants avec le curseur.

9. Haut-parleurs : Communiquent toutes les informations nécessaires à l'utilisateur.

10. Capteur ultrasonique HC-SR04 : Détecte si le gobelet a été éloigné.

11. Contenants à pilules : Contiennent les pilules et les distribuent au bon moment avec la bonne quantité. Le prototype comporte 4 contenants, mais peut être adapté à une plus grande capacité.

Vous voulez votre propre SmartPill Dispenser ? Téléchargez les fichiers STL en bas de page et imprimez toutes les pièces avec votre imprimante 3D ! Le projet est entièrement open-source.

La section suivante explique pas à pas l'assemblage du système de distribution.

Assemblage

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision
Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

Électronique

Le cerveau électronique principal est un Arduino Mega qui gère : le contrôle des servomoteurs de distribution, l'écran tactile Nextion, l'horloge temps réel (RTC), les effets sonores et la carte de communication AVR-IoT.

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

Pour reproduire le projet, effectuez toutes les connexions comme décrit dans le schéma avec une plaque d'essai ou un PCB maison. Nous recommandons vivement de monter le circuit sur une plaque en bois comme sur la photo ci-dessus.

Le schéma est disponible en bas de page.

SmartPill Web App

L'application web SmartPill vise à simplifier la configuration d'un dispositif électronique et le suivi de la médication d'un tiers.

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision
Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision
Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

Comment a-t-elle été développée ?

Pour développer une application web de zéro, on travaille sur les deux piliers de la programmation : backend et frontend. La SmartPill WebApp a été créée avec :

Ionic est un framework NodeJS gratuit et open-source basé sur AngularJS, qui fournit des éléments d'interface spécifiques à chaque plateforme via une bibliothèque de composants natifs pour iOS et Android. Il utilise les technologies front-end : HTML, CSS, JavaScript et Angular. Ionic peut utiliser Angular CLI pour créer des applications mobiles pleinement fonctionnelles.

Notez que Node.js doit être installé avant de démarrer avec Ionic, car Ionic fait partie d'un vaste écosystème JavaScript.

La documentation Ionic Framework vous guidera sans problème dans le démarrage de votre app. Voici brièvement les premières étapes suivies pour la création de l'app SmartPill :

  1. Dans la ligne de commande de votre éditeur de code, installez Ionic CLI avec npm :
$ npm install -g @ionic/cli
  1. Créez une nouvelle app :
$ ionic start smartpill-webui blank
  1. Allez dans le dossier de votre frontend et lancez-la :
$ cd smartpill-webui
$ ionic serve

Lancer votre app signifie que vous pouvez la tester dans le navigateur de votre appareil. Cette fonction Ionic est essentielle pour le débogage et les tests.

Structure de base de la SmartPill Web App

L'application est organisée simplement pour faciliter la navigation. Dans les dossiers de l'app, on trouve : le module de routage, les fichiers de composants, un dossier « services » et un dossier par route.

Si vous n'avez jamais touché au frontend, vous remarquerez dans l'aperçu du code comment les différents langages interagissent. En résumé : la partie visible est le fichier HTML du dossier, le fichier TypeScript contient les fonctions exécutées lors des interactions utilisateur, et les modules.ts gèrent le routage.

Les fichiers les plus essentiels :

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) },
  ...
];
getPosts() { return this.http.get<Post[]>(this.API); }
getDeposit() { return this.http.get<Dep[]>(this.DEPOSIT); }
getLogs() { return this.http.get<Log[]>(this.LOGS); }

createPost(pill: string, deposit: string, weight: string, morning: boolean, afternoon: boolean, night: boolean) {
  return this.http.post<Post[]>(this.API, { pill, deposit, weight, morning, afternoon, night });
}

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

Page de configuration et d'édition des pilules

SmartPill a une route dédiée à l'affichage de tous les posts programmés : « page-config ». Pour créer un nouveau post, l'utilisateur appuie sur le bouton en bas à droite qui le redirige vers « page-edit-pill ». S'il veut modifier un post existant, en appuyant sur le bouton d'édition, il est aussi redirigé vers « page-edit-pill » mais avec l'id du post. Ces deux comportements sont définis ainsi :

<ion-fab routerLink="/page-edit-pill" vertical="bottom" horizontal="end" slot="fixed">
  <ion-fab-button>
    <ion-icon name="add"></ion-icon>
  </ion-fab-button>
</ion-fab>
<ion-button [routerLink]="['/','pill','edit', post.id]" shape="round">
  <ion-icon slot="start" name="create"></ion-icon>
  Modifier
</ion-button>

La page « page-edit-pill » détecte si l'utilisateur est arrivé avec ou sans id, et exécute les fonctions correspondantes grâce à de simples conditions.

{
  path: 'pill/edit/:postId',
  loadChildren: () => import('./page-edit-pill/page-edit-pill.module').then(m => m.PageEditPillPageModule)
},
ngOnInit() {
  this.activatedRoute.paramMap.subscribe((paramMap) => {
    if (paramMap.get("postId")) {
      this.postService.getPostById(paramMap.get("postId")).subscribe((res) => {
        this.post = res;
        this.editing = true;
      });
    }
  });
}
<ion-card-header>
  {{ editing ? 'Mettre à jour votre' : 'Créer votre' }} Dépôt
</ion-card-header>
<ion-button expand="full" (click)="editing ? updatePost() : savePost()" class="ion-margin-top">
  {{ editing ? 'Mettre à jour' : 'Soumettre' }}
</ion-button>

La page « edit-pill-page » interagit avec l'utilisateur via des composants UI Ionic (inputs, selects) qui seront envoyés à l'API :

<ion-item>
  <ion-label position="floating">Cliquez pour choisir l'heure de la journée.</ion-label>
  <ion-select [(ngModel)]="time" (ionChange)="onChange($event)" multiple="true" cancelText="Annuler" okText="Valider">
    <ion-select-option value="morning">Matin</ion-select-option>
    <ion-select-option value="afternoon">Après-midi</ion-select-option>
    <ion-select-option value="night">Soir</ion-select-option>
  </ion-select>
</ion-item>
<ion-item>
  <ion-label position="floating">Nom de la pilule : </ion-label>
  <ion-input [(ngModel)]="post.pill"></ion-input>
</ion-item>

La « config-page » utilise le cycle de vie Angular : quand on revient de « page-edit-pill » ou d'une autre page, elle se rafraîchit et recharge les posts, mettant à jour les changements automatiquement.

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));
}

La « config-page » a aussi un bouton pour supprimer une pilule. C'est une fonction asynchrone qui affiche une alerte de confirmation.

async removePost(id: string) {
  const alert = await this.alertController.create({
    header: 'Alerte',
    subHeader: 'Êtes-vous sûr de vouloir supprimer ce dépôt ?',
    message: 'Vous ne pourrez pas le récupérer.',
    buttons: [
      'Annuler',
      {
        text: 'Oui',
        handler: () => {
          this.postService.removePost(id).subscribe((res) => { console.log(res); this.loadPosts(); }, (err) => console.log(err));
        }
      }
    ]
  });
  await alert.present();
}

Page des logs

La page des logs récupère les informations sur les pilules distribuées et les affiche sous forme d'historique. Elle fonctionne comme la « config-page » mais ne charge que les données de l'API :

loadPosts() {
  this.postService.getLogs().subscribe((res) => { this.log = res; console.log(this.log); }, (err) => console.log(err));
}

ngOnInit() { this.loadPosts(); }
ionViewWillEnter() { this.loadPosts(); }
<ion-content>
<ion-list>
  <ion-item *ngFor="let log of log">
    <ion-item>
      <ion-icon *ngIf="log.time == 'morning'" name="sunny" slot="start"></ion-icon>
      <ion-icon *ngIf="log.time == 'afternoon'" name="pizza" slot="start"></ion-icon>
      <ion-icon *ngIf="log.time == 'night'" name="moon" slot="start"></ion-icon>
      <ion-label>
        <h4>{{ log.date | date: 'dd/MM/yyy' }} - {{ log.date | date: 'HH_mm' }}h</h4>
        <h3>{{log.patient_name}}</h3>
        <p>{{log.pills}}</p>
      </ion-label>
    </ion-item>
  </ion-item>
</ion-list>
</ion-content>

Amazon Web Services

AWS a été choisi pour déployer le système SmartPill car il offre une large gamme de services dans un même écosystème, permettant une approche complètement serverless. Cela permet à l'application de s'adapter aux besoins de l'utilisateur et de ne payer que ce qui est consommé.

Architecture Cloud SmartPill

Le système utilise une architecture entièrement serverless sur AWS. Le diagramme ci-dessous la décrit :

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

Le SmartPill Dispenser utilise une carte Microchip AVR-IoT avec WiFi pour communiquer avec l'écosystème AWS. L'AVR-IoT se connecte via AWS IoT Core par protocole MQTT, permettant une connectivité bidirectionnelle entre le Cloud et le matériel. Cette communication sert à envoyer le message de distribution au distributeur et les événements de confirmation du distributeur vers le Cloud.

Le frontend de l'application web (Ionic Angular NodeJS) est compilé et ses fichiers statiques sont hébergés sur AWS S3. Le backend est une API REST HTTP développée avec AWS API Gateway qui appelle des fonctions Lambda. Ces fonctions communiquent avec la base de données DynamoDB qui stocke la configuration des pilules et les logs de prise.

AWS EventBridge agit comme planificateur pour déclencher les événements de distribution au bon moment. Cet événement déclenche une fonction Lambda qui recherche en base les pilules nécessaires pour chaque prise et envoie l'information au SmartPill Dispenser via IoT Core.

AWS IoT Core

La première étape pour faire fonctionner la carte AVR-IoT avec AWS IoT Core est de la connecter à votre compte AWS. Ce processus est décrit par Microchip dans les IoT Developer Guides for AWS.

Une fois fait, votre carte AVR-IoT apparaît dans AWS IoT Core sous l'onglet Gérer → Objets (Things).

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

Assurez-vous que votre carte AVR-IoT a accès à Internet en la configurant avec vos identifiants WiFi comme décrit dans le Getting Started Guide.

AWS DynamoDB

Ensuite, configurez l'application web en créant les tables DynamoDB nécessaires :

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

Cliquez sur « Créer une table », donnez le nom exact et sélectionnez « id » comme clé primaire.

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

AWS Lambda

Assurez-vous que la politique AmazonDynamoDBFullAccess est attachée au rôle d'exécution de la fonction Lambda pour qu'elle puisse lire/écrire dans DynamoDB. Allez dans l'onglet Permissions :

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

Cliquez sur le nom du rôle. Cela vous redirige vers le rôle d'exécution. Nous recommandons un rôle d'exécution par fonction Lambda.

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

AmazonDynamoDBFullAccess doit apparaître. Sinon, cliquez sur « Attacher des politiques » et recherchez « dynamodb » :

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

Donner un accès complet DynamoDB à la fonction Lambda n'est sûr que pour ce tutoriel, pas pour un environnement de production.

Allez dans Configuration et ajoutez le code de la fonction depuis le dépôt GitHub (lien ci-dessous) :

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

Répétez pour toutes les fonctions Lambda du dépôt.

Ensuite, configurez les intégrations entre Lambda et IoT Core pour que la bonne fonction s'exécute quand le message est envoyé par la carte.

Configurez la confirmation de distribution envoyée par l'AVR-IoT pour générer l'entrée de log et la notification correspondantes en base.

Allez dans AWS IoT Core, cliquez sur Ajouter → Règles pour configurer une règle :

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

Créez une nouvelle règle nommée smartpill_confirmationpill avec une brève description.

Entrez la déclaration de requête suivante :

SELECT * FROM 'confirmationpill'

Et configurez une action « Envoyer un message à une fonction Lambda » pointant vers smartpill-confirmationpill créée précédemment :

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

AWS EventBridge

EventBridge se charge de lancer la fonction Lambda qui enverra le message au SmartPill Dispenser pour distribuer la pilule au bon moment. Nous configurons 3 événements planifiés : un pour le matin, un pour l'après-midi, un pour le soir.

Allez dans le service AWS EventBridge et cliquez sur « Créer une règle ». Donnez-lui un nom et configurez le motif d'événement planifié comme une expression cron :

NOTE : Ces expressions cron sont en heure UTC.

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

Sélectionnez la fonction Lambda smartpill-dispensepill comme cible :

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

Cette fonction Lambda s'exécutera à l'heure définie. Définissez deux autres règles pour les heures souhaitées (matin, après-midi, soir).

AWS API Gateway

Allez dans AWS API Gateway et cliquez sur « Créer une API ». Choisissez « API HTTP » et cliquez sur « Construire » :

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

Donnez-lui le nom « smartpill-webui » (ou ce que vous voulez). Configurez toutes les fonctions Lambda comme intégrations :

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

Cliquez sur Suivant et configurez toutes les routes comme spécifié dans le tableau ci-dessous :

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision
Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

Enfin, déployez l'API pour obtenir un point de terminaison HTTP. Alternativement, vous pouvez importer le fichier JSON smartpill-api.json du dépôt.

AWS S3

AWS S3 sert à stocker des fichiers mais peut aussi agir comme serveur web statique (ex: page web). Pour ce faire, créez d'abord un Bucket.

Allez dans S3 et cliquez sur « Créer un Bucket » :

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

Donnez un nom convivial (ce sera votre DNS).

Activez l'hébergement de site web statique. Allez dans Propriétés, tout en bas :

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

Cliquez sur « Modifier », activez la fonctionnalité et sélectionnez index.html comme document d'index et d'erreur :

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

Uploadez les fichiers statiques de votre site compilés par Angular et accédez à votre DNS. C'est prêt !

Carte AVR-IoT

La carte AVR-IoT de Microchip sert d'interface de communication pour fournir la connectivité Cloud au distributeur. Elle est connectée à la carte Arduino principale par une interface série.

Firmware pour la carte AVR-IoT WA Development Board basé sur l'exemple original

Le CLI déjà implémenté a été étendu avec la commande « pill », son callback pill_command() qui parse le message et envoie la confirmation JSON par MQTT sur le topic « confirmationpill ». Le message en cas de commande inconnue est personnalisé, tout comme le callback en cas de paramètre incorrect.

Le CLI original utilisait l'USART2, connecté au débogueur par le PCB mais non accessible. Pour cette version, la structure CLI et la fonctionnalité printf() sont maintenant implémentées sur l'USART1, disponible sur les connecteurs RX et TX. Cela permet d'utiliser ce CLI avec n'importe quel dispositif externe, avec la configuration suivante :

Distributeur de Pilules Intelligent : Système de Gestion de Médicaments de Précision

Nous avons aussi ajouté une souscription MQTT personnalisée avec un parseur JSON. Dans application_manager.c se trouve la version modifiée de subscribeToCloud() pour s'abonner au topic personnalisé « dispensepill » et comment elle est liée à un callback personnalisé receiveddispenseFromCloud() qui extrait les données du JSON.

Dans l'en-tête IoTPill.h sont définies les principales structures pour contrôler les données reçues et envoyées.

Pour permettre la communication entre la carte Arduino principale et l'AVR-IoT, nous avons développé un protocole de communication bidirectionnel simple avec deux messages :

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

EventBridge déclenchera la fonction Lambda smartpill-dispensepill pour envoyer par MQTT à la carte IoT une chaîne JSON formatée avec ces champs :

{
  "cmd": "dispensepill",
  "npills": 2,
  "intake": { "time": "morning" },
  "pills": {
    "1": { "pill": "Ibuprofène", "qty": 1, "deposit": 1, "weight": 200 },
    "2": { "pill": "Paracétamol", "qty": 2, "deposit": 2, "weight": 500 }
  }
}

La carte IoT enverra par USART à l'Arduino :

D Ibuprofène 1 1 200 D Paracétamol 2 2 500 \n

Message 'confirmationpill' (Arduino → IoT Board → AWS)

L'Arduino enverra la commande « pill » et, si la distribution était correcte, ajoutera un « 1 » :

pill 1

Ce message sera traité par le CLI personnalisé de la carte IoT en tenant compte de la prise précédemment envoyée (spécifiant le « time » correspondant) et enverra le JSON suivant à AWS :

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

AWS enverra le log via les fonctions Lambda déclenchées vers le service web.

Des questions ? Laissez un commentaire ci-dessous et nous ferons de notre mieux pour vous aider !

Code

Application Web SmartPill

Code frontend pour l'interface utilisateur de l'application web :

https://github.com/makers-upv/smartpill-webui

Fonctions Lambda Backend SmartPill

https://github.com/makers-upv/smartpill-lambda

Code AVR-IoT SmartPill

https://github.com/makers-upv/smartpill-avriot

Code Arduino SmartPill

https://github.com/makers-upv/smartpill-arduinofw

Pièces personnalisées et boîtiers

Dépôt Thingiverse

Dépôt Thingiverse pour le SmartPill Dispenser :

CAD file on thingiverse.com

Schémas

Connexions matérielles électroniques SmartPill

Processus de fabrication

  1. La science et la fabrication des somnifères : des remèdes anciens à la pharmacologie moderne
  2. La pilule contraceptive : histoire, avantages, risques et production
  3. Barman intelligent : Construisez votre propre station de cocktails alimentée par Raspberry Pi
  4. Feu de circulation intelligent : Éclairage public adaptatif alimenté par l'IoT
  5. Poubelle intelligente : Optimiser la collecte des déchets avec capteurs IoT
  6. Serre connectée IoT : Plante intelligente avec Arduino et Azure
  7. UnifiedWater v1 – Kit complet de capteur de qualité d'eau Arduino
  8. Autodesk Smart Manufacturing : Automatisez votre flux de travail et connectez le développement produit
  9. Smart Manufacturing expliqué : transformer la production avec l'IoT