- Vereiste componenten voor automatische medicijnherinnering met Arduino
- Arduino Medicijnherinnering met behulp van Arduino Circuit
- Werking van het automatische herinneringssysteem voor medicijnen
- Programmering Arduino UNO voor Medicijnherinnering
Als het om onze dierbaren gaat, willen we ze altijd gezond en fit houden. Maar wat gebeurt er als ze ziek worden en vergeten om op tijd medicijnen in te nemen? We zouden ons toch zorgen maken? In ziekenhuizen zijn er veel patiënten en het is moeilijk om elke patiënt eraan te herinneren op tijd medicijnen in te nemen. De traditionele manieren vergen menselijke inspanningen om hen eraan te herinneren op tijd medicijnen in te nemen. Het digitale tijdperk volgt dat niet en we kunnen machines gebruiken om dat te doen. De toepassing van Smart Medicine Reminder is erg breed en kan worden gebruikt door patiënten thuis, artsen in ziekenhuizen en op vele andere plaatsen. Als het gaat om herinneren, kunnen er veel manieren zijn om het eraan te herinneren:
- Laat het zien op een display
- Stuur een melding via e-mail of telefoon
- Met behulp van mobiele apps
- Buzz-alarm
- Bluetooth / Wi-Fi gebruiken
- Krijg een telefoontje
- Herinner voor de volgende geneesmiddeltijd terwijl u de huidige tijd herinnert
We kunnen manieren combineren, afhankelijk van de behoefte. Om het hier eenvoudig te houden, hebben we een eenvoudige Medicijnherinnering gemaakt met Arduino die ons eraan herinnert om 1 of 2 of 3 keer per dag medicijnen te nemen. Het tijdvak kan worden geselecteerd met drukknoppen. Het toont ook de huidige datum en tijd. We zullen het verder uitbreiden naar inkomende artikelen van een IoT-project waar een e-mail of sms-melding naar de gebruiker wordt gestuurd. Deze medicatieherinnering kan ook worden geïntegreerd met het patiëntbewakingssysteem.
Vereiste componenten voor automatische medicijnherinnering met Arduino
- Arduino Uno (we kunnen ook andere Arduino-boards gebruiken, zoals Pro mini, Nano)
- RTC DS3231-module
- 16x2 LCD-scherm
- Zoemer
- Led (elke kleur)
- Breadboard
- Drukknoppen
- 10K Potentiometer
- 10K, 1K weerstanden
- Doorverbindingsdraden
Arduino Medicijnherinnering met behulp van Arduino Circuit
Het volledige schakelschema om met Arduino een slimme medicijndoos te bouwen, wordt hieronder weergegeven
Hieronder staan de pinverbindingen van Arduino met verschillende randapparatuur
Arduino- pinnen Perifere pinnen
- 2 -----------------------------> D7 van 16x2 LCD-scherm
- 3 -----------------------------> D6 van 16x2 LCD-scherm
- 4 -----------------------------> D5 van 16x2 LCD-scherm
- 5 -----------------------------> D4 van 16x2 LCD-scherm
- 7 -----------------------------> 3e drukknop
- 8 -----------------------------> 2e drukknop
- 9 -----------------------------> 1e drukknop
- 11 -----------------------------> EN-pin van 16x2 LCD-scherm
- 12 -----------------------------> RS-pin van 16x2 LCD-scherm
- 13 -----------------------------> + Ve Pin van zoemer en led
- A0 -----------------------------> Stopknop
- A4 -----------------------------> SDA van DS3231
- A5 -----------------------------> SCL van DS3231
- 3.3V -----------------------------> Vcc van DS3231
- Gnd -----------------------------> Gnd
In dit Medicine Reminder Project is RTC DS3231 via het I2C-protocol gekoppeld aan Arduino Uno. U kunt ook RTC IC DS1307 gebruiken voor het aflezen van de tijd met Arduino. De RTC DS3231 heeft ook een ingebouwd 32k-geheugen dat kan worden gebruikt om extra gegevens op te slaan. De RTC-module wordt gevoed via de 3.3V-pin van Arduino uno. Een 16x2 LCD-scherm is gekoppeld met SPI. Een zoemer wordt gebruikt om te waarschuwen en eraan te herinneren dat het tijd is om medicijnen in te nemen. Er worden vier drukknoppen gebruikt, elk met een aparte selectiefunctie. De eerste drukknop wordt gebruikt om eraan te herinneren één keer per dag medicijnen in te nemen. De tweede drukknop wordt gebruikt om tweemaal per dag te herinneren en de derde drukknop wordt gebruikt om driemaal per dag te herinneren. De vierde drukknop wordt gebruikt om de zoemer te stoppen wanneer de gebruiker de waarschuwing heeft gehoord.
Werking van het automatische herinneringssysteem voor medicijnen
Het pilherinneringsalarm wordt gevoed met een 5V-voeding. Wanneer het voor het eerst opstart, toont het een welkomstmassage als " Welcome to Circuit Digest ". Het LCD-scherm is ingesteld op drie schermen. De 1 ste scherm toont masseren als “ gezond te blijven, Get Well Soon ”. Het tweede scherm is een hulpscherm dat vertelt dat u op de selectieknop moet drukken om een tijdvak te selecteren om eraan te herinneren (één / twee / drie keer per dag). Het tijdvak kan in het programma worden gewijzigd en kan dienovereenkomstig worden geconfigureerd. Op dit moment hebben we dit opgelost in drie looptijden, namelijk 8 uur, 14 uur en 20 uur.
We hebben tijdvakken onderverdeeld in drie modi. Mode 1 selecteert om medicijnen te nemen eenmaal / dag om 8 uur wanneer de gebruiker persen 1 st drukknop. Modus 2 selecteert om twee keer per dag om 8 uur 's ochtends en om 20 uur' s avonds medicijnen in te nemen wanneer de gebruiker op de 2e drukknop drukt. Mode 3 selecteert om medicijnen driemaal nemen / dag op 8:00, 2:00 en 8:00 als gebruiker op 3 rd drukknop.
We kunnen ook een functie toevoegen om de zoemer 10 minuten te laten sluimeren (niet inbegrepen in dit project). Wanneer de gebruiker de gewenste slots selecteert door op drukknoppen te drukken, wordt de gebruikersinvoer geregistreerd en wordt de tijd overgenomen van RTC. Als de tijd overeenkomt met het geselecteerde tijdvak, begint de zoemer te zoemen. De gebruiker kan de zoemer stoppen door op de STOP-knop te drukken. Hetzelfde proces gaat door voor de volgende slotherinnering. Het volledige proces wordt getoond in de video aan het einde van dit artikel.
Programmering Arduino UNO voor Medicijnherinnering
Het is heel gemakkelijk om een programma te schrijven als je eenmaal hebt bedacht hoe je eraan kunt herinneren dat je de pillen moet innemen. Hier toont het de herinnering op het display, zoemt een zoemer en geeft dit aan met een LED. Het heeft ook de mogelijkheid om drie tijdvakken te selecteren (eenmaal / tweemaal / driemaal per dag) en wanneer de tijd nadert, begint het de patiënt te waarschuwen door de zoemer te zoemen. Dan ziet het hele systeem er als volgt uit:
Gebruiker krijgt hulpinstructies op het display> Gebruiker selecteert tijdsloten (eenmaal / dag, tweemaal / dag, driemaal / dag)> Druk bevestigingsbericht op display af> Tijdwaarneming gestart> Zoemer en LED start wanneer tijd overeenkomt met door gebruiker geselecteerde tijdsperiode> Gebruiker komt langs op een stopknop drukken> Einde
We kunnen het programma en de hardware wijzigen als we meer functies willen toevoegen. Om het op een veel eenvoudigere manier te begrijpen, hebben we het programma opgedeeld in kleine functies. De functies zijn gemakkelijk te begrijpen en te implementeren. Het volledige programma wordt aan het einde van dit project gegeven. Laten we beginnen met het programma.
Sindsdien hebben we andere randapparatuur gebruikt, zoals 16x2 LCD-scherm, RTC DS3231, dus we moeten eerst bibliotheken opnemen voor dat. Vereiste bibliotheek is als volgt:
De EEPROM-bibliotheek wordt gebruikt om de door de gebruiker geselecteerde invoer bij te houden als Arduino niet is ingeschakeld. En wanneer de gebruiker de Arduino inschakelt, krijgt deze de vorige status van drukknoppen met behulp van de EEPROM-bibliotheek. De Wire.h-bibliotheek wordt gebruikt omdat de RTC DS3231-module wordt gecommuniceerd via I2C.
Controleer altijd of de RTC correct is bedraad of niet beschadigd is, aangezien RTC een belangrijke rol zal spelen bij het bijhouden van het hele herinneringssysteem.
if (! rtc.begin ()) {// controleer of rtc is verbonden Serial.println ("Kon RTC niet vinden"); terwijl (1); } if (rtc.lostPower ()) { Serial.println ("RTC heeft stroom verloren, laten we de tijd instellen!"); }
De tijdaanpassing kan op twee manieren worden gedaan, ofwel automatisch met behulp van de systeemcompilatietijd of door deze handmatig in te voeren. Zodra we de tijd hebben ingesteld, becommentarieer de onderstaande regels, tenzij u de RTC-tijd opnieuw wilt wijzigen.
rtc.adjust (DateTime (F (__ DATE__), F (__ TIME__))); //rtc.adjust(DateTime(2019, 1, 10, 7, 59, 52));
Deze schakelinstructie wordt gebruikt om de eerder opgeslagen toestand van de drukknop te lezen en de toestand te hervatten voor de juiste en nauwkeurige herinneringstijd.
val2 = EEPROM.read (addr); // lees de eerder opgeslagen waarde van de drukknop om te beginnen waar het eerder was switch (val2) { case 1: Serial.println ("Set for 1 / day"); push1state = 1; push2state = 0; push3state = 0; pushVal = 01; breken; geval 2: Serial.println ("Set voor 2 / dag"); push1state = 0; push2state = 1; push3state = 0; pushVal = 10; breken; geval 3: Serial.println ("Set voor 3 / dag"); push1state = 0; push2state = 0; push3state = 1; pushVal = 11; breken; }
Deze instructie wordt gebruikt om de millis te gebruiken voor timing en controle van de gedefinieerde intervalschermcycli.
currentMillisLCD = millis (); // start millis voor schakelen tussen LCD-schermen op een bepaald tijdsinterval
Begin met het lezen van de digitale pinnen die zijn verbonden met drukknoppen.
push1state = digitalRead (push1pin); push2state = digitalRead (push2pin); push3state = digitalRead (push3pin); stopinState = digitalRead (stopPin);
De onderstaande functie wordt gebruikt om de toestand van de drukknop te lezen en naar EEPROM te schrijven. Elke keer dat de drukknop wordt ingedrukt, wordt de status naar EEPROM geschreven. Het drukt ook het bericht af op het LCD-scherm van de geselecteerde gebruikersinvoer. Evenzo worden de functies push2 () en push3 () gebruikt.
void push1 () {// functie om herinnering één keer per dag in te stellen if (push1state == 1) { push1state = 0; push2state = 0; push3state = 0; // pushPressed = true; EEPROM.write (adres, 1); Serial.print ("Push1 Written:"); Serial.println (EEPROM.read (addr)); // voor foutopsporing pushVal = 1; // sla de toestand van drukknop-1 lcd.clear () op; lcd.setCursor (0, 0); lcd.print ("Herinneringsset"); lcd.setCursor (0, 1); lcd.print ("voor een keer / dag!"); vertraging (1200); lcd.clear (); } }
De onderstaande functie wordt gebruikt om de zoemer en led te stoppen. Het is altijd goed om suggesties te doen. Druk een suggestiebericht af op het scherm "Neem medicijn met warm water".
void stopPins () {// functie om het zoemen te stoppen wanneer de gebruiker op de stopknop drukt if (stopinState == 1) { // stopinState = 0; // pushPressed = true; pushpressed = 1; lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Take Medicine"); lcd.setCursor (0, 1); lcd.print ("met warm water"); vertraging (1200); lcd.clear (); } }
De onderstaande functie is onafhankelijk van de tijdregistratie, maar doorloopt altijd drie schermen die de gebruiker helpen. Omdat we zorgzaam zijn voor patiënten, laten we een begroetingsboodschap afdrukken, omdat we weten dat emotionele steun zeer nuttig is om patiënten sneller te genezen. U kunt uw eigen creatieve boodschap kiezen. Laten we een bericht afdrukken als "Blijf gezond, beterschap".
Het tweede scherm is voor het geven van instructies aan patiënten als "Druk op knoppen voor herinnering…". Het derde scherm wordt gebruikt om eenvoudig de huidige datum en tijd weer te geven.
void changeScreen () {// functie voor Screen Cycling // Start het wisselen van scherm elke gedefinieerde intervalLCD if (currentMillisLCD - previousMillisLCD> intervalLCD) // bewaar de laatste keer dat u de weergave hebt gewijzigd { previousMillisLCD = currentMillisLCD; schermen ++; if (schermen> maxScreen) { schermen = 0; // alle schermen voorbij -> start vanaf 1e } isScreenChanged = true; } // Begin met het weergeven van het huidige scherm als (isScreenChanged) // update het scherm alleen als het scherm is gewijzigd. { isScreenChanged = false; // reset voor volgende iteratieschakelaar (schermen) { case getWellsoon: gwsMessege (); // beterschap bericht breken; geval HELP_SCREEN: helpScreen (); // instructie schermonderbreking ; geval TIME_SCREEN: timeScreen (); // om datum en tijd af te drukken ; standaard: // NIET INGESTELD. breken; } } }
Deze functie wordt gebruikt om te beginnen met zoemen en gelijktijdig knipperen van de LED als de geselecteerde tijd is bereikt.
void startBuzz () {// functie om te beginnen met zoemen als de tijd het gedefinieerde interval bereikt // if (pushPressed == false) { if (pushpressed == 0) { Serial.println ("pushpressed is false in blink"); unsigned lange currentMillis = millis (); if (currentMillis - previousMillis> = interval) { previousMillis = currentMillis; // bewaar de laatste keer dat je de LED Serial.println knipperde ("Start Buzzing"); if (ledState == LOW) {// als de LED uit is, zet hem aan en vice versa: ledState = HIGH; } else { ledState = LOW; } digitalWrite (ledPin, ledState); } } else if (pushpressed == 1) { Serial.println ("pushpressed is true"); ledState = LAAG; digitalWrite (ledPin, ledState); } }
Deze functie wordt gebruikt om het door de gebruiker geselecteerde tijdvak om 8 uur te vergelijken en begint de zoemer te zoemen en de LED te knipperen totdat de gebruiker op de stopknop drukt. Evenzo worden de functies void at2pm () en void at 20pm gebruikt om de zoemer te starten en om 14.00 uur en 20.00 uur geleid.
void at8am () {// functie om te beginnen zoemen om 8 uur DateTime nu = rtc.now (); if (int (now.hour ())> = buzz8amHH) { if (int (now.minute ())> = buzz8amMM) { if (int (now.second ())> buzz8amSS) { ////// ///////////////////////////////////////// startBuzz (); //////////////////////////////////////////// /// } } } }
Op deze manier kunt u eenvoudig uw eigen automatische medicijnherinnering maken met Arduino. U kunt ESP8266 ook met Arduino gebruiken om er een IoT-project van te maken dat een e-mailwaarschuwing naar de gebruiker kan sturen.
Volledige code en demonstratievideo wordt hieronder gegeven.