Obsah:

Automatický dávkovač léků: 5 kroků
Automatický dávkovač léků: 5 kroků

Video: Automatický dávkovač léků: 5 kroků

Video: Automatický dávkovač léků: 5 kroků
Video: 5 let od diagnózy zhoubného nádoru přežívá 87,5 % dětí | Jaroslav Štěrba | Moje medicína TV 2024, Červenec
Anonim
Automatický dávkovač léků
Automatický dávkovač léků

Tento projekt je určen pro použití v lékařské oblasti, kde starší pacienti musí mít spolehlivý způsob porcování a výdeje léků. Toto zařízení umožňuje dávkování léků až 9 dní předem a automatické dávkování v požadovaném čase. Víko je také uzamykatelné štítkem RFID, což zajišťuje, že k léku má přístup pouze pečovatel.

Zásoby:

Pro stavbu tohoto projektu jsou potřebné materiály:

  • Arduino UNO
  • Modul ovladače motoru
  • Servo SG90 9G
  • Krokový motor
  • Modul RTC DS1302
  • Různé propojovací vodiče
  • IIC 1602 LCD
  • Přístup k 3D tiskárně
  • Nohy, jako jsou dřevěné hmoždinky
  • RFID modul a štítek
  • Dvě tlačítka
  • Páječka
  • Prkénko
  • super lepidlo
  • Vruty do dřeva
  • Nedokončený dřevěný box se sklopným víkem
  • Oboustranná páska

Krok 1: Úprava rámečku

Úprava schránky
Úprava schránky
Úprava rámečku
Úprava rámečku
Úprava schránky
Úprava schránky
Úprava schránky
Úprava schránky

Krabici bude nejprve nutné upravit. Existuje několik otvorů, které je třeba vyvrtat. První otvor bude na přední straně krabice, kde je vytištěn box ovládacího panelu. Druhý otvor je v zadní části krabice, pro průchod kabelu USB. Poslední otvor je na dně krabice, kam lék propadne po výdeji. Nakonec musí být nohy připevněny ke dnu. Na nohy jsem použil gumové nožičky, které jsem našel kolem svého domu, ale lze použít i dřevěné hmoždinky.

Krok 2: 3D tištěné díly

3D tištěné díly
3D tištěné díly
3D tištěné díly
3D tištěné díly
3D tištěné díly
3D tištěné díly

Pro tento projekt je potřeba mnoho 3D tištěných dílů.

Oni jsou:

  • Kolotoč, který drží léky
  • Základna pro kolotoč
  • Nálevka na léky
  • Rameno pro servomotor k zajištění víka
  • Základna pro servomotor
  • Západka pro servo rameno
  • Kontrolní panel
  • Šálek pro výdej léků

Základna pro kolotoč je na krabici přilepena oboustrannou páskou. Základna pro servomotor a západka pro rameno jsou do krabice zašroubovány krátkými šrouby do dřeva. Po vložení součástí je krabice ovládacího panelu nalepena na přední stranu krabice super lepidlem.

Krok 3: Elektronika

Elektronika
Elektronika

Nyní je třeba elektroniku vložit do krabice. Nejprve je krokový motor připevněn ke karuselové základně pomocí šroubů a matic M3. Servo je pak super přilepené ke své základně. Poté je k krabici pomocí oboustranné pásky připevněn ovladač motoru, Arduino, breadboard, modul RFID a modul RTC. LCD je vložen do otvoru v ovládací skříňce. Je vyžadováno určité pájení. U tlačítek musí být propojovací kabely připájeny ke konektorům rýče. U čtečky RFID musí být kolíky připájeny k desce.

Krok 4: Kód

Níže je komentovaný kód:

Tento kód obsahuje knihovny pro servo, LCD, RTC, RFID a krokový motor.

/////////////////// Knihovny a proměnné

#include #include // standardní knihovna Arduina #include #include virtuabotixRTC myRTC (2, 3, 4); // Definování pinů #define servopin 8 const int buttonup = 6; konstantní tlačítko dolů = 7; int hr = 0; int minn = 0; int sel = 0; int stav = 0; int uvedené město = 0; int stavy = 0; int čekat = 0; int skříňka = 0; // Nastavit servo Servo servo; int úhel = 180; #include // použít upravenou knihovnu stepperů se sekvencí vypalování magnetů 1000/0100/0010/0001. Vložte knihovnu do složky knihovny. #define gearratio 64 // 1: 64 gear gear const int stepsPerRevolution = 2048; // Motor sady Arduino je zařazen dolů. Experimentem jsem zjistil, že 2048 kroků otočí hřídel o jedno kolo. int kroky = 0; LiquidCrystal_I2C lcd (0x27, 16, 2); // vytvoření instance 4vodičového stepperu na pinech 8 až 11: Stepper myStepper (stepsPerRevolution, A0, A1, A2, A3); #include #include #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522 (SS_PIN, RST_PIN); // Vytvoření instance MFRC522. int deg = 10; neplatné nastavení () {lcd.init (); // inicializace lcd lcd.backlight (); // Následující řádek slouží k nastavení aktuálního času. Musí to být provedeno pouze jednou a poté musí být kód // znovu nahrán s komentářem. //myRTC.setDS1302Time(40, 55, 11, 1, 7, 12, 2020); pinMode (buttonup, INPUT_PULLUP); pinMode (buttondown, INPUT_PULLUP); Serial.begin (9600); // Zahájení sériové komunikace SPI.begin (); // Spuštění sběrnice SPI mfrc522. PCD_Init (); // Spusťte MFRC522 myStepper.setSpeed (0,15*rychlostní stupeň); // motor se zdá být zařazen o 1/64, což znamená, že rychlost musí být nastavena 64x. // inicializace sériového portu: servo.attach (servopin); } void loop () {///////////////////// LCD Code // Neustále aktualizuje displej o aktuální čas a čas výdeje. lcd.clear (); myRTC.updateTime (); lcd.setCursor (0, 0); lcd.print ("Čas:"); lcd.setCursor (6, 0); lcd.print (myRTC.hours); lcd.print (":"); lcd.print (myRTC.minutes); lcd.setCursor (0, 1); lcd.print ("Výplata:"); lcd.setCursor (10, 1); lcd.print (hr); lcd.print (":"); lcd.print (minn); /////////////////// Číst stavy tlačítek // Přečte stavy tlačítek pro změnu doby výdeje. stateup = digitalRead (zapnutí); saidown = digitalRead (tlačítko dolů); zpoždění (100); /////////////////// Logika výdeje // Pokud je aktuální čas stejný jako zvolený čas výdeje, otočte krokový motor. // Každých 9krát, kdy zařízení vydá, se motor otočí o další vzdálenost, aby bylo zajištěno úplné otočení. if (myRTC.hours == hr && myRTC.minutes == minn && steps <9) {myStepper.step (227); kroky = kroky +1; zpoždění (60100); myRTC.updateTime (); } else if (myRTC.hours == hr && myRTC.minutes == minn && steps == 9) {myStepper.step (232); kroky = 0; zpoždění (60100); myRTC.updateTime (); /////////////////// Změna času výdeje // Změňte čas výdeje podle toho, jaké tlačítko je stisknuto. // Čas se vrátí na nulu, když se hodiny dostanou na 24 a minuty na 60.} if (stateup == LOW && hr <23) {hr = hr+1; zpoždění (50); } else if (stateup == LOW && hr == 23) {hr = 0; zpoždění (50); } if (saidown == LOW && minn <59) {minn = minn+1; zpoždění (50); } else if (saidown == LOW && minn == 59) {minn = 0; zpoždění (50); } /////////////////// RFID kód // Přečte RFID tag, když je prezentován. if (! mfrc522. PICC_IsNewCardPresent ()) {return; } // Vyberte jednu z karet if (! Mfrc522. PICC_ReadCardSerial ()) {return; } Obsah řetězce = ""; bajtové písmeno; 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)); skříňka = 1; } content.toUpperCase (); ////////////////// LOCK CODE // Když je načten správný tag RFID, přesuňte servo do otevřené polohy, když je zavřené, // a přesuňte servo do zavřené polohy, když je otevřeno. while (skříňka == 1) {if (content.substring (1) == "3B 21 D6 22") {// zde změňte UID karty/karet, ke kterým chcete udělit přístup {switch (deg) {case 180: servo.write (deg); deg = 10; skříňka = 0; Serial.print ("pohybující se"); zpoždění (1000); přestávka; případ 10: servo.write (deg); deg = 180; skříňka = 0; zpoždění (1000); přestávka; }}} else {Serial.println ("Přístup odepřen"); zpoždění (1000); }}}

Krok 5: Konečné nastavení

Posledním krokem je připravit projekt k použití. Nejprve nahrajte kód s řádkem pro nastavení času bez komentáře, abyste nahráli aktuální čas do RTC. Potom okomentujte kód a znovu načtěte kód. Tím zajistíte, že pokud bude zařízení odpojeno, stále si zachová správný čas. Nyní stačí umístit léky do otvorů, umístit šálek pod výdejní otvor a nastavit čas výdeje. Zařízení bude spolehlivě dávkovat každý den ve stejnou dobu.

Doporučuje: