- Komponen yang Diperlukan untuk peringatan Perubatan Automatik menggunakan Arduino
- Peringatan Perubatan Arduino menggunakan Arduino Circuit
- Kerja Sistem Peringatan Perubatan Automatik
- Pengaturcaraan Arduino UNO untuk Peringatan Perubatan
Ketika datang kepada orang yang kita sayangi, kita selalu ingin memastikan mereka sihat dan cergas. Tetapi apa yang akan berlaku sekiranya mereka jatuh sakit dan lupa minum ubat tepat pada waktunya. Kita akan risau, bukan? Di hospital, terdapat banyak pesakit dan sukar untuk mengingatkan setiap pesakit untuk minum ubat tepat pada waktunya. Cara tradisional memerlukan usaha manusia untuk mengingatkan mereka untuk mengambil ubat tepat pada waktunya. Era digital tidak mengikutinya dan kita boleh menggunakan mesin untuk melakukannya. Aplikasi Smart Medicine Reminder sangat luas dan dapat digunakan oleh pesakit di rumah, doktor di hospital, dan di banyak tempat lain. Ketika mengingatkan, ada banyak cara untuk mengingatkannya:
- Tunjukkan pada paparan
- Hantarkan pemberitahuan melalui e-mel atau Telefon
- Menggunakan aplikasi mudah alih
- Penggera buzz
- Menggunakan Bluetooth / Wi-Fi
- Dapatkan panggilan
- Ingatkan masa perubatan seterusnya sambil mengingatkan waktu semasa
Kita boleh menggabungkan cara bergantung pada keperluan. Untuk memastikan semuanya mudah di sini, kami membuat Peringatan Perubatan ringkas menggunakan Arduino yang mengingatkan kami untuk mengambil ubat 1 atau 2 atau 3 kali sehari. Slot masa boleh dipilih menggunakan butang tekan. Ia juga menunjukkan Tarikh dan Masa semasa. Kami akan melanjutkannya ke projek IoT artikel masuk di mana pemberitahuan e-mel atau SMS akan dihantar kepada pengguna. Peringatan ubat ini juga dapat disatukan dengan Sistem Pemantauan Pesakit.
Komponen yang Diperlukan untuk peringatan Perubatan Automatik menggunakan Arduino
- Arduino Uno (Kami dapat menggunakan papan Arduino lain juga, seperti Pro mini, Nano)
- Modul RTC DS3231
- Paparan LCD 16x2
- Buzzer
- Dipimpin (warna apa pun)
- Papan roti
- Butang Tekan
- Potensiometer 10K
- Perintang 10K, 1K
- Wayar Pelompat
Peringatan Perubatan Arduino menggunakan Arduino Circuit
Gambarajah litar lengkap untuk membina kotak ubat pintar menggunakan Arduino ditunjukkan di bawah
Berikut adalah sambungan pin Arduino dengan periferal yang berbeza
Pin Periferal Arduino Pin
- 2 -----------------------------> D7 dari Paparan LCD 16x2
- 3 -----------------------------> D6 Paparan LCD 16x2
- 4 -----------------------------> D5 dari Paparan LCD 16x2
- 5 -----------------------------> D4 Paparan LCD 16x2
- 7 -----------------------------> butang tekan ke-3
- 8 -----------------------------> butang tekan ke-2
- 9 -----------------------------> Butang tekan pertama
- 11 -----------------------------> Pin EN Paparan LCD 16x2
- 12 -----------------------------> Pin RS Paparan LCD 16x2
- 13 -----------------------------> + Ve Pin Buzzer dan Led
- A0 -----------------------------> Hentikan Butang Tekan
- A4 -----------------------------> SDA DS3231
- A5 -----------------------------> SCL DS3231
- 3.3V -----------------------------> Vcc DS3231
- Gnd -----------------------------> Gnd
Dalam Projek Peringatan Perubatan ini, RTC DS3231 dihubungkan melalui protokol I2C dengan Arduino Uno. Anda juga boleh menggunakan RTC IC DS1307 untuk membaca waktu bersama Arduino. RTC DS3231 juga mempunyai memori 32k yang boleh digunakan untuk menyimpan data tambahan. Modul RTC dikuasakan melalui pin Arduino uno 3.3V. Paparan LCD 16x2 dihubungkan menggunakan SPI. A buzze r digunakan untuk amaran dan mengingatkan bahawa ia adalah masa untuk mengambil ubat. Empat butang tekan digunakan di mana masing-masing mempunyai ciri pilih yang berbeza. Butang tekan pertama digunakan untuk mengingatkan untuk minum ubat sekali sehari. Butang tekan kedua digunakan untuk mengingatkan dua kali sehari dan butang tekan ketiga digunakan untuk mengingatkan tiga kali sehari. Butang tekan keempat digunakan untuk menghentikan bel ketika pengguna telah mendengar amaran.
Kerja Sistem Peringatan Perubatan Automatik
The Pill Reminder Alarm dikuasakan menggunakan bekalan 5V. Ketika mula-mula melakukan boot, ia menunjukkan urutan selamat datang sebagai " Welcome to Circuit Digest ". Layar LCD diatur untuk berpusing dalam tiga layar. 1 st menunjukkan skrin mengurut sebagai " Stay Healthy, Get Well Soon ". Skrin kedua adalah skrin bantuan yang memberitahu untuk menekan butang tekan pilih untuk memilih mana-mana satu slot waktu untuk diingatkan (sekali / dua kali / tiga kali dalam sehari). Slot waktu boleh diubah dalam program dan dapat dikonfigurasi dengan sewajarnya. Sekarang ini kami telah memperbaikinya menjadi tiga jangka masa iaitu 8 pagi, 2 petang, dan 8 malam.
Kami telah membahagikan slot masa kepada tiga mod. Mod 1 pilihan pelanggan untuk mengambil ubat sekali / hari pada pukul 8 pagi apabila menekan pengguna 1 st butang push. Mod 2 pilihan pelanggan untuk mengambil ubat dua kali / hari pada pukul 8 pagi dan 8 malam apabila menekan pengguna 2 nd butang push. Mod 3 pilihan pelanggan untuk mengambil ubat tiga kali / hari pada pukul 8 pagi, 2 petang dan 8:00 jika mesin pengguna 3 rd butang push.
Kami juga boleh menambahkan ciri untuk menunda bel selama 10 minit (tidak termasuk dalam projek ini). Apabila pengguna memilih slot yang diinginkan dengan menekan butang tekan, input pengguna direkodkan dan masa diambil dari RTC. Apabila masa dipadankan dengan slot waktu yang dipilih maka buzzer mula berdengung. Pengguna boleh menghentikan bel dengan menekan butang STOP. Proses yang sama berterusan untuk peringatan slot seterusnya. Proses lengkap ditunjukkan dalam Video yang diberikan di hujung artikel ini.
Pengaturcaraan Arduino UNO untuk Peringatan Perubatan
Sangat mudah untuk menulis program setelah anda memikirkan cara-cara untuk mengingatkan pengambilan pil. Di sini ia akan menunjukkan peringatan di paparan, buzzer buzzer dan menunjukkannya menggunakan LED. Ia juga mempunyai pilihan untuk memilih tiga slot waktu (sekali / dua kali / tiga kali sehari) dan kapan waktu akan tiba mulai memberi amaran kepada pesakit dengan membunyikan bel. Maka keseluruhan sistem akan kelihatan seperti berikut:
Pengguna mendapat arahan pertolongan pada paparan> Pengguna memilih slot waktu (sekali / sehari, dua kali / hari, tiga kali / hari)> Mesej pengesahan cetak dipamerkan> Penjagaan waktu dimulakan> Buzzer dan LED bermula apabila waktu sepadan dengan slot yang dipilih pengguna> Pengguna berhenti oleh menekan butang berhenti tekan> Tamat
Kita boleh mengubah program dan perkakasan jika kita mahu menambahkan lebih banyak ciri. Untuk memahami dengan cara yang lebih mudah, kami membahagikan program menjadi fungsi kecil. Fungsinya senang difahami dan dilaksanakan. Program yang lengkap diberikan pada akhir projek ini. Mari mulakan dengan program ini.
Oleh kerana itu, kami telah menggunakan periferal lain seperti Paparan LCD 16x2, RTC DS3231, jadi pertama-tama kami harus memasukkan perpustakaan f atau itu. Perpustakaan yang diperlukan adalah seperti berikut:
Perpustakaan EEPROM digunakan untuk mengawasi input pilihan pengguna jika Arduino tidak dihidupkan. Dan apabila pengguna menggunakan Arduino, ia mendapat keadaan butang tekan sebelumnya menggunakan perpustakaan EEPROM. Perpustakaan Wire.h digunakan sejak modul RTC DS3231 dikomunikasikan menggunakan I2C.
Sentiasa periksa sama ada RTC berkabel dengan betul atau tidak rosak, kerana RTC akan memainkan peranan penting dalam menjaga masa keseluruhan sistem peringatan.
jika (! rtc.begin ()) {// periksa sama ada rtc disambungkan Serial.println ("Tidak dapat mencari RTC"); sementara (1); } if (rtc.lostPower ()) { Serial.println ("RTC hilang kuasa, mari tetapkan masa!"); }
Penyesuaian masa dapat dilakukan dengan dua cara, baik secara automatik menggunakan waktu kompilasi sistem atau dengan memasukkannya secara manual. Setelah kami menetapkan masa, komen baris berikut kecuali anda mahu menukar waktu RTC sekali lagi.
rtc.adjust (DateTime (F (__ DATE__), F (__ TIME__))); //rtc.adjust(DateTime(2019, 1, 10, 7, 59, 52));
Ini kenyataan suis digunakan untuk membaca keadaan yang disimpan sebelum butang push dan meneruskan negeri untuk masa peringatan yang sesuai dan tepat.
val2 = EEPROM.read (addr); // baca nilai butang tekan yang disimpan sebelumnya untuk bermula dari tempat yang sebelumnya ditukar (val2) { case 1: Serial.println ("Set for 1 / day"); push1state = 1; push2state = 0; push3state = 0; tolak = 01; rehat; kes 2: Serial.println ("Tetapkan untuk 2 / hari"); push1state = 0; push2state = 1; push3state = 0; tolak = 10; rehat; kes 3: Serial.println ("Tetapkan untuk 3 / hari"); push1state = 0; push2state = 0; push3state = 1; tolak = 11; rehat; }
Pernyataan ini digunakan untuk membuat milis digunakan untuk masa dan kawalan kitaran skrin selang yang ditentukan.
currentMillisLCD = milis (); // mulakan milis untuk menukar skrin LCD pada selang waktu yang ditentukan
Mula membaca pin digital yang disambungkan ke butang tekan.
push1state = digitalRead (push1pin); push2state = digitalRead (push2pin); push3state = digitalRead (push3pin); stopinState = digitalRead (stopPin);
Fungsi di bawah digunakan untuk membaca keadaan butang tekan dan menulisnya ke EEPROM. Setiap kali butang tekan ditekan, keadaan ditulis ke EEPROM. Juga mencetak pesan pada paparan LCD pilihan input pengguna yang dipilih. Begitu juga fungsi push2 () dan push3 () yang digunakan.
batal push1 () {// berfungsi untuk menetapkan peringatan sekali / hari jika (push1state == 1) { push1state = 0; push2state = 0; push3state = 0; // pushPressed = benar; EEPROM.write (addr, 1); Serial.print ("Push1 Written:"); Serial.println (EEPROM.read (addr)); // untuk debugging pushVal = 1; // simpan keadaan butang tekan-1 lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Set peringatan"); lcd.setCursor (0, 1); lcd.print ("untuk Sekali / hari!"); kelewatan (1200); lcd.clear (); } }
Fungsi di bawah digunakan untuk menghentikan bel dan dipimpin. Selalu baik memberi cadangan. Cetak pesan cadangan pada paparan "Minum ubat dengan air suam".
batal stopPins () {// berfungsi untuk berhenti berdengung semasa pengguna menekan butang berhenti jika (stopinState == 1) { // stopinState = 0; // pushPressed = benar; tolak = 1; lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Ambil Perubatan"); lcd.setCursor (0, 1); lcd.print ("dengan Air Hangat"); kelewatan (1200); lcd.clear (); } }
Fungsi di bawah tidak bergantung pada masa, tetapi sentiasa berpusing dalam tiga skrin yang membantu pengguna. Oleh kerana kami menjaga pesakit, kami boleh mencetak pesan ucapan kerana kami tahu bahawa sokongan emosi sangat membantu penyembuhan pesakit dalam waktu yang lebih cepat. Anda boleh memilih mesej kreatif anda sendiri. Mari mencetak mesej sebagai "Tetap sihat, cepat sembuh".
Skrin kedua adalah untuk memberi arahan kepada pesakit sebagai "Tekan butang untuk peringatan..". Skrin Ketiga digunakan untuk hanya menunjukkan tarikh dan waktu semasa.
void changeScreen () {// fungsi untuk Screen Cycling // Mula menukar skrin setiap selang waktu yang ditentukanLCD jika (currentMillisLCD - sebelumnyaMillisLCD> intervalLCD) // simpan kali terakhir anda menukar paparan { sebelumnyaMillisLCD = currentMillisLCD; skrin ++; jika (skrin> maxScreen) { skrin = 0; // semua skrin berakhir -> bermula dari 1 } isScreenChanged = true; } // Mula menampilkan layar semasa jika (isScreenChanged) // hanya kemas kini layar jika layar diubah. { isScreenChanged = false; // tetapkan semula untuk suis lelaran seterusnya (skrin) { case getWellsoon: gwsMessege (); // cepat-cepat pesan rehat; kes HELP_SCREEN: helpScreen (); // rehat skrin arahan ; kes TIME_SCREEN: timeScreen (); // untuk mencetak tarikh dan waktu rehat; lalai: // TIDAK SET. rehat; } } }
Fungsi ini digunakan untuk mulai berdengung dan berkedip LED secara serentak jika waktu yang dipilih telah tiba.
void startBuzz () {// berfungsi untuk memulakan buzzing apabila masa sampai ke selang waktu yang ditentukan // if (pushPressed == false) { if (pushpressed == 0) { Serial.println ("pushpressed is false in blink"); arus panjang yang tidak ditandatanganiMillis = millis (); if (currentMillis - sebelumnyaMillis> = selang) { sebelumnyaMillis = currentMillis; // simpan kali terakhir anda mengedipkan LED Serial.println ("Start Buzzing"); jika (ledState == RENDAH) {// jika LED dimatikan hidupkan dan sebaliknya: ledState = TINGGI; } lain { ledState = RENDAH; } digitalWrite (ledPin, ledState); } } lain jika (pushpressed == 1) { Serial.println ("pushpressed is true"); ledState = RENDAH; digitalWrite (ledPin, ledState); } }
Fungsi ini digunakan untuk membandingkan slot waktu yang dipilih pengguna pada pukul 8 pagi dan mula membunyikan buzzer dan mengedipkan LED sehingga pengguna menekan butang berhenti. Begitu juga fungsi void at2pm () dan void at8pm digunakan untuk memulakan buzzer dan dipimpin pada 2pm dan 8pm.
batal at8am () {// fungsi untuk mula berdengung pada 8 pagi DateTime now = rtc.now (); if (int (now.hour ())> = buzz8amHH) { if (int (now.minute ())> = buzz8amMM) { if (int (now.second ())> buzz8amSS) { ////// /////////////////////////////////////////////// startBuzz (); ////////////////////////////////////////////////// /// } } } }
Ini adalah bagaimana anda boleh membuat Peringatan Perubatan Automatik anda sendiri menggunakan Arduino. Anda juga boleh menggunakan ESP8266 dengan Arduino untuk menjadikannya projek IoT yang akan dapat menghantar amaran e-mel kepada pengguna.
Kod Lengkap dan Video demonstrasi diberikan di bawah.