- Komponentai, reikalingi automatinio vaisto priminimui naudojant „Arduino“
- „Arduino“ medicinos priminimas naudojant „Arduino“ grandinę
- Automatinės vaistų priminimų sistemos veikimas
- Programavimas „Arduino UNO“ priminimui apie vaistą
Kalbėdami apie savo artimuosius, mes visada norime juos išlaikyti sveikus ir tinkamus. Bet kas nutiks, jei jie susirgs ir pamirš pamiršti vaistus laiku. Mums būtų neramu, tiesa? Ligoninėse yra daug pacientų ir sunku priminti kiekvienam pacientui laiku vartoti vaistus. Tradiciniai būdai reikalauja žmogaus pastangų priminti jiems laiku vartoti vaistus. Skaitmeninė epocha to neseka ir tam galime naudoti mašinas. Taikymo "Smart medicinos Priminimas yra labai plati ir gali būti naudojamas pacientams namuose, gydytojai ligoninėse ir daugelyje kitų vietų. Kai reikia priminti, gali būti daug būdų, kaip tai priminti:
- Parodykite jį ekrane
- Siųsti pranešimą el. Paštu arba telefonu
- Mobiliųjų programų naudojimas
- „Buzz“ pavojaus signalas
- Naudojant „Bluetooth“ / „Wi-Fi“
- Gaukite skambutį
- Priminkite kitą vaisto laiką primindami dabartinį laiką
Mes galime derinti būdus, atsižvelgdami į poreikį. Kad viskas būtų paprasta, mes sukūrėme paprastą vaistų priminimą naudodami „Arduino“, kuris primena mums vartoti vaistus 1, 2 arba 3 kartus per dieną. Laiko intervalą galima pasirinkti paspaudus mygtukus. Be to, tai rodo dabartinę datą ir laiką. Toliau išplėsime jį į IoT projekto gaunamus straipsnius, kur vartotojui bus išsiųstas el. Pašto pranešimas arba SMS pranešimas. Šis priminimas apie vaistus taip pat gali būti integruotas su pacientų stebėjimo sistema.
Komponentai, reikalingi automatinio vaisto priminimui naudojant „Arduino“
- „Arduino Uno“ (galime naudoti ir kitas „Arduino“ plokštes, tokias kaip „Pro mini“, „Nano“)
- RTC DS3231 modulis
- 16x2 LCD ekranas
- Buzeris
- LED (bet kokios spalvos)
- Bandomoji Lenta
- Mygtukai
- 10K potenciometras
- 10K, 1K rezistoriai
- Šuolių laidai
„Arduino“ medicinos priminimas naudojant „Arduino“ grandinę
Visa grandinės schema, skirta sukurti išmaniųjų vaistų dėžutę naudojant „Arduino“, parodyta žemiau
Žemiau yra „ Arduino“ kaiščių jungtys su skirtingais išoriniais įrenginiais
Arduino kaiščiai Periferiniai kaiščiai
- 2 -----------------------------> D7 iš 16x2 LCD ekrano
- 3 -----------------------------> D6 iš 16x2 LCD ekrano
- 4 -----------------------------> D5 iš 16x2 LCD ekrano
- 5 -----------------------------> D4 iš 16x2 LCD ekrano
- 7 -----------------------------> 3-asis mygtukas
- 8 -----------------------------> 2 mygtukas
- 9 -----------------------------> 1-as mygtukas
- 11 -----------------------------> EN 16x2 LCD ekrano kaištis
- 12 -----------------------------> 16x2 LCD ekrano RS kaištis
- 13 -----------------------------> + Ve Buzzer ir Led kaištis
- A0 -----------------------------> Stop Push Button
- A4 -----------------------------> DS3231 SDA
- A5 -----------------------------> DS3231 SCL
- 3.3V -----------------------------> DS3231 Vcc
- Gnd -----------------------------> Gnd
Šiame vaistų priminimų projekte RTC DS3231 per I2C protokolą yra susietas su „Arduino Uno“. Taip pat galite naudoti RTC IC DS1307 skaitydami laiką su „Arduino“. RTC DS3231 taip pat turi įmontuotą 32 k atmintį, kurią galima naudoti papildomiems duomenims saugoti. RTC modulis maitinamas per 3,3 V „Arduino uno“ kontaktą. 16x2 LCD ekranas yra susietas naudojant SPI. „ Buzze r“ naudojamas įspėti ir priminti, kad laikas vartoti vaistus. Keturi mygtukai naudojami, kai kiekvienas turi atskirą pasirinkimo funkciją. Pirmasis mygtukas naudojamas priminti, kad reikia vartoti vaistą kartą per dieną. Antrasis mygtukas naudojamas priminti du kartus per dieną, o trečiasis mygtukas naudojamas tris kartus per dieną. Ketvirtasis mygtukas naudojamas sustabdyti garsinį signalą, kai vartotojas išgirsta įspėjimą.
Automatinės vaistų priminimų sistemos veikimas
Piliulė Priminimas Signalizacija maitina naudojant 5V pasiūlą. Kai jis pirmą kartą paleidžiamas, rodomas sveikinamasis masažas kaip „ Welcome to Circuit Digest “. Skystųjų kristalų ekranas nustatytas per tris ekranus. Į 1 st ekranas rodo masažas kaip " Būkite sveiki, Get Well Soon ". Antrasis ekranas yra pagalbos ekranas, kuriame nurodoma paspausti pasirinkimo mygtuką, kad pasirinktumėte vieną laiko tarpą, kurį norite priminti (vieną / du / tris kartus per dieną). Laiko intervalas programoje gali būti keičiamas ir gali būti atitinkamai sukonfigūruotas. Šiuo metu mes nustatėme tai į tris trukmes, ty 8:00, 14:00 ir 20:00.
Laiko intervalus suskirstėme į tris režimus. 1 režimas parenka imtis vaistą vieną kartą / dieną 8am kai vartotojas paspaudžia 1 g stumti mygtuką. 2 režimas pasirenka vartoti vaistus du kartus per dieną 8 ir 20 val., Kai vartotojas paspaudžia antrą mygtuką. Režimas 3 pasirenka vartoti vaistus tris kartus / dieną 8am, 2pm ir 8pm jei vartotojas paspaudžia 3 -iosios mygtukas.
Taip pat galime pridėti funkciją, leidžiančią 10 minučių atidėti garsinį signalą (neįtraukta į šį projektą). Kai vartotojas pasirenka norimus laiko tarpsnius paspausdamas mygtukus, įrašomas vartotojo įvestis ir laikas paimamas iš RTC. Kai laikas suderinamas su pasirinktu laiko tarpsniu, garsinis signalas pradeda dūkti. Vartotojas gali sustabdyti garsinį signalą paspausdamas mygtuką STOP. Tas pats procesas tęsiasi ir kitame lizdo priminime. Užbaigtas procesas parodytas vaizdo įraše, pateiktame šio straipsnio pabaigoje.
Programavimas „Arduino UNO“ priminimui apie vaistą
Pagalvojus apie būdus, kaip priminti tablečių vartojimą, labai lengva parašyti programą. Čia jis parodys ekrane esantį priminimą, skambins garsinį signalą ir nurodys jį naudodamas LED. Ji taip pat turi galimybę pasirinkti tris laiko tarpsnius (vieną / du / tris kartus per dieną) ir kada laikas bus pasiektas, pradėkite pacientą perspėti, skambindami garsiniu signalu. Tada visa sistema atrodys taip:
Vartotojas gauna ekrane pateikiamas pagalbos instrukcijas> Vartotojas pasirenka laiko intervalus (vieną kartą per dieną, du kartus per dieną, tris kartus per dieną)> Ekrane rodomas patvirtinimo pranešimas> Pradėtas laiko palaikymas> Buzeris ir šviesos diodas pradeda veikti, kai laikas sutampa su vartotojo pasirinktu lizdu spausdami sustabdymo mygtuką> Baigti
Jei norime pridėti daugiau funkcijų, galime pakeisti programą ir aparatinę įrangą. Norėdami suprasti daug paprasčiau, suskirstėme programą į mažas funkcijas. Funkcijas lengva suprasti ir įgyvendinti. Visa programa pateikiama šio projekto pabaigoje. Pradėkime nuo programos.
Kadangi mes naudojome kitus periferinius įrenginius, tokius kaip 16x2 LCD ekranas, RTC DS3231, todėl pirmiausia turime įtraukti f ar kitas bibliotekas. Reikalinga biblioteka yra tokia:
EEPROM biblioteka naudojama norint stebėti vartotojo pasirinktą įvestį, jei „Arduino“ neįjungta. Kai vartotojas įjungia „Arduino“, gaunama ankstesnė mygtukų būsena naudojant EEPROM biblioteką. „Wire.h“ biblioteka naudojama, nes „RTC DS3231“ modulis perduodamas naudojant „I2C“.
Visada patikrinkite, ar RTC yra tinkamai prijungtas, ar jis nėra pažeistas, nes RTC atliks svarbų vaidmenį išlaikant visą priminimų sistemą.
if (! rtc.begin ()) {// patikrinkite, ar rtc yra prijungtas Serial.println ("Nepavyko rasti RTC"); o (1); } if (rtc.lostPower ()) { Serial.println ("RTC prarado galią, leidžia nustatyti laiką!"); }
Laiko koregavimas gali būti atliekamas dviem būdais: automatiškai naudojant sistemos kompiliavimo laiką arba įvedant jį rankiniu būdu. Kai nustatysime laiką, pakomentuokite toliau pateiktas eilutes, nebent vėl norite pakeisti RTC laiką.
rtc.adjust (DateTime (F (__ DATE__), F (__ TIME__))); //rtc.adjust(DateTime(2019, 1, 10, 7, 59, 52));
Šis jungiklio sakinys naudojamas nuskaityti anksčiau išsaugotą mygtuko būseną ir atnaujinti būseną tinkamam ir tiksliam priminimo laikui.
val2 = EEPROM.read (addr); // perskaitykite anksčiau išsaugotą mygtuko vertę, kad pradėtumėte nuo ten, kur anksčiau buvo paliktas jungiklis (val2) { atvejis 1: Serial.println ("Nustatyti 1 dienai"); push1state = 1; push2state = 0; push3state = 0; „pushVal“ = 01; pertrauka; 2 atvejis: Serial.println („Nustatyti 2 dienai“); push1state = 0; push2state = 1; push3state = 0; „pushVal“ = 10; pertrauka; 3 atvejis: Serial.println („Nustatyti 3 dienai“); push1state = 0; push2state = 0; push3state = 1; „pushVal“ = 11; pertrauka; }
Šis teiginys naudojamas norint, kad milis būtų naudojamas nustatyto intervalo ekrano ciklo laiko nustatymui ir valdymui.
currentMillisLCD = milis (); // pradėti milis skystųjų kristalų ekraną perjungti nustatytu laiko intervalu
Pradėkite skaityti skaitmeninius kaiščius, prijungtus prie mygtukų.
push1state = digitalRead (push1pin); „push2state“ = „digitalRead“ („push2pin“); „push3state“ = „digitalRead“ („push3pin“); stopinState = digitalRead (stopPin);
Žemiau funkcija naudojama nuskaityti mygtuko būseną ir įrašyti ją į EEPROM. Kai tik paspaudžiamas mygtukas, būsena įrašoma į EEPROM. Taip pat spausdina pranešimą LCD ekrane apie pasirinktą vartotojo įvesties parinktį. Panašiai naudojamos funkcijos push2 () ir push3 () .
void push1 () {// funkcija nustatyti priminimą vieną kartą per dieną if (push1state == 1) { push1state = 0; push2state = 0; push3state = 0; // „pushPressed = true“; EEPROM.write (addr, 1); Serial.print ("Push1 Parašyta:"); Serial.println (EEPROM.read (addr)); // derinant „ pushVal“ = 1; // išsaugoti mygtuko-1 būseną lcd.clear (); lcd.setCursor (0, 0); lcd.print („Priminimų rinkinys“); lcd.setCursor (0, 1); lcd.print ("už Vieną kartą per dieną!"); vėlavimas (1200); lcd.clear (); } }
Žemiau esanti funkcija naudojama sustabdyti garsinį signalą ir šviesos diodą. Visada gera teikti pasiūlymus. Ekrane atspausdinkite pasiūlymo pranešimą „Vartokite vaistus šiltu vandeniu“.
void stopPins () {// funkcija sustabdyti dūzgimą, kai vartotojas paspaudžia sustabdymo mygtuką, jei (stopinState == 1) { // stopinState = 0; // „pushPressed = true“; spaudžiamas = 1; lcd.clear (); lcd.setCursor (0, 0); lcd.print („Gerkite vaistų“); lcd.setCursor (0, 1); lcd.print („su šiltu vandeniu“); vėlavimas (1200); lcd.clear (); } }
Žemiau pateikiama funkcija nepriklauso nuo laiko išlaikymo, tačiau visada cikluojama trijuose ekranuose, o tai padeda vartotojui. Kadangi mes rūpinamės pacientais, galime išspausdinti sveikinimo žinutę, nes žinome, kad emocinė parama labai padeda išgydyti pacientus greičiau. Galite pasirinkti savo kūrybinę žinutę. Leiskite išspausdinti pranešimą, kaip "Būkite sveiki, pasveikti greičiau".
Antrasis ekranas skirtas pacientams nurodyti kaip „Paspauskite mygtukus, norėdami priminti..“. Trečiasis ekranas naudojamas tiesiog parodyti dabartinę datą ir laiką.
void changeScreen () {// „Screen Cycling“ funkcija // Pradėti perjungti ekraną kiekvieną apibrėžtą intervaląLCD if (currentMillisLCD - previousMillisLCD> intervalLCD) // išsaugoti paskutinį kartą, kai keitėte ekraną { previousMillisLCD = currentMillisLCD; ekranai ++; if (ekranai> maxScreen) { ekranai = 0; // visi ekranai baigėsi -> prasideda nuo 1-osios } isScreenChanged = true; } // Pradėti rodyti dabartinį ekraną, jei (isScreenChanged) // atnaujinti ekraną tik pakeitus ekraną. { isScreenChanged = false; // naujo iteracijos jungiklio (ekranų) nustatymas iš naujo { case getWellsoon: gwsMessege (); // netrukus pasveiksi žinia pertrauka; atvejis HELP_SCREEN: helpScreen (); // instrukcijos ekrano pertrauka; atvejis TIME_SCREEN: timeScreen (); // išspausdinti datos ir laiko pertrauką; numatytasis: // NĖRA NUSTATYTA. pertrauka; } } }
Ši funkcija naudojama norint vienu metu pradėti šviesti ir mirksėti šviesos diodu, jei pasiekė pasirinktą laiką.
void startBuzz () {// funkcija pradėti šurmuliuoti, kai laikas pasiekia apibrėžtą intervalą // if (pushPressed == false) { if (pushpressed == 0) { Serial.println ("mirksint netikras yra klaidingas"); nepasirašyta ilga srovėMillis = milis (); if (currentMillis - ankstesnisMillis> = intervalas) { previousMillis = currentMillis; // išsaugokite paskutinį kartą, kai mirkčiojote šviesos diodą „Serial.println“ („Start Buzzing“); if (ledState == LOW) {// jei šviesos diodas yra išjungtas, įjunkite jį ir atvirkščiai: ledState = HIGH; } dar { ledState = LOW; } digitalWrite (ledPin, ledState); } } else if (spaudžiamas == 1) { Serial.println ("prispaustas yra tiesa"); ledState = LOW; „digitalWrite“ („ledPin“, „ledState“); } }
Ši funkcija naudojama norint palyginti vartotojo pasirinktą laiko tarpą 8 valandą ryto ir ji pradeda šnabždėti bei mirksėti šviesos diodu, kol vartotojas paspaus sustabdymo mygtuką. Panašiai funkcijos „ void at 2pm ()“ ir „ void at 8pm“ yra naudojamos įjungti garsinį signalą ir vedamos 14 ir 20 val.
void at8am () {// funkcija, kad pradėtumėte dūzgti 8 val. DateTime now = rtc.now (); jei (INT (now.hour ())> = buzz8amHH) { jei (INT (now.minute ())> = buzz8amMM) { jei (INT (now.second ())> buzz8amSS) { ////// /////////////////////////////////////////////// startBuzz (); //////////////////////////////////////////////////// /// } } } }
Taip galite paprasčiausiai susikurti automatinį vaistų priminimą naudodami „Arduino“. Taip pat galite naudoti ESP8266 su „Arduino“, kad jis taptų interneto projektu, kuris galės siųsti el. Pašto įspėjimą vartotojui.
Visas kodas ir demonstracinis vaizdo įrašas pateikiami žemiau.