Оглавление:

Автоматический дозатор лекарств: 5 шагов
Автоматический дозатор лекарств: 5 шагов

Видео: Автоматический дозатор лекарств: 5 шагов

Видео: Автоматический дозатор лекарств: 5 шагов
Видео: Дозаторы для в/в введения препаратов 2024, Июль
Anonim
Автоматический дозатор лекарств
Автоматический дозатор лекарств

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

Запасы:

Необходимые материалы для строительства этого проекта:

  • Arduino UNO
  • Модуль драйвера двигателя
  • Сервопривод SG90 9G
  • Шаговый двигатель
  • Модуль DS1302 RTC
  • Различные перемычки
  • IIC 1602 ЖК-дисплей
  • Доступ к 3D-принтеру
  • Ножки типа деревянных дюбелей
  • RFID-модуль и бирка
  • Две кнопки
  • Паяльник
  • Макетная плата
  • супер клей
  • Шурупы по дереву
  • Необработанная деревянная коробка с откидной крышкой
  • Двухсторонний скотч

Шаг 1: изменение поля

Модификация коробки
Модификация коробки
Модификация коробки
Модификация коробки
Модификация коробки
Модификация коробки
Модификация коробки
Модификация коробки

Коробку сначала нужно будет изменить. Необходимо просверлить несколько отверстий. Первое отверстие будет на передней части коробки, где напечатана коробка панели управления. Второе отверстие находится в задней части коробки, для кабеля USB. Последнее отверстие находится на дне коробки, через которое лекарство будет проваливаться после выдачи. В последнюю очередь к низу необходимо прикрепить ножки. Я использовал резиновые ножки, которые я нашел вокруг своего дома, вместо ножек, но можно использовать и деревянные дюбели.

Шаг 2: детали, напечатанные на 3D-принтере

3D-печатные детали
3D-печатные детали
Детали, напечатанные на 3D-принтере
Детали, напечатанные на 3D-принтере
Детали, напечатанные на 3D-принтере
Детали, напечатанные на 3D-принтере

Для этого проекта необходимо много деталей, напечатанных на 3D-принтере.

Они есть:

  • Карусель с лекарствами
  • База для карусели
  • Воронка для лекарства
  • Рычаг серводвигателя для фиксации крышки
  • База для серводвигателя
  • Защелка сервопривода
  • Панель управления
  • Чашка для лекарства, в которое будет выдаваться

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

Шаг 3: Электроника

Электроника
Электроника

Теперь электронику нужно поместить в коробку. Сначала шаговый двигатель крепится к основанию карусели болтами и гайками М3. Сервопривод затем приклеивается к его основанию. Затем контроллер двигателя, Arduino, макетная плата, модуль RFID и модуль RTC прикрепляются к коробке с помощью двусторонней ленты. ЖК-дисплей вставляется в отверстие в блоке управления. Требуется некоторая пайка. Для кнопок перемычки должны быть припаяны к контактным разъемам. Для считывателя RFID контакты должны быть припаяны к плате.

Шаг 4: Код

Ниже приведен закомментированный код:

В этот код включены библиотеки для сервопривода, ЖК-дисплея, RTC, RFID и шагового двигателя.

///////////////// Библиотеки и переменные

#include #include // Стандартная библиотека Arduino #include #include virtuabotixRTC myRTC (2, 3, 4); // Определение выводов #define servopin 8 const int buttonup = 6; const int buttondown = 7; int hr = 0; int minn = 0; int sel = 0; int stateup = 0; int указаноown = 0; int statesel = 0; интервал ожидания = 0; int locker = 0; // Настроить серво Серво серво; int angle = 180; #include // использовать модифицированную библиотеку шаговых двигателей с последовательностью срабатывания магнита 1000/0100/0010/0001. Поместите библиотеку в папку вашей библиотеки. #define gearratio 64 // Передаточное число 1:64 const int stepsPerRevolution = 2048; // мотор комплекта Arduino понижен. Опытным путем я определил, что 2048 шагов поворачивают вал на один оборот. int steps = 0; LiquidCrystal_I2C lcd (0x27, 16, 2); // создать экземпляр 4-проводного шагового двигателя на контактах с 8 по 11: Stepper myStepper (stepsPerRevolution, A0, A1, A2, A3); #include #include #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522 (SS_PIN, RST_PIN); // Создаем экземпляр MFRC522. int deg = 10; пустая настройка () {lcd.init (); // инициализируем ЖК-дисплей lcd.backlight (); // Строка ниже используется для установки текущего времени. Это нужно сделать только один раз, а затем код // нужно снова загрузить с комментариями. //myRTC.setDS1302Time(40, 55, 11, 1, 7, 12, 2020); pinMode (кнопка вверх, INPUT_PULLUP); pinMode (кнопка вниз, INPUT_PULLUP); Serial.begin (9600); // Инициируем последовательную связь SPI.begin (); // Запускаем шину SPI mfrc522. PCD_Init (); // Запускаем MFRC522 myStepper.setSpeed (0.15 * gearratio); // двигатель, похоже, понижен на 1/64, что означает, что скорость нужно установить 64x. // инициализируем последовательный порт: servo.attach (servopin); } void loop () {///////////////// Код ЖК-дисплея // Постоянно обновляет дисплей, показывая текущее время и время подачи. lcd.clear (); myRTC.updateTime (); lcd.setCursor (0, 0); lcd.print ("Время:"); lcd.setCursor (6, 0); lcd.print (myRTC.hours); lcd.print (":"); lcd.print (myRTC.minutes); lcd.setCursor (0, 1); lcd.print ("Выдача:"); lcd.setCursor (10, 1); lcd.print (час); lcd.print (":"); lcd.print (минн); ///////////////// Чтение состояний кнопок // Считывает состояния кнопок для изменения времени выдачи. stateup = digitalRead (кнопка вверх); указаноown = digitalRead (кнопка вниз); задержка (100); ///////////////// Логика дозирования // Если текущее время совпадает с выбранным временем дозирования, поверните шаговый двигатель. // Каждые 9 раз, когда устройство производит дозирование, двигатель поворачивается на дополнительное расстояние, чтобы обеспечить полный оборот. если (myRTC.hours == час && myRTC.minutes == minn && шаги <9) {myStepper.step (227); шаги = шаги +1; задержка (60100); myRTC.updateTime (); } else if (myRTC.hours == hr && myRTC.minutes == minn && steps == 9) {myStepper.step (232); шаги = 0; задержка (60100); myRTC.updateTime (); ///////////////// Изменение времени дозирования // Изменение времени дозирования в зависимости от того, какая кнопка нажата. // Время возвращается к нулю, когда часы достигают 24, а минут - 60.} if (stateup == LOW && hr <23) {hr = hr + 1; задержка (50); } else if (stateup == LOW && hr == 23) {hr = 0; задержка (50); } if (указаноown == LOW && minn <59) {minn = minn + 1; задержка (50); } else if (указаноown == LOW && minn == 59) {minn = 0; задержка (50); } ///////////////// Код RFID // Считывает тег RFID, когда он представлен. если (! mfrc522. PICC_IsNewCardPresent ()) {возврат; } // Выбираем одну из карточек if (! Mfrc522. PICC_ReadCardSerial ()) {return; } String content = ""; байтовое письмо; for (byte i = 0; i <mfrc522.uid.size; i ++) {//Serial.println(mfrc522.uid.uidByte <0x10? "0": ""); //Serial.println(mfrc522.uid.uidByte, HEX); content.concat (String (mfrc522.uid.uidByte <0x10? "0": "")); content.concat (String (mfrc522.uid.uidByte , HEX)); шкафчик = 1; } content.toUpperCase (); ///////////////// КОД БЛОКИРОВКИ // Когда считана правильная метка RFID, переместите сервопривод в открытое положение, // когда он закрыт, // и переместите сервопривод в закрытое положение, когда он открытым. while (locker == 1) {if (content.substring (1) == "3B 21 D6 22") {// измените здесь UID карты / карт, которым вы хотите предоставить доступ {switch (deg) {case 180: серво. Запись (град.); град = 10; шкафчик = 0; Serial.print («движущийся»); задержка (1000); перерыв; case 10: servo.write (градус); град = 180; шкафчик = 0; задержка (1000); перерыв; }}} else {Serial.println («Доступ запрещен»); задержка (1000); }}}

Шаг 5: Окончательная настройка

Последний шаг - подготовить проект к использованию. Сначала загрузите код со строкой установки времени без комментариев, чтобы загрузить текущее время в RTC. Затем закомментируйте код и повторно загрузите код. Это гарантирует, что даже если устройство отключено от сети, оно все равно будет показывать правильное время. Теперь все, что вам нужно сделать, это поместить лекарство в прорези, поставить чашку под отверстие для выдачи и установить время выдачи. Устройство будет надежно выдавать в одно и то же время каждый день.

Рекомендуемые: