2021-L3-Galilee-Medicine Dispenser
Distributeur automatique de médicaments avec reconnaissance d'empreinte digitale
Slides & Videos
Members
Name | Contribution |
---|---|
Sara Samimi | rapport version initiale, schémas, idées, recherches -> en groupe moi : - présentation pour la soutenance (partie) - tournage et montage vidéo |
Nahida Benhaffaf | rapport version initiale, schémas, idées, recherches -> en groupe moi : - rédaction du cahier des charges - restructuration du rapport final - présentation (partie) |
Hugo Makilutila | rapport 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 €
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
Challenges & Motivation
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
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; }