Inhaltsverzeichnis:

Automatischer Medikamentenspender - Gunook
Automatischer Medikamentenspender - Gunook

Video: Automatischer Medikamentenspender - Gunook

Video: Automatischer Medikamentenspender - Gunook
Video: Automatischer Tablettenspender DoseControl 2024, November
Anonim
Automatischer Medikamentenspender
Automatischer Medikamentenspender

Dieses Projekt ist für den medizinischen Bereich gedacht, wo ältere Patienten eine zuverlässige Möglichkeit haben müssen, Medikamente zu portionieren und auszugeben. Mit diesem Gerät können Medikamente bis zu 9 Tage im Voraus portioniert und zum gewünschten Zeitpunkt automatisch abgegeben werden. Der Deckel ist zudem mit dem RFID-Tag abschließbar, sodass nur das Pflegepersonal auf die Medikamente zugreifen kann.

Lieferungen:

Es gibt die erforderlichen Materialien, um dieses Projekt zu erstellen:

  • Arduino UNO
  • Motortreibermodul
  • SG90 9G Servo
  • Schrittmotor
  • DS1302 RTC-Modul
  • Verschiedene Überbrückungsdrähte
  • IIC 1602 LCD
  • Zugang zum 3D-Drucker
  • Beine wie Holzdübel
  • RFID-Modul und Tag
  • Zwei Druckknöpfe
  • Lötkolben
  • Steckbrett
  • Sekundenkleber
  • Holzschrauben
  • Unvollendete Holzkiste mit Klappdeckel
  • Doppelseitiges Klebeband

Schritt 1: Ändern der Box

Ändern der Box
Ändern der Box
Ändern der Box
Ändern der Box
Ändern der Box
Ändern der Box
Ändern der Box
Ändern der Box

Die Box muss zuerst modifiziert werden. Es müssen mehrere Löcher gebohrt werden. Das erste Loch befindet sich auf der Vorderseite der Box, wo die Bedienfeldbox gedruckt ist. Das zweite Loch befindet sich auf der Rückseite der Box, damit das USB-Kabel hindurchpasst. Das letzte Loch befindet sich am Boden der Schachtel, durch das das Medikament nach der Abgabe herausfällt. Zuletzt müssen die Beine an der Unterseite befestigt werden. Ich habe Gummifüße verwendet, die ich in meinem Haus für die Beine gefunden habe, aber es können auch Holzdübel verwendet werden.

Schritt 2: 3D-gedruckte Teile

3D-gedruckte Teile
3D-gedruckte Teile
3D-gedruckte Teile
3D-gedruckte Teile
3D-gedruckte Teile
3D-gedruckte Teile

Für dieses Projekt werden viele 3D-gedruckte Teile benötigt.

Sie sind:

  • Karussell mit Medikamenten
  • Basis für Karussell
  • Trichter für das Medikament
  • Arm für Servomotor zum Verriegeln des Deckels
  • Basis für Servomotor
  • Verriegelung für Servoarm
  • Schalttafel
  • Becher für das abzugebende Medikament

Die Basis für das Karussell wird mit doppelseitigem Klebeband auf die Box geklebt. Die Basis für den Servomotor und die Verriegelung für den Arm werden beide mit kurzen Holzschrauben in die Box geschraubt. Die Bedienfeldbox wird nach dem Einsetzen der Komponenten mit Sekundenkleber auf die Vorderseite der Box geklebt.

Schritt 3: Elektronik

Elektronik
Elektronik

Die Elektronik muss nun in die Box gelegt werden. Zuerst wird der Schrittmotor mit M3-Schrauben und Muttern an der Karussellbasis befestigt. Das Servo wird dann mit Sekundenkleber auf seine Basis geklebt. Dann werden der Motorcontroller, Arduino, Steckbrett, RFID-Modul und RTC-Modul mit doppelseitigem Klebeband an der Box befestigt. Das LCD wird in das Loch in der Kontrollbox eingesetzt. Es ist etwas Löten erforderlich. Bei den Tastern müssen die Überbrückungskabel an den Flachsteckern angelötet werden. Für den RFID-Reader müssen die Pins mit der Platine verlötet werden.

Schritt 4: Code

Unten ist der kommentierte Code:

Bibliotheken für Servo, LCD, RTC, RFID und Schrittmotor sind in diesem Code enthalten.

///////////////// Bibliotheken und Variablen

#include #include //Arduino-Standardbibliothek #include #include virtuabotixRTC myRTC(2, 3, 4); // Pins definieren #define servopin 8 const int buttonup = 6; const int buttondown = 7; int hr = 0; int min=0; int sel=0; int-Zustand = 0; int statedown=0; int statesel=0; int warten = 0; int-Schließfach = 0; // Servo-Servo einrichten; int-Winkel = 180; #include // Verwenden Sie die modifizierte Stepper-Bibliothek mit der Magnetzündungssequenz 1000/0100/0010/0001. Legen Sie die Bibliothek in Ihren Bibliotheksordner. #define Getriebeübersetzung 64 //1:64 Getriebeübersetzung const int stepsPerRevolution = 2048; // Der Arduino Kit-Motor ist untersetzt. Durch Experiment habe ich festgestellt, dass 2048 Schritte die Welle eine Runde drehen. int-Schritte = 0; LiquidCrystal_I2C lcd(0x27, 16, 2); // einen 4-Draht-Stepper auf den Pins 8 bis 11 instanziieren: Stepper myStepper (stepsPerRevolution, A0, A1, A2, A3); #include #include #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); // MFRC522-Instanz erstellen. int deg = 10; Void setup () {lcd.init (); // lcd initialisieren lcd.backlight (); // In der Zeile darunter wird die aktuelle Uhrzeit eingestellt. Es muss nur einmal gemacht werden und danach muss der Code // erneut kommentiert hochgeladen werden. //myRTC.setDS1302Time (40, 55, 11, 1, 7, 12, 2020); pinMode (buttonup, INPUT_PULLUP); pinMode (Schaltfläche, INPUT_PULLUP); Serial.begin (9600); // Initiieren einer seriellen Kommunikation SPI.begin(); // SPI-Bus initiieren mfrc522. PCD_Init(); // Initiiere MFRC522 myStepper.setSpeed(0.15*gearratio); // der Motor scheint 1/64 untersetzt zu sein, was bedeutet, dass die Geschwindigkeit 64x eingestellt werden muss. // Initialisieren Sie die serielle Schnittstelle: servo.attach (servopin); aufrechtzuerhalten. Void Schleife () {//////////////// LCD-Code // Aktualisiert die Anzeige ständig mit der aktuellen Uhrzeit und der Dosierzeit. lcd.clear(); myRTC.updateTime(); lcd.setCursor(0, 0); lcd.print("Zeit:"); lcd.setCursor(6, 0); lcd.print (myRTC.hours); lcd.print(":"); lcd.print (myRTC.minutes); lcd.setCursor(0, 1); lcd.print("Ausgeben:"); lcd.setCursor(10, 1); lcd.print (Std); lcd.print(":"); lcd.print (minn); ///////////////// Tastenzustände lesen // Liest die Zustände der Tasten, um die Ausgabezeit zu ändern. stateup = digitalRead (buttonup); statedown = digitalRead (Buttondown); Verzögerung (100); ///////////////// Dosierlogik // Wenn die aktuelle Zeit mit der gewählten Dosierzeit übereinstimmt, den Schrittmotor drehen. // Alle 9 Dosiervorgänge des Geräts dreht sich der Motor um eine zusätzliche Strecke, um sicherzustellen, dass eine vollständige Umdrehung erfolgt. if (myRTC.hours == Std && myRTC.minutes == minn && Schritte <9) { myStepper.step (227); Schritte = Schritte +1; Verzögerung (60100); myRTC.updateTime(); aufrechtzuerhalten. Sonst if (myRTC.hours == Stunde && myRTC.minutes == minn && Schritte ==9) { myStepper.step (232); Schritte = 0; Verzögerung (60100); myRTC.updateTime(); ///////////////// Ändern der Ausgabezeit // Ändern Sie die Ausgabezeit basierend auf der gedrückten Taste. // Die Zeit wird auf Null zurückgesetzt, wenn die Stunden 24 und die Minuten 60 werden. } if (stateup == LOW && hr<23){ hr=hr+1; Verzögerung (50); aufrechtzuerhalten. Sonst if (stateup == LOW && hr ==23) {hr = 0; Verzögerung (50); } if (statedown == NIEDRIG && min <59) { minn = minn + 1; Verzögerung (50); aufrechtzuerhalten. Sonst if (statedown == LOW && minn ==59) {minn=0; Verzögerung (50); } ///////////////// RFID-Code // Liest das RFID-Tag, wenn es präsentiert wird. if (! mfrc522. PICC_IsNewCardPresent()) { zurück; } // Eine der Karten auswählen if (! mfrc522. PICC_ReadCardSerial()) { return; } String-Inhalt= ""; Byte-Buchstabe; for (Byte i = 0; i < mfrc522.uid.size; i++) {//Serial.println(mfrc522.uid.uidByte < 0x10 ? " 0": " "); //Seriell.println(mfrc522.uid.uidByte, HEX); content.concat(String(mfrc522.uid.uidByte < 0x10 ? " 0": " ")); content.concat(String(mfrc522.uid.uidByte, HEX)); Schließfach = 1; } content.toUpperCase(); ///////////////// SPERRCODE // Wenn das richtige RFID-Tag gelesen wird, bewegen Sie das Servo in die offene Position, wenn es geschlossen ist, // und bewegen Sie das Servo in die geschlossene Position, wenn es geschlossen ist offen. while (locker == 1){ if (content.substring(1) == "3B 21 D6 22"){//ändern Sie hier die UID der Karte/Karten, denen Sie Zugriff gewähren möchten { switch (deg) { case 180: servo.write (Grad); Grad = 10; Schließfach = 0; Serial.print ("bewegen"); Verzögerung (1000); brechen; Fall 10: servo.write (Grad); Grad = 180; Schließfach=0; Verzögerung (1000); brechen; } } } else { Serial.println ("Zugriff verweigert"); Verzögerung (1000); } } }

Schritt 5: Endgültige Einrichtung

Der letzte Schritt besteht darin, das Projekt für die Verwendung vorzubereiten. Laden Sie zuerst den Code mit unkommentierter Zeiteinstellungszeile hoch, um die aktuelle Uhrzeit in die Echtzeituhr hochzuladen. Kommentieren Sie dann den Code aus und laden Sie den Code erneut hoch. Dadurch wird sichergestellt, dass das Gerät, wenn es vom Stromnetz getrennt wird, immer noch die richtige Uhrzeit behält. Jetzt müssen Sie nur noch das Medikament in die Schlitze geben, den Becher unter das Ausgabeloch stellen und eine Ausgabezeit einstellen. Das Gerät dosiert zuverlässig jeden Tag zur gleichen Zeit.

Empfohlen: