Spisu treści:

Automatyczny dozownik leków: 5 kroków
Automatyczny dozownik leków: 5 kroków

Wideo: Automatyczny dozownik leków: 5 kroków

Wideo: Automatyczny dozownik leków: 5 kroków
Wideo: Pojemniki i dozowniki na leki dla seniorów 2024, Lipiec
Anonim
Automatyczny dozownik leków
Automatyczny dozownik leków

Ten projekt ma zastosowanie w medycynie, gdzie starsi pacjenci muszą mieć niezawodny sposób na porcjowanie i wydawanie leków. To urządzenie pozwala na porcjowanie leków z 9-dniowym wyprzedzeniem i automatyczne wydawanie w żądanym czasie. Pokrywę można również zablokować za pomocą znacznika RFID, dzięki czemu tylko opiekun ma dostęp do leku.

Kieszonkowe dzieci:

Do wykonania tego projektu potrzebne są materiały:

  • Arduino UNO
  • Moduł sterownika silnika
  • Serwo SG90 9G
  • Silnik krokowy
  • Moduł RTC DS1302
  • Różne przewody połączeniowe
  • IIC 1602 LCD
  • Dostęp do drukarki 3D
  • Nogi takie jak drewniane kołki
  • Moduł i tag RFID
  • Dwa przyciski
  • Lutownica
  • Deska do krojenia chleba
  • Super klej
  • Wkręty do drewna
  • Niedokończone drewniane pudełko z pokrywką na zawiasach
  • Taśma dwustronna

Krok 1: Modyfikacja pudełka

Modyfikowanie pudełka
Modyfikowanie pudełka
Modyfikowanie pudełka
Modyfikowanie pudełka
Modyfikowanie pudełka
Modyfikowanie pudełka
Modyfikowanie pudełka
Modyfikowanie pudełka

Najpierw trzeba będzie zmodyfikować pudełko. Należy wywiercić wiele otworów. Pierwszy otwór będzie z przodu pudełka, gdzie nadrukowany jest panel sterowania. Drugi otwór znajduje się z tyłu pudełka, przez który przechodzi kabel USB. Ostatni otwór znajduje się na dnie pudełka, przez które wpadnie lek po wydaniu. Wreszcie nogi muszą być przymocowane do dna. Do nóg użyłem gumowych nóżek, które znalazłem w domu, ale można też użyć drewnianych kołków.

Krok 2: Części drukowane w 3D

Części drukowane 3D
Części drukowane 3D
Części drukowane w 3D
Części drukowane w 3D
Części drukowane w 3D
Części drukowane w 3D

Do tego projektu potrzebnych jest wiele części drukowanych w 3D.

Oni są:

  • Karuzela z lekami
  • Podstawa do karuzeli
  • Lejek na leki
  • Ramię do serwomotoru do zablokowania pokrywy
  • Podstawa do silnika serwo
  • Zatrzask do ramienia serwa
  • Panel sterowania
  • Kubek na lek, który ma być dozowany

Podstawa karuzeli jest przyklejona do pudełka taśmą dwustronną. Podstawa silnika serwo i zatrzask ramienia są przykręcone do skrzynki za pomocą krótkich wkrętów do drewna. Puszka panelu sterowania jest przyklejana z przodu pudełka za pomocą super kleju, po włożeniu elementów.

Krok 3: Elektronika

Elektronika
Elektronika

Elektronika musi teraz zostać umieszczona w pudełku. Najpierw silnik krokowy mocowany jest do podstawy karuzeli za pomocą śrub i nakrętek M3. Serwo jest następnie super przyklejane do jego podstawy. Następnie sterownik silnika, Arduino, płytkę stykową, moduł RFID i moduł RTC są przymocowane do pudełka taśmą dwustronną. Wyświetlacz LCD jest włożony w otwór w skrzynce sterowniczej. Wymagane jest trochę lutowania. W przypadku przycisków kable połączeniowe muszą być przylutowane do złączy widełkowych. W przypadku czytnika RFID piny muszą być przylutowane do płytki.

Krok 4: Kod

Poniżej komentowany kod:

Biblioteki dla serwo, LCD, RTC, RFID i silnika krokowego są zawarte w tym kodzie.

///////////////// Biblioteki i zmienne

#include #include //Standardowa biblioteka Arduino #include #include virtuabotixRTC myRTC(2, 3, 4); // Zdefiniuj piny #define servopin 8 const int buttonup = 6; const int buttondown = 7; int godz=0; int min=0; int wyb=0; int stan=0; int statedown=0; int stansel=0; int czekaj = 0; wew szafka = 0; // Ustaw serwo Serwo serwo; kąt wewnętrzny = 180; #include //użyj zmodyfikowanej biblioteki krokowej z sekwencją zapłonu magnesu 1000/0100/0010/0001. Umieść bibliotekę w folderze biblioteki. #define gearratio 64 //1:64 przełożenie const int stepsPerRevolution = 2048; //silnik Arduino Kit jest na niższym biegu. Eksperymentalnie ustaliłem, że 2048 kroków obraca wał o jeden obrót. int kroki = 0; LiquidCrystal_I2C lcd (0x27, 16, 2); // utwórz instancję 4-przewodowego steppera na pinach od 8 do 11: Stepper myStepper(stepsPerRevolution, A0, A1, A2, A3); #include #include #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); // Utwórz instancję MFRC522. int stopnie = 10; void setup() { lcd.init(); // zainicjuj lcd lcd.backlight(); // Wiersz poniżej służy do ustawienia aktualnego czasu. Wystarczy to zrobić tylko raz, a następnie kod // musi zostać ponownie przesłany z komentarzem. //myRTC.setDS1302Time(40, 55, 11, 1, 7, 12, 2020); pinMode(buttonup, INPUT_PULLUP); pinMode(przycisk, INPUT_PULLUP); Serial.początek(9600); // Zainicjuj komunikację szeregową SPI.begin(); // Zainicjuj magistralę SPI mfrc522. PCD_Init(); // Zainicjuj MFRC522 myStepper.setSpeed(0.15*gearratio);//silnik wydaje się być obniżony o 1/64, co oznacza, że należy ustawić prędkość 64x. // zainicjuj port szeregowy: servo.attach(servopin); } void loop(){ ///////////////// LCD Code // Ciągle aktualizuje wyświetlacz o aktualny czas i czas dozowania. lcd.clear(); mójRTC.czas aktualizacji(); lcd.setCursor(0, 0); lcd.print("Czas:"); lcd.setCursor(6, 0); lcd.print(myRTC.godziny); lcd.print(":"); lcd.print(myRTC.minuty); lcd.setCursor(0, 1); lcd.print("Wydawanie:"); lcd.setCursor(10, 1); lcd.print(hr); lcd.print(":"); lcd.print(minn); ///////////////// Odczytaj stany przycisków // Odczytuje stany przycisków w celu zmiany czasu dozowania. stateup = digitalRead(buttonup); statedown = digitalRead(buttondown); opóźnienie (100); ///////////////// Logika dozowania // Jeśli aktualny czas jest taki sam jak wybrany czas dozowania, włącz silnik krokowy. // Co 9 razy urządzenie dozuje, silnik obraca się o dodatkową odległość, aby zapewnić pełny obrót. if (myRTC.hours == hr && myRTC.minutes == minn && steps <9){ myStepper.step(227); kroki = kroki +1; opóźnienie (60100); mójRTC.czas aktualizacji(); } else if (myRTC.hours == hr && myRTC.minutes == minn && steps ==9){ myStepper.step(232); kroki = 0; opóźnienie (60100); mójRTC.czas aktualizacji(); ///////////////// Zmiana czasu dozowania // Zmiana czasu dozowania w zależności od tego, który przycisk został naciśnięty. // Czas wraca do zera, gdy godziny zbliżają się do 24, a minuty do 60. } if (stateup == LOW && hr<23){ hr=hr+1; opóźnienie(50); } else if (stateup == LOW && hr ==23){ hr=0; opóźnienie(50); } if (statedown == NISKI && minn <59){ minn=minn+1; opóźnienie(50); } else if (statedown == LOW && minn ==59){ minn=0; opóźnienie(50); } ///////////////// Kod RFID // Odczytuje tag RFID po jego prezentacji. if (! mfrc522. PICC_IsNewCardPresent()) { return; } // Wybierz jedną z kart if (! mfrc522. PICC_ReadCardSerial()) { return; } Treść ciągu = ""; litera bajtu; 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)); szafka = 1; } content.toUpperCase(); ///////////////// KOD BLOKUJĄCY // Po odczytaniu prawidłowego tagu RFID przesuń serwomechanizm do pozycji otwartej, gdy jest zamknięty, // i przesuń serwomechanizm do pozycji zamkniętej, gdy jest otwarty. while (locker == 1){ if (content.substring(1) == "3B 21 D6 22"){ //zmień tutaj UID karty/kart, którym chcesz przyznać dostęp { switch (deg){ case 180: serwo.zapis(stopnie); stopnie = 10; szafka = 0; Serial.print("przenoszenie"); opóźnienie (1000); przerwa; przypadek 10: servo.write(deg); stopnie = 180; szafka=0; opóźnienie (1000); przerwa; } } } else { Serial.println("Odmowa dostępu"); opóźnienie (1000); } } }

Krok 5: Ostateczna konfiguracja

Ostatnim krokiem jest przygotowanie projektu do użytku. Najpierw wgraj kod z odkomentowaną linią ustawiania czasu, aby wgrać aktualny czas do RTC. Następnie zakomentuj kod i prześlij go ponownie. Zapewni to, że jeśli urządzenie zostanie odłączone, nadal zachowa prawidłowy czas. Teraz wystarczy umieścić lek w szczelinach, umieścić kubek pod otworem dozującym i ustawić czas dozowania. Urządzenie będzie niezawodnie dozować codziennie o tej samej porze.

Zalecana: