สารบัญ:
- ขั้นตอนที่ 1: การปรับเปลี่ยนกล่อง
- ขั้นตอนที่ 2: ชิ้นส่วนที่พิมพ์ 3 มิติ
- ขั้นตอนที่ 3: อุปกรณ์อิเล็กทรอนิกส์
- ขั้นตอนที่ 4: รหัส
- ขั้นตอนที่ 5: การตั้งค่าขั้นสุดท้าย
วีดีโอ: เครื่องจ่ายยาอัตโนมัติ: 5 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:02
โครงการนี้จัดทำขึ้นเพื่อใช้ในวงการแพทย์ ซึ่งผู้ป่วยสูงอายุต้องมีวิธีการแบ่งและจ่ายยาที่เชื่อถือได้ อุปกรณ์นี้ช่วยให้แบ่งยาได้ล่วงหน้าถึง 9 วัน และจ่ายยาอัตโนมัติในเวลาที่ต้องการ ฝาปิดยังสามารถล็อคด้วยแท็ก RFID เพื่อให้แน่ใจว่ามีเพียงผู้ดูแลเท่านั้นที่สามารถเข้าถึงยาได้
เสบียง:
มีวัสดุที่จำเป็นในการสร้างโครงการนี้:
- Arduino UNO
- โมดูลไดรเวอร์มอเตอร์
- SG90 9G เซอร์โว
- สเต็ปเปอร์มอเตอร์
- โมดูล DS1302 RTC
- สายจัมเปอร์ต่างๆ
- IIC 1602 LCD
- การเข้าถึงเครื่องพิมพ์ 3 มิติ
- ขาเช่นเดือยไม้
- โมดูล RFID และแท็ก
- สองปุ่มกด
- หัวแร้ง
- เขียงหั่นขนม
- ซุปเปอร์กาว
- สกรูไม้
- กล่องไม้ที่ยังไม่เสร็จพร้อมฝาบานพับ
- เทปสองหน้า
ขั้นตอนที่ 1: การปรับเปลี่ยนกล่อง
จะต้องแก้ไขกล่องก่อน มีหลายรูที่ต้องเจาะ รูแรกจะอยู่ที่ด้านหน้าของกล่อง ซึ่งกล่องของแผงควบคุมจะถูกพิมพ์ออกมา รูที่สองอยู่ที่ด้านหลังของกล่องสำหรับให้สาย USB ลอดผ่าน รูสุดท้ายอยู่ที่ด้านล่างของกล่อง ซึ่งยาจะตกลงไปเมื่อจ่ายยา สุดท้ายต้องติดขาด้านล่าง ฉันใช้เท้ายางที่หาได้ทั่วไปในบ้าน แต่สามารถใช้เดือยไม้ได้
ขั้นตอนที่ 2: ชิ้นส่วนที่พิมพ์ 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 จากนั้นแสดงความคิดเห็นรหัสและอัปโหลดรหัสอีกครั้ง เพื่อให้แน่ใจว่าหากไม่ได้เสียบปลั๊กอุปกรณ์จะยังรักษาเวลาที่ถูกต้อง ตอนนี้สิ่งที่คุณต้องทำคือวางยาลงในช่อง วางถ้วยไว้ใต้รูจ่ายยา และตั้งเวลาการจ่ายยา อุปกรณ์จะจ่ายอย่างน่าเชื่อถือในเวลาเดียวกันทุกวัน
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
เครื่องจ่ายยาอัตโนมัติ: 10 ขั้นตอน (พร้อมรูปภาพ)
เครื่องจ่ายยาอัตโนมัติ: เราเป็นนักศึกษาปริญญาโทคนแรกในสาขาวิศวกรรมเครื่องกลไฟฟ้าของคณะวิศวกรรมศาสตร์แห่งบรัสเซลส์ (ในระยะสั้น "Bruface") นี่เป็นความคิดริเริ่มของมหาวิทยาลัยสองแห่งที่ตั้งอยู่ใจกลางกรุงบรัสเซลส์: Université Libre de Bruxelles (UL
เครื่องจ่ายยาอัตโนมัติ: 14 ขั้นตอน (พร้อมรูปภาพ)
เครื่องจ่ายยาอัตโนมัติ: นี่คือหุ่นยนต์จ่ายยาที่สามารถให้ปริมาณและประเภทของยาที่ถูกต้องแก่ผู้ป่วยได้ การจ่ายยาจะดำเนินการโดยอัตโนมัติในเวลาที่ถูกต้องของวัน นำหน้าด้วยการเตือน เมื่อว่างเปล่า เติมเครื่องได้ง่าย
เครื่องจ่ายยาอัตโนมัติ: โครงการโดย Arjan West: 7 ขั้นตอน (พร้อมรูปภาพ)
เครื่องจ่ายยาอัตโนมัติ: โครงการโดย Arjan West: สวัสดีในคำแนะนำนี้ฉันจะช่วยคุณสร้างกล่องยาที่ช่วยให้ผู้ใช้รู้ว่าต้องทานยาเมื่อใดและต้องทานยาอะไร เคสนี้จะมาพร้อมกับ piezzobuzzer ที่เตือนบุคคลเมื่อถึงเวลาต้องกินยา และ 12 led