- Απαιτούμενα στοιχεία για υπενθύμιση αυτόματης ιατρικής χρησιμοποιώντας το Arduino
- Υπενθύμιση ιατρικής Arduino χρησιμοποιώντας το Arduino Circuit
- Εργασία συστήματος αυτόματης υπενθύμισης ιατρικής
- Προγραμματισμός του Arduino UNO for Medicine Reminder
Όσον αφορά τα αγαπημένα μας πρόσωπα, θέλουμε πάντα να τους διατηρούμε υγιείς και σε φόρμα. Αλλά τι θα συμβεί αν αρρωστήσουν και ξεχάσουν να πάρουν φάρμακα εγκαίρως. Θα ανησυχούσαμε, έτσι; Στα νοσοκομεία, υπάρχουν πολλοί ασθενείς και είναι δύσκολο να υπενθυμίσουμε σε κάθε ασθενή να παίρνει φάρμακα εγκαίρως. Οι παραδοσιακοί τρόποι απαιτούν ανθρώπινες προσπάθειες για να τους υπενθυμίσουν να παίρνουν φάρμακα εγκαίρως. Η ψηφιακή εποχή δεν το ακολουθεί και μπορούμε να χρησιμοποιήσουμε μηχανές για να το κάνουμε αυτό. Η εφαρμογή του Smart Medicine Reminder είναι πολύ ευρεία και μπορεί να χρησιμοποιηθεί από ασθενείς στο σπίτι, γιατρούς σε νοσοκομεία και σε πολλά άλλα μέρη. Όσον αφορά την υπενθύμιση, μπορεί να υπάρχουν πολλοί τρόποι για να το υπενθυμίσετε:
- Δείξτε το σε μια οθόνη
- Στείλτε ειδοποίηση μέσω email ή τηλεφώνου
- Χρήση εφαρμογών για κινητά
- Συναγερμός Buzz
- Χρήση Bluetooth / Wi-Fi
- Λάβετε μια κλήση
- Υπενθύμιση για την επόμενη ώρα του φαρμάκου ενώ υπενθυμίζετε την τρέχουσα ώρα
Μπορούμε να συνδυάσουμε τρόπους ανάλογα με την ανάγκη. Για να κρατήσουμε τα πράγματα απλά εδώ, κάναμε μια απλή υπενθύμιση φαρμάκου χρησιμοποιώντας το Arduino που μας θυμίζει να παίρνουμε φάρμακα 1 ή 2 ή 3 φορές την ημέρα. Η χρονική περίοδος μπορεί να επιλεγεί χρησιμοποιώντας τα κουμπιά. Επίσης, δείχνει την τρέχουσα ημερομηνία και ώρα. Θα το επεκτείνουμε περαιτέρω σε ένα εισερχόμενο άρθρο έργου IoT όπου θα αποστέλλεται ειδοποίηση μέσω email ή SMS. Αυτή η υπενθύμιση φαρμάκων μπορεί επίσης να ενσωματωθεί στο σύστημα παρακολούθησης ασθενών.
Απαιτούμενα στοιχεία για υπενθύμιση αυτόματης ιατρικής χρησιμοποιώντας το Arduino
- Arduino Uno (Μπορούμε να χρησιμοποιήσουμε και άλλες πλακέτες Arduino, όπως το Pro mini, Nano)
- Ενότητα RTC DS3231
- Οθόνη LCD 16x2
- Βομβητής
- Led (οποιοδήποτε χρώμα)
- Ψωμί
- Κουμπιά
- Ποτενσιόμετρο 10Κ
- Αντίσταση 10K, 1K
- Καλώδια αλτών
Υπενθύμιση ιατρικής Arduino χρησιμοποιώντας το Arduino Circuit
Το πλήρες διάγραμμα κυκλώματος για τη δημιουργία ενός έξυπνου κουτιού φαρμάκων χρησιμοποιώντας το Arduino φαίνεται παρακάτω
Παρακάτω είναι οι συνδέσεις ακίδων του Arduino με διαφορετικά περιφερειακά
Arduino Καρφίτσες Περιφερειακές Καρφίτσες
- 2 -----------------------------> D7 της οθόνης LCD 16x2
- 3 -----------------------------> D6 της οθόνης LCD 16x2
- 4 -----------------------------> D5 της οθόνης LCD 16x2
- 5 -----------------------------> D4 της οθόνης LCD 16x2
- 7 -----------------------------> 3ο κουμπί
- 8 -----------------------------> 2ο κουμπί
- 9 -----------------------------> 1ο κουμπί
- 11 -----------------------------> EN καρφίτσα οθόνης LCD 16x2
- 12 -----------------------------> Καρφίτσα RS της οθόνης LCD 16x2
- 13 -----------------------------> + Ve Pin Buzzer και Led
- A0 -----------------------------> Κουμπί διακοπής
- A4 -----------------------------> SDA του DS3231
- A5 -----------------------------> SCL του DS3231
- 3.3V -----------------------------> Vcc του DS3231
- Gnd -----------------------------> Gnd
Σε αυτό το έργο υπενθύμισης φαρμάκων, το RTC DS3231 συνδέεται μέσω πρωτοκόλλου I2C με το Arduino Uno. Μπορείτε επίσης να χρησιμοποιήσετε το RTC IC DS1307 για να διαβάσετε την ώρα με το Arduino. Το RTC DS3231 διαθέτει επίσης ενσωματωμένη μνήμη 32k που μπορεί να χρησιμοποιηθεί για την αποθήκευση πρόσθετων δεδομένων. Η μονάδα RTC τροφοδοτείται μέσω του πείρου 3.3V του Arduino uno. Μια οθόνη LCD 16x2 διασυνδέεται με χρήση SPI. Ένα buzze r χρησιμοποιείται για να ειδοποιεί και να υπενθυμίζει ότι είναι ώρα να πάρετε φάρμακο. Χρησιμοποιούνται τέσσερα κουμπιά όπου το καθένα έχει ξεχωριστή επιλογή. Το πρώτο μπουτόν χρησιμοποιείται για υπενθύμιση για λήψη φαρμάκου μία φορά την ημέρα. Το δεύτερο κουμπί χρησιμοποιείται για να υπενθυμίζει δύο φορές την ημέρα και το τρίτο κουμπί για να υπενθυμίζει τρεις φορές την ημέρα. Το τέταρτο πλήκτρο χρησιμοποιείται για να σταματήσει το βομβητή όταν ο χρήστης έχει ακούσει την ειδοποίηση.
Εργασία συστήματος αυτόματης υπενθύμισης ιατρικής
Ο συναγερμός υπενθύμισης χάπι τροφοδοτείται με τροφοδοσία 5V. Όταν ξεκινά για πρώτη φορά, δείχνει ένα μασάζ καλωσορίσματος ως " Welcome to Circuit Digest ". Η οθόνη LCD έχει ρυθμιστεί σε κύκλο σε τρεις οθόνες. Οι 1 ου δείχνει την οθόνη μασάζ ως « Stay Healthy, Get Well Soon ». Η δεύτερη οθόνη είναι μια οθόνη βοήθειας που λέει να πατήσετε το κουμπί επιλογής για να επιλέξετε οποιαδήποτε χρονική υποδοχή για υπενθύμιση (μία φορά / δύο φορές / τρεις φορές την ημέρα). Η χρονοθυρίδα μπορεί να αλλάξει στο πρόγραμμα και μπορεί να διαμορφωθεί ανάλογα. Αυτή τη στιγμή το έχουμε διορθώσει σε τρεις χρονικές περιόδους, δηλαδή 8πμ, 2μμ και 8μμ.
Διαχωρίσαμε τα χρονικά διαστήματα σε τρεις λειτουργίες. Η λειτουργία 1 επιλέγει να παίρνει φάρμακο μία φορά / ημέρα στις 8πμ όταν ο χρήστης πατά το 1ο μπουτόν. Λειτουργία 2 επιλέγει να πάρετε το φάρμακο δύο φορές / ημέρα στις 8 π.μ. και 20:00, όταν πιέζει χρήστη 2 ος πάτημα κουμπιού. Η λειτουργία 3 επιλέγει να λαμβάνει φάρμακο τρεις φορές / ημέρα στις 8πμ, 2μμ και 8μμ αν ο χρήστης πατήσει το 3ο κουμπί.
Μπορούμε επίσης να προσθέσουμε μια δυνατότητα για αναβολή του βομβητή για 10 λεπτά (δεν περιλαμβάνεται σε αυτό το έργο). Όταν ο χρήστης επιλέγει τις επιθυμητές υποδοχές πατώντας τα κουμπιά, η είσοδος του χρήστη καταγράφεται και ο χρόνος λαμβάνεται από το RTC. Όταν ο χρόνος ταιριάζει με την επιλεγμένη χρονική υποδοχή, τότε ο βομβητής αρχίζει να βουίζει. Ο χρήστης μπορεί να σταματήσει το βομβητή πατώντας το κουμπί STOP. Η ίδια διαδικασία συνεχίζεται για την επόμενη υπενθύμιση υποδοχής. Πλήρης διαδικασία εμφανίζεται στο βίντεο που δίνεται στο τέλος αυτού του άρθρου.
Προγραμματισμός του Arduino UNO for Medicine Reminder
Είναι πολύ εύκολο να γράψετε πρόγραμμα μόλις σκεφτείτε τους τρόπους για να θυμηθείτε να παίρνετε τα χάπια. Εδώ θα εμφανίσει την υπενθύμιση στην οθόνη, θα βομβίσει έναν βομβητή και θα την υποδείξει χρησιμοποιώντας LED. Επίσης, έχει την επιλογή να επιλέξει τρεις χρονικούς χρόνους (μία φορά / δύο φορές / τρεις φορές την ημέρα) και όταν φτάσει ο χρόνος αρχίζει να ειδοποιεί τον ασθενή με το βομβητή. Τότε ολόκληρο το σύστημα θα μοιάζει με το εξής:
Ο χρήστης λαμβάνει οδηγίες βοήθειας στην οθόνη> Ο χρήστης επιλέγει χρονικά χρονικά διαστήματα (μία φορά / ημέρα, δύο φορές / ημέρα, τρεις φορές / ημέρα)> Μήνυμα επιβεβαίωσης εκτύπωσης στην οθόνη> Έναρξη διατήρησης χρόνου> Το Buzzer και το LED ξεκινά όταν ο χρόνος ταιριάζει με την επιλεγμένη υποδοχή χρήστη> Ο χρήστης σταματά έως πατώντας ένα κουμπί διακοπής> Τέλος
Μπορούμε να αλλάξουμε το πρόγραμμα και το υλικό εάν θέλουμε να προσθέσουμε περισσότερες δυνατότητες. Για να κατανοήσουμε με πολύ απλούστερο τρόπο, έχουμε χωρίσει το πρόγραμμα σε μικρές λειτουργίες. Οι λειτουργίες είναι κατανοητές και εφαρμόζονται εύκολα. Το πλήρες πρόγραμμα δίνεται στο τέλος αυτού του έργου. Ας ξεκινήσουμε με το πρόγραμμα.
Από τότε, έχουμε χρησιμοποιήσει άλλα περιφερειακά όπως οθόνη LCD 16x2, RTC DS3231, επομένως πρέπει πρώτα να συμπεριλάβουμε βιβλιοθήκες f ή αυτό. Η απαιτούμενη βιβλιοθήκη έχει ως εξής:
Η βιβλιοθήκη EEPROM χρησιμοποιείται για να παρακολουθεί την είσοδο επιλογής χρήστη εάν το Arduino δεν είναι ενεργοποιημένο. Και όταν η ισχύς του χρήστη στο Arduino λαμβάνει την προηγούμενη κατάσταση των κουμπιών χρησιμοποιώντας τη βιβλιοθήκη EEPROM. Η βιβλιοθήκη Wire.h χρησιμοποιείται δεδομένου ότι η μονάδα RTC DS3231 κοινοποιείται χρησιμοποιώντας I2C.
Ελέγχετε πάντα εάν το RTC είναι σωστά ενσύρματο ή δεν έχει υποστεί ζημιά, καθώς το RTC θα διαδραματίσει σημαντικό ρόλο στη διατήρηση του συνόλου του συστήματος υπενθύμισης.
if (! rtc.begin ()) {// ελέγξτε αν το rtc είναι συνδεδεμένο Serial.println ("Δεν ήταν δυνατή η εύρεση RTC"); ενώ (1) } if (rtc.lostPower ()) { Serial.println ("Η απώλεια ισχύος RTC, ας ορίσουμε την ώρα!"); }
Η ρύθμιση του χρόνου μπορεί να γίνει με δύο τρόπους, είτε αυτόματα χρησιμοποιώντας τον χρόνο μεταγλώττισης συστήματος είτε εισάγοντας τον χειροκίνητα. Μόλις ορίσουμε την ώρα, σχολιάστε τις παρακάτω γραμμές εκτός εάν θέλετε να αλλάξετε ξανά την ώρα RTC.
rtc.adjust (DateTime (F (__ DATE__), F (__ TIME__))); //rtc.adjust(DateTime(2019, 1, 10, 7, 59, 52));
Αυτή η δήλωση διακόπτη χρησιμοποιείται για την ανάγνωση της προηγούμενης αποθηκευμένης κατάστασης του κουμπιού και τη συνέχιση της κατάστασης για κατάλληλο και ακριβή χρόνο υπενθύμισης.
val2 = EEPROM.read (addr); // διαβάστε την αποθηκευμένη τιμή του κουμπιού για να ξεκινήσετε από εκεί που έμεινε προηγουμένως διακόπτης (val2) { case 1: Serial.println ("Set for 1 / day"); push1state = 1; push2state = 0; push3state = 0; pushVal = 01; Διακοπή; περίπτωση 2: Serial.println ("Σετ για 2 / ημέρα") push1state = 0; push2state = 1; push3state = 0; pushVal = 10; Διακοπή; υπόθεση 3: Serial.println ("Σετ για 3 / ημέρα"); push1state = 0; push2state = 0; push3state = 1; pushVal = 11; Διακοπή; }
Αυτή η δήλωση χρησιμοποιείται για να κάνει το millis να χρησιμοποιείται για χρονισμό και έλεγχο του καθορισμένου διαστήματος κύκλου οθόνης.
currentMillisLCD = millis (); // έναρξη χιλιοστών για εναλλαγή οθόνης LCD σε καθορισμένο χρονικό διάστημα
Ξεκινήστε να διαβάζετε τις ψηφιακές ακίδες που συνδέονται με τα κουμπιά
push1state = digitalRead (push1pin); push2state = digitalRead (push2pin); push3state = digitalRead (push3pin); stopinState = digitalRead (stopPin);
Η παρακάτω λειτουργία χρησιμοποιείται για να διαβάσετε την κατάσταση του κουμπιού και να την γράψετε στο EEPROM. Κάθε φορά που πατάτε το κουμπί, η κατάσταση γράφεται στην EEPROM. Εκτυπώνει επίσης το μήνυμα στην οθόνη LCD της επιλεγμένης επιλογής εισόδου χρήστη. Παρομοίως χρησιμοποιούνται οι λειτουργίες push2 () και push3 () .
void push1 () {// function για να ορίσετε υπενθύμιση μία φορά / ημέρα εάν (push1state == 1) { push1state = 0; push2state = 0; push3state = 0; // pushPressed = true; EEPROM.write (addr, 1); Serial.print ("Push1 Written:"); Serial.println (EEPROM.read (addr)); // για εντοπισμό σφαλμάτων pushVal = 1; // αποθηκεύστε την κατάσταση του κουμπιού-1 lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Σετ υπενθυμίσεων"); lcd.setCursor (0, 1); lcd.print ("για μία φορά / ημέρα!"); καθυστέρηση (1200) lcd.clear (); } }
Η παρακάτω λειτουργία χρησιμοποιείται για να σταματήσει το βομβητή και το led. Είναι πάντα καλό να δίνετε προτάσεις. Εκτυπώστε ένα μήνυμα πρότασης στην οθόνη "Πάρτε φάρμακο με ζεστό νερό".
void stopPins () {// function για να σταματήσει το buzzing όταν ο χρήστης πατά το κουμπί stop stop εάν (stopinState == 1) { // stopinState = 0; // pushPressed = true; πιεσμένος = 1; lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Πάρτε ιατρική"); lcd.setCursor (0, 1); lcd.print ("με ζεστό νερό"); καθυστέρηση (1200) lcd.clear (); } }
Η παρακάτω συνάρτηση είναι ανεξάρτητη από τη διατήρηση του χρόνου αλλά αλλάζει πάντα σε τρεις οθόνες που βοηθούν τον χρήστη Καθώς διατηρούμε μια φροντίδα στους ασθενείς, αφήνουμε να εκτυπώσουμε ένα μήνυμα χαιρετισμού καθώς γνωρίζουμε ότι η συναισθηματική υποστήριξη είναι πολύ χρήσιμη για τη θεραπεία ασθενών σε πιο γρήγορο χρόνο. Μπορείτε να επιλέξετε το δικό σας δημιουργικό μήνυμα. Ας εκτυπώσουμε ένα μήνυμα ως "Μείνετε υγιείς, Νιώστε καλά".
Η δεύτερη οθόνη είναι για να δώσει οδηγίες στους ασθενείς ως "Πατήστε τα κουμπιά για υπενθύμιση..". Η τρίτη οθόνη χρησιμοποιείται για την απλή εμφάνιση της τρέχουσας ημερομηνίας και ώρας.
void changeScreen () {// function for Screen Cycling // Έναρξη εναλλαγής οθόνης κάθε καθορισμένου διαστήματοςLCD εάν (currentMillisLCD - previousMillisLCD> intervalLCD) // αποθηκεύστε την τελευταία φορά που αλλάξατε την οθόνη { previousMillisLCD = currentMillisLCD; οθόνες ++; αν (οθόνες> maxScreen) { οθόνες = 0; // όλες οι οθόνες πέρασαν -> ξεκινήστε από την 1η } isScreenChanged = true; } // Ξεκινήστε την εμφάνιση της τρέχουσας οθόνης εάν (isScreenChanged) // ενημερώστε την οθόνη μόνο εάν η οθόνη αλλάξει. { isScreenChanged = false; // επαναφορά για τον επόμενο διακόπτη επανάληψης (οθόνες) { case getWellsoon: gwsMessege (); // μην ξεχάσετε σύντομα μήνυμα Διακοπή; υπόθεση HELP_SCREEN: helpScreen (); // διακοπή οθόνης εντολών . υπόθεση TIME_SCREEN: timeScreen (); // για εκτύπωση ημερομηνίας και ώρας . προεπιλογή: // ΔΕΝ ΟΡΙΖΕΤΑΙ. Διακοπή; } } }
Αυτή η λειτουργία χρησιμοποιείται για να ξεκινήσει το buzzing και να αναβοσβήνει ταυτόχρονα το LED εάν έχει φτάσει ο επιλεγμένος χρόνος.
void startBuzz () {// συνάρτηση για έναρξη βομβημάτων όταν ο χρόνος φτάσει στο καθορισμένο διάστημα // if (pushPressed == false) { if (pushpressed == 0) { Serial.println ("pushpressed is false in blink"); unsigned long currentMillis = millis (); if (currentMillis - previousMillis> = διάστημα) { previousMillis = currentMillis; // αποθηκεύστε την τελευταία φορά που αναβοσβήσατε το LED Serial.println ("Start Buzzing"); εάν (ledState == LOW) {// εάν η λυχνία LED είναι σβηστή, ανάψτε και αντίστροφα: ledState = HIGH; } αλλιώς { ledState = LOW; } digitalWrite (ledPin, ledState); } } αλλιώς εάν (pushpressed == 1) { Serial.println ("pushpressed is true"); ledState = ΧΑΜΗΛΟ; digitalWrite (ledPin, ledState); } }
Αυτή η λειτουργία χρησιμοποιείται για να συγκρίνει τον επιλεγμένο χρήστη χρονοθυρίδα σε 8am και αρχίζει βούισμα τον βομβητή και αναβοσβήνει η LED μέχρι χρήστης πιέσει το κουμπί διακοπής ώθησης. Ομοίως, οι λειτουργίες άκυρες at2pm () και void at8pm χρησιμοποιούνται για την εκκίνηση του βομβητή και οδήγησαν στις 2μμ και 8μμ.
void at8am () {// function για να ξεκινήσει το buzzing στις 8am DateTime now = rtc.now (); εάν (int (now.hour ())> = buzz8amHH) { εάν (int (now.minute ())> = buzz8amMM) { εάν (int (now.second ())> buzz8amSS) { ////// ///////////////////////////////////////////// startBuzz (); //////////////////////////////////////////////// /// } } } }
Έτσι μπορείτε απλά να φτιάξετε τη δική σας αυτόματη υπενθύμιση φαρμάκου χρησιμοποιώντας το Arduino. Μπορείτε επίσης να χρησιμοποιήσετε το ESP8266 με το Arduino για να το κάνετε ένα έργο IoT το οποίο θα μπορεί να στέλνει ειδοποίηση μέσω email στον χρήστη.
Ο πλήρης κώδικας και το βίντεο επίδειξης δίνονται παρακάτω.