Inhaltsverzeichnis:
- Schritt 1: Ändern der Box
- Schritt 2: 3D-gedruckte Teile
- Schritt 3: Elektronik
- Schritt 4: Code
- Schritt 5: Endgültige Einrichtung
Video: Automatischer Medikamentenspender - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:15
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
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
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
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:
Automatischer Anrufbeantworter V1.0: 17 Schritte (mit Bildern)
Automated Answering System V1.0: Manchmal habe ich einfach keine Lust, ans Telefon zu gehen. Okay, okay… die meiste Zeit ist es mir wirklich egal, ans Telefon zu gehen. Was soll ich sagen, ich bin ein beschäftigter Mann. Ich habe mir schon lange ein System gewünscht, das dem ähnlich ist, das die Telefongesellschaft für die
Automatischer Sucher: 4 Schritte
Auto-Searcher: Also las ich eines Tages Fanfiction in meinem Bett, um meinen Stress abzubauen. Aber ich hatte das Gefühl, dass es ein bisschen mühsam war, die Seite weiter zu scrollen, um weiterzulesen. Ich muss auch klicken, um das nächste Kapitel zu sehen und das Ganze vorher suchen
Automatischer Gartenbewässerer - 3D gedruckt - Arduino: 10 Schritte (mit Bildern)
Automatischer Gartenbewässerer | 3D gedruckt | Arduino: Ich bin ein begeisterter Gärtner, aber Ihre Pflanzen während Trockenperioden von Hand zu gießen, dauert einige Zeit. Dieses Projekt befreit mich vom Gießen, damit ich an meinen anderen Projekten arbeiten kann. Es ist auch großartig, sich um den Garten zu kümmern, während Sie nicht zu Hause sind, und die Pflanze