- Các thành phần cần thiết để nhắc nhở thuốc tự động bằng Arduino
- Nhắc nhở thuốc Arduino bằng cách sử dụng mạch Arduino
- Hoạt động của hệ thống nhắc nhở thuốc tự động
- Lập trình Arduino UNO cho Lời nhắc thuốc
Khi nói đến những người thân yêu của chúng ta, chúng ta luôn muốn họ luôn khỏe mạnh và cân đối. Nhưng điều gì sẽ xảy ra nếu họ bị ốm mà quên uống thuốc đúng giờ. Chúng tôi sẽ lo lắng, phải không? Tại các bệnh viện, có rất nhiều bệnh nhân và rất khó để nhắc nhở mọi bệnh nhân uống thuốc đúng giờ. Các cách truyền thống đòi hỏi nỗ lực của con người để nhắc nhở họ uống thuốc đúng giờ. Kỷ nguyên kỹ thuật số không tuân theo điều đó và chúng ta có thể sử dụng máy móc để làm điều đó. Ứng dụng của nhắc thuốc thông minh rất rộng rãi và có thể được sử dụng bởi bệnh nhân tại nhà, bác sĩ tại bệnh viện và nhiều nơi khác. Khi nhắc đến việc nhắc nhở, có thể có nhiều cách để nhắc nhở:
- Hiển thị nó trên một màn hình
- Gửi thông báo qua email hoặc điện thoại
- Sử dụng ứng dụng di động
- Báo thức buzz
- Sử dụng Bluetooth / Wi-Fi
- Nhận được một cuộc gọi
- Nhắc cho lần uống thuốc tiếp theo trong khi nhắc giờ hiện tại
Chúng ta có thể kết hợp các cách tùy theo nhu cầu. Để giữ cho mọi thứ đơn giản ở đây, chúng tôi đã thực hiện một Lời nhắc thuốc đơn giản bằng cách sử dụng Arduino nhắc nhở chúng ta uống thuốc 1 hoặc 2 hoặc 3 lần một ngày. Khoảng thời gian có thể được chọn bằng cách sử dụng các nút nhấn. Ngoài ra, nó còn hiển thị Ngày và Giờ hiện tại. Chúng tôi sẽ mở rộng nó sang các bài báo sắp tới của một dự án IoT trong đó thông báo qua email hoặc SMS sẽ được gửi đến người dùng. Lời nhắc thuốc này cũng có thể được tích hợp với Hệ thống theo dõi bệnh nhân.
Các thành phần cần thiết để nhắc nhở thuốc tự động bằng Arduino
- Arduino Uno (Chúng tôi cũng có thể sử dụng các bảng Arduino khác, như Pro mini, Nano)
- Mô-đun RTC DS3231
- Màn hình LCD 16x2
- Buzzer
- Led (bất kỳ màu nào)
- Breadboard
- Nút ấn
- Chiết áp 10K
- Điện trở 10K, 1K
- Dây nhảy
Nhắc nhở thuốc Arduino bằng cách sử dụng mạch Arduino
Sơ đồ mạch hoàn chỉnh để xây dựng một hộp thuốc thông minh sử dụng Arduino được hiển thị bên dưới
Dưới đây là các kết nối chân của Arduino với các thiết bị ngoại vi khác nhau
Ghim ngoại vi Arduino Pins
- 2 -----------------------------> D7 của Màn hình LCD 16x2
- 3 -----------------------------> D6 của Màn hình LCD 16x2
- 4 -----------------------------> D5 của Màn hình LCD 16x2
- 5 -----------------------------> D4 của Màn hình LCD 16x2
- 7 -----------------------------> Nút nhấn thứ 3
- 8 -----------------------------> Nút nhấn thứ 2
- 9 -----------------------------> Nút nhấn đầu tiên
- 11 -----------------------------> Chân EN của Màn hình LCD 16x2
- 12 -----------------------------> Chân RS của Màn hình LCD 16x2
- 13 -----------------------------> + Ve Pin của Buzzer và Led
- A0 -----------------------------> Nút nhấn dừng
- A4 -----------------------------> SDA của DS3231
- A5 -----------------------------> SCL của DS3231
- 3.3V -----------------------------> Vcc của DS3231
- Gnd -----------------------------> Gnd
Trong Dự án Nhắc nhở Thuốc này, RTC DS3231 được giao tiếp thông qua giao thức I2C với Arduino Uno. Bạn cũng có thể sử dụng IC RTC DS1307 để đọc thời gian với Arduino. RTC DS3231 cũng có bộ nhớ 32k có sẵn có thể được sử dụng để lưu trữ dữ liệu bổ sung. Mô-đun RTC được cấp nguồn qua chân 3.3V của Arduino una. Màn hình LCD 16x2 được giao tiếp bằng SPI. Một âm báo r được sử dụng để cảnh báo và nhắc nhở rằng đã đến lúc phải uống thuốc. Bốn nút nhấn được sử dụng, mỗi nút có tính năng chọn riêng biệt. Nút nhấn đầu tiên được sử dụng để nhắc nhở uống thuốc một lần mỗi ngày. Nút nhấn thứ hai được sử dụng để nhắc nhở hai lần mỗi ngày và nút nhấn thứ ba được sử dụng để nhắc nhở ba lần mỗi ngày. Nút nhấn thứ tư được sử dụng để dừng còi khi người dùng nghe thấy cảnh báo.
Hoạt động của hệ thống nhắc nhở thuốc tự động
Các Alarm Pill Reminder sử dụng nguồn điện 5V cung ứng. Khi lần đầu tiên khởi động, nó hiển thị một bài mát-xa chào mừng là “ Chào mừng bạn đến với Circuit Digest ”. Màn hình LCD được thiết lập để xoay vòng trong ba màn hình. 1 st màn hình chương trình xoa bóp là “ giữ gìn sức khỏe, Get Well Soon ”. Màn hình thứ hai là màn hình trợ giúp cho biết nhấn nút nhấn chọn để chọn bất kỳ một khoảng thời gian nào cần nhắc (một lần / hai lần / ba lần trong một ngày). Khe thời gian có thể thay đổi trong chương trình và có thể được cấu hình cho phù hợp. Hiện tại, chúng tôi đã sửa lỗi này thành ba khoảng thời gian tức là 8 giờ sáng, 2 giờ chiều và 8 giờ tối.
Chúng tôi đã chia các khe thời gian thành ba chế độ. Chế độ 1 chọn lấy thuốc 1 lần / ngày vào lúc 8h sáng khi người dùng nhấn nút ấn 1 lần. Chế độ 2 chọn lấy thuốc 2 lần / ngày vào 8h sáng và 20h tối khi người dùng nhấn nút nhấn thứ 2. Chế độ 3 chọn uống thuốc ba lần / ngày vào lúc 8h sáng, 2h chiều và 8h tối nếu người dùng nhấn nút nhấn thứ 3.
Chúng tôi cũng có thể thêm một tính năng để báo lại bộ rung trong 10 phút (không có trong dự án này). Khi người dùng chọn các vị trí mong muốn bằng cách nhấn các nút nhấn, đầu vào của người dùng sẽ được ghi lại và thời gian được lấy từ RTC. Khi thời gian khớp với khoảng thời gian đã chọn thì bộ rung bắt đầu kêu. Người dùng có thể dừng bộ rung bằng cách nhấn nút DỪNG. Quá trình tương tự tiếp tục cho lời nhắc vị trí tiếp theo. Quá trình hoàn chỉnh được hiển thị trong Video được đưa ra ở cuối cuộc thảo luận này.
Lập trình Arduino UNO cho Lời nhắc thuốc
Rất dễ dàng để viết chương trình khi bạn đã nghĩ ra các cách để nhắc nhở việc uống thuốc. Tại đây, nó sẽ hiển thị lời nhắc trên màn hình, bấm còi và cho biết bằng đèn LED. Nó cũng có tùy chọn để chọn ba khoảng thời gian (một lần / hai lần / ba lần mỗi ngày) và khi đến thời gian, nó sẽ bắt đầu cảnh báo bệnh nhân bằng cách bấm còi. Sau đó, toàn bộ hệ thống sẽ giống như sau:
Người dùng nhận hướng dẫn trợ giúp trên màn hình> Người dùng chọn các khoảng thời gian (một lần / ngày, hai lần / ngày, ba lần / ngày)> In thông báo xác nhận trên màn hình> Bắt đầu giữ thời gian> Buzzer và đèn LED bắt đầu khi thời gian khớp với thời điểm người dùng đã chọn> Người dùng dừng lại nhấn nút nhấn dừng> Kết thúc
Chúng tôi có thể thay đổi chương trình và phần cứng nếu chúng tôi muốn thêm nhiều tính năng hơn. Để hiểu một cách đơn giản hơn, chúng tôi đã chia nhỏ chương trình thành các hàm nhỏ. Các chức năng rất dễ hiểu và thực hiện. Chương trình hoàn chỉnh được đưa ra ở cuối dự án này. Hãy bắt đầu với chương trình.
Vì chúng tôi đã sử dụng các thiết bị ngoại vi khác như Màn hình LCD 16x2, RTC DS3231, vì vậy trước tiên chúng tôi phải bao gồm các thư viện f hoặc cái đó. Thư viện yêu cầu như sau:
Thư viện EEPROM được sử dụng để theo dõi đầu vào do người dùng lựa chọn nếu Arduino không được bật. Và khi người dùng bật Arduino, nó sẽ nhận được trạng thái trước đó của các nút nhấn bằng cách sử dụng thư viện EEPROM. Thư viện Wire.h được sử dụng vì mô-đun RTC DS3231 được giao tiếp bằng I2C.
Luôn kiểm tra xem RTC có được nối dây đúng cách hay không, vì RTC sẽ đóng một vai trò quan trọng trong việc lưu giữ thời gian của toàn bộ hệ thống nhắc nhở.
if (! rtc.begin ()) {// kiểm tra xem rtc có được kết nối không Serial.println ("Không tìm thấy RTC"); trong khi (1); } if (rtc.lostPower ()) { Serial.println ("RTC bị mất nguồn, hãy đặt thời gian!"); }
Việc điều chỉnh thời gian có thể được thực hiện theo hai cách, hoặc tự động sử dụng thời gian biên dịch hệ thống hoặc bằng cách nhập thủ công. Khi chúng tôi đã thiết lập thời gian, hãy bình luận các dòng bên dưới trừ khi bạn muốn thay đổi lại thời gian RTC.
rtc.adjust (DateTime (F (__ DATE__), F (__ TIME__))); //rtc.adjust(DateTime(2019, 1, 10, 7, 59, 52));
Câu lệnh chuyển đổi này được sử dụng để đọc trạng thái đã lưu trước đó của nút nhấn và tiếp tục trạng thái để có thời gian nhắc thích hợp và chính xác.
val2 = EEPROM.read (addr); // đọc giá trị đã lưu trước của nút nhấn để bắt đầu từ vị trí nó được để lại trước đó switch (val2) { case 1: Serial.println ("Đặt cho 1 / ngày"); push1state = 1; push2state = 0; push3state = 0; pushVal = 01; phá vỡ; case 2: Serial.println ("Đặt cho 2 / ngày"); push1state = 0; push2state = 1; push3state = 0; pushVal = 10; phá vỡ; case 3: Serial.println ("Đặt cho 3 / ngày"); push1state = 0; push2state = 0; push3state = 1; pushVal = 11; phá vỡ; }
Câu lệnh này được sử dụng để lấy mili sử dụng cho việc định thời gian và kiểm soát chu kỳ màn hình khoảng thời gian xác định.
currentMillisLCD = millis (); // bắt đầu mili để chuyển đổi màn hình LCD trong khoảng thời gian xác định
Bắt đầu đọc các chân kỹ thuật số được kết nối với các nút nhấn.
push1state = digitalRead (push1pin); push2state = digitalRead (push2pin); push3state = digitalRead (push3pin); stopinState = digitalRead (stopPin);
Chức năng dưới đây được sử dụng để đọc trạng thái nút nhấn và ghi nó vào EEPROM. Bất cứ khi nào nhấn nút nhấn, trạng thái được ghi vào EEPROM. Ngoài ra, nó còn in thông báo trên màn hình LCD về lựa chọn đầu vào của người dùng đã chọn. Tương tự, các hàm push2 () và push3 () được sử dụng.
void push1 () {// hàm đặt lời nhắc 1 lần / ngày if (push1state == 1) { push1state = 0; push2state = 0; push3state = 0; // pushPressed = true; EEPROM.write (addr, 1); Serial.print ("Push1 Đã viết:"); Serial.println (EEPROM.read (addr)); // để gỡ lỗi pushVal = 1; // lưu trạng thái của nút nhấn-1 lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Bộ lời nhắc"); lcd.setCursor (0, 1); lcd.print ("cho Một lần / ngày!"); chậm trễ (1200); lcd.clear (); } }
Chức năng bên dưới được sử dụng để dừng còi và led. Nó luôn luôn tốt để đưa ra đề xuất. In thông báo gợi ý trên màn hình “Uống thuốc với nước ấm”.
void stopPins () {// chức năng ngừng ù khi người dùng ấn nút stop if (stopinState == 1) { // stopinState = 0; // pushPressed = true; ấn vào = 1; lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Uống Thuốc"); lcd.setCursor (0, 1); lcd.print ("với Nước ấm"); chậm trễ (1200); lcd.clear (); } }
Chức năng dưới đây không phụ thuộc vào thời gian lưu giữ nhưng luôn xoay vòng trong ba màn hình giúp người dùng. Vì chúng tôi đang chăm sóc bệnh nhân, hãy in lời chào mừng vì chúng tôi biết rằng hỗ trợ tinh thần rất hữu ích trong việc chữa lành bệnh nhân trong thời gian nhanh hơn. Bạn có thể chọn thông điệp sáng tạo của riêng bạn. Hãy in một thông điệp là “Giữ gìn sức khỏe, sớm khỏe lại”.
Màn hình thứ hai dùng để hướng dẫn bệnh nhân là “Nhấn các nút để nhắc nhở..”. Màn hình thứ ba được sử dụng để hiển thị ngày và giờ hiện tại.
void changeScreen () {// hàm cho Screen Cycling // Bắt đầu chuyển đổi màn hình mọi khoảng thời gian đã xác địnhLCD if (currentMillisLCD - beforeMillisLCD> khoảngLCD) // lưu lần cuối cùng bạn thay đổi màn hình { beforeMillisLCD = currentMillisLCD; màn hình ++; if (screen> maxScreen) { screen = 0; // hết màn hình -> bắt đầu từ 1 } isScreenChanged = true; } // Bắt đầu hiển thị màn hình hiện tại if (isScreenChanged) // chỉ cập nhật màn hình nếu màn hình bị thay đổi. { isScreenChanged = false; // đặt lại cho lần chuyển đổi tiếp theo (screen) { case getWellsoon: gwsMessege (); // thông báo sớm khỏe phá vỡ; case HELP_SCREEN: helpScreen (); // ngắt màn hình hướng dẫn ; case TIME_SCREEN: timeScreen (); // để in ngắt ngày và giờ; default: // KHÔNG ĐƯỢC ĐẶT. phá vỡ; } } }
Chức năng này được sử dụng để bắt đầu nhấp nháy và nhấp nháy đèn LED đồng thời nếu đã đến thời gian đã chọn.
void startBuzz () {// hàm bắt đầu ù khi thời gian đạt đến khoảng xác định // if (pushPressed == false) { if (pushpressed == 0) { Serial.println ("pushpressed là false trong nháy mắt"); unsigned long currentMillis = millis (); if (currentMillis - beforeMillis> = khoảng thời gian) { beforeMillis = currentMillis; // lưu lần cuối cùng bạn nhấp nháy đèn LED Serial.println ("Start Buzzing"); if (ledState == LOW) {// nếu đèn LED tắt, hãy bật đèn và ngược lại: ledState = HIGH; } else { ledState = LOW; } digitalWrite (ledPin, ledState); } } else if (pushpressed == 1) { Serial.println ("pushpressed là true"); ledState = LOW; digitalWrite (ledPin, ledState); } }
Chức năng này được sử dụng để so sánh khe thời gian mà người dùng đã chọn lúc 8 giờ sáng và bắt đầu bấm còi và nhấp nháy đèn LED cho đến khi người dùng nhấn nút dừng. Tương tự, các hàm void at2pm () và void at8pm được sử dụng để bắt đầu buzzer và dẫn đầu lúc 2 giờ chiều và 8 giờ tối.
void at8am () {// hàm bắt đầu kêu lúc 8 giờ sáng DateTime now = rtc.now (); if (int (now.hour ())> = buzz8amHH) { if (int (now.minute ())> = buzz8amMM) { if (int (now.second ())> buzz8amSS) { ////// ///////////////////////////////////////////////////// startBuzz (); //////////////////////////////////////////////////////// /// } } } }
Đây là cách bạn có thể đơn giản tạo Lời nhắc thuốc tự động bằng Arduino. Bạn cũng có thể sử dụng ESP8266 với Arduino để biến nó thành một dự án IoT có thể gửi cảnh báo qua email cho người dùng.
Mã hoàn chỉnh và Video trình diễn được cung cấp bên dưới.