- Komponenter, der kræves til automatisk medicinpåmindelse ved hjælp af Arduino
- Påmindelse om Arduino-medicin ved hjælp af Arduino-kredsløb
- Arbejde med automatisk medicinpåmindelsessystem
- Programmering Arduino UNO til medicinpåmindelse
Når det kommer til vores kære, vil vi altid holde dem sunde og fit. Men hvad vil der ske, hvis de bliver syge og glemmer at tage medicin til tiden. Vi ville være bekymrede, ikke? På hospitaler er der mange patienter, og det er svært at minde enhver patient om at tage medicin til tiden. De traditionelle måder kræver menneskelig indsats for at minde dem om at tage medicin til tiden. Den digitale æra følger ikke det, og vi kan bruge maskiner til at gøre det. Anvendelsen af Smart Medicine Reminder er meget bred og kan bruges af patienter derhjemme, læger på hospitaler og mange andre steder. Når det kommer til at minde, kan der være mange måder at minde det på:
- Vis det på et display
- Send underretning via e-mail eller telefon
- Brug af mobile apps
- Buzz alarm
- Brug af Bluetooth / Wi-Fi
- Få et opkald
- Påmind om næste medicintid, mens du påmindes om den aktuelle tid
Vi kan kombinere måder afhængigt af behovet. For at holde tingene enkle her lavede vi en simpel medicinpåmindelse ved hjælp af Arduino, der minder os om at tage medicin 1 eller 2 eller 3 gange om dagen. Tidsintervallet kan vælges ved hjælp af trykknapper. Det viser også den aktuelle dato og tid. Vi udvider det yderligere til et IoT-projekt indgående artikler, hvor en e-mail eller SMS-meddelelse vil blive sendt til brugeren. Denne medicinpåmindelse kan også integreres i patientovervågningssystemet.
Komponenter, der kræves til automatisk medicinpåmindelse ved hjælp af Arduino
- Arduino Uno (vi kan også bruge andre Arduino-kort, som Pro mini, Nano)
- RTC DS3231 modul
- 16x2 LCD-skærm
- Summer
- Led (enhver farve)
- Brødbræt
- Skub knapper
- 10K Potentiometer
- 10K, 1K modstande
- Jumper Wires
Påmindelse om Arduino-medicin ved hjælp af Arduino-kredsløb
Det komplette kredsløbsdiagram til opbygning af en smart medicinboks ved hjælp af Arduino er vist nedenfor
Nedenfor er Arduinos pin-forbindelser med forskellige perifere enheder
Arduino Pins Perifere pins
- 2 -----------------------------> D7 på 16x2 LCD-skærm
- 3 -----------------------------> D6 på 16x2 LCD-skærm
- 4 -----------------------------> D5 på 16x2 LCD-skærm
- 5 ----------------------------> D4 af 16x2 LCD-skærm
- 7 -----------------------------> 3. trykknap
- 8 -----------------------------> 2. trykknap
- 9 -----------------------------> 1. trykknap
- 11 -----------------------------> EN-stift på 16x2 LCD-skærm
- 12 -----------------------------> RS-stift på 16x2 LCD-skærm
- 13 -----------------------------> + Ve Pin of Buzzer and Led
- A0 ----------------------------> Stop trykknap
- A4 -----------------------------> SDA i DS3231
- A5 ----------------------------> SCL af DS3231
- 3.3V ----------------------------> Vcc af DS3231
- GND ----------------------------> GND
I denne medicin påmindelse Project, er RTC DS3231 grænseflader gennem I2C protokol med Arduino Uno. Du kan også bruge RTC IC DS1307 til at læse tiden med Arduino. RTC DS3231 har også indbygget 32k hukommelse, som kan bruges til at gemme yderligere data. RTC-modulet drives af 3,3 V-stiften i Arduino uno. En 16x2 LCD-skærm er grænseflade ved hjælp af SPI. En summende r bruges til at advare og minde om, at det er tid til at tage medicin. Der bruges fire trykknapper, hvor hver har særskilt valgfunktion. Den første trykknap bruges til at minde om at tage medicin en gang om dagen. Den anden trykknap bruges til at minde to gange om dagen, og den tredje trykknap bruges til at minde tre gange om dagen. Den fjerde trykknap bruges til at stoppe summeren, når brugeren har hørt alarmen.
Arbejde med automatisk medicinpåmindelsessystem
Den Pill Reminder Alarm er drevet ved hjælp 5V forsyning. Når den først starter op, viser den en velkomstmassage som " Velkommen til Circuit Digest ". LCD-skærmen er indstillet til at cykle i tre skærme. De 1 st skærmen viser massage som ” Bo Sund, Get Well Soon ”. Den anden skærm er en hjælpeskærm, der fortæller at trykke på vælg trykknap for at vælge et hvilket som helst tidsrum, der skal mindes (en / to gange / tre gange om dagen). Tidsintervallet kan ændres i programmet og kan konfigureres i overensstemmelse hermed. Lige nu har vi rettet dette op i tre varigheder, dvs. 8:00, 14:00 og 20:00.
Vi har opdelt tidsslots i tre tilstande. Tilstand 1 vælger at tage medicin, når / dag ved 08:00, når brugeren trykker 1 st trykknap. Mode 2 vælger at tage medicin to gange om dagen kl. 8 og 20, når brugeren trykker på 2. trykknap. Tilstand 3 vælger at tage medicin tre gange / dag ved 08:00, 14:00 og 20:00, hvis brugeren trykker 3 rd trykknap.
Vi kan også tilføje en funktion til at udsætte summeren i 10 minutter (ikke inkluderet i dette projekt). Når brugeren vælger de ønskede slots ved at trykke på trykknapper, registreres brugerindgangen, og tiden tages fra RTC. Når tiden matches med det valgte tidsrum, begynder summeren at summende. Brugeren kan stoppe summeren ved at trykke på STOP-knappen. Den samme proces fortsætter for den næste påmindelse om pladsen. Komplet proces vises i den video, der er givet i slutningen af denne artikel.
Programmering Arduino UNO til medicinpåmindelse
Det er meget let at skrive program, når du først har tænkt på måderne at minde om at tage pillerne. Her viser den påmindelsen på displayet, summer en summer og indikerer den ved hjælp af LED. Det har også mulighed for at vælge tre tidsslots (en / to gange / tre gange om dagen), og når tiden når det, skal du advare patienten ved at summende summeren. Derefter vil hele systemet se ud som følger:
Brugeren får hjælpinstruktioner på displayet> Brugeren vælger tidsslots (en gang / dag, to gange / dag, tre gange / dag)> Udskriv bekræftelsesmeddelelse på displayet> Tidsforhold startet> Summer og LED starter, når tiden stemmer overens med bruger valgt slot> Brugeren stopper ved at trykke på et stop trykknap> Afslut
Vi kan ændre program og hardware, hvis vi vil tilføje flere funktioner. For at forstå på en meget enklere måde har vi opdelt programmet i små funktioner. Funktionerne er lette at forstå og implementere. Det komplette program gives i slutningen af dette projekt. Lad os starte med programmet.
Siden har vi brugt andre perifere enheder som 16x2 LCD-skærm, RTC DS3231, så vi skal først medtage biblioteker f eller det. Bibliotek kræves som følger:
EEPROM-biblioteket bruges til at holde styr på brugerindgang, hvis Arduino ikke er tændt. Og når brugeren tænder Arduino, får den den tidligere tilstand af trykknapper ved hjælp af EEPROM-biblioteket. Wire.h-biblioteket bruges, da RTC DS3231-modulet kommunikeres ved hjælp af I2C.
Kontroller altid , om RTC er korrekt kablet eller ikke er beskadiget, da RTC vil spille en vigtig rolle i tidsopbevaring af hele påmindelsessystemet.
hvis (! rtc.begin ()) {// tjek om rtc er tilsluttet Serial.println ("Kunne ikke finde RTC"); mens (1); } hvis (rtc.lostPower ()) { Serial.println ("RTC mistet strøm, lad os indstille tiden!"); }
Tidsjusteringen kan udføres på to måder, enten automatisk ved hjælp af systemkompileringstid eller ved at indtaste den manuelt. Når vi har indstillet klokkeslættet, skal du kommentere nedenstående linjer, medmindre du vil ændre RTC-tiden igen.
rtc.adjust (DateTime (F (__ DATE__), F (__ TIME__))); //rtc.adjust(DateTime(2019, 1, 10, 7, 59, 52));
Denne switch-erklæring bruges til at læse den tidligere gemte tilstand for trykknappen og genoptage tilstanden for passende og nøjagtig påmindelsestid.
val2 = EEPROM.read (addr); // læs tidligere gemt værdi af trykknap for at starte fra det sted, hvor den blev forud skiftet (val2) { case 1: Serial.println ("Set for 1 / day"); skub1stat = 1; push2state = 0; push3state = 0; pushVal = 01; pause; tilfælde 2: Serial.println ("Sæt til 2 / dag"); push1stat = 0; push2state = 1; push3state = 0; pushVal = 10; pause; tilfælde 3: Serial.println ("Set for 3 / day"); push1stat = 0; push2state = 0; push3state = 1; pushVal = 11; pause; }
Denne erklæring bruges til at få millis til at bruge til timing og kontrol af den definerede intervalskærmcykling.
currentMillisLCD = millis (); // start millis til skift af LCD-skærm ved defineret tidsinterval
Begynd at læse de digitale ben, der er tilsluttet trykknapper.
push1state = digitalRead (push1pin); push2state = digitalRead (push2pin); push3state = digitalRead (push3pin); stopinState = digitalRead (stopPin);
Nedenstående funktion bruges til at læse trykknaptilstanden og skrive den til EEPROM. Hver gang der trykkes på trykknappen, skrives tilstanden til EEPROM. Det udskriver også beskeden på LCD-displayet om det valgte valg af brugerinput. Tilsvarende bruges funktionerne push2 () og push3 () .
ugyldig push1 () {// funktion for at indstille påmindelse en gang / dag hvis (push1state == 1) { push1state = 0; push2state = 0; push3state = 0; // pushPressed = sand; EEPROM.write (addr, 1); Serial.print ("Push1 Skrevet:"); Serial.println (EEPROM.read (addr)); // til debugging pushVal = 1; // gem tilstanden for trykknap-1 lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Påmindelsessæt"); lcd.setCursor (0, 1); lcd.print ("for en gang / dag!"); forsinkelse (1200); lcd.clear (); } }
Nedenstående funktion bruges til at stoppe summer og led. Det er altid godt at komme med forslag. Udskriv en forslagsmeddelelse på displayet "Tag medicin med varmt vand".
ugyldige stopPins () {// funktion for at stoppe summingen, når brugeren trykker på stop-trykknappen, hvis (stopinState == 1) { // stopinState = 0; // pushPressed = sand; trykpresset = 1; lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Tag medicin"); lcd.setCursor (0, 1); lcd.print ("med varmt vand"); forsinkelse (1200); lcd.clear (); } }
Nedenstående funktion er uafhængig af tidsbevarelsen, men cykler altid i tre skærme, som hjælper brugeren. Når vi holder pleje over for patienter, kan vi udskrive en hilsen, da vi ved, at følelsesmæssig støtte er meget nyttig til at helbrede patienter i hurtigere tid. Du kan vælge din egen kreative besked. Lad os udskrive en besked som "Bliv sund, bliv frisk snart".
Den anden skærm er til at give instruktioner til patienter som “Tryk på knapper til påmindelse..”. Den tredje skærm bruges til blot at vise den aktuelle dato og tid.
ugyldig ændringScreen () {// funktion til skærmcykling // Start skifte skærm hvert definerede intervalLCD hvis (currentMillisLCD - forrigeMillisLCD> intervalLCD) // gem sidste gang du ændrede displayet { previousMillisLCD = currentMillisLCD; skærme ++; hvis (skærmbilleder> maxScreen) { skærmbilleder = 0; // alle skærmbilleder over -> start fra 1. } isScreenChanged = true; } // Start visning af den aktuelle skærm, hvis (isScreenChanged) // opdater kun skærmen, hvis skærmen ændres. { isScreenChanged = false; // nulstilling til næste iterationsknap (skærme) { case getWellsoon: gwsMessege (); // Bliv frisk snart besked pause; sag HELP_SCREEN: helpScreen (); // instruktionsskærm pause; sag TIME_SCREEN: timeScreen (); // for at udskrive dato og tids pause; standard: // IKKE INDSTILLET. pause; } } }
Denne funktion bruges til at starte summende og blinke LED'en samtidigt, hvis den valgte tid er nået.
ugyldig startBuzz () {// funktion for at starte summende når tiden når til defineret interval // hvis (pushPressed == false) { if (pushpressed == 0) { Serial.println ("pushpressed is false in blink"); usigneret langstrømMillis = millis (); hvis (currentMillis - previousMillis> = interval) { previousMillis = currentMillis; // gem sidste gang du blinkede LED Serial.println ("Start summende"); if (ledState == LOW) {// hvis LED'en er slukket, skal du tænde den og omvendt: ledState = HIGH; } andet { ledState = LAV; } digitalWrite (ledPin, ledState); } } ellers hvis (pushpressed == 1) { Serial.println ("pushpressed is true"); ledState = LAV; digitalWrite (ledPin, ledState); } }
Denne funktion bruges til at sammenligne det brugervalgte tidsvindue kl. 8 og begynder at summende summeren og blinke LED, indtil brugeren trykker på stop-trykknappen. Tilsvarende bruges funktionerne ugyldige kl. 14 ( og ugyldige kl. 20.00 til at starte summer og ledes kl. 14 og 20.
ugyldigt at8am () {// funktion for at begynde at summede kl 8:00 DateTime nu = rtc.now (); if (int (now.hour ())> = buzz8amHH) { if (int (now.minute ())> = buzz8amMM) { if (int (now.second ())> buzz8amSS) { ////// /////////////////////////////////////////////// startBuzz (); //////////////////////////////////////////////// /// } } } }
Sådan kan du simpelthen lave din egen automatisk medicinpåmindelse ved hjælp af Arduino. Du kan også bruge ESP8266 med Arduino til at gøre det til et IoT-projekt, som kan sende e-mail-alarm til brugeren.
Komplet kode og demonstrationsvideo er angivet nedenfor.