Рубрики
Схемы на Arduino

Автоматический напоминатель приема лекарств на Arduino

В процессе лечения больных часто возникает необходимость приема определенных лекарств или выполнения ряда медицинских процедур по расписанию. При этом больные или медицинский персонал не всегда имеют возможность выполнять (вспоминать) это строгое расписание. Чтобы помочь им в этом мы в данной статье рассмотрим проект автоматического умного медицинского напоминателя (Smart Medicine Reminder). Напоминание можно осуществлять следующими способами:

  1. Показывать сообщение на экране ЖК дисплея.
  2. Передавать уведомление на email или на телефон.
  3. Передавать уведомление при помощи мобильных приложений.
  4. Сигнализация при помощи звукового сигнала зуммера.
  5. С помощью Bluetooth/ Wi-Fi.
  6. С помощью звонка на мобильный телефон.

Мы можем комбинировать эти способы в зависимости от наших потребностей. В нашем проекте мы будем использовать напоминание о приеме лекарств 1, 2 или 3 раза в день. Время для напоминания можно будет выбирать с помощью кнопок. Этот проект можно объединить с системой удаленного контроля здоровья пациента на основе Arduino.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress). Можно использовать и другие типы плат Arduino.
  2. ЖК дисплей 16х2 (купить на AliExpress).
  3. Модуль часов реального времени DS3231 (RTC DS3231 module) (купить на AliExpress).
  4. Зуммер (Buzzer) (купить на AliExpress).
  5. Светодиод (купить на AliExpress).
  6. Макетная плата.
  7. Кнопки.
  8. Резисторы 1 кОм и 10 кОм (купить на AliExpress).
  9. Потенциометр 10 кОм (купить на AliExpress).
  10. Соединительные провода.

Работа схемы

Схема автоматического медицинского напоминателя на основе платы Arduino представлена на следующем рисунке.

В схеме необходимо сделать соединения, представленные в следующей таблице:

Контакт платы Arduino Контакт периферийного устройства
2 D7 of 16×2 LCD Display
3 D6 of 16×2 LCD Display
4 D5 of 16×2 LCD Display
5 D4 of 16×2 LCD Display
7 3-я кнопка
8 2-я кнопка
9 1-я кнопка
11 EN pin of 16×2 LCD Display
12 RS pin of 16×2 LCD Display
13 +Ve Pin of Buzzer and Led
A0 кнопка останова (стоп)
A4 SDA of DS3231
A5 SCL of DS3231
3.3V Vcc of DS3231
Gnd Gnd

В этом проекте мы будем использовать модуль часов реального времени DS3231, который будет подключаться по протоколу I2C к плате Arduino. Также можно использовать и модуль часов реального времени DS1307. Модуль DS3231 имеет встроенные 32 кБ памяти, которые можно использовать для хранения дополнительных данных. Модуль DS3231 запитывается от контакта 3.3V платы Arduino uno. ЖК дисплей 16×2 подключен с помощью протокола SPI. Зуммер используется для напоминания времени приема лекарства. Кнопки используются для задания времени напоминания. Первая кнопка используется для напоминания времени приема лекарства один раз в день, вторая кнопка – для напоминания времени приема лекарства дважды в день, а третья кнопка – для напоминания времен приема лекарства трижды в день. Четвертая кнопка используется для выключения сигнала зуммера.

Основные принципы работы проекта

При подаче питания на схему на экране ЖК дисплея высвечивается приветственное сообщение “Welcome to Circuit Digest” (с их сайта переведена данная статья). Далее ЖК дисплей переходит в цикл с 3-мя демонстрируемыми экранами. На 1-м экране показывается надпись “Stay Healthy, Get Well Soon” (будьте здоровы, скоро станет лучше). Второй экран – это экран помощи, который предлагает при помощи кнопок выбрать временной интервал для напоминания (один/два/три раза в день). Границы этих временных слотов можно в дальнейшем изменить самостоятельно в программе. По умолчанию в программе используются 3 временных слота: 8am, 2pm и 8pm.

Мы запрограммировали три режима работы напоминателя. Режим 1 активируется при нажатии 1-й кнопки и предусматривает прием лекарства один раз в день в 8am (в 8 часов утра). Режим 2 активируется при нажатии 2-й кнопки и предусматривает прием лекарства два раза в день — в 8am (в 8 часов утра) и 8pm (в 8 часов вечера). Режим 3 активируется при нажатии 3-й кнопки и предусматривает прием лекарства три раза в день — в 8am (в 8 часов утра), в 2pm (в 14:00 днем) и 8pm (в 8 часов вечера).

При желании вы можете добавить в проект (сейчас не реализовано) функцию отсрочки зуммера на 10 минут. При нажатии одной из кнопок происходит выбор соответствующего режима напоминания, происходит запоминание этого режима, а из модуля часов реального времени считывается текущее время. Когда текущее время будет равно времени срабатывания нашего напоминателя (в зависимости от выбранного режима) начинает звучать сигнал зуммера, который можно выключить нажатием 4-й кнопки (STOP). Сигнал зуммера будет включаться каждый раз когда текущее время будет равно времени напоминания. Более подробно эти процессы можно посмотреть на видео, приведенном в конце статьи.

Объяснение программы для Arduino

Кратко алгоритм работы нашего напоминателя можно представить следующим образом: пользователь получает инструкции на экране ЖК дисплея > пользователь с помощью кнопок выбирает режим напоминания (1/2/3 раза в день) > на ЖК дисплее система его просит подтвердить указанный выбор > старт отсчета времени > включаются зуммер и светодиод когда текущее время будет равно времени напоминания > пользователь прекращает подачу звукового сигнала при помощи нажатия на конку останова > конец.

При необходимости в проект можно легко добавить другие требуемые опции. Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим ее основные фрагменты.

Вначале в программе мы должны подключить необходимые нам библиотеки.

Библиотека для работы с энергонезависимой памятью EEPROM используется для хранения выбранного пользователем режима напоминания в то время когда на схему не подается питание. Когда пользователь подаст питание на плату Arduino из EEPROM будет считываться значение последнего выбранного режима напоминания. Библиотека Wire.h используется для работы с протоколом I2C – с его помощью мы взаимодействуем с модулем часов реального времени DS3231.

Всегда проверяйте правильно ли работает модуль часов реального времени поскольку он играет ключевую роль в работе нашего проекта.

Настройку времени можно осуществить двумя способами: используя автоматически системное скомпилированное время или введя его вручную.

После того как вы установите нужное время закомментируйте следующую строку в программе до тех пор, пока у вас снова не возникнет необходимость установки времени.

Далее оператор switch будет использоваться для считывания предыдущего сохраненного режима и настройки проекта на этот режим.

Следующая команда считывает текущее время работы системы – мы его используем для периодичности смены экранов ЖК дисплея.

Считываем значения контактов, к которым подключены кнопки.

Следующая функция предназначена для проверки состояния первой кнопки и записи этого состояния в энергонезависимую память EEPROM. Всегда, когда нажимается одна из первых трех кнопок, производится запись текущего состояния системы в EEPROM. Также при этом печатается сообщение на экране ЖК дисплея с подтверждением выбора состояния. Аналогичным образом запрограммированы и функции push2() и push3().

Следующая функция предназначена для выключения сигнала зуммера и светодиода. Также в ней на экран ЖК дисплея выводится сообщение “Take medicine with warm water” (примите лекарство с теплой водой).

Следующая функция не зависит от реального времени, но с помощью нее производится циклическое переключение экранов ЖК дисплея. Сначала на экран выводится сообщение с пожеланием хорошего здоровья — “Stay healthy, Get well soon”. Вы можете изменить это сообщение в программе на свое.

На втором экране пациенту даются инструкции как пользоваться данным напоминателем — “Press buttons for reminder..”. Третий экран используется для отображения текущей даты и времени.

Следующая функция предназначена для одновременного включения зуммера и мигания светодиода когда наступит время приема лекарства.

Следующая функция используется для сравнения выбранного пользователем времени срабатывания напоминателя (зависит от выбранного режима) с 8am (8 часами утра) и вызова функции включения зуммера и мигания светодиода. Аналогичным образом работают и функции void at2pm() и void at8pm.

Также в этот проект вы можете добавить модуль WiFi ESP8266 чтобы передавать пользователю Email когда наступит время приема лекарства.

Исходный код программы (скетча)

Код программы получился сравнительно объемный, но мы надеемся что с помощью представленного выше его объяснения вы с ним сможете разобраться без особых проблем.

Видео, демонстрирующее работу схемы

Источник статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *