- ส่วนประกอบที่จำเป็นสำหรับการแจ้งเตือนยาอัตโนมัติโดยใช้ Arduino
- Arduino Medicine Reminder โดยใช้ Arduino Circuit
- การทำงานของระบบเตือนการกินยาอัตโนมัติ
- การเขียนโปรแกรม Arduino UNO สำหรับการแจ้งเตือนยา
เมื่อพูดถึงคนที่เรารักเราต้องการให้พวกเขามีสุขภาพที่ดีและเหมาะสมอยู่เสมอ แต่จะเกิดอะไรขึ้นถ้าพวกเขาป่วยและลืมกินยาตรงเวลา เราคงกังวลใช่ไหม ที่โรงพยาบาลมีผู้ป่วยจำนวนมากและเป็นการยากที่จะเตือนให้ผู้ป่วยทุกคนกินยาให้ตรงเวลา วิธีการดั้งเดิมต้องใช้ความพยายามของมนุษย์ในการเตือนให้กินยาตรงเวลา ยุคดิจิทัลไม่เป็นไปตามนั้นและเราสามารถใช้เครื่องจักรเพื่อทำเช่นนั้นได้ แอปพลิเคชันSmart Medicine Reminderนั้นกว้างมากและสามารถใช้ได้กับผู้ป่วยที่บ้านแพทย์ในโรงพยาบาลและที่อื่น ๆ อีกมากมาย ในการเตือนความจำมีหลายวิธีในการเตือนความจำ:
- แสดงบนจอแสดงผล
- ส่งการแจ้งเตือนทางอีเมลหรือโทรศัพท์
- การใช้แอพมือถือ
- ปลุก Buzz
- ใช้ Bluetooth / Wi-Fi
- รับสาย
- เตือนเวลากินยาครั้งต่อไปในขณะที่เตือนเวลาปัจจุบัน
เราสามารถรวมวิธีต่างๆขึ้นอยู่กับความต้องการ เพื่อให้สิ่งต่าง ๆ ง่ายขึ้นที่นี่เราได้ทำMedicine Reminder โดยใช้ Arduinoซึ่งเตือนให้เราทานยา 1 หรือ 2 หรือ 3 ครั้งต่อวัน ช่องเวลาสามารถเลือกได้โดยใช้ปุ่มกด นอกจากนี้ยังแสดงวันที่และเวลาปัจจุบัน เราจะขยายไปยังบทความขาเข้าของโครงการ IoT ซึ่งจะมีการส่งอีเมลหรือ SMS แจ้งเตือนไปยังผู้ใช้ การแจ้งเตือนการใช้ยานี้สามารถรวมเข้ากับระบบตรวจสอบผู้ป่วยได้
ส่วนประกอบที่จำเป็นสำหรับการแจ้งเตือนยาอัตโนมัติโดยใช้ Arduino
- Arduino Uno (เราสามารถใช้บอร์ด Arduino อื่น ๆ ได้เช่น Pro mini, Nano)
- โมดูล RTC DS3231
- จอ LCD 16x2
- Buzzer
- LED (สีใดก็ได้)
- เขียงหั่นขนม
- ปุ่มกด
- โพเทนชิออมิเตอร์ 10K
- ตัวต้านทาน 10K, 1K
- สายจัมเปอร์
Arduino Medicine Reminder โดยใช้ Arduino Circuit
แผนภาพวงจรที่สมบูรณ์เพื่อสร้างกล่องยาอัจฉริยะโดยใช้ Arduinoแสดงไว้ด้านล่าง
ด้านล่างนี้คือการเชื่อมต่อพินของ Arduino กับอุปกรณ์ต่อพ่วงต่างๆ
Arduino Pins พินอุปกรณ์ต่อพ่วง
- 2 -----------------------------> D7 จาก 16x2 จอแสดงผล LCD
- 3 -----------------------------> D6 จาก 16x2 จอแสดงผล LCD
- 4 -----------------------------> D5 จาก 16x2 จอแสดงผล LCD
- 5 -----------------------------> D4 จาก 16x2 จอแสดงผล LCD
- 7 -----------------------------> ปุ่มกดที่ 3
- 8 -----------------------------> ปุ่มกดที่ 2
- 9 -----------------------------> ปุ่มกดที่ 1
- 11 -----------------------------> ขา EN ของจอ LCD 16x2
- 12 -----------------------------> ขา RS ของจอ LCD 16x2
- 13 -----------------------------> + Ve Pin ของ Buzzer และ Led
- A0 -----------------------------> หยุดกดปุ่ม
- A4 -----------------------------> SDA ของ DS3231
- A5 -----------------------------> SCL ของ DS3231
- 3.3V -----------------------------> Vcc ของ DS3231
- Gnd -----------------------------> Gnd
ในโครงการ Medicine Reminderนี้ RTC DS3231 ถูกเชื่อมต่อผ่านโปรโตคอล I2C กับ Arduino Uno คุณยังสามารถใช้ RTC IC DS1307 เพื่ออ่านเวลากับ Arduino RTC DS3231 ยังมีหน่วยความจำ 32k ในตัวซึ่งสามารถใช้เพื่อจัดเก็บข้อมูลเพิ่มเติมได้ โมดูล RTC ใช้พลังงานจากขา 3.3V ของ Arduino uno จอ LCD 16x2 เชื่อมต่อโดยใช้ SPI buzze R จะใช้ในการแจ้งเตือนและเตือนว่ามันถึงเวลาที่จะใช้ยาใช้ปุ่มกดสี่ปุ่มโดยแต่ละปุ่มมีคุณสมบัติการเลือกที่แตกต่างกัน ปุ่มกดแรกใช้สำหรับเตือนให้กินยาวันละครั้ง ปุ่มกดที่สองใช้เพื่อเตือนสองครั้งต่อวันและปุ่มกดที่สามใช้เพื่อเตือนสามครั้งต่อวัน ปุ่มกดที่สี่ใช้เพื่อหยุดเสียงกริ่งเมื่อผู้ใช้ได้ยินการแจ้งเตือน
การทำงานของระบบเตือนการกินยาอัตโนมัติ
ปลุกยาเตือนความจำที่มีการขับเคลื่อนโดยใช้อุปทาน 5V เมื่อรองเท้าบูทขึ้นครั้งแรกจะแสดงการนวดต้อนรับเป็น“ Welcome to Circuit Digest ” หน้าจอ LCD ถูกตั้งค่าให้วนเป็นสามหน้าจอ 1 เซนต์แสดงหน้าจอนวดว่า“ Stay สุขภาพ, Get Well เร็ว ๆ นี้ ” หน้าจอที่สองเป็นหน้าจอวิธีใช้ที่บอกให้กดปุ่มกดเพื่อเลือกช่องเวลาใดก็ได้เพื่อเตือนความจำ (หนึ่งครั้ง / สองครั้ง / สามครั้งในหนึ่งวัน) ช่องเวลาสามารถเปลี่ยนแปลงได้ในโปรแกรมและสามารถกำหนดค่าได้ตามนั้น ตอนนี้เราได้แก้ไขเป็นสามช่วงเวลาคือ 8.00 น., 14.00 น. และ 20.00 น.
เราได้แบ่งช่วงเวลาออกเป็นสามโหมด โหมด 1 เลือกที่จะใช้ยาวันละครั้ง / ที่ 08:00 เมื่อผู้ใช้กด 1 เซนต์ปุ่มกด Mode 2 เลือกที่จะใช้ยาสองครั้ง / วันที่ 08:00 และ 20:00 เมื่อผู้ใช้กด 2 ครั้งปุ่มกด โหมด 3 เลือกที่จะใช้ยาสามครั้ง / วันที่ 08:00, 14:00 และ 20:00 ถ้าผู้ใช้กด 3 ถปุ่มกด
นอกจากนี้เรายังสามารถเพิ่มคุณสมบัติในการเลื่อนเสียงกริ่งเป็นเวลา 10 นาที (ไม่รวมอยู่ในโปรเจ็กต์นี้) เมื่อผู้ใช้เลือกช่องที่ต้องการโดยกดปุ่มกดอินพุตของผู้ใช้จะถูกบันทึกและเวลาจะถูกนำมาจาก RTC เมื่อเวลาตรงกับช่วงเวลาที่เลือกแล้วเสียงกริ่งจะเริ่มดังขึ้น ผู้ใช้สามารถหยุดเสียงกริ่งได้โดยกดปุ่ม STOP กระบวนการเดียวกันจะดำเนินต่อไปสำหรับการแจ้งเตือนสล็อตถัดไป กระบวนการที่สมบูรณ์จะแสดงในวิดีโอที่ระบุไว้ที่ส่วนท้ายของส่วนท้ายนี้
การเขียนโปรแกรม Arduino UNO สำหรับการแจ้งเตือนยา
มันง่ายมากที่จะเขียนโปรแกรมเมื่อคุณคิดวิธีเตือนการกินยาได้ ที่นี่จะแสดงการแจ้งเตือนบนหน้าจอส่งเสียงสัญญาณเตือนและระบุโดยใช้ LED นอกจากนี้ยังมีตัวเลือกให้เลือกสามช่วงเวลา (หนึ่งครั้ง / สองครั้ง / สามครั้งต่อวัน) และเมื่อถึงเวลาจะเริ่มแจ้งเตือนผู้ป่วยโดยการกดกริ่ง จากนั้นระบบทั้งหมดจะมีลักษณะดังนี้:
ผู้ใช้จะได้รับคำแนะนำช่วยเหลือบนจอแสดงผล> ผู้ใช้เลือกช่วงเวลา (วันละครั้งสองครั้ง / วันสามครั้ง / วัน)> พิมพ์ข้อความยืนยันบนหน้าจอ> การรักษาเวลาเริ่มต้น> Buzzer และ LED เริ่มต้นเมื่อเวลาตรงกับช่องที่ผู้ใช้เลือก> ผู้ใช้หยุดตาม กดปุ่มหยุด> สิ้นสุด
เราสามารถเปลี่ยนโปรแกรมและฮาร์ดแวร์ได้หากต้องการเพิ่มคุณสมบัติเพิ่มเติม เพื่อให้เข้าใจง่ายขึ้นเราได้แยกโปรแกรมออกเป็นฟังก์ชันเล็ก ๆ ฟังก์ชั่นนี้เข้าใจง่ายและใช้งานได้ โปรแกรมที่สมบูรณ์จะได้รับในตอนท้ายของโครงการนี้ มาเริ่มโปรแกรมกันเลย
เนื่องจากเราใช้อุปกรณ์ต่อพ่วงอื่น ๆ เช่นจอ LCD 16x2, RTC DS3231 ดังนั้นก่อนอื่นเราต้องรวมไลบรารี fหรือสิ่งนั้น ไลบรารีที่ต้องการมีดังต่อไปนี้:
ไลบรารี EEPROM ใช้เพื่อติดตามอินพุตเลือกผู้ใช้หากไม่ได้เปิด Arduino และเมื่อผู้ใช้เปิด Arduino จะได้รับสถานะก่อนหน้าของปุ่มกดโดยใช้ไลบรารี EEPROM ไลบรารี Wire.h ถูกใช้เนื่องจากโมดูล RTC DS3231 มีการสื่อสารโดยใช้ I2C
ตรวจสอบเสมอว่าสาย RTC ถูกต้องหรือไม่หรือไม่เสียหายเนื่องจาก RTC จะมีบทบาทสำคัญในการรักษาเวลาของระบบเตือนทั้งหมด
ถ้า (! rtc.begin ()) {// ตรวจสอบว่า rtc เชื่อมต่อ Serial.println ("ไม่พบ RTC"); ในขณะที่ (1); } if (rtc.lostPower ()) { Serial.println ("RTC สูญเสียพลังงานให้ตั้งเวลา!"); }
การปรับเวลาสามารถทำได้สองวิธีโดยอัตโนมัติโดยใช้เวลาคอมไพล์ระบบหรือป้อนด้วยตนเอง เมื่อเราตั้งเวลาได้แล้วให้แสดงความคิดเห็นในบรรทัดด้านล่างเว้นแต่คุณต้องการเปลี่ยนเวลา RTC อีกครั้ง
rtc.adjust (DateTime (F (__ DATE__), F (__ TIME__))); //rtc.adjust(วันที่และเวลา (2019, 1, 10, 7, 59, 52));
นี้งบเปลี่ยนจะใช้ในการอ่านสถานะที่บันทึกไว้ก่อนหน้านี้ของปุ่มกดและการกลับมาทำงานของรัฐในการแจ้งเตือนเวลาที่เหมาะสมและถูกต้อง
val2 = EEPROM.read (แอด); // อ่านค่าที่บันทึกไว้โดยทั่วไปของปุ่มกดเพื่อเริ่มจากจุดที่ถูกทิ้งไว้ก่อนหน้านี้ สวิตช์ (val2) { กรณีที่ 1: Serial.println ("ตั้งค่าเป็นเวลา 1 / วัน"); push1state = 1; push2state = 0; push3state = 0; pushVal = 01; หยุดพัก; กรณีที่ 2: Serial.println ("Set for 2 / day"); push1state = 0; push2state = 1; push3state = 0; pushVal = 10; หยุดพัก; กรณีที่ 3: Serial.println ("Set for 3 / day"); push1state = 0; push2state = 0; push3state = 1; pushVal = 11; หยุดพัก; }
คำสั่งนี้ใช้เพื่อรับมิลลิวินาทีเพื่อใช้สำหรับกำหนดเวลาและควบคุมการหมุนเวียนหน้าจอช่วงเวลาที่กำหนด
currentMillisLCD = มิลลิวินาที (); // เริ่มมิลลิวินาทีสำหรับการสลับหน้าจอ LCD ตามช่วงเวลาที่กำหนด
เริ่มอ่านพินดิจิทัลที่เชื่อมต่อกับปุ่มกด
push1state = digitalRead (push1pin); push2state = digitalRead (push2pin); push3state = digitalRead (push3pin); stopinState = digitalRead (stopPin);
ด้านล่างนี้ฟังก์ชั่นที่ใช้ในการอ่านรัฐปุ่มกดและการเขียนไปยัง EEPROM เมื่อใดก็ตามที่ปุ่มกดถูกกดสถานะจะถูกเขียนลงใน EEPROM นอกจากนี้ยังพิมพ์ข้อความบนจอ LCD ของตัวเลือกอินพุตของผู้ใช้ที่เลือก ในทำนองเดียวกันฟังก์ชัน push2 () และ push3 () จะถูกใช้
เป็นโมฆะ push1 () {// ฟังก์ชั่นตั้งเตือนวันละครั้ง ถ้า (push1state == 1) { push1state = 0; push2state = 0; push3state = 0; // pushPressed = จริง; EEPROM.write (แอด, 1); Serial.print ("Push1 เขียน:"); Serial.println (EEPROM.read (addr)); // สำหรับการดีบัก pushVal = 1; // บันทึกสถานะของปุ่มกด -1 lcd.clear (); lcd.setCursor (0, 0); lcd.print ("ชุดเตือนความจำ"); lcd.setCursor (0, 1); lcd.print ("สำหรับวันละครั้ง!"); ล่าช้า (1200); lcd.clear (); } }
ด้านล่างนี้ฟังก์ชั่นที่ใช้ในการหยุดกริ่งและนำไปสู่เป็นสิ่งที่ดีเสมอที่จะให้ข้อเสนอแนะ พิมพ์ข้อความแนะนำบนหน้าจอ“ ทานยาด้วยน้ำอุ่น”
เป็นโมฆะ stopPins () {// ฟังก์ชั่นหยุดเสียงหึ่งเมื่อผู้ใช้กดปุ่มหยุดกด ถ้า (stopinState == 1) { // stopinState = 0; // pushPressed = จริง; pushpressed = 1; lcd.clear (); lcd.setCursor (0, 0); lcd.print ("ใช้ยา"); lcd.setCursor (0, 1); lcd.print ("ด้วยน้ำอุ่น"); ล่าช้า (1200); lcd.clear (); } }
ฟังก์ชั่นด้านล่างไม่ขึ้นอยู่กับการรักษาเวลา แต่จะวนรอบในสามหน้าจอเสมอซึ่งช่วยให้ผู้ใช้ ในขณะที่เราดูแลผู้ป่วยให้พิมพ์ข้อความทักทายเพราะเรารู้ว่าการสนับสนุนทางอารมณ์มีประโยชน์มากในการรักษาผู้ป่วยในเวลาที่รวดเร็วยิ่งขึ้น คุณสามารถเลือกข้อความสร้างสรรค์ของคุณเอง มาพิมพ์ข้อความว่า“ สุขภาพแข็งแรงหายเร็ว ๆ ”
หน้าจอที่สองมีไว้สำหรับให้คำแนะนำแก่ผู้ป่วยเป็น“ กดปุ่มเพื่อเตือน.. ” หน้าจอที่สามใช้เพื่อแสดงวันที่และเวลาปัจจุบัน
โมฆะ changeScreen () {// ฟังก์ชันสำหรับ Screen Cycling // เริ่มการสลับหน้าจอทุก ๆ ช่วงเวลาที่กำหนด หาก (currentMillisLCD - previousMillisLCD> intervalLCD) // บันทึกครั้งสุดท้ายที่คุณเปลี่ยนการแสดงผล { previousMillisLCD = currentMillisLCD; หน้าจอ ++; ถ้า (หน้าจอ> maxScreen) { หน้าจอ = 0; // ทุกหน้าจอ -> เริ่มจากวันที่ 1 } isScreenChanged = true; } // เริ่มแสดงหน้าจอปัจจุบัน ถ้า (isScreenChanged) // อัปเดตหน้าจอเฉพาะเมื่อหน้าจอมีการเปลี่ยนแปลง { isScreenChanged = false; // รีเซ็ตสำหรับ สวิตช์ การทำซ้ำครั้งต่อไป(หน้าจอ) { case getWellsoon: gwsMessege (); // ได้รับข้อความเร็ว ๆ นี้ หยุดพัก; กรณี HELP_SCREEN: helpScreen (); // ตัวแบ่ง หน้าจอคำสั่ง; กรณี TIME_SCREEN: timeScreen (); // พิมพ์วันที่และเวลา พัก; ค่าเริ่มต้น: // ไม่ได้ตั้งค่า หยุดพัก; } } }
ฟังก์ชั่นนี้ใช้เพื่อเริ่มส่งเสียงหึ่งและกะพริบ LEDพร้อมกันหากถึงเวลาที่เลือก
เป็นโมฆะ startBuzz () {// ฟังก์ชั่นเริ่มส่งเสียงพึมพำเมื่อถึงช่วงเวลาที่กำหนด // if (pushPressed == false) { if (pushpressed == 0) { Serial.println ("pushpressed is false in กะพริบ"); กระแสไฟยาวที่ไม่ได้ลงชื่อ = millis (); ถ้า (currentMillis - previousMillis> = ช่วงเวลา) { previousMillis = currentMillis; // บันทึกครั้งสุดท้ายที่คุณกะพริบ LED Serial.println ("Start Buzzing"); ถ้า (ledState == LOW) {// ถ้า LED ปิดอยู่ให้เปิดและในทางกลับกัน: ledState = HIGH; } else { ledState = LOW; } digitalWrite (ledPin, ledState); } } else if (pushpressed == 1) { Serial.println ("pushpressed is true"); ledState = ต่ำ; digitalWrite (ledPin, ledState); } }
ฟังก์ชั่นนี้ใช้เพื่อเปรียบเทียบช่วงเวลาที่ผู้ใช้เลือกในเวลา 8.00 น.และเริ่มส่งเสียงกริ่งและกะพริบ LED จนกว่าผู้ใช้จะกดปุ่มหยุด ในทำนองเดียวกันฟังก์ชั่น โมฆะ at2pm () และ void at8pm ใช้เพื่อเริ่มเสียงกริ่งและนำเวลา 14.00 น. และ 20.00 น.
เป็นโมฆะ at8am () {// ฟังก์ชั่นเพื่อเริ่ม ส่งเสียง พึมพำเวลา 8.00 น. DateTime now = rtc.now (); ถ้า (int (now.hour ())> = buzz8amHH) { if (int (now.minute ())> = buzz8amMM) { if (int (now.second ())> buzz8amSS) { ////// /////////////////////////////////////////////// startBuzz (); ////////////////////////////////////////////////// /// } } } }
นี่คือวิธีที่คุณสามารถสร้าง Automatic Medicine Reminder ของคุณเองโดยใช้ Arduino คุณยังสามารถใช้ ESP8266 กับ Arduino เพื่อทำให้เป็นโครงการ IoT ซึ่งจะสามารถส่งอีเมลแจ้งเตือนไปยังผู้ใช้ได้
รหัสที่สมบูรณ์และวิดีโอสาธิตได้รับด้านล่าง