Სარჩევი:

მედიკამენტების ავტომატური დისპენსერი: 5 ნაბიჯი
მედიკამენტების ავტომატური დისპენსერი: 5 ნაბიჯი

ვიდეო: მედიკამენტების ავტომატური დისპენსერი: 5 ნაბიჯი

ვიდეო: მედიკამენტების ავტომატური დისპენსერი: 5 ნაბიჯი
ვიდეო: როგორ ავინაზღაურო თანხა ონლაინ? 2024, ივლისი
Anonim
მედიკამენტების ავტომატური დისპენსერი
მედიკამენტების ავტომატური დისპენსერი

ეს პროექტი გამოიყენება მედიცინის სფეროში, სადაც ხანდაზმულ პაციენტებს უნდა ჰქონდეთ საიმედო გზა მედიკამენტების განაწილებისა და გაცემის შესახებ. ეს აპარატი საშუალებას იძლევა მედიკამენტები დაიყოს 9 დღით ადრე და ავტომატურად გაიცეს სასურველ დროს. სახურავი ასევე იკეტება RFID ტეგით, რაც დარწმუნებულია, რომ მხოლოდ მომვლელს შეუძლია მედიკამენტზე წვდომა.

მასალები:

ამ პროექტის შესაქმნელად არის საჭირო მასალები:

  • Arduino UNO
  • საავტომობილო დრაივერის მოდული
  • SG90 9G სერვო
  • Ბიჯური ძრავი
  • DS1302 RTC მოდული
  • სხვადასხვა ჯუმბერის მავთულები
  • IIC 1602 LCD
  • 3D პრინტერზე წვდომა
  • ფეხები, როგორიცაა ხის dowels
  • RFID მოდული და ტეგი
  • ორი ღილაკი
  • გასაყიდი რკინა
  • პურის დაფა
  • სუპერ წებო
  • ხის ხრახნები
  • დაუმთავრებელი ხის ყუთი ჩამოკიდებული სახურავით
  • ორმხრივი ლენტი

ნაბიჯი 1: ყუთის შეცვლა

ყუთის შეცვლა
ყუთის შეცვლა
ყუთის შეცვლა
ყუთის შეცვლა
ყუთის შეცვლა
ყუთის შეცვლა
ყუთის შეცვლა
ყუთის შეცვლა

ყუთი ჯერ უნდა შეიცვალოს. არსებობს მრავალი ხვრელი, რომელიც უნდა გაიხვრიტოს. პირველი ხვრელი იქნება ყუთის წინა მხარეს, სადაც იბეჭდება მართვის პანელის ყუთი. მეორე ხვრელი არის ყუთის უკანა ნაწილში, USB კაბელის გასავლელად. ბოლო ხვრელი არის ყუთის ბოლოში, სადაც წამალი გაიცემა ერთხელ დარიგებისთანავე. და ბოლოს, ფეხები უნდა იყოს მიმაგრებული ბოლოში. მე გამოვიყენე რეზინის ფეხები, რომლებიც ჩემი სახლის გარშემო ვიპოვე ფეხებისთვის, მაგრამ ხის ბუდეების გამოყენებაც შეიძლება.

ნაბიჯი 2: 3D ნაბეჭდი ნაწილები

3D ნაბეჭდი ნაწილები
3D ნაბეჭდი ნაწილები
3D ნაბეჭდი ნაწილები
3D ნაბეჭდი ნაწილები
3D ნაბეჭდი ნაწილები
3D ნაბეჭდი ნაწილები

ამ პროექტისათვის ბევრი 3D ბეჭდვის ნაწილია საჭირო.

Ისინი არიან:

  • კარუსელი, რომელიც ინახავს წამლებს
  • საფუძველი კარუსელისთვის
  • ძაბრი წამლისთვის
  • სახურავი სერვო ძრავისთვის სახურავის დასაკეტად
  • ბაზა სერვო ძრავისთვის
  • ჩამკეტი servo arm
  • Მართვის პანელი
  • ჭიქა წამლის გადასაცემად

კარუსელის საფუძველი ეყრდნობა ყუთს ორმაგი ცალმხრივი ლენტით. სერვო ძრავის საფუძველი და სამაგრის ჩამკეტი ორივე ხრახნიანია ყუთში მოკლე ხის ხრახნებით. საკონტროლო პანელის ყუთი არის წებოვანი ყუთის წინა მხარეს სუპერ წებოთი, მას შემდეგ რაც კომპონენტები შეიყვანეს.

ნაბიჯი 3: ელექტრონიკა

ელექტრონიკა
ელექტრონიკა

ელექტრონიკა ახლა უნდა მოთავსდეს ყუთში. პირველი, სტეპერიანი ძრავა მიმაგრებულია კარუსელის ბაზაზე M3 ჭანჭიკებითა და თხილით. სერვო შემდეგ სუპერ წებოვანია მის ბაზაზე. შემდეგ, ძრავის კონტროლერი, არდუინო, პურის დაფა, RFID მოდული და RTC მოდული ყუთზე არის მიმაგრებული ორმაგი ცალმხრივი ლენტით. LCD მოთავსებულია საკონტროლო ყუთის ხვრელში. არსებობს გარკვეული შედუღება, რომელიც საჭიროა. ღილაკებისთვის, ჯუმბერის კაბელები უნდა იყოს მიბმული ყვავის კონექტორებზე. RFID მკითხველისთვის ქინძისთავები უნდა იყოს გაბმული დაფაზე.

ნაბიჯი 4: კოდი

ქვემოთ მოცემულია კომენტარის კოდი:

სერვო, LCD, RTC, RFID და Stepper ძრავების ბიბლიოთეკები შედის ამ კოდში.

////////////////// ბიბლიოთეკები და ცვლადები

#მოიცავს #მოიცავს // არდუინოს სტანდარტული ბიბლიოთეკა #მოიცავს #მოიცავს ვირტუაბოტიქს RTC myRTC (2, 3, 4); // განსაზღვრეთ ქინძისთავები #განსაზღვრეთ servopin 8 const int ღილაკი = 6; const int buttondown = 7; int hr = 0; int minn = 0; int sel = 0; int stateup = 0; int daxuyanownown = 0; int შტატები = 0; int ლოდინი = 0; int მბრძანებელი = 0; // შეიქმნა servo Servo servo; int კუთხე = 180; #მოიცავს // გამოიყენეთ მოდიფიცირებული სტეპერ ბიბლიოთეკა 1000/0100/0010/0001 მაგნიტის სროლის თანმიმდევრობით. განათავსეთ ბიბლიოთეკა თქვენი ბიბლიოთეკის საქაღალდეში. #განსაზღვრეთ გადაცემათა კოლოფი 64 // 1: 64 სიჩქარის კოეფიციენტი const int stepsPerRevolution = 2048; // არდუინოს ნაკრების ძრავა დაყენებულია ქვემოთ. ექსპერიმენტით დავადგინე, რომ 2048 საფეხური შახტს ერთ მრგვალდ აქცევს. int ნაბიჯები = 0; LiquidCrystal_I2C LCD (0x27, 16, 2); // დააინსტალირეთ 4 მავთულის სტეპერი ქინძისთავებზე 8-დან 11-მდე: 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.setDS1302 დრო (40, 55, 11, 1, 7, 12, 2020); pinMode (ღილაკი, INPUT_PULLUP); pinMode (დაბლა, INPUT_PULLUP); სერიული.დაწყება (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 ("დრო:"); 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. ბეჭდვა (სთ); lcd.print (":"); lcd.print (minn); ////////////////// წაკითხვის ღილაკის მდგომარეობა // კითხულობს ღილაკების მდგომარეობას, რომ შეცვალოს განაწილების დრო. stateup = digitalRead (ღილაკი); deklaownown = digitalRead (უკანა მხარეს); დაგვიანება (100); ////////////////// ლოგიკის გაცემა // თუ მიმდინარე დრო იგივეა, რაც შერჩეული გამანაწილებელი დრო, გადაუხვიეთ სტეპერიანი ძრავა. // ყოველ 9 ჯერზე, როდესაც მოწყობილობა იშლება, ძრავა გადადის დამატებით მანძილზე, რათა უზრუნველყოს სრული ბრუნვა. თუ (myRTC.hours == სთ && myRTC.minutes == წთ && ნაბიჯები <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 -ს.} თუ (მდგომარეობა == LOW && hr <23) {hr = hr+1; დაგვიანება (50); } else if (stateup == LOW && hr == 23) {hr = 0; დაგვიანება (50); } თუ (გამოცხადებულია == დაბალი && მინ <59) {წთ = მინ+1; დაგვიანება (50); } else if (გამოცხადებულია == LOW && minn == 59) {minn = 0; დაგვიანება (50); } ///////////////// RFID კოდი // კითხულობს RFID ტეგს მისი წარდგენისას. თუ (! mfrc522. PICC_IsNewCardPresent ()) {დაბრუნება; } // აირჩიეთ ერთი ბარათი, თუ (! Mfrc522. PICC_ReadCardSerial ()) {დაბრუნდება; } სიმებიანი შინაარსი = ""; ბაიტის წერილი; for (ბაიტი 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 COD // როდესაც სწორი RFID ტეგი იკითხება, გადაიტანეთ servo ღია პოზიციაში, როდესაც ის დახურულია, // და გადაიტანეთ 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); შესვენება; }}} სხვა {Serial.println ("წვდომა უარყოფილია"); დაგვიანება (1000); }}}

ნაბიჯი 5: საბოლოო დაყენება

ბოლო ნაბიჯი არის პროექტის გამოყენებისთვის მზადყოფნა. ჯერ ატვირთეთ კოდი დროის დაყენების ხაზის გარეშე, რომ ატვირთოთ მიმდინარე დრო RTC– ში. შემდეგ დატოვეთ კომენტარი კოდზე და განაახლეთ კოდი. ეს უზრუნველყოფს, რომ თუ მოწყობილობა გამორთულია, ის მაინც შეინარჩუნებს სწორ დროს. ახლა თქვენ მხოლოდ უნდა მოათავსოთ წამალი ჭურჭელში, მოათავსოთ ჭიქა გამანაწილებელი ხვრელის ქვეშ და განსაზღვროთ გამანაწილებელი დრო. მოწყობილობა საიმედოდ ანაწილებს ერთსა და იმავე დროს ყოველდღე.

გირჩევთ: