- Компоненты, необходимые для автоматического напоминания о лекарствах с использованием 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
- Резисторы 10 кОм, 1 кОм
- Перемычки
Напоминание о медицине Arduino с использованием схемы Arduino
Полная принципиальная схема для создания умной аптечки с использованием Arduino показана ниже.
Ниже приведены контакты Arduino с различными периферийными устройствами.
Контакты Arduino Периферийные контакты
- 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 зуммера и светодиода
- A0 -----------------------------> Кнопка остановки
- A4 -----------------------------> SDA DS3231
- A5 -----------------------------> SCL DS3231
- 3,3 В -----------------------------> Vcc DS3231
- Земля -----------------------------> Земля
В этом проекте «Медицинское напоминание» RTC DS3231 взаимодействует через протокол I2C с Arduino Uno. Вы также можете использовать RTC IC DS1307 для чтения времени с помощью Arduino. RTC DS3231 также имеет встроенную память 32 КБ, которую можно использовать для хранения дополнительных данных. Модуль RTC получает питание через вывод 3.3V Arduino uno. ЖК-дисплей 16x2 подключается через SPI. Buzze г используется для предупреждения и напомнить, что пришло время принимать лекарства. Используются четыре кнопки, каждая из которых имеет отдельную функцию выбора. Первая кнопка используется для напоминания о приеме лекарства один раз в день. Вторая кнопка используется для напоминания дважды в день, а третья кнопка используется для напоминания трижды в день. Четвертая кнопка используется для отключения зуммера, когда пользователь услышал предупреждение.
Работа автоматической системы напоминаний о лекарствах
Pill Напоминание сигнализации питается с использованием источника 5V. Когда он впервые загружается, он показывает приветственное сообщение « Добро пожаловать в Circuit Digest ». ЖК-экран настроен на циклическое переключение между тремя экранами. На 1- м экране отображается массаж как « Будь здоров, выздоравливай скорее ». Второй экран - это справочный экран, в котором говорится, что нужно нажать кнопку выбора, чтобы выбрать любой временной интервал для напоминания (один / два / трижды в день). Временной интервал можно изменить в программе и соответствующим образом настроить. Прямо сейчас мы установили для этого три продолжительности: 8:00, 14:00 и 20:00.
Мы разделили временные интервалы на три режима. Режим 1 выбирает прием лекарства один раз в день в 8 утра, когда пользователь нажимает 1- ю кнопку. В режиме 2 выбирается прием лекарства дважды в день в 8:00 и 20:00, когда пользователь нажимает 2- ю кнопку. В режиме 3 выбирается прием лекарства трижды в день в 8:00, 14:00 и 20:00, если пользователь нажимает 3- ю кнопку.
Мы также можем добавить функцию откладывания зуммера на 10 минут (не входит в этот проект). Когда пользователь выбирает желаемые слоты, нажимая кнопки, вводимые пользователем данные записываются, а время берется из RTC. Когда время совпадает с выбранным временным интервалом, зуммер начинает гудеть. Пользователь может выключить зуммер, нажав кнопку СТОП. Тот же процесс продолжается для следующего напоминания о временном интервале. Полный процесс показан в видео, приведенном в конце статьи.
Программирование 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 (адрес); // считываем ранее сохраненное значение кнопки, чтобы начать с того места, где оно было оставлено ранее switch (val2) { case 1: Serial.println ("Set for 1 / day"); 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 = миллис (); // запускаем миллисекунды для переключения ЖК-экрана через определенный интервал времени
Начните читать цифровые контакты, подключенные к кнопкам.
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; // pushPressed = true; EEPROM.write (адрес, 1); Serial.print ("Написано Push1:"); Serial.println (EEPROM.read (адрес)); // для отладки 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; // pushPressed = true; pushpressed = 1; lcd.clear (); lcd.setCursor (0, 0); lcd.print («Принимай лекарство»); lcd.setCursor (0, 1); lcd.print («с теплой водой»); задержка (1200); lcd.clear (); } }
Приведенная ниже функция не зависит от отсчета времени, но всегда циклически переключается на три экрана, что помогает пользователю. Поскольку мы заботимся о пациентах, давайте напечатаем приветственное сообщение, так как мы знаем, что эмоциональная поддержка очень помогает в более быстром исцелении пациентов. Вы можете выбрать собственное творческое сообщение. Давайте печатать сообщение, как «Будьте здоровы, Поправляйся скоро».
Второй экран предназначен для инструктирования пациентов в виде «Нажимайте кнопки для напоминания…». Третий экран используется для простого отображения текущей даты и времени.
void changeScreen () {// функция для циклического переключения экранов // запускать переключение экрана через каждый определенный интервалLCD if (currentMillisLCD - previousMillisLCD> intervalLCD) // сохраняем время последнего изменения отображения { previousMillisLCD = currentMillisLCD; экраны ++; если (экраны> maxScreen) {screen = 0; // все экраны заново -> начинаем с 1-го } isScreenChanged = true; } // Начать отображение текущего экрана if (isScreenChanged) // обновлять экран только при изменении экрана. { isScreenChanged = false; // сброс для следующей итерации переключатель (экраны) { case getWellsoon: gwsMessege (); // выздоравливай скорее сообщение сломать; case HELP_SCREEN: helpScreen (); // инструкция разрыв экрана ; case TIME_SCREEN: timeScreen (); // напечатать дату и время ; по умолчанию: // НЕ УСТАНОВЛЕН. сломать; } } }
Эта функция используется для одновременного включения гудка и мигания светодиода по истечении выбранного времени.
void startBuzz () {// функция для запуска жужжания, когда время достигает определенного интервала // if (pushPressed == false) { if (pushpressed == 0) { Serial.println ("pushpressed - false в мигании"); беззнаковый длинный currentMillis = millis (); if (currentMillis - previousMillis> = интервал) { previousMillis = currentMillis; // сохраняем время последнего мигания светодиода Serial.println ("Start Buzzing"); if (ledState == LOW) {// если светодиод не горит, включаем его и наоборот: ledState = HIGH; } еще { ledState = LOW; } digitalWrite (ledPin, ledState); } } else if (pushpressed == 1) { Serial.println ("pushpressed is true"); ledState = LOW; digitalWrite (ledPin, ledState); } }
Эта функция используется для сравнения выбранного пользователем временного интервала в 8 утра и начинает гудеть зуммер и мигать светодиодом, пока пользователь не нажмет кнопку остановки. Точно так же функции void at2pm () и void at8pm используются для запуска зуммера и светодиода в 14:00 и 20:00.
void at8am () {// функция для запуска гудка в 8 утра DateTime now = rtc.now (); if (int (now.hour ())> = buzz8amHH) { if (int (now.minute ())> = buzz8amMM) { if (int (now.second ())> buzz8amSS) { ////// /////////////////////////////////////////////// startBuzz (); ////////////////////////////////////////////////// /// } } } }
Вот как вы можете просто создать свое собственное автоматическое напоминание о лекарствах с помощью Arduino. Вы также можете использовать ESP8266 с Arduino, чтобы превратить его в проект IoT, который сможет отправлять пользователю оповещения по электронной почте.
Полный код и демонстрационное видео приведены ниже.