- Компоненти, необходими за напомняне за автоматична медицина с използване на Arduino
- Напомняне за Arduino Medicine, използващо Arduino Circuit
- Работа на автоматична система за напомняне на лекарства
- Програмиране на Arduino UNO за напомняне за медицина
Що се отнася до нашите близки, ние винаги искаме да ги поддържаме здрави и във форма. Но какво ще стане, ако се разболеят и забравят да вземат лекарства навреме. Бихме се притеснили, нали? В болниците има много пациенти и е трудно да се напомни на всеки пациент да приема лекарства навреме. Традиционните начини изискват човешки усилия да им напомнят да приемат лекарства навреме. Дигиталната ера не следва това и ние можем да използваме машини за това. Приложението на Smart Medicine Reminder е много широко и може да се използва от пациенти у дома, лекари в болници и на много други места. Що се отнася до напомнянето, може да има много начини да го напомните:
- Покажете го на дисплей
- Изпратете известие по имейл или телефон
- Използване на мобилни приложения
- Аларма за бръмчене
- Използване на Bluetooth / Wi-Fi
- Обадете се
- Напомнете за следващото лекарствено време, като напомняте текущото време
Можем да комбинираме начини в зависимост от нуждата. За да улесним нещата тук, направихме просто Напомняне за лекарства, използвайки Arduino, което ни напомня да приемаме лекарства 1 или 2 или 3 пъти на ден. Времевият интервал може да бъде избран с помощта на бутони. Освен това показва текущата дата и час. Освен това ще го разширим за входящи статии за IoT проект, където на потребителя ще бъде изпратено известие по имейл или SMS. Това напомняне за лекарства може също да бъде интегрирано със системата за наблюдение на пациентите.
Компоненти, необходими за напомняне за автоматична медицина с използване на Arduino
- Arduino Uno (Можем да използваме и други Arduino дъски, като Pro mini, Nano)
- Модул RTC DS3231
- 16x2 LCD дисплей
- Звънец
- LED (всеки цвят)
- Макет
- Бутони
- 10K потенциометър
- 10K, 1K резистори
- Джъмперни проводници
Напомняне за Arduino Medicine, използващо Arduino Circuit
Пълната схема на схемата за изграждане на интелигентна кутия за лекарства с помощта на Arduino е показана по-долу
По-долу са изведени пиновите връзки на Arduino с различни периферни устройства
Arduino Pins Периферни щифтове
- 2 -----------------------------> D7 от 16x2 LCD дисплей
- 3 -----------------------------> D6 от 16x2 LCD дисплей
- 4 -----------------------------> D5 от 16x2 LCD дисплей
- 5 -----------------------------> D4 от 16x2 LCD дисплей
- 7 -----------------------------> 3-ти бутон
- 8 -----------------------------> 2-ри бутон
- 9 -----------------------------> 1-ви бутон
- 11 -----------------------------> EN щифт на LCD дисплей 16x2
- 12 -----------------------------> RS щифт на LCD дисплей 16x2
- 13 -----------------------------> + Ve Pin на зумер и Led
- A0 -----------------------------> Бутон за спиране
- A4 -----------------------------> SDA на DS3231
- A5 -----------------------------> SCL на DS3231
- 3.3V -----------------------------> Vcc на DS3231
- Gnd -----------------------------> Gnd
В този проект за напомняне за медицина RTC DS3231 е свързан чрез протокол I2C с Arduino Uno. Можете също да използвате RTC IC DS1307 за отчитане на времето с Arduino. RTC DS3231 също има вградена 32k памет, която може да се използва за съхраняване на допълнителни данни. RTC модулът се захранва чрез 3.3V щифт на Arduino uno. 16x2 LCD дисплей е свързан чрез SPI. А buzze R се използва за предупреждение и напомня, че е време да се приемат лекарства. Използват се четири бутона, където всеки има отделна функция за избор. Първият бутон се използва за напомняне да се приема лекарство веднъж на ден. Вторият бутон се използва за напомняне два пъти на ден, а третият бутон се използва за напомняне три пъти на ден. Четвъртият бутон се използва за спиране на зумера, когато потребителят е чул предупреждението.
Работа на автоматична система за напомняне на лекарства
На аларма хапче напомняне се захранва с помощта на 5V захранване. Когато се зареди за първи път, той показва добре дошъл масаж като „ Добре дошли в Circuit Digest “. LCD екранът е настроен да циклира в три екрана. 1 -ви екрана показва масажират като " сте здрави, бързо възстановяване ". Вторият екран е екран за помощ, който казва да натиснете бутон за избор, за да изберете всеки един времеви слот, който да напомните (веднъж / два пъти / три пъти на ден). Времевият интервал е променлив в програмата и може да бъде конфигуриран по съответния начин. Точно сега сме фиксирали това в три продължителности, т.е. 8am, 14pm и 20pm.
Разделихме времевите интервали на три режима. Режим 1 избира да приема лекарство веднъж дневно в 8 часа сутринта, когато потребителят натисне 1- ви бутон. Режим 2 избира да приема лекарство два пъти дневно в 8 ч. И 20 ч., Когато потребителят натисне 2- ри бутон. Режим 3 избира да вземат лекарство три пъти / ден в 8 ч, 14:00 и 20:00, ако потребителят натисне 3 -ти бутон.
Можем също да добавим функция за отлагане на зумера за 10 минути (не е включена в този проект). Когато потребителят избира желаните слотове чрез натискане на бутони, потребителският вход се записва и времето се взема от RTC. Когато времето се съчетае с избрания интервал от време, зумерът започва да жужи. Потребителят може да спре зумера, като натисне бутона STOP. Същият процес продължава и за следващото напомняне за слот. Пълният процес е показан във видеото, дадено в края на тази статия.
Програмиране на Arduino UNO за напомняне за медицина
Много е лесно да напишете програма, след като сте измислили начините да напомните приема на хапчетата. Тук той ще покаже напомнянето на дисплея, ще извести зумер и ще го индикира с помощта на LED. Също така има опция за избор на три времеви слота (веднъж / два пъти / три пъти на ден) и когато времето достигне, започнете да предупреждавате пациента чрез жужене на зумера. Тогава цялата система ще изглежда така:
Потребителят получава помощни инструкции на дисплея> Потребителят избира времеви интервали (веднъж / ден, два пъти / ден, три пъти / ден)> Съобщение за потвърждение на печата на дисплея> Запазване на времето стартирано> Звуков сигнал и светодиодът стартира, когато времето съвпада с избрания от потребителя слот> Потребителят спира от натискане на бутон за спиране> Край
Можем да променим програмата и хардуера, ако искаме да добавим повече функции. За да разберем по много по-опростен начин, разделихме програмата на малки функции. Функциите са лесни за разбиране и изпълнение. Пълната програма е дадена в края на този проект. Нека започнем с програмата.
Тъй като използвахме други периферни устройства като 16x2 LCD дисплей, RTC DS3231, така че първо трябва да включим библиотеки f или така. Необходимите библиотеки са както следва:
Библиотеката EEPROM се използва, за да се следи въведеното от потребителя избиране, ако Arduino не е включен. И когато потребителят включи Arduino, той получава предишното състояние на бутоните, използвайки EEPROM библиотека. Библиотеката Wire.h се използва, тъй като модулът RTC DS3231 се комуникира чрез I2C.
Винаги проверявайте дали RTC е правилно свързан или не е повреден, тъй като RTC ще играе важна роля за поддържане на времето на цялата система за напомняне.
if (! rtc.begin ()) {// проверете дали rtc е свързан Serial.println ("Не можах да намеря RTC"); докато (1); } if (rtc.lostPower ()) { Serial.println ("RTC загуби захранването, нека зададем часа!"); }
Настройката на времето може да се извърши по два начина, или автоматично, използвайки времето за компилиране на системата, или като го въведете ръчно. След като зададем часа, коментирайте долните редове, освен ако не искате да промените отново RTC часа.
rtc.adjust (DateTime (F (__ DATE__), F (__ TIME__))); //rtc.adjust(DateTime(2019, 1, 10, 7, 59, 52));
Този оператор за превключване се използва за четене на предварително запазеното състояние на бутона и възобновяване на състоянието за подходящо и точно време за напомняне.
val2 = EEPROM.read (addr); // прочетете предварително запазената стойност на бутона, за да започнете от мястото, където е бил оставен преди това превключвател (val2) { случай 1: Serial.println ("Задайте за 1 / ден"); push1state = 1; push2state = 0; push3state = 0; pushVal = 01; почивка; случай 2: Serial.println ("Задайте за 2 / ден"); push1state = 0; push2state = 1; push3state = 0; pushVal = 10; почивка; случай 3: Serial.println ("Задайте за 3 / ден"); push1state = 0; push2state = 0; push3state = 1; pushVal = 11; почивка; }
Това изявление се използва, за да накара милисетките да се използват за синхронизиране и контрол на дефинирането на екрана с дефиниран интервал.
currentMillisLCD = милис (); // стартирайте мили за превключване на LCD екрана в определен интервал от време
Започнете да четете цифровите щифтове, свързани към бутоните.
push1state = digitalRead (push1pin); push2state = digitalRead (push2pin); push3state = digitalRead (push3pin); stopinState = digitalRead (stopPin);
Функцията по-долу се използва за четене на състоянието на бутона и записването му в EEPROM. Всеки път, когато бутонът бъде натиснат, състоянието се записва в EEPROM. Също така отпечатва съобщението на LCD дисплей за избрания избор на потребителски вход. По подобен начин се използват функциите push2 () и push3 () .
void push1 () {// функция за задаване на напомняне веднъж дневно, ако (push1state == 1) { push1state = 0; push2state = 0; push3state = 0; // pushPress = вярно; EEPROM.write (addr, 1); Serial.print ("Push1 Written:"); Serial.println (EEPROM.read (addr)); // за отстраняване на грешки pushVal = 1; // запазване на състоянието на бутон-1 lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Напомняне набор"); lcd.setCursor (0, 1); lcd.print ("за веднъж / ден!"); забавяне (1200); lcd.clear (); } }
Функцията по-долу се използва за спиране на зумера и светодиода. Винаги е добре да давате предложения. Отпечатайте съобщение с предложение на дисплея „Вземете лекарство с топла вода“.
void stopPins () {// функция за спиране на жуженето, когато потребителят натисне бутон за спиране if (stopinState == 1) { // stopinState = 0; // pushPress = вярно; натиснат = 1; lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Вземете лекарство"); lcd.setCursor (0, 1); lcd.print ("с топла вода"); забавяне (1200); lcd.clear (); } }
Функцията по-долу е независима от измерването на времето, но винаги циклира в три екрана, което помага на потребителя. Тъй като поддържаме грижи за пациентите, можем да отпечатаме поздравително съобщение, тъй като знаем, че емоционалната подкрепа е много полезна за лечението на пациентите за по-бързо време. Можете да изберете свое собствено творческо послание. Нека отпечатаме съобщение като „Бъдете здрави, оздравявайте скоро“
Вторият екран е за даване на инструкции на пациентите като „Натиснете бутони за напомняне..“. Третият екран се използва за просто показване на текущата дата и час.
void changeScreen () {// функция за Screen Cycling // Стартиране на превключване на екрана на всеки определен интервалLCD, ако (currentMillisLCD - previousMillisLCD> intervalLCD) // запазване на последния път, когато сте променили дисплея { previousMillisLCD = currentMillisLCD; екрани ++; ако (екрани> maxScreen) { екрани = 0; // всички екрани над -> започнем от 1-ви } isScreenChanged = true; } // Започнете да показвате текущия екран, ако (isScreenChanged) // актуализирайте екрана само ако екранът е променен. { isScreenChanged = false; // нулиране за превключвател за следваща итерация (екрани) { case getWellsoon: gwsMessege (); // съобщение за оздравяване скоро почивка; дело HELP_SCREEN: helpScreen (); // прекъсване на екрана с инструкции ; случай TIME_SCREEN: timeScreen (); // за отпечатване на прекъсване на дата и час ; по подразбиране: // НЕ НАСТРОЕН. почивка; } } }
Тази функция се използва за започване на жужене и мигане на светодиода едновременно, ако избраното време е достигнало.
void startBuzz () {// функция за стартиране на жужене, когато времето достигне определен интервал // if (pushPress == false) { if (pushpressed == 0) { Serial.println ("pushpressed е false в мигане"); неподписан дълъг токMillis = милис (); ако (currentMillis - previousMillis> = интервал) { previousMillis = currentMillis; // запаметяване на последния път, когато мигате с LED Serial.println ("Стартиране на жужене"); if (ledState == LOW) {// ако светодиодът не свети, включете го и обратно: ledState = HIGH; } else { ledState = LOW; } digitalWrite (ledPin, ledState); } } иначе ако (натиснат == 1) { Serial.println ("натискането е вярно"); ledState = LOW; digitalWrite (ledPin, ledState); } }
Тази функция се използва за сравняване на избрания от потребителя времеви интервал в 8 часа сутринта и започва да жужи зумера и да мига светодиода, докато потребителят натисне бутона за спиране. По същия начин функциите void at2pm () и void at8pm се използват за стартиране на зумер и се водят в 14:00 и 20:00.
void at8am () {// функция за започване на жужене в 8am DateTime сега = rtc.now (); if (int (now.hour ())> = buzz8amHH) { if (int (now.minute ())> = buzz8amMM) { if (int (now.second ())> buzz8amSS) { ////// /////////////////////////////////////////////// startBuzz (); //////////////////////////////////////////////////// /// } } } }
Ето как можете просто да си направите собствено напомняне за автоматична медицина, използвайки Arduino. Можете също да използвате ESP8266 с Arduino, за да го направите IoT проект, който ще може да изпраща предупреждение по имейл до потребителя.
Пълният код и демонстрационното видео е дадено по-долу.