Isi kandungan:

Dispenser Ubat Automatik: 5 Langkah
Dispenser Ubat Automatik: 5 Langkah

Video: Dispenser Ubat Automatik: 5 Langkah

Video: Dispenser Ubat Automatik: 5 Langkah
Video: Automatic Toothpaste Dispenser 2024, November
Anonim
Dispenser Ubat Automatik
Dispenser Ubat Automatik

Projek ini digunakan untuk bidang perubatan, di mana pesakit tua mesti mempunyai cara yang boleh dipercayai untuk mendapatkan ubat yang dibahagi-bahagikan dan dikeluarkan. Peranti ini membolehkan ubat dibahagi hingga 9 hari sebelumnya, dan dikeluarkan secara automatik pada waktu yang diinginkan. Tudungnya juga dapat dikunci dengan tag RFID, memastikan bahawa hanya penjaga yang boleh mengakses ubat.

Bekalan:

Terdapat bahan yang diperlukan untuk membina projek ini:

  • Arduino UNO
  • Modul Pemandu Motor
  • Servo SG90 9G
  • Motor Stepper
  • Modul RTC DS1302
  • Pelbagai wayar pelompat
  • LCD IIC 1602
  • Akses pencetak 3D
  • Kaki seperti dowel kayu
  • Modul dan Tag RFID
  • Dua butang tekan
  • Besi pematerian
  • Papan roti
  • Lem super
  • Skru kayu
  • Kotak Kayu Yang Belum Selesai dengan Tudung Berengsel
  • Pita dua sisi

Langkah 1: Mengubah Kotak

Mengubah Kotak
Mengubah Kotak
Mengubah Kotak
Mengubah Kotak
Mengubah Kotak
Mengubah Kotak
Mengubah Kotak
Mengubah Kotak

Kotak mesti terlebih dahulu diubah suai. Terdapat banyak lubang yang mesti digerudi. Lubang pertama akan berada di bahagian depan kotak, di mana kotak panel kawalan dicetak. Lubang kedua berada di bahagian belakang kotak, agar kabel USB dapat dilalui. Lubang terakhir terdapat di bahagian bawah kotak, di mana ubat akan jatuh setelah dikeluarkan. Akhir sekali, kaki mesti dilekatkan ke bahagian bawah. Saya menggunakan kaki getah yang saya dapati di sekitar rumah saya untuk kaki, tetapi dowel kayu juga boleh digunakan.

Langkah 2: Bahagian Bercetak 3D

Bahagian Bercetak 3D
Bahagian Bercetak 3D
Bahagian Bercetak 3D
Bahagian Bercetak 3D
Bahagian Bercetak 3D
Bahagian Bercetak 3D

Terdapat banyak bahagian bercetak 3D yang diperlukan untuk projek ini.

Mereka adalah:

  • Carousel yang menyimpan ubat
  • Pangkalan untuk karusel
  • Corong untuk ubat
  • Lengan untuk motor servo untuk mengunci penutup
  • Pangkalan untuk motor servo
  • Selak untuk lengan servo
  • Panel kawalan
  • Cawan untuk ubat yang akan dikeluarkan

Pangkal untuk korsel dilekatkan pada kotak dengan pita dua sisi. Pangkalan untuk motor servo dan kait untuk lengan keduanya dimasukkan ke dalam kotak dengan skru kayu pendek. Kotak panel kawalan dilekatkan di bahagian depan kotak dengan gam super, setelah komponen dimasukkan.

Langkah 3: Elektronik

Elektronik
Elektronik

Elektronik kini perlu dimasukkan ke dalam kotak. Pertama, motor stepper dipasang ke pangkal karusel dengan bolt dan mur M3. Servo kemudiannya terpaku pada pangkalnya. Kemudian, pengawal motor, Arduino, papan roti, modul RFID, dan modul RTC semuanya dilampirkan ke kotak dengan pita dua sisi. LCD dimasukkan ke dalam lubang di kotak kawalan. Terdapat beberapa pematerian yang diperlukan. Untuk butang tekan, kabel pelompat mesti disolder ke penyambung sekop. Untuk pembaca RFID, pin mesti disolder ke papan.

Langkah 4: Kod

Berikut adalah kod yang dikomen:

Perpustakaan untuk motor Servo, LCD, RTC, RFID, dan Stepper disertakan dalam kod ini.

///////////////// Perpustakaan dan Pemboleh ubah

#include #include // Arduino standard library #include #include virtuabotixRTC myRTC (2, 3, 4); // Tentukan pin #define servopin 8 const int buttonup = 6; const int buttondown = 7; int hr = 0; int minn = 0; int sel = 0; int stateup = 0; int dinyatakan = 0; int Statesel = 0; int menunggu = 0; loker int = 0; // Sediakan servo servo servo; sudut int = 180; #include // gunakan pustaka stepper yang diubah dengan urutan penembakan magnet 1000/0100/0010/0001. Letakkan perpustakaan di folder perpustakaan anda. #tentukan gearratio 64 // 1: 64 nisbah gear tetap antara langkahPerRevolution = 2048; // motor Arduino Kit diarahkan ke bawah. Dengan percubaan saya menentukan bahawa 2048 langkah memutar batang satu pusingan. langkah int = 0; LiquidCrystal_I2C lcd (0x27, 16, 2); // tentukan stepper 4-wayar pada pin 8 hingga 11: Stepper myStepper (stepPerRevolution, A0, A1, A2, A3); #include #include #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522 (SS_PIN, RST_PIN); // Buat contoh MFRC522. int deg = 10; batal persediaan () {lcd.init (); // inisialisasi lcd lcd.backlight (); // Garis di bawah ini digunakan untuk menetapkan waktu semasa. Ia hanya perlu dilakukan sekali, dan selepas itu kod // mesti dimuat semula sekali lagi dengan komen. //myRTC.setDS1302Time(40, 55, 11, 1, 7, 12, 2020); pinMode (butang, INPUT_PULLUP); pinMode (buttondown, INPUT_PULLUP); Serial.begin (9600); // Memulakan komunikasi bersiri SPI.begin (); // Mulakan bas SPI mfrc522. PCD_Init (); // Mulakan MFRC522 myStepper.setSpeed (0.15 * gearratio); // motor nampaknya digerakkan 1/64, yang bermaksud bahawa kelajuannya harus ditetapkan 64x. // memulakan port siri: servo.attach (servopin); } gelung void () {///////////////// Kod LCD // Sentiasa mengemas kini paparan dengan masa semasa dan masa pengeluaran. lcd.clear (); myRTC.updateTime (); lcd.setCursor (0, 0); lcd.print ("Masa:"); lcd.setCursor (6, 0); lcd.print (myRTC.hours); lcd.print (":"); lcd.print (myRTC.minutes); lcd.setCursor (0, 1); lcd.print ("Pengeluaran:"); lcd.setCursor (10, 1); lcd.print (jam); lcd.print (":"); lcd.print (minn); ///////////////// Read Button States // Membaca keadaan butang untuk mengubah masa pengeluaran. stateup = digitalRead (butang); dinyatakanown = digitalRead (buttondown); kelewatan (100); ///////////////// Dispensing Logic // Jika waktu semasa sama dengan masa pengeluaran yang dipilih, putar motor stepper. // Setiap 9 kali peranti mengeluarkan, motor memutar jarak lebih jauh untuk memastikan putaran penuh dibuat. jika (myRTC.hours == jam && myRTC.minutes == minn && langkah <9) {myStepper.step (227); langkah = langkah +1; kelewatan (60100); myRTC.updateTime (); } lain jika (myRTC.hours == jam && myRTC.minutes == minn && langkah == 9) {myStepper.step (232); langkah = 0; kelewatan (60100); myRTC.updateTime (); ///////////////// Mengubah Masa Pembuangan // Mengubah masa pengeluaran berdasarkan butang mana yang ditekan. // Masa kembali ke sifar apabila jam menjadi 24 dan minit menjadi 60.} jika (stateup == LOW && hr <23) {hr = hr + 1; kelewatan (50); } lain jika (stateup == RENDAH && hr == 23) {hr = 0; kelewatan (50); } jika (dinyatakanown == RENDAH && minn <59) {minn = minn + 1; kelewatan (50); } lain jika (dinyatakanown == RENDAH && minn == 59) {minn = 0; kelewatan (50); } ///////////////// Kod RFID // Membaca tag RFID semasa ia disajikan. jika (! mfrc522. PICC_IsNewCardPresent ()) {kembali; } // Pilih salah satu kad jika (! Mfrc522. PICC_ReadCardSerial ()) {return; } Kandungan rentetan = ""; surat bait; untuk (byte i = 0; i <mfrc522.uid.size; i ++) {//Serial.println(mfrc522.uid.uidByte <0x10? "0": ""); //Serial.println(mfrc522.uid.uidByte, HEX); content.concat (Rentetan (mfrc522.uid.uidByte <0x10? "0": "")); content.concat (Rentetan (mfrc522.uid.uidByte , HEX)); loker = 1; } content.toUpperCase (); ///////////////// LOCK CODE // Apabila tag RFID yang betul dibaca, pindahkan servo ke posisi terbuka ketika ditutup, // dan pindahkan servo ke posisi tertutup ketika berada buka. sementara (loker == 1) {if (content.substring (1) == "3B 21 D6 22") {// ubah di sini UID kad / kad yang anda ingin berikan akses {case (deg) {case 180: servo.write (deg); deg = 10; loker = 0; Serial.print ("bergerak"); kelewatan (1000); rehat; kes 10: servo.write (deg); deg = 180; loker = 0; kelewatan (1000); rehat; }}} lain {Serial.println ("Akses ditolak"); kelewatan (1000); }}}

Langkah 5: Persediaan Akhir

Langkah terakhir ialah menyiapkan projek untuk digunakan. Mula-mula memuat naik kod dengan garis penetapan waktu tanpa koma, untuk memuat naik waktu semasa ke RTC. Kemudian komen kod tersebut, dan muat semula kodnya. Ini akan memastikan bahawa jika peranti dicabut dari palamnya, ia masih dapat mengekalkan masa yang betul. Sekarang yang harus anda lakukan ialah meletakkan ubat di slot, letakkan cawan di bawah lubang pengeluaran, dan tetapkan masa pengeluaran. Peranti ini akan digunakan pada masa yang sama setiap hari.

Disyorkan: