Obsah:

Automatický dávkovač liekov: 5 krokov
Automatický dávkovač liekov: 5 krokov

Video: Automatický dávkovač liekov: 5 krokov

Video: Automatický dávkovač liekov: 5 krokov
Video: Полный курс Redux Toolkit + RTK Query для начинающих | Редакс за 2 часа! 2024, November
Anonim
Automatický dávkovač liekov
Automatický dávkovač liekov

Tento projekt je určený na použitie v lekárskej oblasti, kde starší pacienti musia mať spoľahlivý spôsob, ako rozdeľovať a vydávať lieky. Toto zariadenie umožňuje dávkovanie liekov až 9 dní vopred a automatické dávkovanie v požadovaný čas. Veko je tiež uzamykateľné štítkom RFID, čím sa zaisťuje, že k liekom má prístup iba opatrovateľ.

Zásoby:

Na stavbu tohto projektu sú potrebné materiály:

  • Arduino UNO
  • Modul ovládača motora
  • Servo SG90 9G
  • Krokový motor
  • Modul RTC DS1302
  • Rôzne prepojovacie vodiče
  • IIC 1602 LCD
  • Prístup k 3D tlačiarni
  • Nohy, ako sú drevené hmoždinky
  • RFID modul a štítok
  • Dve tlačidlá
  • Spájkovačka
  • Breadboard
  • super lepidlo
  • Skrutky do dreva
  • Nedokončený drevený box so sklopným vekom
  • Obojstranná lepiaca páska

Krok 1: Úprava rámčeka

Úprava schránky
Úprava schránky
Úprava schránky
Úprava schránky
Úprava schránky
Úprava schránky
Úprava schránky
Úprava schránky

Krabica bude musieť byť najskôr upravená. Existuje niekoľko otvorov, ktoré je potrebné vyvŕtať. Prvý otvor bude na prednej strane škatule, kde je vytlačený box ovládacieho panela. Druhý otvor je v zadnej časti škatule, cez ktorý prechádza kábel USB. Posledný otvor je na spodnej časti škatule, kam lieky po vydaní prepadnú. Nakoniec musia byť nohy pripevnené k spodnej časti. Na nohy som použil gumené nožičky, ktoré som našiel okolo svojho domu, ale dajú sa použiť aj drevené hmoždinky.

Krok 2: 3D tlačené diely

3D tlačené diely
3D tlačené diely
3D tlačené diely
3D tlačené diely
3D tlačené diely
3D tlačené diely

Pre tento projekt je potrebných veľa 3D tlačených dielov.

Oni sú:

  • Kolotoč, ktorý drží lieky
  • Základňa pre kolotoč
  • Lievik na lieky
  • Rameno pre servomotor na zablokovanie veka
  • Základňa pre servomotor
  • Západka pre rameno serva
  • Ovládací panel
  • Pohár na výdaj liekov

Základňa kolotoča je k krabici prilepená obojstrannou páskou. Základňa servomotora a západka ramena sú do skrinky zaskrutkované krátkymi skrutkami do dreva. Krabica ovládacieho panela je po vložení komponentov prilepená k prednej časti škatule super lepidlom.

Krok 3: Elektronika

Elektronika
Elektronika

Elektroniku je teraz potrebné vložiť do škatule. Krokový motor je najskôr pripevnený k základni karuselu skrutkami a maticami M3. Servo je potom super prilepené k svojej základni. Potom je k krabici pomocou obojstrannej pásky pripevnený ovládač motora, Arduino, breadboard, modul RFID a modul RTC. LCD je vložený do otvoru v ovládacej skrinke. Vyžaduje sa určité spájkovanie. V prípade tlačidiel musia byť prepojovacie káble spájkované s konektormi rýľa. V prípade čítačky RFID musia byť kolíky spájkované s doskou.

Krok 4: Kód

Nasleduje komentovaný kód:

Tento kód obsahuje knižnice pre servo, LCD, RTC, RFID a krokový motor.

/////////////////// Knižnice a premenné

#include #include // Štandardná knižnica Arduino #include #include virtuabotixRTC myRTC (2, 3, 4); // Definovanie pinov #define servopin 8 const int buttonup = 6; konštantné tlačidlo nadol = 7; int hr = 0; int minn = 0; int sel = 0; int stateup = 0; int uvedené mesto = 0; int stavy = 0; int čakať = 0; int skrinka = 0; // Nastavenie servo Servo servo; vnútorný uhol = 180; #include // použiť upravenú knižnicu stepperov so sekvenciou odpaľovania magnetov 1000/0100/0010/0001. Vložte knižnicu do priečinka knižnice. #define gearratio 64 // 1: 64 gear gear const int stepsPerRevolution = 2048; // Motor súpravy Arduino je zaradený nadol. Experimentom som zistil, že 2048 krokov otočí hriadeľ o jedno kolo. int kroky = 0; LiquidCrystal_I2C lcd (0x27, 16, 2); // inštancia 4-vodičového steppera na piny 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); // Vytvorenie inštancie MFRC522. int deg = 10; void setup () {lcd.init (); // inicializácia lcd lcd.backlight (); // Nasledujúci riadok slúži na nastavenie aktuálneho času. Musí sa to vykonať iba raz a potom sa musí kód // nahrať znova s komentárom. //myRTC.setDS1302Time(40, 55, 11, 1, 7, 12, 2020); pinMode (buttonup, INPUT_PULLUP); pinMode (tlačidlo nadol, INPUT_PULLUP); Serial.begin (9600); // Spustenie sériovej komunikácie SPI.begin (); // Spustenie zbernice SPI mfrc522. PCD_Init (); // Spustenie MFRC522 myStepper.setSpeed (0,15*prevodový stupeň); // Motor sa zdá byť zaradený o 1/64, čo znamená, že rýchlosť je potrebné nastaviť 64 -krát. // inicializácia sériového portu: servo.attach (servopin); } prázdna slučka () {///////////////////// LCD kód // Neustále aktualizuje displej s aktuálnym časom a časom výdaja. 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 (ťažba); /////////////////// Stavy tlačidiel na čítanie // Načíta stavy tlačidiel na zmenu času výdaja. stateup = digitalRead (zapnutie); saidown = digitalRead (tlačidlo nadol); oneskorenie (100); /////////////////// Logika výdaja // Ak je aktuálny čas rovnaký ako zvolený čas výdaja, otočte krokový motor. // Každých 9 -krát, čo zariadenie vydá, sa motor otočí o ďalšiu vzdialenosť, aby sa zaistilo úplné otočenie. if (myRTC.hours == hr && myRTC.minutes == minn && steps <9) {myStepper.step (227); kroky = kroky +1; oneskorenie (60100); myRTC.updateTime (); } else if (myRTC.hours == hr && myRTC.minutes == minn && steps == 9) {myStepper.step (232); kroky = 0; oneskorenie (60100); myRTC.updateTime (); /////////////////// Zmena času výdaja // Zmeňte čas výdaja podľa toho, aké tlačidlo stlačíte. // Čas sa vráti na nulu, keď sa hodiny dostanú na 24 a minúty na 60.} if (stateup == LOW && hr <23) {hr = hr+1; oneskorenie (50); } else if (stateup == LOW && hr == 23) {hr = 0; oneskorenie (50); } if (saidown == LOW && minn <59) {minn = minn+1; oneskorenie (50); } else if (saidown == LOW && minn == 59) {minn = 0; oneskorenie (50); } ////////////////// RFID kód // Číta značku RFID, keď je predložená. if (! mfrc522. PICC_IsNewCardPresent ()) {return; } // Vyberte jednu z kariet, ak (! Mfrc522. PICC_ReadCardSerial ()) {return; } Reťazcový obsah = ""; 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)); skrinka = 1; } content.toUpperCase (); /////////////////// LOCK CODE // Keď je načítaný správny štítok RFID, posuňte servo do otvorenej polohy, keď je zatvorené, // a presuňte servo do zatvorenej polohy, keď je otvorené. while (locker == 1) {if (content.substring (1) == "3B 21 D6 22") {// tu zmeňte UID karty/kariet, ku ktorým chcete udeliť prístup {switch (deg) {case 180: servo.write (deg); deg = 10; skrinka = 0; Serial.print ("v pohybe"); oneskorenie (1000); prestávka; prípad 10: servo.write (deg); deg = 180; skrinka = 0; oneskorenie (1000); prestávka; }}} else {Serial.println ("Prístup odmietnutý"); oneskorenie (1000); }}}

Krok 5: Konečné nastavenie

Posledným krokom je príprava projektu na použitie. Najprv nahrajte kód s nekomentovaným riadkom nastavenia času, aby ste nahrali aktuálny čas do RTC. Potom kód komentujte a znova načítajte kód. Zaistíte tak, že aj keď zariadenie odpojíte, zachová si správny čas. Teraz stačí vložiť lieky do štrbín, umiestniť pohár pod výdajný otvor a nastaviť čas výdaja. Zariadenie bude spoľahlivo dávkovať každý deň v rovnakom čase.

Odporúča: