Pilulier automatique : Différence entre versions

De Wiki d'activités IMA
(Boîtes journalières)
(Boîtes journalières)
Ligne 181 : Ligne 181 :
 
Le signal envoyé sur la pin PB4 est à l'état par défaut. Dès qu'on détecte un front descendant, on récupère à chaque tic d'horloge la valeur haute ou basse du signal entrant en pin PB4. Nous avons décidé de faire une vérification sur les 4 premiers bits envoyés et de donner la LED à allumer sur les 4 derniers bits. On peut voir un chronogramme ci-contre.
 
Le signal envoyé sur la pin PB4 est à l'état par défaut. Dès qu'on détecte un front descendant, on récupère à chaque tic d'horloge la valeur haute ou basse du signal entrant en pin PB4. Nous avons décidé de faire une vérification sur les 4 premiers bits envoyés et de donner la LED à allumer sur les 4 derniers bits. On peut voir un chronogramme ci-contre.
  
Voici le code pour programmer l'ATTiny13 :
+
On utilise un AVRISP pour l'ATTiny13 comme on peut le voir sur l'image.
 +
Voici le code pour le programmer:
 
''
 
''
  
Ligne 205 : Ligne 206 :
  
 
''
 
''
 +
 +
On réalise le branchement puis pour tester, on programme l'arduino micro comme ceci :
 +
''
 +
 +
''
 +
  int state10;
 +
  int laststate10=0;
 +
  void setup(){
 +
      pinMode(11, OUTPUT);
 +
      pinMode(12, OUTPUT);
 +
      pinMode(13, INPUT);
 +
      digitalWrite(11, HIGH);
 +
      digitalWrite(12, HIGH);}
 +
''
 +
 +
''
 +
  void loop(){
 +
      state10 = digitalRead(13);
 +
      if ((state10 != laststate10)){
 +
        if ((state10 == 0)){
 +
        digitalWrite(11,LOW);
 +
        Serial.print(digitalRead(11));
 +
        delayMicroseconds(2000);
 +
 +
        digitalWrite(11,HIGH);
 +
        Serial.print(digitalRead(11));
 +
        delayMicroseconds(2000);
 +
 +
        digitalWrite(11,LOW);
 +
        Serial.print(digitalRead(11));
 +
        delayMicroseconds(2000);
 +
 +
        digitalWrite(11,HIGH);
 +
        Serial.print(digitalRead(11));
 +
        delayMicroseconds(2000);
 +
 +
        digitalWrite(11,LOW);
 +
        Serial.print(digitalRead(11));
 +
        delayMicroseconds(2000);
 +
 +
        digitalWrite(11,LOW);
 +
        Serial.print(digitalRead(11));
 +
        delayMicroseconds(2000);
 +
 +
        digitalWrite(11,HIGH);
 +
        Serial.print(digitalRead(11));
 +
        delayMicroseconds(2000);
 +
 +
        digitalWrite(11,LOW);
 +
        Serial.print(digitalRead(11));
 +
        delayMicroseconds(2000);
 +
 +
        digitalWrite(11,HIGH);
 +
        Serial.println(digitalRead(11));}}
 +
      laststate10 = state10;}
 +
 +
''
 +
 +
On attend un front descendant sur le pin 13, qu'on réalisera en débranchant le câble déjà branché sur celle-ci.
 +
Les 4 premiers bits 0101 sont pour la vérification d'un envoie. Sur les 4 suivants, nous avons 0010 ce qui veut dire que le PB1 sera en état haut et que nous allumerons la LED3. Le dernier bit est pour remettre par défaut en état haut.
 +
 +
Voici un GIF du résultat des tests.
  
 
==Semaine 2==
 
==Semaine 2==

Version du 12 février 2016 à 07:17

Présentation générale du projet

Contexte du projet

D'après des statistiques établis en 2014, un meilleur suivi des traitements médicaux et des médicaments dans le monde permettrait de réaliser 8% d'économies sur le coût total des dépenses de santé.

De plus, on estime en Europe que la mauvaise prise de médicaments est à l’origine de plusieurs dizaines de milliers de décès chaque année.

Selon le rapport IGAS2, en France, un mauvais suivi des heures de prises et de dosage de médicament aurait causé entre 8 000 à 12 000 décès par an et coûté près de 2 milliards € à l’Assurance Maladie.

13 millions de patients résidents en France seraient polymédiqués, et parmi eux de nombreuses personnes âgées de plus de 60 ans.

La santé connectée est donc devenue un marché porteur.

C'est ainsi que de nombreuses solutions se développent chaque jour qui a pour but de venir en aide aux personnes âgées dans les horaires de leurs prises de médicaments et éviter les surdosages ou les erreurs de traitement.

Objectif du projet

L’objectif de ce projet est d'adapter un pilulier hebdomadaire pour le rendre connecté pour faciliter le suivi et la prise de médicaments quotidiens à différents moment de la journée.

Description du projet

Afin de mettre en place ce pilulier connecté, il faut bien prendre en compte la donnée suivante : il doit être transportable. Cela sous-entend d’avoir un modèle suffisamment compact ainsi qu’une autonomie sur batterie. Nous devons donc trouver une entre son autonomie et sa connectivité et sa taille/forme. Actuellement, il existe sur le marché différentes propositions de pilulier connecté. Chacun avec leurs caractéristiques propres :

  • Imedipac de Medissimo : envoie un SMS et/ou un email à l’utilisateur pour lui rappeler de prendre tel médicament à telle heure.
  • Do-Pill de SecuR : rend accessible les comprimés et gélules à la date et à l'heure indiqué par le médecin pour éviter les surdosages ou les erreurs de traitement.
  • Sivan de MedSecure : prévient l'entourage si erreur du patient dans la prise de ses comprimées et alerte le patient si il doit prendre un comprimé.


Afin de proposer une solution alternative à ses piluliers connectés déjà existant, le patient pourra utiliser son pilulier hebdomadaire standard auquel il intégra une base qu'il rendra connecté celui ci. Notre pilulier connecté sera composé d’un socle contenant toute l’électronique et la batterie et de 7 boîtiers à cachets amovibles

Cahiers de charges

Fonctionnalités

Ce support permettra au pilulier de remplir les fonctions suivantes :

  • Emission d'une alarme lorsque l'usager doit prendre une pilule à une heure et date précise (alarme différente selon le moment de la journée : matin, midi, soir, nuit)
  • Indication par une LED la boîte du jour à prendre et par une autre, le compartiment de cette journée.
  • Détection si l'usager a pris la bonne journée (sinon émission d'un son)
  • Détection si l'usager a pris la bonne pilule à la bonne heure (sinon émission d'un son)
  • Détection de la présence des tiroirs
  • Suivi par application Androïd.

Matériels

Le socle sera composé :

  • 7 LED RGB pour indiquer par une couleur verte le bon boîtier et une rouge tout problème avec la boîte correspondante 7 LED RGB CMS ou LED déjà dispo depuis le Projet du Dé Electronique
  • 28 IR émetteur
  • 28 Phototransistor pour la détection de l’intérieur des compartiments
  • 10, 20 ou 70 aimants conducteur d'électricité (5 par boîtier en face de 5 autres sur le socle, donc 10 pour une journée - possibilité de faire le proto sur 1, 2 ou 7 journée) pour assurer la tenue du boîtier et détecter sa présence 1, 2 ou 7 sachets de 10 aimants

( 1 écran LCD pour afficher les messages comme la date et l'heure ou des alertes 1 Ecran LCD 2*16)

  • 1 HP ou buzzer pour émettre une sonnerie Buzzer
  • 1 arduino nano pour assurer le contrôle arduino nano [fourni le 04/02/2016]
  • 1 shield BLE pour la connectivité bluetooth contenant le composant nRF8001 (déjà disponible du projet Surveillance passive de sommeil de IMA4 2014/2015) [fourni le 04/02/2016]
  • 1 RTC pour avoir le temps et la date réel contenant le composant DS1307 (MOD-RTC déjà disponible du projet Surveillance passive de sommeil de IMA4 2014/2015) [fourni le 05/02/2016]
  • 1 smartphone sous android pour développer l'application de suivi [fourni le 05/02/2016]
  • 1 pilulier standard (Corentin)
  • 1 rouleau de papier réfléchissant
  • 1 décodeur 3 entrées / 8 sorties pour allumer les LEDs 2 décodeur 3E/8S


Chaque boite contenant les 4 compartiments de la journée est composée :

  • 1 interfaçage de 28 LED pour indiquer le bon compartiment 28 LED Verte CMS
  • 7 super-condensateur pour allumer les diodes de chaque compartiment sur le boitier 7 super-condensateur
  • 7 résistances de 525 ohm
  • 1 microcontrôleur ATTiny pour enregistrer le compartiment à allumer (fourni par l'arduino) et allumer la diode Lien

Planning Prévisionnel

Semaines du 25/01 au 31/01 du 1/02 au 7/02 du 8/02 au 14/02 du 15/02 au 21/02 du 22/02 au 25/02
Étapes Etude bibliographique Détection pour chaque boitier journalier si il a été enlever du support et détection si la bonne pilule a été récupéré par le patient Programmation et interfaçage des différentes shields avec le microcontrôleur Test pour correction d'erreur et amélioration Rédaction du rapport de projet et Préparation à la soutenance

Tableau de bord

Boîtes journalières

Schematic de l'électronique d'une boîte

Chaque boîte sera équipée d'un petit micro-processeur, de 4 LED, 1 résistance, une grosse capacité, 5 aimants. Par les 5 aimants vont transiter :

  • Le Vc+ correspondant à la tension pour charger la capacité et permettre à l'éclairage de fonctionner pour quelques minutes.
  • Le Vp correspondant à la tension envoyée pour détecter la présence de la boîte
  • La masse GND
  • Les entrées p0 et p1 pour connaître la LED à allumer.

Nous aurons donc les cas suivants :

Inputs Vc+ Vp p0 p1 GND
Pilulier repos/Détection boîte 0 1 X X GND
Heure médicaments 1 0 0/1 0/1 GND
Après quelques seconde de charge/Détection boîte 0 1 X X GND

Pour les inputs p0 et p1, elles dépendront du moment de la prise des médicaments :

Moment p0 p1
Matin 0 0
Midi 0 1
Soir 1 0
Coucher 1 1

Après configuration de l'ATTiny13 via Arduino, les tests ont avérés que cette méthode était limitée. En effet, il y a 4 LEDs et 4 combinaisons, ce qui rend compliqué de laisser un cas "auncune LED allumée".

Une autre solution a été adoptée :

  • La pin Vcc pour l'alimentation en 5v
  • La pin GND pour la masse
  • La pin PB0 pour la LED 4
  • La pin PB1 pour la LED 3
  • La pin PB2 pour la LED 2
  • La pin PB3 pour la LED 1
  • La pin PB4 pour une liaison UART

Principe de L'UART : Le signal envoyé sur la pin PB4 est à l'état par défaut. Dès qu'on détecte un front descendant, on récupère à chaque tic d'horloge la valeur haute ou basse du signal entrant en pin PB4. Nous avons décidé de faire une vérification sur les 4 premiers bits envoyés et de donner la LED à allumer sur les 4 derniers bits. On peut voir un chronogramme ci-contre.

On utilise un AVRISP pour l'ATTiny13 comme on peut le voir sur l'image. Voici le code pour le programmer:

  #define F_CPU 10000000
  #include <avr/io.h>
  #include <util/delay.h>
  int main (void){
     DDRB |= 0x0F;
     int i, code=0;
     while(1){
        while((PINB & 0x10) == 0x10){}
           _delay_us(1000);
           for(i=128 ; i>=1 ; i=i/2){
              code = (((PINB & 0x10)/16) * i) + code;
              _delay_us(2000);
           }
           if((code & 0xF0) == 0x50){
              PORTB |= (code - 0x50);
           }
           else {
              code = 0;}}}

On réalise le branchement puis pour tester, on programme l'arduino micro comme ceci :

  int state10;
  int laststate10=0;
  void setup(){
     pinMode(11, OUTPUT);
     pinMode(12, OUTPUT);
     pinMode(13, INPUT);
     digitalWrite(11, HIGH);
     digitalWrite(12, HIGH);}

  void loop(){
     state10 = digitalRead(13);
     if ((state10 != laststate10)){
       if ((state10 == 0)){
       digitalWrite(11,LOW);
       Serial.print(digitalRead(11));
       delayMicroseconds(2000);
       digitalWrite(11,HIGH);
       Serial.print(digitalRead(11));
       delayMicroseconds(2000);
       digitalWrite(11,LOW);
       Serial.print(digitalRead(11));
       delayMicroseconds(2000);
       digitalWrite(11,HIGH);
       Serial.print(digitalRead(11));
       delayMicroseconds(2000);
       digitalWrite(11,LOW);
       Serial.print(digitalRead(11));
       delayMicroseconds(2000);
       digitalWrite(11,LOW);
       Serial.print(digitalRead(11));
       delayMicroseconds(2000);
       digitalWrite(11,HIGH);
       Serial.print(digitalRead(11));
       delayMicroseconds(2000);
       digitalWrite(11,LOW);
       Serial.print(digitalRead(11));
       delayMicroseconds(2000);
       digitalWrite(11,HIGH);
       Serial.println(digitalRead(11));}}
     laststate10 = state10;}

On attend un front descendant sur le pin 13, qu'on réalisera en débranchant le câble déjà branché sur celle-ci. Les 4 premiers bits 0101 sont pour la vérification d'un envoie. Sur les 4 suivants, nous avons 0010 ce qui veut dire que le PB1 sera en état haut et que nous allumerons la LED3. Le dernier bit est pour remettre par défaut en état haut.

Voici un GIF du résultat des tests.

Semaine 2

Semaine 3

Semaine 4

Fichiers Rendus

Rapport

Codes

Références