- Компоненти, необхідні для нагадування автоматичної медицини з використанням Arduino
- Нагадування про медицину Arduino за допомогою схеми Arduino
- Робота автоматичної системи нагадування про медицину
- Програмування Arduino UNO для нагадування медицини
Коли справа стосується наших близьких, ми завжди хочемо залишати їх здоровими та у формі. Але що буде, якщо вони захворіють і забудуть прийняти ліки вчасно. Ми б переживали, так? У лікарнях багато пацієнтів, і важко нагадати кожному пацієнту вчасно приймати ліки. Традиційні способи вимагають зусиль людей, щоб нагадати їм приймати ліки вчасно. Цифрова ера не йде за цим, і ми можемо використовувати машини для цього. Застосування Smart Medicine Reminder дуже широке, і його можуть використовувати пацієнти вдома, лікарі в лікарнях та в багатьох інших місцях. Що стосується нагадування, то існує багато способів нагадати:
- Покажіть це на дисплеї
- Надішліть сповіщення електронною поштою або телефоном
- Використання мобільних додатків
- Сигнал тривоги
- Використання Bluetooth / Wi-Fi
- Зателефонуйте
- Нагадуйте про наступний час прийому ліків, нагадуючи поточний час
Ми можемо комбінувати шляхи залежно від потреби. Щоб тут все було просто, ми зробили просте нагадування про медицину з використанням Arduino, яке нагадує нам приймати ліки 1 або 2 або 3 рази на день. Часовий інтервал можна вибрати за допомогою кнопок. Крім того, він показує поточну дату та час. Ми також будемо поширювати його на вхідні статті проекту IoT, де користувачеві буде надіслано електронне повідомлення або SMS-повідомлення. Це нагадування про ліки також можна інтегрувати з системою моніторингу пацієнта.
Компоненти, необхідні для нагадування автоматичної медицини з використанням Arduino
- Arduino Uno (Ми можемо використовувати і інші плати Arduino, такі як Pro mini, Nano)
- Модуль RTC DS3231
- РК-дисплей 16x2
- Зумер
- Світлодіодні (будь-який колір)
- Макет
- Кнопки
- Потенціометр 10K
- Резистори 10K, 1K
- Провід перемички
Нагадування про медицину Arduino за допомогою схеми Arduino
Повна принципова схема побудови розумної коробки для медицини за допомогою Arduino наведена нижче
Нижче наведені контактні з'єднання Arduino з різними периферійними пристроями
Arduino Pins Периферійні шпильки
- 2 -----------------------------> D7 з РК-дисплеєм 16x2
- 3 -----------------------------> D6 РК-дисплея 16x2
- 4 -----------------------------> D5 з РК-дисплеєм 16x2
- 5 -----------------------------> D4 РК-дисплея 16x2
- 7 -----------------------------> 3-а кнопка
- 8 -----------------------------> 2-а кнопка
- 9 -----------------------------> 1-а кнопка
- 11 -----------------------------> EN штифт РК-дисплея 16x2
- 12 -----------------------------> RS штифт РК-дисплея 16x2
- 13 -----------------------------> + Ve Pin зуммера та світлодіода
- A0 -----------------------------> Кнопка зупинки
- A4 -----------------------------> SDA DS3231
- A5 -----------------------------> SCL DS3231
- 3,3 В -----------------------------> Vcc DS3231
- Gnd -----------------------------> Gnd
У цьому проекті нагадування про медицину RTC DS3231 взаємодіє через протокол I2C з Arduino Uno. Ви також можете використовувати RTC IC DS1307 для зчитування часу за допомогою Arduino. RTC DS3231 також має вбудовану пам'ять на 32 тис., Яку можна використовувати для зберігання додаткових даних. Модуль RTC живиться через 3,3 В висновок Arduino uno. РК-дисплей 16x2 пов'язаний за допомогою SPI. Buzze г використовується для попередження і нагадати, що прийшов час приймати ліки. Чотири кнопки використовуються там, де кожна має окрему функцію вибору. Перша кнопка використовується для нагадування приймати ліки один раз на день. Друга кнопка використовується для нагадування двічі на день, а третя кнопка використовується для нагадування тричі на день. Четверта кнопка використовується для зупинки зумера, коли користувач почує попередження.
Робота автоматичної системи нагадування про медицину
Pill Нагадування сигналізації харчується з використанням джерела 5V. Коли він вперше завантажується, він показує вітальний масаж як “ Ласкаво просимо до Circuit Digest ”. РК-екран налаштований на циклічне розміщення на трьох екранах. На першому екрані масаж відображається як « Залишайся здоровим, швидше одужуй ». Другий екран - це довідковий екран, який повідомляє натиснення кнопки вибору для вибору будь-якого часового інтервалу для нагадування (один раз / два рази / тричі на день). Часовий інтервал змінюється в програмі і може бути налаштований відповідно. Зараз ми встановили це на три тривалості, тобто 8:00, 14:00 та 20:00.
Ми розділили часові інтервали на три режими. Режим 1 вибирає приймати ліки один раз / день о 8 годині ранку, коли користувач натискає на 1 - й кнопки. Режим 2 вибирає прийом ліків двічі на день о 8 ранку та о 20 вечора, коли користувач натискає другу кнопку. Режим 3 вибирає прийом ліків тричі на день о 8 ранку, 14 вечора та 20 вечора, якщо користувач натискає 3- ю кнопку.
Ми також можемо додати функцію, щоб відкласти зумер на 10 хвилин (не включено в цей проект). Коли користувач вибирає потрібні слоти, натискаючи кнопки, користувацький вхід записується, а час відбирається з RTC. Коли час відповідає обраному часовому інтервалу, зумер починає гудіти. Користувач може зупинити зумер, натиснувши кнопку STOP. Той самий процес продовжується для наступного нагадування про слот. Повний процес показаний у відео, поданому в кінці цієї статті.
Програмування Arduino UNO для нагадування медицини
Написати програму дуже просто, коли ви продумали способи нагадування про прийом таблеток. Тут він покаже нагадування на дисплеї, пролунає зумер і вкаже його за допомогою світлодіода. Він також має можливість вибрати три часові інтервали (один раз / два рази / тричі на день), і коли час досягне, почне попереджати пацієнта гудінням зумера. Тоді вся система буде виглядати наступним чином:
Користувач отримує довідкові вказівки на дисплеї> Користувач вибирає часові інтервали (один раз / день, двічі / день, тричі / день)> Повідомлення про підтвердження друку на дисплеї> Зберігання часу розпочато> Звуковий сигнал та світлодіод запускається, коли час збігається з вибраним користувачем слотом> Користувач заходить натискання кнопки зупинки> Кінець
Ми можемо змінити програму та обладнання, якщо хочемо додати більше функцій. Щоб зрозуміти набагато простіше, ми розбили програму на невеликі функції. Функції легко зрозуміти та реалізувати. Повна програма подана в кінці цього проекту. Почнемо з програми.
Оскільки ми використовували інші периферійні пристрої, такі як РК-дисплей 16x2, RTC DS3231, тому спочатку ми повинні включити бібліотеки для того чи іншого. Потрібні такі бібліотеки:
Бібліотека 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 = millis (); // запуск міліс для перемикання РК-екрану через певний проміжок часу
Почніть читати цифрові штифти, підключені до кнопок.
push1state = digitalRead (push1pin); push2state = digitalRead (push2pin); push3state = digitalRead (push3pin); stopinState = digitalRead (stopPin);
Функція нижче використовується для зчитування стану кнопки та запису її в EEPROM. Щоразу, коли натискається кнопка, стан записується в EEPROM. Також він друкує повідомлення на РК-дисплеї обраного введення користувачем. Подібним чином використовуються функції push2 () та push3 () .
void push1 () {// функція встановлення нагадування один раз на день if (push1state == 1) { push1state = 0; push2state = 0; push3state = 0; // pushPress = true; 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 = true; натиснута = 1; lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Приймати ліки"); lcd.setCursor (0, 1); lcd.print ("з теплою водою"); затримка (1200); lcd.clear (); } }
Наведена нижче функція не залежить від обліку часу, але завжди працює на трьох екранах, що допомагає користувачеві. Оскільки ми доглядаємо за пацієнтами, можна надрукувати привітальне повідомлення, оскільки ми знаємо, що емоційна підтримка дуже корисна для зцілення пацієнтів у більш швидкі терміни. Ви можете вибрати власне творче повідомлення. Давайте надрукуємо повідомлення як “Залишайся здоровим, одужуй швидше”.
Другий екран призначений для вказівки пацієнтам “Натисніть кнопки для нагадування..”. Третій екран використовується для простого відображення поточної дати та часу.
void changeScreen () {// функція для переключення екрану // Почніть перемикати екран кожного визначеного інтервалу 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 неправда в миготінні"); unsigned long currentMillis = millis (); якщо (currentMillis - previousMillis> = інтервал) { previousMillis = currentMillis; // зберегти останній раз, коли ви блимали світлодіодом Serial.println ("Почати гудіння"); if (ledState == LOW) {// якщо світлодіод вимкнений, увімкніть його і навпаки: ledState = HIGH; } ще { ledState = LOW; } digitalWrite (ledPin, ledState); } } інакше якщо (pushpressed == 1) { Serial.println ("pushpressed - це істина"); ledState = LOW; digitalWrite (ledPin, ledState); } }
Ця функція використовується для порівняння обраного користувачем часового інтервалу о 8 ранку і починає гудіти зумер і блимати світлодіодом, доки користувач не натисне кнопку зупинки. Подібним чином функції void at2pm () і void at8pm використовуються для запуску зумера і ведеться о 14:00 і 20:00.
void at8am () {// функція, щоб почати гудіти о 8:00 DateTime зараз = rtc.now (); if (int (now.hour ())> = buzz8amHH) { if (int (now.minute ())> = buzz8amMM) { if (int (now.second ())> buzz8amSS) { ////// ////////////////////////////////////////////////// startBuzz (); ////////////////////////////////////////////////////// /// } } } }
Ось як ви можете просто зробити власне нагадування про автоматичні ліки за допомогою Arduino. Ви також можете використовувати ESP8266 з Arduino, щоб зробити його проектом IoT, який зможе надсилати користувачеві сповіщення електронною поштою.
Повний код та демонстраційне відео наведено нижче.