Πίνακας περιεχομένων:

Αυτόματος διανομέας φαρμάκων: 5 βήματα
Αυτόματος διανομέας φαρμάκων: 5 βήματα

Βίντεο: Αυτόματος διανομέας φαρμάκων: 5 βήματα

Βίντεο: Αυτόματος διανομέας φαρμάκων: 5 βήματα
Βίντεο: Πως έβγαλα 1.300 ευρώ/μήνα από Google Maps 2024, Ιούλιος
Anonim
Αυτόματος διανομέας φαρμάκων
Αυτόματος διανομέας φαρμάκων

Αυτό το έργο προορίζεται για χρήση στον ιατρικό τομέα, όπου οι ηλικιωμένοι ασθενείς πρέπει να έχουν έναν αξιόπιστο τρόπο για να μοιράζονται και να χορηγούνται φάρμακα. Αυτή η συσκευή επιτρέπει τη διανομή φαρμάκων έως και 9 ημέρες νωρίτερα και τη διανομή αυτόματα την επιθυμητή ώρα. Το καπάκι είναι επίσης κλειδωμένο με την ετικέτα RFID, διασφαλίζοντας ότι μόνο ο φροντιστής μπορεί να έχει πρόσβαση στο φάρμακο.

Προμήθειες:

Υπάρχουν τα απαραίτητα υλικά για την κατασκευή αυτού του έργου:

  • Arduino UNO
  • Ενότητα οδηγού κινητήρα
  • SG90 9G Servo
  • Stepper Motor
  • Μονάδα DS1302 RTC
  • Διάφορα καλώδια βραχυκυκλωτήρων
  • LCD IIC 1602
  • Πρόσβαση σε 3D εκτυπωτή
  • Πόδια όπως ξύλινοι πείροι
  • Ενότητα και ετικέτα RFID
  • Δύο κουμπιά
  • Συγκολλητικό σίδερο
  • Breadboard
  • υπερκόλλα
  • Βίδες ξύλου
  • Ημιτελές ξύλινο κουτί με αρθρωτό καπάκι
  • Ταινία διπλής όψης

Βήμα 1: Τροποποίηση του πλαισίου

Τροποποίηση του κουτιού
Τροποποίηση του κουτιού
Τροποποίηση του κουτιού
Τροποποίηση του κουτιού
Τροποποίηση του κουτιού
Τροποποίηση του κουτιού
Τροποποίηση του κουτιού
Τροποποίηση του κουτιού

Το πλαίσιο θα πρέπει πρώτα να τροποποιηθεί. Υπάρχουν πολλές τρύπες που πρέπει να ανοίξουν. Η πρώτη οπή θα βρίσκεται στο μπροστινό μέρος του κουτιού, όπου είναι τυπωμένο το πλαίσιο του πίνακα ελέγχου. Η δεύτερη τρύπα βρίσκεται στο πίσω μέρος του κουτιού, για να περάσει το καλώδιο USB. Η τελευταία τρύπα βρίσκεται στο κάτω μέρος του κουτιού, όπου το φάρμακο θα πέσει μόλις διανεμηθεί. Τέλος, τα πόδια πρέπει να στερεωθούν στο κάτω μέρος. Χρησιμοποίησα ελαστικά πόδια που βρήκα γύρω από το σπίτι μου για πόδια, αλλά μπορούν να χρησιμοποιηθούν και ξύλινοι πείροι.

Βήμα 2: Τμήματα εκτυπωμένων 3D

Τρισδιάστατα εκτυπωμένα ανταλλακτικά
Τρισδιάστατα εκτυπωμένα ανταλλακτικά
Τρισδιάστατα εκτυπωμένα ανταλλακτικά
Τρισδιάστατα εκτυπωμένα ανταλλακτικά
Τρισδιάστατα εκτυπωμένα ανταλλακτικά
Τρισδιάστατα εκτυπωμένα ανταλλακτικά

Υπάρχουν πολλά μέρη 3D εκτύπωσης που απαιτούνται για αυτό το έργο.

Αυτοί είναι:

  • Καρουζέλ που περιέχει φάρμακα
  • Βάση για καρουζέλ
  • Χωνί για το φάρμακο
  • Βραχίονας για σερβοκινητήρα για να κλειδώσει το καπάκι
  • Βάση για σερβοκινητήρα
  • Μάνδαλο για σερβο βραχίονα
  • Πίνακας Ελέγχου
  • Φλιτζάνι για τη χορήγηση του φαρμάκου

Η βάση για το γαϊτανάκι είναι κολλημένη στο κουτί με ταινία διπλής όψης. Η βάση για τον σερβοκινητήρα και το μάνδαλο για τον βραχίονα βιδώνονται και τα δύο στο κουτί με κοντές ξύλινες βίδες. Το κουτί του πίνακα ελέγχου είναι κολλημένο στο μπροστινό μέρος του κουτιού με σούπερ κόλλα, αφού έχουν εισαχθεί τα εξαρτήματα.

Βήμα 3: Ηλεκτρονικά

ΗΛΕΚΤΡΟΝΙΚΑ ΕΙΔΗ
ΗΛΕΚΤΡΟΝΙΚΑ ΕΙΔΗ

Τα ηλεκτρονικά πρέπει τώρα να τοποθετηθούν στο κουτί. Πρώτον, ο βηματικός κινητήρας είναι προσαρτημένος στη βάση του καρουζέλ με μπουλόνια και παξιμάδια Μ3. Το σερβο στη συνέχεια κολλάει πολύ στη βάση του. Στη συνέχεια, ο ελεγκτής κινητήρα, το Arduino, το breadboard, η μονάδα RFID και η μονάδα RTC είναι όλα προσαρτημένα στο κουτί με ταινία διπλής όψης. Η οθόνη LCD εισάγεται στην οπή του κουτιού ελέγχου. Υπάρχει κάποια συγκόλληση που απαιτείται. Για τα κουμπιά, τα καλώδια του βραχυκυκλωτήρα πρέπει να συγκολληθούν στους συνδετήρες με το φτυάρι. Για τον αναγνώστη RFID, οι ακίδες πρέπει να κολληθούν στον πίνακα.

Βήμα 4: Κωδικός

Παρακάτω είναι ο κωδικός που σχολιάστηκε:

Σε αυτόν τον κωδικό περιλαμβάνονται βιβλιοθήκες για τον κινητήρα Servo, LCD, RTC, RFID και Stepper.

////////////////// Βιβλιοθήκες και μεταβλητές

#include #include // τυπική βιβλιοθήκη Arduino #include #include virtuabotixRTC myRTC (2, 3, 4); // Ορισμός καρφίτσες #define servopin 8 const int buttonup = 6; const int buttondown = 7; int hr = 0; int minn = 0; int sel = 0; int stateup = 0; int δηλωμένο = 0; int Statesel = 0; int αναμονή = 0; int ντουλάπι = 0; // Ρύθμιση servo Servo servo. γωνία int = 180; #include // χρησιμοποιήστε τροποποιημένη βιβλιοθήκη stepper με ακολουθία βολής μαγνήτη 1000/0100/0010/0001. Βάλτε τη βιβλιοθήκη στο φάκελο της βιβλιοθήκης σας. #define gearratio 64 // 1: 64 ratio gear const int stepsPerRevolution = 2048; // ο κινητήρας Arduino Kit είναι κατεβασμένος. Με πείραμα διαπίστωσα ότι 2048 βήματα γυρίζουν τον άξονα έναν γύρο. int βήματα = 0; LiquidCrystal_I2C LCD (0x27, 16, 2); // υλοποιήστε ένα βήμα 4-καλωδίων στις ακίδες 8 έως 11: Stepper myStepper (βήματαPerRevolution, A0, A1, A2, A3). #include #include #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522 (SS_PIN, RST_PIN); // Δημιουργία παρουσίας MFRC522. int deg = 10; void setup () {lcd.init (); // αρχικοποιήστε το lcd lcd.backlight (); // Η παρακάτω γραμμή χρησιμοποιείται για τον ορισμό της τρέχουσας ώρας. Πρέπει να γίνει μόνο μία φορά και στη συνέχεια ο κώδικας // πρέπει να μεταφορτωθεί ξανά με το σχόλιό του. //myRTC.setDS1302Time(40, 55, 11, 1, 7, 12, 2020); pinMode (κουμπί, INPUT_PULLUP); pinMode (στο κάτω μέρος, INPUT_PULLUP); Serial.begin (9600); // Έναρξη σειριακής επικοινωνίας SPI.begin (); // Εκκίνηση διαύλου SPI mfrc522. PCD_Init (); // Ξεκινήστε το MFRC522 myStepper.setSpeed (0.15*gearratio); // ο κινητήρας φαίνεται να είναι μειωμένος κατά 1/64, πράγμα που σημαίνει ότι η ταχύτητα πρέπει να ρυθμιστεί 64x. // αρχικοποίηση της σειριακής θύρας: servo.attach (servopin); } void loop () {///////////////// Κωδικός LCD // Ενημερώνει συνεχώς την οθόνη με την τρέχουσα ώρα και τον χρόνο διανομής. lcd.clear (); myRTC.updateTime (); lcd.setCursor (0, 0); lcd.print ("Timeρα:"); lcd.setCursor (6, 0); lcd.print (myRTC.hours); lcd.print (":"); lcd.print (myRTC.minutes); lcd.setCursor (0, 1); lcd.print ("Διανομή:"); lcd.setCursor (10, 1); lcd.print (hr); lcd.print (":"); lcd.print (minn); ////////////////// Κατάσταση ανάγνωσης κουμπιού // Διαβάζει τις καταστάσεις των κουμπιών για να αλλάξει ο χρόνος διανομής. κατάσταση κατάστασης = digitalRead (κουμπί); statementown = digitalRead (buttondown)? καθυστέρηση (100)? ////////////////// Λογική διανομής // Εάν η τρέχουσα ώρα είναι η ίδια με την επιλεγμένη ώρα διανομής, γυρίστε το βηματικό μοτέρ. // Κάθε 9 φορές που διανέμεται η συσκευή, ο κινητήρας γυρίζει μια επιπλέον απόσταση για να διασφαλίσει ότι πραγματοποιείται πλήρης περιστροφή. εάν (myRTC.hours == hr && myRTC.minutes == minn && βήματα <9) {myStepper.step (227); βήματα = βήματα +1; καθυστέρηση (60100) myRTC.updateTime (); } else if (myRTC.hours == hr && myRTC.minutes == minn && βήματα == 9) {myStepper.step (232); βήματα = 0; καθυστέρηση (60100) myRTC.updateTime (); ////////////////// Αλλαγή χρόνου διανομής // Αλλάξτε το χρόνο διανομής με βάση το κουμπί που πατάτε. // Ο χρόνος επιστρέφει στο μηδέν όταν οι ώρες φτάνουν στο 24 και τα λεπτά φτάνουν στο 60.} εάν (κατάσταση = = LOW && hr <23) {hr = hr+1; καθυστέρηση (50)? } else if (κατάσταση = = LOW && hr == 23) {hr = 0; καθυστέρηση (50)? } if (δηλωμένο == LOW && minn <59) {minn = minn+1; καθυστέρηση (50)? } else if (statementown == LOW && minn == 59) {minn = 0; καθυστέρηση (50)? } ////////////////// Κωδικός RFID // Διαβάζει την ετικέτα RFID όταν παρουσιάζεται. εάν (! mfrc522. PICC_IsNewCardPresent ()) {return? } // Επιλέξτε μία από τις κάρτες εάν (! Mfrc522. PICC_ReadCardSerial ()) {return; } String content = ""; byte γράμμα? για (byte i = 0; i <mfrc522.uid.size; i ++) {//Serial.println(mfrc522.uid.uidByte sharedii] <0x10? "0": ""); //Serial.println(mfrc522.uid.uidByte , HEX); content.concat (String (mfrc522.uid.uidByte <0x10? "0": "")); content.concat (String (mfrc522.uid.uidByte , HEX)); ντουλάπι = 1; } content.toUpperCase (); ///////////////// ΚΛΕΙΔΩΜΑ ΚΩΔΙΚΟΥ // Όταν διαβαστεί η σωστή ετικέτα RFID, μετακινήστε το σερβο σε ανοιχτή θέση όταν είναι κλειστό, // και μετακινήστε το σερβο σε κλειστή θέση όταν είναι Άνοιξε. while (locker == 1) {if (content.substring (1) == "3B 21 D6 22") {// αλλάξτε εδώ το UID της κάρτας/καρτών στα οποία θέλετε να δώσετε πρόσβαση {switch (deg) {case 180: servo.write (deg); deg = 10; ντουλάπι = 0; Serial.print ("κινείται"); καθυστέρηση (1000)? Διακοπή; περίπτωση 10: servo.write (deg); deg = 180; ντουλάπι = 0; καθυστέρηση (1000)? Διακοπή; }}} else {Serial.println ("Η πρόσβαση απαγορεύτηκε"); καθυστέρηση (1000)? }}}

Βήμα 5: Τελική ρύθμιση

Το τελευταίο βήμα είναι να προετοιμάσετε το έργο για χρήση. Πρώτα ανεβάστε τον κωδικό με τη γραμμή ρύθμισης ώρας χωρίς σχολιασμό, για να ανεβάσετε την τρέχουσα ώρα στο RTC. Στη συνέχεια, σχολιάστε τον κώδικα και φορτώστε ξανά τον κώδικα. Αυτό θα διασφαλίσει ότι εάν η συσκευή αποσυνδεθεί, θα διατηρήσει τον σωστό χρόνο. Τώρα το μόνο που έχετε να κάνετε είναι να τοποθετήσετε το φάρμακο στις υποδοχές, να τοποθετήσετε το κύπελλο κάτω από την οπή διανομής και να ορίσετε ένα χρόνο χορήγησης. Η συσκευή θα διανέμεται αξιόπιστα την ίδια ώρα κάθε μέρα.

Συνιστάται: