- Komponenti, kas nepieciešami automātiskās medicīnas atgādinājumam, izmantojot Arduino
- Arduino zāļu atgādinājums, izmantojot Arduino shēmu
- Automātisko zāļu atgādinājumu sistēmas darbība
- Arduino UNO programmēšana par zāļu atgādinājumu
Runājot par mūsu tuviniekiem, mēs vienmēr vēlamies saglabāt viņus veselus un piemērotus. Bet kas notiks, ja viņi saslims un aizmirsīs laikus lietot zāles. Mēs būtu noraizējušies, vai ne? Slimnīcās ir daudz pacientu, un ir grūti atgādināt katram pacientam, ka viņš savlaicīgi lieto zāles. Tradicionālie veidi prasa cilvēku pūles, lai atgādinātu viņiem lietot zāles laikā. Digitālais laikmets tam neseko, un mēs to varam izmantot ar mašīnām. Par pieteikumu Smart Medicīnas atgādinājums ir ļoti plašs, un to var izmantot pacienti mājās, ārstiem slimnīcās, un daudzās citās vietās. Atgādinot, var būt vairāki veidi, kā to atgādināt:
- Parādiet to displejā
- Nosūtīt paziņojumu pa e-pastu vai tālruni
- Izmantojot mobilās lietotnes
- Buzz trauksme
- Izmantojot Bluetooth / Wi-Fi
- Saņemiet zvanu
- Atgādiniet par nākamo zāļu laiku, vienlaikus atgādinot pašreizējo laiku
Mēs varam apvienot veidus atkarībā no vajadzības. Lai šeit viss būtu vienkārši, mēs izveidojām vienkāršu zāļu atgādinājumu, izmantojot Arduino, kas atgādina mums lietot zāles 1, 2 vai 3 reizes dienā. Laika slotu var izvēlēties, izmantojot spiedpogas. Tas arī parāda pašreizējo datumu un laiku. Mēs turpināsim to attiecināt arī uz IoT projekta ienākošajiem rakstiem, kur lietotājam tiks nosūtīts e-pasta vai SMS paziņojums. Šo zāļu atgādinājumu var arī integrēt pacienta uzraudzības sistēmā.
Komponenti, kas nepieciešami automātiskās medicīnas atgādinājumam, izmantojot Arduino
- Arduino Uno (Mēs varam izmantot arī citus Arduino dēļus, piemēram, Pro mini, Nano)
- RTC DS3231 modulis
- 16x2 LCD displejs
- Buzzer
- Led (jebkura krāsa)
- Maizes dēlis
- Spiediet pogas
- 10K potenciometrs
- 10K, 1K rezistori
- Džemperu vadi
Arduino zāļu atgādinājums, izmantojot Arduino shēmu
Pilna shēma, lai izveidotu viedo zāļu kastīti, izmantojot Arduino, ir parādīta zemāk
Zemāk ir Arduino tapu savienojumi ar dažādām perifērijas ierīcēm
Arduino Pins Perifērijas tapas
- 2 -----------------------------> D7 no 16x2 LCD displeja
- 3 -----------------------------> D6 no 16x2 LCD displeja
- 4 -----------------------------> D5 no 16x2 LCD displeja
- 5 -----------------------------> D4 no 16x2 LCD displeja
- 7 -----------------------------> 3. spiedpoga
- 8 -----------------------------> 2. spiedpoga
- 9 -----------------------------> 1. spiedpoga
- 11 -----------------------------> EN tapa ar 16x2 LCD displeju
- 12 -----------------------------> 16x2 LCD displeja RS tapa
- 13 -----------------------------> + Ve Buzzer and Led
- A0 -----------------------------> Apturēt spiedpogu
- A4 -----------------------------> DS3231 SDA
- A5 -----------------------------> DS3231 SCL
- 3.3V -----------------------------> DS3231 Vcc
- Gnd -----------------------------> Gnd
Šajā zāļu atgādinājumu projektā RTC DS3231, izmantojot I2C protokolu, ir saskarne ar Arduino Uno. Varat arī izmantot RTC IC DS1307 laika nolasīšanai ar Arduino. RTC DS3231 ir arī iebūvēta 32k atmiņa, kuru var izmantot papildu datu glabāšanai. RTC modulis tiek darbināts caur Arduino uno 3,3 V tapu. 16x2 LCD displejs ir saskarnē, izmantojot SPI. Buzze r tiek izmantota, lai brīdinātu un atgādinātu, ka ir pienācis laiks lietot zāles. Tiek izmantotas četras spiedpogas, kur katrai no tām ir atšķirīga atlases funkcija. Pirmo spiedpogu izmanto, lai atgādinātu par zāļu lietošanu vienu reizi dienā. Otro spiedpogu izmanto, lai atgādinātu divas reizes dienā, un trešo spiedpogu izmanto, lai atgādinātu trīs reizes dienā. Ceturto spiedpogu izmanto, lai apturētu skaņas signālu, kad lietotājs ir dzirdējis brīdinājumu.
Automātisko zāļu atgādinājumu sistēmas darbība
Pill Atgādinājums Alarm darbina, izmantojot 5V piegādi. Kad tas pirmo reizi sāk darboties, tas parāda laipnu masāžu kā “ Welcome to Circuit Digest ”. LCD ekrāns ir iestatīts ciklam trīs ekrānos. Par 1 st ekrāns rāda masāžu kā " palikt veseliem, Get Well Soon ". Otrais ekrāns ir palīdzības ekrāns, kurā teikts, ka jānospiež izvēles spiedpoga, lai izvēlētos kādu laika nišu, kuru vēlaties atgādināt (vienu / divas reizes / trīs reizes dienā). Laika slots ir maināms programmā, un to var attiecīgi konfigurēt. Šobrīd mēs to esam noteikuši trīs ilgumos, ti, plkst. 8:00, 14:00 un 20:00.
Laika nišas esam sadalījuši trīs režīmos. Mode 1 izvēlas lietot zāles vienreiz / dienā pie 8am, kad lietotājs nospiež 1 st push pogu. 2. režīmā zāles lieto divas reizes dienā plkst. 8:00 un 20:00, kad lietotājs nospiež otro spiedpogu. 3. režīmā zāles tiek izvēlētas trīs reizes dienā plkst. 8:00, 14:00 un 20:00, ja lietotājs nospiež trešo spiedpogu.
Mēs varam pievienot arī funkciju, lai 10 minūtes atliktu skaņas signālu (nav iekļauts šajā projektā). Kad lietotājs izvēlas vēlamās vietas, nospiežot pogas, lietotāja ievadītā informācija tiek ierakstīta un laiks tiek ņemts no RTC. Kad laiks tiek saskaņots ar izvēlēto laika nišu, skaņas signāls sāk skanēt. Lietotājs var apturēt skaņas signālu, nospiežot pogu STOP. Tas pats process turpinās arī nākamajam laika nišas atgādinājumam. Pilnīgs process ir parādīts videoklipā, kas sniegts šī raksta beigās.
Arduino UNO programmēšana par zāļu atgādinājumu
Kad esat padomājis par veidu, kā atgādināt tablešu lietošanu, ir ļoti viegli uzrakstīt programmu. Šeit tas parādīs displejā redzamo atgādinājumu, izdzēsīs skaņas signālu un norādīs to, izmantojot LED. Tam ir arī iespēja izvēlēties trīs laika nišas (vienu / divas / trīs reizes dienā), un, kad laiks sasniegs, sāciet brīdināt pacientu, nospiežot skaņas signālu. Tad visa sistēma izskatīsies šādi:
Lietotājs saņem displejā redzamos palīdzības norādījumus> Lietotājs izvēlas laika nišas (vienu reizi dienā, divas reizes dienā, trīs reizes dienā)> Drukāt apstiprinājuma ziņojumu uz displeja> Laika turpināšana sākta> Buzzer un LED sāk darboties, kad laiks sakrīt ar lietotāja izvēlēto slotu> Lietotājs apstājas nospiežot apstāšanās spiedpogu> Beigt
Ja mēs vēlamies pievienot vairāk funkciju, mēs varam mainīt programmu un aparatūru. Lai saprastu daudz vienkāršāk, mēs esam sadalījuši programmu mazās funkcijās. Funkcijas ir viegli saprotamas un īstenojamas. Pilna programma ir dota šī projekta beigās. Sāksim ar programmu.
Tā kā mēs esam izmantojuši citas perifērijas ierīces, piemēram, 16x2 LCD displeju, RTC DS3231, tāpēc vispirms ir jāiekļauj bibliotēkas f vai tā. Nepieciešamā bibliotēka ir šāda:
EEPROM bibliotēka tiek izmantota, lai sekotu lietotāja izvēlētajai ievadei, ja Arduino nav ieslēgts. Un, kad lietotājs ieslēdz Arduino, tas saņem iepriekšējo spiedpogu stāvokli, izmantojot EEPROM bibliotēku. Wire.h bibliotēka tiek izmantota, jo RTC DS3231 modulis tiek paziņots, izmantojot I2C.
Vienmēr pārbaudiet, vai RTC ir pareizi pievienots vai vai tas nav bojāts, jo RTC būs svarīga loma visas atgādinājumu sistēmas uzturēšanā.
if (! rtc.begin ()) {// pārbaudiet, vai rtc ir savienots Serial.println ("Nevarēja atrast RTC"); kamēr (1); } if (rtc.lostPower ()) { Serial.println ("RTC zaudēja enerģiju, ļauj iestatīt laiku!"); }
Laika pielāgošanu var veikt divos veidos, vai nu automātiski, izmantojot sistēmas kompilēšanas laiku, vai arī ievadot to manuāli. Kad esam iestatījuši laiku, komentējiet zemāk redzamās rindas, ja vien nevēlaties vēlreiz mainīt RTC laiku.
rtc.adjust (DateTime (F (__ DATE__), F (__ TIME__))); //rtc.adjust(DateTime(2019, 1, 10, 7, 59, 52));
Šis slēdža paziņojums tiek izmantots, lai nolasītu iepriekš saglabāto spiedpogas stāvokli un atjaunotu stāvokli atbilstošam un precīzam atgādinājuma laikam.
val2 = EEPROM.lasīt (addr); // lasiet iepriekš saglabāto spiedpogas vērtību, lai sāktu no vietas, kur tas bija atstāts iepriekš slēdzis (val2) { gadījums 1: Serial.println ("Iestatīt 1 dienai"); push1state = 1; push2state = 0; push3state = 0; pushVal = 01; pārtraukums; 2. gadījums: Serial.println ("Uzstādīt uz 2 / dienā"); push1state = 0; push2state = 1; push3state = 0; pushVal = 10; pārtraukums; 3. gadījums: Serial.println ("Uzstādīt uz 3 / dienā"); push1state = 0; push2state = 0; push3state = 1; pushVal = 11; pārtraukums; }
Šis apgalvojums tiek izmantots, lai panāktu, ka mili tiek lietoti noteiktā intervāla ekrāna cikliskuma noteikšanai un kontrolei.
strāvaMillisLCD = milis (); // sākt milis LCD ekrāna pārslēgšanai noteiktā laika intervālā
Sāciet lasīt digitālās tapas, kas savienotas ar spiedpogām.
push1state = digitalRead (push1pin); push2state = digitalRead (push2pin); push3state = digitalRead (push3pin); stopinState = digitalRead (stopPin);
Zemāk esošo funkciju izmanto, lai nolasītu spiedpogas stāvokli un ierakstītu to EEPROM. Ikreiz, kad tiek nospiesta spiedpoga, stāvoklis tiek ierakstīts EEPROM. Arī tas izdrukā ziņojumu LCD displejā par izvēlēto lietotāja ievades izvēli. Līdzīgi tiek izmantotas funkcijas push2 () un push3 () .
void push1 () {// funkcija, lai iestatītu atgādinājumu vienu reizi dienā, ja (push1state == 1) { push1state = 0; push2state = 0; push3state = 0; // pushPressed = true; EEPROM.write (addr, 1); Serial.print ("Push1 rakstīts:"); Serial.println (EEPROM.read (addr)); // atkļūdošanai pushVal = 1; // saglabāt spiedpogas-1 stāvokli lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Atgādinājumu komplekts"); lcd.setCursor (0, 1); lcd.print ("par Vienreiz / dienā!"); kavēšanās (1200); lcd.clear (); } }
Zemāk esošo funkciju izmanto, lai apturētu skaņas signālu un vadītu. Vienmēr ir labi sniegt ieteikumus. Izdrukājiet ieteikuma ziņojumu uz displeja “Lietojiet zāles ar siltu ūdeni”.
void stopPins () {// funkcija, lai apturētu zvana signālu, kad lietotājs nospiež pieturas pogu if (stopinState == 1) { // stopinState = 0; // pushPressed = true; nospiests = 1; lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Lietojiet zāles"); lcd.setCursor (0, 1); lcd.print ("ar siltu ūdeni"); kavēšanās (1200); lcd.clear (); } }
Tālāk norādītā funkcija nav atkarīga no laika uzturēšanas, taču vienmēr tiek ciklizēta trīs ekrānos, kas palīdz lietotājam. Tā kā mēs rūpējamies par pacientiem, mēs varam izdrukāt apsveikuma ziņojumu, jo mēs zinām, ka emocionālais atbalsts ir ļoti noderīgs, lai ātrāk izārstētu pacientus. Jūs varat izvēlēties pats savu radošo ziņojumu. Izdrukāsim ziņojumu “Esi vesels, drīz atveseļojies”.
Otrais ekrāns ir paredzēts, lai sniegtu norādījumus pacientiem kā “Nospiediet pogas, lai atgādinātu..”. Trešais ekrāns tiek izmantots, lai vienkārši parādītu pašreizējo datumu un laiku.
void changeScreen () {// Funkcija Screen Cycling // Sāciet pārslēgt ekrānu ik pēc noteikta intervālaLCD if (currentMillisLCD - previousMillisLCD> intervalLCD) // saglabājiet pēdējo reizi, kad mainījāt displeju { previousMillisLCD = currentMillisLCD; ekrāni ++; ja (ekrāni> maxScreen) { ekrāni = 0; // visi ekrāni ir beigušies -> sākas no 1. } isScreenChanged = true; } // Sākt rādīt pašreizējo ekrānu, ja (isScreenChanged) // atjaunināt ekrānu tikai tad, ja ekrāns ir mainīts. { isScreenChanged = nepatiesa; // atiestatīt nākamo atkārtojuma slēdzi (ekrāni) { gadījums getWellsoon: gwsMessege (); // drīz atlabšu ziņu pārtraukums; gadījums HELP_SCREEN: helpScreen (); // instrukciju ekrāna pārtraukums; gadījums TIME_SCREEN: timeScreen (); // drukāt datuma un laika pārtraukumu; noklusējums: // NOT SET. pārtraukums; } } }
Šo funkciju izmanto, lai vienlaicīgi sāktu mirgot un mirgot gaismas diode, ja ir sasniegts izvēlētais laiks.
void startBuzz () {// funkcija, lai sāktu buzzing, kad laiks sasniedz noteikto intervālu // if (pushPressed == false) { if (pushpressed == 0) { Serial.println ("mirgot ir nepatiesa"); neparakstīta garā strāvaMillis = milis (); ja (currentMillis - iepriekšējaisMillis> = intervāls) { previousMillis = currentMillis; // saglabājiet pēdējo reizi, kad mirkšķinājāt LED Serial.println ("Start Buzzing"); if (ledState == LOW) {// ja gaismas diode ir izslēgta, ieslēdziet to un otrādi: ledState = HIGH; } cits { ledState = ZEMS; } digitalWrite (ledPin, ledState); } } else if (pushpressed == 1) { Serial.println ("pushpressed is true"); ledState = ZEMS; digitalWrite (ledPin, ledState); } }
Šī funkcija tiek izmantota, lai salīdzinātu lietotāja izvēlēto laika nišu plkst. 8:00 un sāk zummerēt un mirgot LED, līdz lietotājs nospiež apturēšanas spiedpogu. Līdzīgi funkcijas void at2pm () un void at8pm tiek izmantotas, lai palaistu skaņas signālu, un tās tiek vadītas pulksten 14:00 un 20:00.
void at8am () {// funkcija, lai sāktu buzzēt plkst. 8:00 DateTime now = rtc.now (); ja (int (tagad.stunda ())> = buzz8amHH) { ja (int (tagad.minūte ())> = buzz8amMM) { ja (int (tagad.sekunde ())> buzz8amSS) { ////// ///////////////////////////////////////////////// startBuzz (); ////////////////////////////////////////////////////// /// } } } }
Šādi jūs varat vienkārši izveidot savu automātisko zāļu atgādinājumu, izmantojot Arduino. Varat arī izmantot ESP8266 ar Arduino, lai padarītu to par IoT projektu, kas varēs nosūtīt e-pasta brīdinājumu lietotājam.
Pilns kods un demonstrācijas video ir norādīts zemāk.