สารบัญ:

เครื่องจ่ายยาอัตโนมัติ: 5 ขั้นตอน
เครื่องจ่ายยาอัตโนมัติ: 5 ขั้นตอน

วีดีโอ: เครื่องจ่ายยาอัตโนมัติ: 5 ขั้นตอน

วีดีโอ: เครื่องจ่ายยาอัตโนมัติ: 5 ขั้นตอน
วีดีโอ: ระบบควบคุมเครื่องขายยาเกรียวหมุนอัตโนมัติ 5ช่องจ่าย 2024, กรกฎาคม
Anonim
เครื่องจ่ายยาอัตโนมัติ
เครื่องจ่ายยาอัตโนมัติ

โครงการนี้จัดทำขึ้นเพื่อใช้ในวงการแพทย์ ซึ่งผู้ป่วยสูงอายุต้องมีวิธีการแบ่งและจ่ายยาที่เชื่อถือได้ อุปกรณ์นี้ช่วยให้แบ่งยาได้ล่วงหน้าถึง 9 วัน และจ่ายยาอัตโนมัติในเวลาที่ต้องการ ฝาปิดยังสามารถล็อคด้วยแท็ก RFID เพื่อให้แน่ใจว่ามีเพียงผู้ดูแลเท่านั้นที่สามารถเข้าถึงยาได้

เสบียง:

มีวัสดุที่จำเป็นในการสร้างโครงการนี้:

  • Arduino UNO
  • โมดูลไดรเวอร์มอเตอร์
  • SG90 9G เซอร์โว
  • สเต็ปเปอร์มอเตอร์
  • โมดูล DS1302 RTC
  • สายจัมเปอร์ต่างๆ
  • IIC 1602 LCD
  • การเข้าถึงเครื่องพิมพ์ 3 มิติ
  • ขาเช่นเดือยไม้
  • โมดูล RFID และแท็ก
  • สองปุ่มกด
  • หัวแร้ง
  • เขียงหั่นขนม
  • ซุปเปอร์กาว
  • สกรูไม้
  • กล่องไม้ที่ยังไม่เสร็จพร้อมฝาบานพับ
  • เทปสองหน้า

ขั้นตอนที่ 1: การปรับเปลี่ยนกล่อง

การปรับเปลี่ยนกล่อง
การปรับเปลี่ยนกล่อง
การปรับเปลี่ยนกล่อง
การปรับเปลี่ยนกล่อง
การปรับเปลี่ยนกล่อง
การปรับเปลี่ยนกล่อง
การปรับเปลี่ยนกล่อง
การปรับเปลี่ยนกล่อง

จะต้องแก้ไขกล่องก่อน มีหลายรูที่ต้องเจาะ รูแรกจะอยู่ที่ด้านหน้าของกล่อง ซึ่งกล่องของแผงควบคุมจะถูกพิมพ์ออกมา รูที่สองอยู่ที่ด้านหลังของกล่องสำหรับให้สาย USB ลอดผ่าน รูสุดท้ายอยู่ที่ด้านล่างของกล่อง ซึ่งยาจะตกลงไปเมื่อจ่ายยา สุดท้ายต้องติดขาด้านล่าง ฉันใช้เท้ายางที่หาได้ทั่วไปในบ้าน แต่สามารถใช้เดือยไม้ได้

ขั้นตอนที่ 2: ชิ้นส่วนที่พิมพ์ 3 มิติ

ชิ้นส่วนพิมพ์ 3 มิติ
ชิ้นส่วนพิมพ์ 3 มิติ
ชิ้นส่วนพิมพ์ 3 มิติ
ชิ้นส่วนพิมพ์ 3 มิติ
ชิ้นส่วนพิมพ์ 3 มิติ
ชิ้นส่วนพิมพ์ 3 มิติ

มีชิ้นส่วนที่พิมพ์ 3 มิติจำนวนมากที่จำเป็นสำหรับโครงการนี้

พวกเขาคือ:

  • ม้าหมุนที่เก็บยา
  • ฐานสำหรับม้าหมุน
  • ช่องทางสำหรับยา
  • แขนสำหรับเซอร์โวมอเตอร์เพื่อล็อคฝา
  • ฐานสำหรับเซอร์โวมอเตอร์
  • สลักสำหรับแขนเซอร์โว
  • แผงควบคุม
  • ถ้วยสำหรับจ่ายยา

ฐานสำหรับม้าหมุนติดกับกล่องด้วยเทปกาวสองหน้า ฐานสำหรับเซอร์โวมอเตอร์และสลักสำหรับแขนถูกขันเข้ากับกล่องด้วยสกรูไม้แบบสั้น กล่องแผงควบคุมติดกาวที่ด้านหน้าของกล่องด้วยกาวซุปเปอร์ หลังจากใส่ส่วนประกอบแล้ว

ขั้นตอนที่ 3: อุปกรณ์อิเล็กทรอนิกส์

อิเล็กทรอนิกส์
อิเล็กทรอนิกส์

ตอนนี้ต้องวางอุปกรณ์อิเล็กทรอนิกส์ลงในกล่อง ขั้นแรก สเต็ปเปอร์มอเตอร์จะต่อเข้ากับฐานวงล้อด้วยสลักเกลียวและน็อต M3 จากนั้นเซอร์โวจะถูกยึดติดกับฐาน จากนั้น ตัวควบคุมมอเตอร์, Arduino, เขียงหั่นขนม, โมดูล RFID และโมดูล RTC ทั้งหมดจะติดเข้ากับกล่องด้วยเทปกาวสองหน้า ใส่ LCD เข้าไปในรูในกล่องควบคุม มีการบัดกรีบางอย่างที่จำเป็น สำหรับปุ่มกด ต้องต่อสายจัมเปอร์เข้ากับขั้วต่อจอบ สำหรับเครื่องอ่าน RFID จะต้องบัดกรีหมุดเข้ากับบอร์ด

ขั้นตอนที่ 4: รหัส

ด้านล่างเป็นรหัสแสดงความคิดเห็น:

ไลบรารีสำหรับเซอร์โว, LCD, RTC, RFID และสเต็ปเปอร์มอเตอร์รวมอยู่ในโค้ดนี้

///////////////// ไลบรารีและตัวแปร

#include #include //ไลบรารีมาตรฐานของ Arduino #include #include virtuabotixRTC myRTC(2, 3, 4); // กำหนดพิน #define servopin 8 const int buttonup = 6; ปุ่มลง const int = 7; int ชม.=0; int minn=0; int เซล=0; สถานะ int=0; int statedown=0; int สเตทเซล=0; int รอ = 0; ตู้เก็บของ int = 0; // ตั้งค่าเซอร์โว เซอร์โวเซอร์โว; มุม int = 180; #include // ใช้ไลบรารี stepper ที่ดัดแปลงด้วยลำดับการยิงแม่เหล็ก 1000/0100/0010/0001 ใส่ห้องสมุดในโฟลเดอร์ห้องสมุดของคุณ #define อัตราทดเกียร์ 64 //1:64 อัตราทดเกียร์ const int stepsPerRevolution = 2048; //มอเตอร์ Arduino Kit ถูกปรับลดเกียร์ลง จากการทดลอง ฉันพบว่า 2,048 ก้าวหมุนเพลาหนึ่งรอบ ขั้นตอน int = 0; LiquidCrystal_I2C จอแอลซีดี (0x27, 16, 2); // สร้างสเต็ปเปอร์แบบ 4 สายบนพิน 8 ถึง 11: Stepper myStepper(stepsPerRevolution, A0, A1, A2, A3); #รวม #รวม #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); // สร้างอินสแตนซ์ MFRC522 องศา int = 10; การตั้งค่าเป็นโมฆะ () { 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 // อัปเดตการแสดงผลอย่างต่อเนื่องตามเวลาปัจจุบันและเวลาที่จ่าย lcd.clear(); myRTC.updateTime(); lcd.setCursor(0, 0); lcd.print("เวลา:"); 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(ชม.); lcd.print(":"); lcd.print (นาที); ///////////////// อ่านสถานะปุ่ม // อ่านสถานะของปุ่มเพื่อเปลี่ยนเวลาการจ่าย stateup = digitalRead (ปุ่มขึ้น); statedown = digitalRead (ปุ่มลง); ล่าช้า (100); ///////////////// Dispensing Logic // หากเวลาปัจจุบันเท่ากับเวลาการจ่ายที่เลือก ให้หมุนสเต็ปเปอร์มอเตอร์ // ทุกๆ 9 ครั้งที่อุปกรณ์จ่ายออก มอเตอร์จะเปลี่ยนระยะห่างพิเศษเพื่อให้แน่ใจว่าหมุนได้เต็มที่ if (myRTC.hours == hr && myRTC.minutes == minn && ขั้นตอน <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); } if (statedown == LOW && minn <59){ minn=minn+1; ล่าช้า (50); } else if (statedown == LOW && minn ==59){ minn=0; ล่าช้า (50); } ///////////////// รหัส RFID // อ่านแท็ก RFID เมื่อมีการนำเสนอ ถ้า (! mfrc522. PICC_IsNewCardPresent()) { กลับ; } // เลือกไพ่หนึ่งใบถ้า (! mfrc522. PICC_ReadCardSerial()) { return; } เนื้อหาสตริง = ""; ตัวอักษรไบต์; สำหรับ (ไบต์ 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)); ล็อกเกอร์ = 1; } content.toUpperCase(); //////////////// LOCK CODE // เมื่ออ่านแท็ก RFID ที่ถูกต้องแล้ว ให้ย้ายเซอร์โวไปที่ตำแหน่งเปิดเมื่อปิด // และย้ายเซอร์โวไปยังตำแหน่งปิดเมื่อปิด เปิด. while (locker == 1){ if (content.substring(1) == "3B 21 D6 22"){ //เปลี่ยน UID ของการ์ด/การ์ดที่คุณต้องการให้การเข้าถึง { switch (deg){ case 180: servo.write (องศา); องศา = 10; ล็อกเกอร์ = 0; Serial.print("ย้าย"); ล่าช้า (1000); หยุดพัก; กรณีที่ 10: servo.write (องศา); องศา = 180; ล็อกเกอร์=0; ล่าช้า (1000); หยุดพัก; } } } อื่น { Serial.println (" การเข้าถึงถูกปฏิเสธ"); ล่าช้า (1000); } } }

ขั้นตอนที่ 5: การตั้งค่าขั้นสุดท้าย

ขั้นตอนสุดท้ายคือการเตรียมโครงการให้พร้อมสำหรับการใช้งาน ขั้นแรกให้อัปโหลดรหัสโดยไม่ได้ใส่บรรทัดการตั้งค่าเวลาเพื่ออัปโหลดเวลาปัจจุบันไปยัง RTC จากนั้นแสดงความคิดเห็นรหัสและอัปโหลดรหัสอีกครั้ง เพื่อให้แน่ใจว่าหากไม่ได้เสียบปลั๊กอุปกรณ์จะยังรักษาเวลาที่ถูกต้อง ตอนนี้สิ่งที่คุณต้องทำคือวางยาลงในช่อง วางถ้วยไว้ใต้รูจ่ายยา และตั้งเวลาการจ่ายยา อุปกรณ์จะจ่ายอย่างน่าเชื่อถือในเวลาเดียวกันทุกวัน

แนะนำ: