Мазмуну:

Дарылоо автоматтык диспенсери: 5 кадам
Дарылоо автоматтык диспенсери: 5 кадам

Video: Дарылоо автоматтык диспенсери: 5 кадам

Video: Дарылоо автоматтык диспенсери: 5 кадам
Video: Айымдар үчүн презерватив кандай болот🤔? Видеообзор 2024, Июль
Anonim
Дарылоо автоматтык диспенсери
Дарылоо автоматтык диспенсери

Бул долбоор медициналык чөйрөдө колдонууга арналган, анда улгайган бейтаптар дары -дармектерди бөлүштүрүүнүн жана таратуунун ишенимдүү жолуна ээ болушу керек. Бул аппарат дарыны 9 күнгө чейин бөлүүгө жана каалаган убакта автоматтык түрдө чыгарууга мүмкүндүк берет. Капкак RFID теги менен да кулпуланат, бул дары -дармекке кароочу гана кире алат.

Берилиштер:

Бул долбоорду куруу үчүн керектүү материалдар бар:

  • Arduino UNO
  • Мотор айдоочу модулу
  • SG90 9G Servo
  • Stepper Motor
  • DS1302 RTC модулу
  • Ар кандай секирүүчү зымдар
  • IIC 1602 ЖК
  • 3D принтерге кирүү
  • Жыгач дубалдар сыяктуу буттар
  • RFID модулу жана тег
  • Эки баскыч
  • Кандооч
  • Breadboard
  • Супер клей
  • Жыгач бурамалары
  • Капкагы бар бүтпөгөн жыгач куту
  • Эки тараптуу скотч

1 -кадам: Кутуну өзгөртүү

Кутуну өзгөртүү
Кутуну өзгөртүү
Кутуну өзгөртүү
Кутуну өзгөртүү
Кутуну өзгөртүү
Кутуну өзгөртүү
Кутуну өзгөртүү
Кутуну өзгөртүү

Адегенде кутучаны өзгөртүү керек. Бургулоо керек болгон бир нече тешиктер бар. Биринчи тешик башкаруу панелинин кутусу басылган кутунун маңдайында болот. Экинчи тешик USB кабелинин өтүшү үчүн, кутунун арт жагында. Акыркы тешик кутунун ылдый жагында, ал жерде дары -дармектер берилгенден кийин түшөт. Акырында, буттар түбүнө тиркелиши керек. Мен буттарым үчүн үйүмдүн айланасынан тапкан резина буттарды колдондум, бирок жыгачтан жасалган сүлгү да колдонсо болот.

2 -кадам: 3D басылган бөлүктөр

3D басылган бөлүктөрү
3D басылган бөлүктөрү
3D басылган бөлүктөрү
3D басылган бөлүктөрү
3D басылган бөлүктөрү
3D басылган бөлүктөрү

Бул долбоор үчүн керектүү 3D басылган көптөгөн бөлүктөр бар.

Алар:

  • Дары -дармектерди кармаган карусель
  • Карусель үчүн база
  • Дары үчүн воронка
  • Капкакты бекитүү үчүн servo мотор үчүн кол
  • Серво мотору үчүн база
  • Серво колу үчүн бекиткич
  • Башкаруу панели
  • Дары -дармек үчүн куюлган чөйчөк

Каруселдин негизи эки тараптуу скотч менен кутуга жабыштырылган. Серво моторунун базасы менен колунун бекиткичи кыска жыгач бурамалар менен кутуга сайылган. Башкаруу панелинин кутучасы кутучанын алдына супер клей менен жабыштырылган, компоненттер киргизилгенден кийин.

3 -кадам: Электроника

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

Электрониканы эми кутуга салуу керек. Биринчиден, тепкич мотору карусель базасына М3 болт жана гайкалар менен бекитилет. Серво анда супер жабыштырылат. Андан кийин, мотор контроллери, Arduino, breadboard, RFID модулу жана RTC модулу эки тараптуу скотч менен кутуга тиркелет. ЖК башкаруу кутусунун тешигине киргизилет. Кээ бир ширетүү бар. Баскычтар үчүн, секирүүчү кабелдер күрөк туташтыргычтарына ширетилиши керек. RFID окурманы үчүн, казыктар тактага ширетилиши керек.

4 -кадам: Код

Төмөндө комментарийленген код:

Servo, LCD, RTC, RFID жана Stepper моторунун китепканалары бул кодго киргизилген.

///////////////// Китепканалар жана өзгөрмөлөр

#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 specifiedown = 0; int Statesel = 0; int wait = 0; int locker = 0; // Сервону жөнгө салуу Servo servo; int бурчу = 180; #include // 1000/0100/0010/0001 магнит атуу ырааттуулугу менен өзгөртүлгөн кадам китепканасын колдонуңуз. Китепкананы китепкана папкаңызга салыңыз. #define gearratio 64 // 1: 64 тиш катышы const int stepsPerRevolution = 2048; // Arduino Kit мотору ылдый багытталган. Эксперимент менен мен 2048 кадам валдын бир айлануусун аныктадым. int кадамдары = 0; LiquidCrystal_I2C lcd (0x27, 16, 2); // 8ден 11ге чейин казыктарга 4 зымдуу тепкичти орнотуңуз: Stepper myStepper (stepsPerRevolution, A0, A1, A2, A3); #кошуу #кошуу #аныктоо SS_PIN 10 #аныктоо RST_PIN 9 MFRC522 mfrc522 (SS_PIN, RST_PIN); // MFRC522 экземплярын түзүү. int deg = 10; void setup () {lcd.init (); // lcd 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 Code // Дисплейди учурдагы убакыт жана бөлүштүрүү убактысы менен дайыма жаңыртып турат. 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 (hr); lcd.print (":"); lcd.print (minn); ///////////////// Окуу баскычтарынын абалы // Таратуу убактысын өзгөртүү үчүн баскычтардын абалын окуйт. stateup = digitalRead (buttonup); баяндалган = digitalRead (түштөн кийин); кечиктирүү (100); ///////////////// Бөлүштүрүү логикасы // Эгерде учурдагы убакыт тандалган бөлүштүрүү убактысы менен бирдей болсо, тепкич моторун буруңуз. // Ар бир 9 жолу түзмөк таратканда, мотор толук айланууну камсыз кылуу үчүн кошумча аралыкты бурат. if (myRTC.hours == hr && myRTC.minutes == minn && steps <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); } эгер (айтылса == LOW && minn <59) {minn = minn+1; кечиктирүү (50); } else if (specifiedown == LOW && minn == 59) {minn = 0; кечиктирүү (50); } ///////////////// RFID коду // RFID тэги сунушталганда окуйт. if (! mfrc522. PICC_IsNewCardPresent ()) {return; } // Карталардын бирин тандаңыз, эгерде (! Mfrc522. PICC_ReadCardSerial ()) {return; } Стринг мазмуну = ""; байт тамга; for (байт 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)); locker = 1; } content.toUpperCase (); ///////////////// кулпу кодун // туура RFID теги окуп берип жатканда, ал болсо, ал жабык абалын жабык, // жана кадам жүрөгүндө өз учурунда ачык ордуна, көчүп жүрөгүндө өз ачык while (locker == 1) {if (content.substring (1) == "3B 21 D6 22") {// кирүү мүмкүнчүлүгүн бергиңиз келген картанын/карттардын UIDин бул жерден өзгөртүңүз {switch (deg) {case 180: servo.write (deg); deg = 10; locker = 0; Serial.print ("жылып"); кечигүү (1000); тыныгуу; 10 -жагдай: servo.write (deg); deg = 180; locker = 0; кечигүү (1000); тыныгуу; }}} else {Serial.println ("Кирүүгө тыюу салынган"); кечигүү (1000); }}}

5 -кадам: Акыркы орнотуу

Акыркы кадам - бул долбоорду колдонууга даярдоо. Адегенде кодду убакытты белгилөө сызыгы комментарийсиз жүктөлүп, учурдагы убакытты RTCге жүктөө. Андан кийин кодду комментарийлеп, кодду кайра жүктөңүз. Бул түзмөк розеткадан чыгарылса дагы, туура убакытты сактап кала тургандыгын камсыз кылат. Эми болгону дары -дармектерди оюкчаларга салып, чөйчөктү таркатуучу тешиктин астына коюп, таратуу убактысын коюңуз. Аппарат күн сайын бир эле убакта ишенимдүү түрдө таратылат.

Сунушталууда: