2021-L3-Galilee-Medicine Dispenser

Distributeur automatique de médicaments avec reconnaissance d'empreinte digitale

Slides & Videos

Members

NameContribution
Sara Samimirapport version initiale, schémas, idées, recherches -> en groupe
moi :
- présentation pour la soutenance (partie)
- tournage et montage vidéo
Nahida Benhaffafrapport version initiale, schémas, idées, recherches -> en groupe
moi :
- rédaction du cahier des charges
- restructuration du rapport final
- présentation (partie)
Hugo Makilutilarapport version initiale, schémas, idées, recherches -> en groupe
moi :
- code source
- montage du Hardware

State of the Art

Business Aspect

Distributeur automatique de pilules PivoTell MK3

 

 Fonctionnement
Aux heures préprogrammées, la cassette de pilules tourne, le signal d’alarme retentit et le dosage correct est visible à travers l’ouverture du couvercle verrouillable. Quatre alarmes sonores différentes peuvent être sélectionnées.
L’alarme continue de sonner pendant 1 heure ou jusqu’à ce que les comprimés soient distribués (en inclinant le distributeur). Ce dernier est verrouillable pour garantir que seul le médicament demandé est accessible à l’utilisateur. Le distributeur fonctionne sur piles (4 piles alcalines de type AA fournies), d’une autonomie de 12 mois dans des conditions normales avec un témoin d’alarme de pile faible.

 Avantages du produit PivoTell MK3
• Distribue automatiquement jusqu’à 28 fois par jour
• Idéal pour les personnes atteintes de démence
• Aide à garantir un régime médicamenteux précis
• Réduit le risque de surdosage accidentel
• Sécurisé et précis
• Facile à préprogramme

Inconvénient du produit PivoTell MK3
Par contre, pour assurer que la bonne personne a pris le médicament il n’y a pas de sécurité (par exemple par empreinte digitale ou par code).

 Caractéristiques techniques
• Diamètre : 190 mm
• Hauteur : 56 mm
• Poids avec piles : 480 g
Le prix de ce produit est : 189,00 €

Distributeur automatique de pilules DAP101

 

Description
Le Distributeur automatique de pilules DAP101 est conçu être utilisé dans les centres pour adultes ou pour une utilisation à domicile. Il est équipé d’une alarme programmable jusqu’à six fois par jour, un indicateur de l’apport quotidien et un système d’alerte pour le volume sonore configurable et ton et une alerte lumineuse clignotante. Il dispose de 28 compartiments individuels ainsi avec 4 programmes quotidiens, il devient un pilulier hebdomadaire.

Fonctionnement
Lorsque l’heure configurée arrive, la distribution interne se met en marche et permet l’accès aux pilules du compartiment correspondant. A ce moment, une alarme sonore retentit (configurable en hauteur et le volume) et une lumière rouge clignote, la personne qui doit prendre les médicaments doit seulement retourner le pilulier avec la main, verser les pilules et ensuite les alarmes seront désactivées jusqu’à la prochaine fois.

Avantages du produit DAP101
• Distribution automatique jusqu’à 28 fois par jour.
• Alarmes permettant d’éviter les oublis de prise de médicaments + lumière rouge clignotante
• Clé disponible, afin que le patient ne puisse pas l’ouvrir et altérer le médicament.

 Inconvénients du produit DAP101
• Utilisable par 1 seul utilisateur.
Le prix de ce produit est : 139.00 €

Pillo Health

Description et fonctionnement
Pillo health est un distributeur de médicament connecté très sophistiqué, un des meilleurs sur marché, en voici une description : “un écran tactile, des systèmes de reconnaissances faciales et de pilotage à la voix. Robot domestique, il remplit à merveille son rôle d’auxiliaire médicale. Il peut dispenser des médicaments pour plusieurs personnes à la fois, alerter des proches ou une équipe médicale si les médicaments ne sont pas pris à l’instant T, commander automatiquement des médicaments par internet, répondre aux questions liées à la santé, etc. Ses fonctions sont multiples et elles vont certainement encore s’étendre avec les  développements à venir et selon les besoins utilisateurs”.

Avantages du produit Pillo Health
• Un des meilleurs produits sur le marché.
• Fonctionnalités multiples et complètes qui rendent l’appareil semblable à un smartphone.

Inconvénient du produit Pillo Health
Son prix est de : 600 dollars lors de sa mise sur le marché en 2017.

Technical Aspect

Project Description

Problem Definition
On veut faciliter la vie des personnes devant prendre des médicaments en leur donnant leur bons médicaments à prendre par simple reconnaissance d'empreinte digitale
Challenges & Motivation
Je n'aime pas devoir ouvrir tous les matins la boite de chacun de mes compléments alimentaires ou autre, donc j'ai décidé de faire ce projet pour me faciliter la tâche au cours de la journée
Real and Complete Usecases

L’utilisateur met son doigt sur le capteur d’empreinte digitale. S’il est reconnu par le lecteur, la boîte lui distribue les médicaments correspondants.

Technical Description

Le lecteur LCD affiche “Scan print” pour demander à l’utilisateur de poser son empreinte digitale.
L’utilisateur pose son doigt sur le lecteur d’empreinte digitale. Le lecteur envoie l’empreinte à la carte arduino qui se charge de faire le matching (avec le code).

Le lecteur LCD affiche “identification”

Si l’empreinte n’est pas reconnue le lecteur LCD affiche “Failure”.

Sinon l’empreinte est reconnue le lecteur affiche “Success” Et “Welcome” + le nom de la personne, puis le ou les moteurs correspondant tournent en fonction des besoins de l’utilisateur et font tomber les médicaments dans le bac

Puis on attend une nouvelle empreinte, jusqu’à arrêt du système.

Hardware

Materials
ImageNamePart NumberPriceCountLink
Carte Elego Uno1🛒
filsplusieurs🛒
écran LCD1🛒
BreadBoard3🛒
capteur d'empreinte digitale AS6081🛒
Moteurs2🛒
LED4🛒
Schematic

Software

Arduino Code

#include 

#include 

#if (defined(__AVR__) || defined(ESP8266)) && !defined(__AVR_ATmega2560__)
// For UNO and others without hardware serial, we must use software serial...
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
// Set up the serial port to use softwareserial..
SoftwareSerial mySerial(2, 3);

#else
// On Leonardo/M0/etc, others with hardware serial, use hardware serial!
// #0 is green wire, #1 is white
#define mySerial Serial1

#endif

int red=4;
int green=7;
int moteur1=6;
int moteur2=9 ;

LiquidCrystal lcd(11,10,A2,A3,A4,A5);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
int d;
void setup()
{
  pinMode(green,OUTPUT);
  pinMode(red,OUTPUT);
  pinMode(moteur1,OUTPUT);
  pinMode(moteur2,OUTPUT);
  
  Serial.begin(9600);
  while (!Serial);  // For Yun/Leo/Micro/Zero/...
  delay(100);
  Serial.println("\n\nAdafruit finger detect test");

  // set the data rate for the sensor serial port
  finger.begin(57600);
  delay(5);
  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1) { delay(1); }
  }

  Serial.println(F("Reading sensor parameters"));
  finger.getParameters();
  Serial.print(F("Status: 0x")); Serial.println(finger.status_reg, HEX);
  Serial.print(F("Sys ID: 0x")); Serial.println(finger.system_id, HEX);
  Serial.print(F("Capacity: ")); Serial.println(finger.capacity);
  Serial.print(F("Security level: ")); Serial.println(finger.security_level);
  Serial.print(F("Device address: ")); Serial.println(finger.device_addr, HEX);
  Serial.print(F("Packet len: ")); Serial.println(finger.packet_len);
  Serial.print(F("Baud rate: ")); Serial.println(finger.baud_rate);

  finger.getTemplateCount();

  if (finger.templateCount == 0) {
    Serial.print("Sensor doesn't contain any fingerprint data. Please run the 'enroll' example.");
  }
  else {
    Serial.println("Waiting for valid finger...");
      Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
  }
}
int identifiant;
void loop()                     // run over and over again
{
  getFingerprintID();
  delay(50);            //don't ned to run this at full speed.
}

uint8_t getFingerprintID() {
  uint8_t p = finger.getImage();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image taken");
      break;
      
    case FINGERPRINT_NOFINGER:
      Serial.println("No finger detected");
      lcd.print("Scan Print  ");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Imaging error");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }

  // OK success!

  p = finger.image2Tz();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image converted");
      break;
    case FINGERPRINT_IMAGEMESS:
      Serial.println("Image too messy");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p ;
    case FINGERPRINT_FEATUREFAIL:
      Serial.println("Could not find fingerprint features");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      Serial.println("Could not find fingerprint features");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }

  // OK converted!
  p = finger.fingerSearch() ;
  lcd.setCursor(0,1);
  lcd.print("Identification..");
  delay(2000);
  lcd.clear();
  if (p == FINGERPRINT_OK) {
    Serial.println("Found a print match!");
    Serial.println(finger.fingerID);
    Serial.println(finger.fingerID);
    Serial.println(finger.fingerID);
    Serial.println(finger.fingerID);
    Serial.println(finger.fingerID);
    lcd.setCursor(4,1);
    lcd.print("Success");   
    digitalWrite(green,HIGH);
    delay(2000);
    digitalWrite(green,LOW);
    lcd.clear();
    if((int)finger.fingerID==1){
        Serial.println("hugo");
        lcd.setCursor(0,0);
        lcd.print("Welcome Hugo");
        digitalWrite(moteur1,HIGH);
        delay(1000);
        digitalWrite(moteur1,LOW);
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Take the 1st med");
        delay(4000);
        lcd.clear();
    }
    if((int)finger.fingerID==2){
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Welcome Nahida");
        digitalWrite(moteur2,HIGH);
        delay(200);
        digitalWrite(moteur2,LOW);
        
    }
    if((int)finger.fingerID==3){
       
       lcd.setCursor(0,0);
       lcd.print("Welcome Sara");
       digitalWrite(moteur1,HIGH);
       delay(1000);
       digitalWrite(moteur1,LOW);
       
       digitalWrite(moteur2,HIGH);
       delay(1000);
       digitalWrite(moteur2,LOW);
       lcd.clear();
    } 
    if((int)finger.fingerID==4){
       lcd.setCursor(0,0);
       lcd.print("Welcome Mahdi");
       delay(1000);
       lcd.clear();
       
       lcd.setCursor(0,0);
       lcd.print("You have no med");
       delay(4000);
       lcd.clear();
       
       }
      
    
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_NOTFOUND) {
    Serial.println("Did not find a match");

    lcd.clear();
    lcd.setCursor(4,1);
    lcd.print("Failure");
    digitalWrite(red,HIGH);
    delay(2000);
    digitalWrite(red,LOW);
    lcd.clear();
    return p;
  } else {
    Serial.println("Unknown error");
    return p;
  }

  // found a match!
  Serial.print("Found ID #"); Serial.print(finger.fingerID);
  Serial.print(" with confidence of "); Serial.println(finger.confidence);

  return finger.fingerID;
}

// returns -1 if failed, otherwise returns ID #
int getFingerprintIDez() {
  uint8_t p = finger.getImage();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.image2Tz();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.fingerFastSearch();
  if (p != FINGERPRINT_OK)  return -1;

  // found a match!
  Serial.print("Found ID #"); Serial.print(finger.fingerID);
  Serial.print(" with confidence of "); Serial.println(finger.confidence);
  return finger.fingerID;
}

External Services