- Tarvittavat komponentit automaattista lääketieteen muistutusta varten Arduinolla
- Arduino-lääketietomuistutus Arduino-piirillä
- Automaattisen lääketieteellisen muistutusjärjestelmän toiminta
- Arduino UNO for Medicine Reminder -ohjelmointi
Kun on kyse rakkaistamme, haluamme aina pitää heidät terveinä ja kunnossa. Mutta mitä tapahtuu, jos he sairastuvat ja unohtavat ottaa lääkkeitä ajoissa. Olisimme huolissamme, eikö? Sairaaloissa on paljon potilaita, ja on vaikea muistuttaa kaikkia potilaita ottamaan lääkettä ajoissa. Perinteiset tavat edellyttävät ihmisen pyrkimyksiä muistuttaa heitä ottamaan lääkkeitä ajoissa. Digitaalinen aikakausi ei seuraa sitä, ja voimme käyttää koneita siihen. Älylääketieteen muistutuksen sovellus on hyvin laaja, ja sitä voivat käyttää potilaat kotona, lääkärit sairaaloissa ja monissa muissa paikoissa. Muistutuksessa voi olla monia tapoja muistuttaa sitä:
- Näytä se näytöllä
- Lähetä ilmoitus sähköpostitse tai puhelimitse
- Mobiilisovellusten käyttäminen
- Buzz-hälytys
- Bluetooth / Wi-Fi-yhteyden käyttäminen
- Soita puhelu
- Muistuta seuraavaa lääkeaikaa muistuttaen samalla kellonaikaa
Voimme yhdistää tapoja tarpeen mukaan. Jotta asiat pysyisivät yksinkertaisina täällä, teimme yksinkertaisen lääketieteellisen muistutuksen Arduinolla, joka muistuttaa meitä ottamaan lääkkeitä 1 tai 2 tai 3 kertaa päivässä. Aikaväli voidaan valita painikkeilla. Se näyttää myös nykyisen päivämäärän ja kellonajan. Laajennamme sitä edelleen IoT-projektiin tuleviin artikkeleihin, joissa käyttäjälle lähetetään sähköposti- tai tekstiviesti-ilmoitus. Tämä lääkitysmuistutus voidaan integroida myös potilaan seurantajärjestelmään.
Tarvittavat komponentit automaattista lääketieteen muistutusta varten Arduinolla
- Arduino Uno (Voimme käyttää myös muita Arduino-levyjä, kuten Pro mini, Nano)
- RTC DS3231 -moduuli
- 16x2 LCD-näyttö
- Summeri
- Led (mikä tahansa väri)
- Leipälauta
- Painikkeet
- 10K-potentiometri
- 10K, 1K vastukset
- Neulalangat
Arduino-lääketietomuistutus Arduino-piirillä
Täydellinen kytkentäkaavio älykkäiden lääkekoteloiden rakentamiseksi Arduinoa käyttäen on esitetty alla
Alla on nastajärjestyksellä Arduino eri oheislaitteiden
Arduino- nastat Perifeeriset nastat
- 2 -----------------------------> D7 / 16x2 LCD-näyttö
- 3 -----------------------------> D6 / 16x2 LCD-näyttö
- 4 -----------------------------> D5 / 16x2 LCD-näyttö
- 5 -----------------------------> D4 / 16x2 LCD-näyttö
- 7 -----------------------------> 3. painike
- 8 -----------------------------> 2. painike
- 9 -----------------------------> 1. painike
- 11 -----------------------------> EN-nasta 16x2 LCD-näyttöä
- 12 -----------------------------> RS-nasta 16x2 LCD-näyttöä
- 13 -----------------------------> + Ve-merkki summerista ja ledistä
- A0 -----------------------------> Pysäytä painike
- A4 -----------------------------> DS3231: n SDA
- A5 -----------------------------> DS3231: n SCL
- 3.3V -----------------------------> DS3231: n Vcc
- Gnd -----------------------------> Gnd
Tässä lääketietomuistutusprojektissa RTC DS3231 liitetään I2C-protokollan kautta Arduino Unoon. Voit myös käyttää RTC IC DS1307: tä ajan lukemiseen Arduinolla. RTC DS3231: ssä on myös sisäänrakennettu 32 k muistia, jota voidaan käyttää lisätietojen tallentamiseen. RTC-moduuli saa virran Arduino unon 3,3 V: n nastasta. 16x2 LCD-näyttö liitetään SPI: n avulla. Buzze r käytetään valpas ja muistuttaa, että on aika ottaa lääkettä. Neljä painonappia käytetään, jos jokaisella on erillinen valintaominaisuus. Ensimmäistä painonappia käytetään muistuttamaan lääkkeiden ottamista kerran päivässä. Toisella painikkeella muistutetaan kahdesti päivässä ja kolmannella painikkeella kolmesti päivässä. Neljännen painikkeen avulla summeri pysäytetään, kun käyttäjä on kuullut hälytyksen.
Automaattisen lääketieteellisen muistutusjärjestelmän toiminta
Pill Muistutus Hälytys voimanlähteenä käytetään 5V tarjontaa. Kun se käynnistyy ensimmäisen kerran, se näyttää tervetullut hieronnan nimellä " Welcome to Circuit Digest ". LCD-näyttö on asetettu kiertämään kolmessa näytössä. 1 kpl näytölle ilmestyy hieronta ” pysyä terveenä, parane pian ”. Toinen näyttö on ohjenäyttö, joka kehottaa painamaan valintanäppäintä valitaksesi minkä tahansa yhden aikavälin muistuttamaan (kerran / kahdesti / kolme kertaa päivässä). Aikaväli on vaihdettavissa ohjelmassa ja voidaan konfiguroida vastaavasti. Juuri nyt olemme korjanneet tämän kolmeen kestoon, ts. Klo 8, 14 ja 20.
Olemme jakaneet aikavälit kolmeen tilaan. Tila 1 Valitsee ottaa lääkettä kerran / päivä kello 8, kun käyttäjä painaa 1 kpl painike. Tila 2 valitsee lääkkeen ottamisen kahdesti päivässä klo 8 ja 20, kun käyttäjä painaa toista painiketta. Tila 3 Valitsee ottaa lääkettä kolmasti / päivä kello 8, neljätoista ja kaksikymmentä jos käyttäjä painaa 3 rd painikkeella.
Voimme myös lisätä ominaisuuden, jolla torkutetaan summeria 10 minuutiksi (ei sisälly tähän projektiin). Kun käyttäjä valitsee halutut paikat painamalla painikkeita, käyttäjän syötteet tallennetaan ja aika otetaan RTC: stä. Kun aika sovitetaan valitun aikavälin kanssa, summeri alkaa soida. Käyttäjä voi pysäyttää summerin painamalla STOP-painiketta. Sama prosessi jatkuu seuraavaa muistutuspaikkaa varten. Koko prosessi näkyy Videon lopussa esitetään tämän aricle.
Arduino UNO for Medicine Reminder -ohjelmointi
Ohjelman kirjoittaminen on erittäin helppoa, kun olet miettinyt tapoja muistuttaa pillereiden ottamista. Täällä se näyttää muistutuksen näytöllä, buzzaa summerin ja ilmaisee sen LEDillä. Sillä on myös mahdollisuus valita kolme aikaväliä (kerran / kahdesti / kolmesti päivässä) ja milloin aika saavuttaa sen, aloita potilaan varoittaminen summerilla. Sitten koko järjestelmä näyttää seuraavalta:
Käyttäjä saa ohjeet näytöltä> Käyttäjä valitsee aikavälejä (kerran / päivä, kahdesti / päivä, kolmesti / päivä)> Tulosta vahvistusviesti näytöllä> Ajan pitäminen aloitettu> Summeri ja LED-valo alkavat, kun aika vastaa käyttäjän valitsemaa paikkaa> Käyttäjä pysähtyy painamalla pysäytyspainiketta> Lopeta
Voimme muuttaa ohjelmaa ja laitteistoa, jos haluamme lisätä uusia ominaisuuksia. Ymmärtääksemme paljon yksinkertaisemmalla tavalla olemme jakaneet ohjelman pieniin toimintoihin. Toiminnot on helppo ymmärtää ja toteuttaa. Koko ohjelma annetaan tämän projektin lopussa. Aloitetaan ohjelmasta.
Siitä lähtien olemme käyttäneet muita oheislaitteita, kuten 16x2 LCD-näyttö, RTC DS3231, joten meidän on ensin sisällytettävä kirjastot f tai se. Vaaditut kirjastot ovat seuraavat:
EEPROM-kirjastoa käytetään pitämään kirjaa käyttäjän valitsemasta syötteestä, ellei Arduino ole päällä. Ja kun Arduinon käyttäjä saa virtaa, se saa painikkeiden edellisen tilan käyttämällä EEPROM-kirjastoa. Wire.h-kirjastoa käytetään, koska RTC DS3231 -moduuli välitetään I2C: n avulla.
Tarkista aina, onko RTC kytketty oikein vai onko se vaurioitunut, koska RTC: llä on tärkeä rooli koko muistutusjärjestelmän pitämisessä.
if (! rtc.begin ()) {// tarkista, onko rtc kytketty Serial.println ("RTC: tä ei löydy"); kun (1); } if (rtc.lostPower ()) { Serial.println ("RTC menetti virran, antaa asettaa ajan!"); }
Ajan säätö voidaan tehdä kahdella tavalla, joko automaattisesti käyttämällä järjestelmän kääntöaikaa tai syöttämällä se manuaalisesti. Kun olemme asettaneet ajan, kommentoi alla olevia rivejä, ellet halua muuttaa RTC-aikaa uudelleen.
rtc.adjust (DateTime (F (__ DATE__), F (__ TIME__))); //rtc.adjust(DateTime(2019, 1, 10, 7, 59, 52));
Tätä kytkinlauseketta käytetään aiemmin tallennetun painikkeen tilan lukemiseen ja tilan jatkamiseen sopivaa ja tarkkaa muistutusaikaa varten.
val2 = EEPROM.read (addr); // lue painikkeen aiemmin tallennettu arvo aloittaaksesi siitä, mihin se jätettiin aikaisemmin kytkin (val2) { tapaus 1: Serial.println ("Aseta 1 / päivä"); push1state = 1; push2state = 0; push3state = 0; pushVal = 01; tauko; tapaus 2: Serial.println ("Aseta 2 / päivä"); push1state = 0; push2state = 1; push3state = 0; pushVal = 10; tauko; tapaus 3: Serial.println ("Aseta 3 / vrk"); push1state = 0; push2state = 0; push3state = 1; pushVal = 11; tauko; }
Tätä lausetta käytetään saamaan millit käyttämään määritetyn intervallinäyttöjakson ajoitusta ja ohjausta.
currentMillisLCD = millis (); // aloita millis LCD-näytön vaihtamista varten tietyllä aikavälillä
Aloita painikkeisiin kytkettyjen digitaalisten nastojen lukeminen.
push1state = digitalRead (push1pin); push2state = digitalRead (push2pin); push3state = digitalRead (push3pin); stopinState = digitalRead (stopPin);
Alla -toimintoa käytetään painikkeen tilan lukemiseen ja kirjoittamiseen EEPROMiin. Aina kun painike painetaan, tila kirjoitetaan EEPROM: iin. Lisäksi se tulostaa valitun käyttäjän syöttövaihtoehdon LCD-näytölle. Vastaavasti käytetään toimintoja push2 () ja push3 () .
void push1 () {// -toiminto muistutuksen asettamiseksi kerran päivässä if (push1state == 1) { push1state = 0; push2state = 0; push3state = 0; // pushPressed = true; EEPROM.write (addr, 1); Serial.print ("Push1 kirjoitettu:"); Serial.println (EEPROM.read (addr)); // virheenkorjaukseen pushVal = 1; // tallenna painikkeen 1 tila lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Muistutusjoukko"); lcd.setCursor (0, 1); lcd.print ("Kerran / päivä!"); viive (1200); lcd.clear (); } }
Alla olevaa toimintoa käytetään summerin ja ledin pysäyttämiseen. On aina hyvä antaa ehdotuksia. Tulosta ehdotusviesti näytölle ”Ota lääke lämpimällä vedellä”.
void stopPins () {// -toiminto lopettaa summerin, kun käyttäjä painaa pysäytyspainiketta if (stopinState == 1) { // stopinState = 0; // pushPressed = true; painettu = 1; lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Ota lääkettä"); lcd.setCursor (0, 1); lcd.print ("lämpimällä vedellä"); viive (1200); lcd.clear (); } }
Alla oleva toiminto on riippumaton ajankäytöstä, mutta se kiertää aina kolmessa näytössä, mikä auttaa käyttäjää. Kun hoidamme potilaita, voimme tulostaa tervehdysviestin, koska tiedämme, että henkinen tuki on erittäin hyödyllistä potilaiden parantamiseksi nopeammin. Voit valita oman luovan viestisi. Oletetaan tulostaa viestin ”pysyä terveenä, parane pian”.
Toinen ruutu antaa potilaille ohjeita "Paina muistutuspainikkeita..". Kolmatta näyttöä käytetään yksinkertaisesti näyttämään nykyinen päivämäärä ja aika.
void changeScreen () {// -toiminto Screen Cycling -ohjelmaa varten // Aloita näytön vaihtaminen jokaisen määritetyn väleinLCD if (currentMillisLCD - previousMillisLCD> intervalLCD) // tallenna viimeinen kerta, kun vaihdit näyttöä { previousMillisLCD = currentMillisLCD; näytöt ++; if (näytöt> maxScreen) { näytöt = 0; // kaikki näytöt yli -> alkavat 1. } isScreenChanged = true; } // Aloita nykyisen näytön näyttäminen, jos (isScreenChanged) // päivitä näyttö vain, jos näyttöä muutetaan. { isScreenChanged = epätosi; // nollaa seuraava iterointikytkin (näytöt) { tapaus getWellsoon: gwsMessege (); // parane pian viesti tauko; tapaus HELP_SCREEN: helpScreen (); // ohjeenäytön tauko; tapaus TIME_SCREEN: timeScreen (); // tulostaa päivämäärä ja aika tauko; oletus: // EI ASETETTU. tauko; } } }
Tätä toimintoa käytetään LED-merkin sirisemiseen ja vilkkumiseen samanaikaisesti, jos valittu aika on saavutettu.
void startBuzz () {// -toiminto aloittaa surina, kun aika saavuttaa määritetyn aikavälin // if (pushPressed == false) { if (pushpressed == 0) { Serial.println ("pushpressed is false in blink"); allekirjoittamaton pitkä virtaMillis = millis (); if (currentMillis - edellinenMillis> = intervalli) { previousMillis = currentMillis; // tallenna edellinen kerta, kun vilkasit LED- sarjaa.println ("Aloita äänimerkki"); if (ledState == LOW) {// jos LED ei pala, sytytä se ja päinvastoin: ledState = HIGH; } else { ledState = LOW; } digitalWrite (ledPin, ledState); } } else if (pushpressed == 1) { Serial.println ("pushpressed on totta"); ledState = matala; digitalWrite (ledPin, ledState); } }
Tätä toimintoa käytetään vertaamaan käyttäjän valitsemaa aikaväliä kello 8 ja se alkaa summeria ja vilkuttaa LEDiä, kunnes käyttäjä painaa pysäytyspainiketta. Vastaavasti toimintoja void at 2pm () ja void at 8pm käytetään summerin käynnistämiseen ja niitä johdetaan klo 14 ja 20.
void at8am () {// function to start buzzing at 8am DateTime now = rtc.now (); if (int (nyt.tunti ())> = buzz8amHH) { if (int (nyt.minute ())> = buzz8amMM) { if (int (nyt.sekunnin ())> buzz8amSS) { ////// /////////////////////////////////////////////// startBuzz (); //////////////////////////////////////////////////// /// } } } }
Näin voit yksinkertaisesti tehdä oman automaattisen lääketieteellisen muistutuksen Arduinolla. Voit tehdä ESP8266: sta myös Arduinon kanssa IoT-projektin, joka pystyy lähettämään sähköpostihälytyksen käyttäjälle.
Täydellinen koodi ja esittelyvideo on annettu alla.