Բովանդակություն:

Ավտոմատ դեղորայքի դիսպենսեր `5 քայլ
Ավտոմատ դեղորայքի դիսպենսեր `5 քայլ

Video: Ավտոմատ դեղորայքի դիսպենսեր `5 քայլ

Video: Ավտոմատ դեղորայքի դիսպենսեր `5 քայլ
Video: Как проверить генератор. За 3 минуты, БЕЗ ПРИБОРОВ и умений. 2024, Հուլիսի
Anonim
Ավտոմատ դեղորայքի դիսպենսեր
Ավտոմատ դեղորայքի դիսպենսեր

Այս նախագիծը նախատեսված է բժշկական ոլորտում օգտագործելու համար, որտեղ տարեց հիվանդները պետք է ունենան հուսալի միջոց ՝ դեղորայքը բաժանել և տրամադրել: Այս սարքը թույլ է տալիս դեղորայքը բաժանել մինչև 9 օր առաջ և ինքնաբերաբար տրամադրել ցանկալի պահին: Կափարիչը կողպվում է նաև RFID պիտակով ՝ համոզվելով, որ միայն խնամողը կարող է մուտք գործել դեղորայք:

Պարագաներ:

Այս նախագծի կառուցման համար անհրաժեշտ նյութեր կան.

  • Arduino UNO
  • Շարժիչային վարորդի մոդուլ
  • SG90 9G Servo
  • Stepper Motor
  • DS1302 RTC մոդուլ
  • Տարբեր ցատկող լարեր
  • IIC 1602 LCD
  • 3D տպիչի հասանելիություն
  • Ոտքեր, ինչպիսիք են փայտե dowels
  • RFID մոդուլ և պիտակ
  • Երկու սեղմիչ
  • Sոդման երկաթ
  • Breadboard
  • Սուպեր սոսինձ
  • Փայտե պտուտակներ
  • Անավարտ փայտե տուփ կախովի կափարիչով
  • Երկկողմանի ժապավեն

Քայլ 1. Տուփի փոփոխում

Տուփի փոփոխում
Տուփի փոփոխում
Տուփի փոփոխում
Տուփի փոփոխում
Տուփի փոփոխում
Տուփի փոփոխում
Տուփի փոփոխում
Տուփի փոփոխում

Տուփը նախ պետք է փոփոխվի: Կան բազմաթիվ անցքեր, որոնք պետք է փորել: Առաջին փոսը կլինի տուփի առջևում, որտեղ տպված է կառավարման վահանակի տուփը: Երկրորդ անցքը տուփի հետևի մասում է ՝ USB մալուխի միջով անցնելու համար: Վերջին փոսը տուփի ներքևում է, որտեղ դեղորայքը թափվելուց հետո կընկնի: Ի վերջո, ոտքերը պետք է ամրացվեն ներքևի մասում: Ես օգտագործել եմ ռետինե ոտքեր, որոնք գտել եմ իմ տան շուրջը ոտքերի համար, բայց կարող են օգտագործվել նաև փայտե սալիկներ:

Քայլ 2: 3D տպագիր մասեր

3D տպագիր մասեր
3D տպագիր մասեր
3D տպագիր մասեր
3D տպագիր մասեր
3D տպագիր մասեր
3D տպագիր մասեր

Այս նախագծի համար անհրաժեշտ են 3D տպագիր բազմաթիվ մասեր:

Նրանք են:

  • Կարուսել, որը պարունակում է դեղորայք
  • Կարուսելի հիմք
  • Ձագար դեղորայքի համար
  • Կափարիչը փակելու համար միացրեք սերվո շարժիչի թևը
  • Սերվո շարժիչի հիմք
  • Կախիչ servo arm- ի համար
  • Կառավարման վահանակ
  • Բաժակ, որը պետք է բաժանվի դեղորայքի համար

Կարուսելի հիմքը ամրացված է երկկողմանի ժապավենով տուփին: Սեռվո շարժիչի հիմքը և թևի սողնակը երկուսն էլ պտուտակված են տուփի մեջ `կարճ փայտե պտուտակներով: Կառավարման վահանակի տուփը սոսինձով սոսնձված է տուփի առջևի մասերի վրա, բաղադրիչների տեղադրումից հետո:

Քայլ 3: Էլեկտրոնիկա

Էլեկտրոնիկա
Էլեկտրոնիկա

Էլեկտրոնիկան այժմ պետք է տեղադրվի տուփի մեջ: Նախ, սուզվող շարժիչը կցվում է կարուսելի հիմքին ՝ M3 պտուտակներով և ընկույզներով: Այնուհետև servo- ն սուպեր սոսնձված է իր հիմքի վրա: Այնուհետև շարժիչի վերահսկիչը, Arduino- ն, տախտակը, RFID մոդուլը և RTC մոդուլը բոլորը ամրացված են տուփին երկկողմանի ժապավենով: LCD- ն տեղադրված է կառավարման վանդակի անցքի մեջ: Կա որոշակի զոդում, որը պահանջվում է: Սեղմող կոճակների համար ցատկող մալուխները պետք է սոսնձված լինեն բահի միակցիչներին: RFID ընթերցողի համար կապումներն անհրաժեշտ է զոդել տախտակին:

Քայլ 4: Կոդ

Ստորև բերված է մեկնաբանված ծածկագիրը.

Այս ծածկագրում ներառված են Servo, LCD, RTC, RFID և Stepper շարժիչների գրադարանները:

////////////////// Գրադարաններ և փոփոխականներ

#ներառել #ներառել // Arduino ստանդարտ գրադարան #ներառել #ներառել virtuabotixRTC myRTC (2, 3, 4); // Սահմանել կապում #սահմանել servopin 8 const int կոճակ = 6; const int buttondown = 7; int hr = 0; int minn = 0; int sel = 0; int պետականացում = 0; int հայտարարված = 0; int պետություն = 0; int սպասել = 0; int պահարան = 0; // կարգավորել servo Servo servo; int անկյուն = 180; #Ներառեք // օգտագործեք փոփոխված տափաստանային գրադարան ՝ 1000/0100/0010/0001 մագնիսների կրակման հաջորդականությամբ: Տեղադրեք գրադարանը ձեր գրադարանի թղթապանակում: #սահմանել հանդերձում 64 // 1: 64 փոխանցման հարաբերակցություն const int stepsPerRevolution = 2048; // Arduino Kit շարժիչը շարժվում է ներքև: Փորձով որոշեցի, որ 2048 քայլը լիսեռը մեկ պտույտ է կատարում: int քայլեր = 0; LiquidCrystal_I2C LCD (0x27, 16, 2); // առաջացնել 4-մետաղյա սանդղակ 8-ից 11-ի կապում. #ներառել #ներառել #սահմանել SS_PIN 10 #սահմանել RST_PIN 9 MFRC522 mfrc522 (SS_PIN, RST_PIN); // Ստեղծեք MFRC522 օրինակ: int deg = 10; void setup () {lcd.init (); // նախաստորագրել lcd lcd.backlight (); // Ստորև բերված տողը օգտագործվում է ընթացիկ ժամանակը սահմանելու համար: Դա պետք է արվի միայն մեկ անգամ, որից հետո // կոդը պետք է նորից վերբեռնվի ՝ դրանով մեկնաբանելով: //myRTC.setDS1302 (ամանակ (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*հանդերձում); // շարժիչը, ըստ երևույթին, շարժվել է 1/64 ներքև, ինչը նշանակում է, որ արագությունը պետք է սահմանվի 64x: // սկզբնականացնել սերիալային պորտը ՝ servo.attach (servopin); } void loop () {//////////////// LCD կոդ // Անընդհատ թարմացնում է էկրանը ընթացիկ ժամանակի և տարածման ժամանակի հետ: lcd. հստակ (); myRTC.updateTime (); lcd.setCursor (0, 0); lcd.print («Timeամանակը»); lcd.setCursor (6, 0); lcd.print (myRTC.hours); lcd.print (":"); lcd.print (myRTC. րոպե); lcd.setCursor (0, 1); lcd.print ("Տրամադրել"); lcd.setCursor (10, 1); lcd.print (hr); lcd.print (":"); lcd.print (minn); ////////////////// Կարդալու կոճակի վիճակ // Կարդում է կոճակների վիճակները `փոխելու ժամանակը: պետականացում = digitalRead (կոճակ); statementown = digitalRead (հետույք); ուշացում (100); ////////////////// Տրամաբանության տրամադրում // Եթե ընթացիկ ժամանակը նույնն է, ինչ ընտրված բաշխման ժամանակը, շրջեք հետընթաց շարժիչը: // Յուրաքանչյուր 9 անգամ, երբ սարքը տարածվում է, շարժիչը շրջում է լրացուցիչ տարածություն `լիարժեք պտույտ ապահովելու համար: եթե (myRTC.hours == hr && myRTC.minutes == min && քայլեր <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 (); ////////////////// Փոփոխելով բաշխման ժամանակը // Փոխեք տրամադրման ժամանակը ՝ հիմնվելով, թե որ կոճակը սեղմված է: // Timeամանակը վերադառնում է զրոյի, երբ ժամերը հասնում են 24 -ի, իսկ րոպեները `60.} եթե (պետականացում == OWԱOWՐ && hr <23) {hr = hr+1; ուշացում (50); } else if (stateup == LOW && hr == 23) {hr = 0; ուշացում (50); } if (statementown == LOW && minn <59) {minn = minn+1; ուշացում (50); } else if (հայտարարված է == OWԱOWՐ && minn == 59) {րոպե = 0; ուշացում (50); } ///////////////// RFID ծածկագիր // Կարդում է RFID պիտակը, երբ այն ներկայացվում է: եթե (! mfrc522. PICC_IsNewCardPresent ()) {վերադարձ; } // Ընտրեք քարտերից մեկը, եթե (! Mfrc522. PICC_ReadCardSerial ()) {return; } Լարային բովանդակություն = ""; բայտ նամակ; համար (բայթ i = 0; i <mfrc522.uid.size; i ++) {//Serial.println(mfrc522.uid.uidByte unitedii] <0x10? "0": ""); //Serial.println(mfrc522.uid.uidByte , HEX); content.concat (լարային (mfrc522.uid.uidByte <0x10? "0": "")); content.concat (լարային (mfrc522.uid.uidByte , HEX)); պահարան = 1; } content.toUpperCase (); ///////////////// LOCK CODE // Երբ RFID- ի ճիշտ պիտը կարդալիս, սերվոը փակ վիճակում տեղափոխեք, // և servo- ն տեղափոխեք փակ դիրքի, երբ այն կա բաց while (locker == 1) {if (content.substring (1) == "3B 21 D6 22") {// այստեղ փոխել քարտի/քարտերի UID- ը, որոնց ցանկանում եք մուտք գործել {switch (deg) {case 180: servo.write (deg); deg = 10; պահարան = 0; Serial.print («շարժվող»); ուշացում (1000); ընդմիջում; գործ 10: servo.write (deg); deg = 180; պահարան = 0; ուշացում (1000); ընդմիջում; }}} else {Serial.println («Մուտքը մերժված է»); ուշացում (1000); }}}

Քայլ 5: Վերջնական կարգավորում

Վերջին քայլն այն է, որ նախագիծը պատրաստ լինի օգտագործման համար: Սկզբում վերբեռնեք կոդը ՝ ժամանակի կարգավորման տողով ՝ առանց մեկնաբանության, ընթացիկ ժամը վերբեռնելու համար RTC: Այնուհետև մեկնաբանեք ծածկագիրը և վերբեռնեք ծածկագիրը: Սա կապահովի, որ եթե սարքն անջատված է վարդակից, այն դեռ կպահպանի ճիշտ ժամանակը: Այժմ մնում է միայն դեղամիջոցը տեղադրել անցքերի մեջ, բաժակը դնել բաշխիչ անցքի տակ և սահմանել բաշխման ժամանակը: Սարքը հուսալիորեն կտրամադրվի ամեն օր նույն ժամին:

Խորհուրդ ենք տալիս: