MediKit

Aus HRW FabLab MediaWiki
Wechseln zu: Navigation, Suche
MediKit

Medikit1.jpeg

Entwickler

Enis Ince, Michael Gurevich, Enis Uysal

Projektdateien

Google Drive

Verwendete Programmiersprache

Arduino, C

Eingesetzte Software

Arduino IDE, Autodesk Fusion 360 , Cura

Verwendete Arduino-Bibliotheken

WiFi, WiFiClientSecure, Time, UniversalTelegramBot,

Eingesetzte Hardware

Ultimaker 2+, Ultimaker 3


MediKit ist eine smarte Pillenbox, die ihren Anwender per Push-Notification benachrichtigt und ihn daran erinnert seine Tabletten einzunehmen.
Der Vorteil an dieser Box ist es, dass auch Angehörige des Anwenders Zugriff auf die Notification haben und gegebenenfalls zusätzlich nochmal daran erinnern können, falls die Tabletten nicht eingenommen wurden.
Die Box erkennt, ob das Fach geöffnet wurde und schickt eine Nachricht an die Angehörigen, ob die Box geöffnet wurde oder nicht. Sollte die Box nicht geöffnet werden, werden alle registrierten Nutzer erneut informiert.


Motivation[Bearbeiten]

Medikit Prototyp
Präsentationsplakat Medikit

Durch die von dem Modul angebotene Veranstaltung in Düsseldorf und dem Projekt-Tindern hat sich unsere Gruppe auf die Umsetzung der Box geeinigt. Da dieses Projekt zur Hilfe für Menschen mit Behinderungen gedacht ist und uns zahlreiche Beispiele beim Projekt-Tindern gezeigt wurden, wir uns jedoch mit keinem der Projekte identifizieren konnten, haben wir uns dazu entschlossen, diese Box für eine Person zu entwickeln, die aus unserem eigenen Bekanntenkreis stammt. Diese Person vergisst es immer wieder ihre Tabletten zu sich zu nehmen, da sie an Demenz leidet und wir ihr durch diese Box es vereinfachen wollten sich daran erinnern zu können. Um dies zu ermöglichen haben wir eine Box entwickelt, die verschiedene Fächer besitzt, welche mit einer Lampe bestückt sind. Dazu entwickelten wir auch noch eine In-App-Anwendung, auf der der Nutzer die Zeitintervalle einstellen kann & zudem eine Erinnerung bekommt, falls Zeit ist das Fach zu öffnen. Zudem können Angehörige der betroffenen Person Zugriff auf die App erhalten, bzw. eine Notification bekommen, falls die betroffene Person es vergessen hat.

Entwicklung[Bearbeiten]

Die Box wurde mittels eines CAD-Programms konzipiert und durch einen 3D-Drucker gefertigt. Sie besteht aus 14 gleich großen Fächern, in denen die betroffene Person ihre täglichen Rationen an Tabletten aufbewahren kann. In den jeweiligen Fächern wurden außerdem zwei kleine Löcher hinterlassen, um die LED-Leuchte besser in den einzelnen Fächern zu fixieren. Durch App-Konfigurationen kann eingestellt werden, wann die Person die Tabletten zu nehmen hat, damit der ESP eine Benachrichtigung versenden kann. Unterhalb der Fächer wurde ein Hohlraum illustriert, um die benötigte Technik dort platzsparend unterbringen zu können.

Hardware[Bearbeiten]

Produktionskosten[Bearbeiten]

Benötigte Produkte
Beschreibung Kosten in €/Stück Anzahl
ESP-32 8,99 1
Powerbank 8,50 1
Breadboard 3,85 1
Drahtkabel 3,20 32
LED-Leuchten 0,99 14
Button 0,99 1
Gesamtkosten: 26,52€



3D-Druck[Bearbeiten]

Die Box wurde mittels eines CAD-Programms konzipiert und durch einen 3D-Drucker gefertigt. Sie besteht aus 14 gleich großen Fächern, in denen die betroffene Person ihre tägliche Ration an Tabletten aufbewahren kann. In den jeweiligen Fächern wurden außerdem zwei kleine Löcher hinterlassen, um die LED-Leuchten besser in den einzelnen Fächern zu fixieren. Durch App-Konfigurationen kann zudem eingestellt werden, wann die Person die Tabletten zu nehmen hat, wann die Erinnerung gesendet werden soll & wann eine erneute Benachrichtigung gesendet werden soll, damit der verbaute Mikrocontroller die einzelnen Befehle ausführen kann.. Unterhalb der Fächer wurde ein Hohlraum illustriert, um die benötigte Technik dort platzsparend unterbringen zu können.


Code[Bearbeiten]

Hier werden die einzelnen Bestandteile des Codes für den ESP32 beschrieben und erläutert, um ein besseres Verständnis für die eigene Implementation zu bekommen. Falls der Code verwendet werden soll, empfehlen wir, dass man die Projektdatei herunterlädt.

Einbindungen[Bearbeiten]

Es müssen vier Bibliotheken eingebunden werden, damit der Code funktioniert. Zwei dieser Bibliotheken sind standardmäßig in Arduino IDE enthalten (WiFi & Time). Die beiden anderen müssen vorher heruntergeladen werden (WifiClientSecure & UniversalTelegramBot).

#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <time.h>
#include <UniversalTelegramBot.h>
WLAN[Bearbeiten]

Dieser Teil wird benötigt, um den ESP32 mit dem W-LAN zu verbinden. Die SSID und das Passwort müssen hinzugefügt werden. Falls der ESP32 keine Verbindung zum Internet herstellen kann, wird der restliche Code nicht weiter ausgeführt.

// Initialize Wifi connection to the router
char ssid[] = " ";     // your network SSID (name)
char password[] = " "; // your network key
WiFiClientSecure client;
void setup() {
  Serial.begin(115200);
  Serial.print("Connecting Wifi: ");
  Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
       Serial.print(".");
       delay(500);
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}
Zeit[Bearbeiten]

Text

int timezone = 1 *3600;
int dst = 0;
void setup(){
  configTime(timezone, dst, "pool.ntp.org","time.nist.gov");
  Serial.println("\nWaiting for Internet time");

  while(!time(nullptr)){
     Serial.print("*");
     delay(1000);
  }
  Serial.println("\nTime response....OK");   
}
Telegram-Verbindung[Bearbeiten]

Text

String defaultID =  ""; // TelegramID || Get from Botfather
// Initialize Telegram BOT
 // your Bot Token (Get from Botfather)
#define BOTtoken ""
UniversalTelegramBot bot(BOTtoken, client);
int Bot_mtbs = 1000; //mean time between scan messages
long Bot_lasttime;   //last time messages' scan has been done
Telegram-Nachrichten[Bearbeiten]

Text

String startText = "Wir können starten. Bitte wähle einen der folgenden Befehle aus, um das jeweilige Fach zu bearbeiten.\n /fach0 \n /fach1 \n /fach2 \n /fach3 \n /fach4 \n /fach5 \n /fach6 \n /fach7 \n /fach8 \n /fach9 \n /fach10 \n /fach11 \n /fach12 \n /fach13  ";
String fachText = String("Welchen Befehl möchtest du ausführen ? \n /zeit - Benachrichtigungszeit einstellen \n /licht - Licht einstellen \n /umschalten - Fach an- oder ausschalten");


String enumToName(enum day tago) 
{
   switch (tago) 
   {
      case 1: return "Montag";
      case 2: return "Dienstag";
      case 3: return "Mittwoch";
      case 4: return "Donnerstag";
      case 5: return "Freitag";
      case 6: return "Samstag";
      case 0: return "Sonntag";
   }
}
Initialisierung der Fächer[Bearbeiten]

Text

int fachNummer = 0;
String fachString = "0";
const int fachAnzahl = 14;


//Wochentage
enum day
{  Montag=1,
  Dienstag=2,
  Mittwoch=3,
  Donnerstag=4,
  Freitag=5,
  Samstag=6,
  Sonntag=0
};


//Fach Objekt
struct fachObject {
  int licht;
  bool enabled = true;
  bool lichtAn = false;
  int stunde = 0;
  int minute = 0;
  day tag = Montag;
  
} abteile[fachAnzahl];
void setup() {
  
pinMode(0,OUTPUT);
abteile[0].licht=13;
abteile[1].licht=12;
abteile[2].licht=14;
abteile[3].licht=27;
abteile[4].licht=26;
abteile[5].licht=25;
abteile[6].licht=33;
abteile[7].licht=32;
abteile[8].licht=16;
abteile[9].licht=17;
abteile[10].licht=19;
abteile[11].licht=21;
abteile[12].licht=22;
abteile[13].licht=23;

  for (int i = 0 ; i<14; i++){
    pinMode (abteile[i].licht, INPUT);
  }
}

Zeit-Funktionen[Bearbeiten]

Text

Aktuelle Zeit[Bearbeiten]

Text

String zeitPunkt(int f){
  if (f>=0 && f<14){
  String stundeText;
      String minuteText;
      if (abteile[f].stunde>=0 && abteile[f].stunde<10){
        stundeText=(String) 0 + (String) abteile[f].stunde;
        }
        else if (abteile[f].stunde>=10 && abteile[f].stunde<24){
           stundeText= (String) abteile[f].stunde;
        }
              if (abteile[f].minute>=0 && abteile[f].minute<10){
        minuteText=(String) 0 + (String) abteile[f].minute;
        }
        else if (abteile[f].minute>=10 && abteile[f].minute<60){
           minuteText= (String) abteile[f].minute;
        }
        return enumToName(abteile[f].tag) + " um " + stundeText + ":" + minuteText;
        }
        else return "Fehler!";
}
Test[Bearbeiten]

Text

Code
Test[Bearbeiten]

Text

Code
Test[Bearbeiten]

Text

Code

Erweiterungs-Möglichkeiten[Bearbeiten]

Optimiertes Boxdesign[Bearbeiten]

Die Box ist ausbaufähig und befindet sich aktuell noch in ihrer Prototyp-Form. Man könnte den Schieberegler der Fächer durch Klappen ersetzen & zudem noch ein Gewichtssensor in die einzelnen Fächer hinzufügen, sodass die Zuverlässigkeit verbessert wird, indem eine Bestätigung gesendet wird, dass der Inhalt des Faches wirklich entleert wurde. Aktuell wird dieses Problem nur durch Vertrauen in den Nutzer gelöst. Da die Angehörigen jedoch nicht davon zu 100 % ausgehen können, dass die Tabletten wirklich der Box entnommen wurden, ist dies eine denkbare Erweiterung. Des Weiteren ist es vorstellbar, die Box mit einer Akustik auszustatten, sodass zusätzlich zur Benachrichtigung & der Leuchte noch eine Art Alarm ausgelöst wird, welcher auch nochmal an die Tabletteneinnahme erinnern soll.