- Arduino를 사용하는 자동 의학 알림에 필요한 구성 요소
- Arduino 회로를 사용하는 Arduino Medicine Reminder
- 자동 약품 알림 시스템 작동
- Medicine Reminder를위한 Arduino UNO 프로그래밍
사랑하는 사람의 경우 항상 건강하고 건강하게 유지하기를 원합니다. 그러나 그들이 아프고 제 시간에 약을 복용하는 것을 잊으면 어떻게 될까요? 걱정 되겠죠? 병원에는 환자가 많고 모든 환자에게 제 시간에 약을 복용하도록 상기시키기가 어렵습니다. 전통적인 방법은 약을 제 시간에 복용하도록 상기시키는 인간의 노력을 필요로합니다. 디지털 시대는 그것을 따르지 않고 우리는 그것을하기 위해 기계를 사용할 수 있습니다. Smart Medicine Reminder 의 응용 프로그램 은 매우 광범위하며 가정의 환자, 병원의 의사 및 기타 여러 곳에서 사용할 수 있습니다. 상기와 관련하여 상기시키는 방법은 여러 가지가 있습니다.
- 디스플레이에 표시
- 이메일 또는 전화로 알림 보내기
- 모바일 앱 사용
- 버즈 알람
- 블루투스 / Wi-Fi 사용
- 전화 받기
- 현재 시간을 상기시키면서 다음 약 시간을 상기
필요에 따라 방법을 결합 할 수 있습니다. 여기서 일을 간단하게 유지하기 위해 Arduino 를 사용하여 약을 하루에 1 ~ 2 ~ 3 회 복용하도록 상기시키는 간단한 Medicine Reminder를 만들었습니다. 시간 슬롯은 푸시 버튼을 사용하여 선택할 수 있습니다. 또한 현재 날짜와 시간을 보여줍니다. 이메일 또는 SMS 알림이 사용자에게 전송되는 IoT 프로젝트 수신 기사로 확장 할 것입니다. 이 약물 알림은 환자 모니터링 시스템과 통합 할 수도 있습니다.
Arduino를 사용하는 자동 의학 알림에 필요한 구성 요소
- Arduino Uno (Pro mini, Nano와 같은 다른 Arduino 보드도 사용할 수 있음)
- RTC DS3231 모듈
- 16x2 LCD 디스플레이
- 부저
- Led (모든 색상)
- 브레드 보드
- 푸시 버튼
- 10K 전위차계
- 10K, 1K 저항기
- 점퍼 와이어
Arduino 회로를 사용하는 Arduino Medicine Reminder
Arduino를 사용하여 스마트 약 상자 를 만드는 전체 회로도 는 다음과 같습니다.
아래는 다른 주변 장치와 Arduino 의 핀 연결 입니다.
Arduino 핀 주변 핀
- 2 -----------------------------> D7 of 16x2 LCD 디스플레이
- 3 -----------------------------> D6 of 16x2 LCD 디스플레이
- 4 -----------------------------> D5 of 16x2 LCD 디스플레이
- 5 -----------------------------> D4 of 16x2 LCD 디스플레이
- 7 -----------------------------> 세 번째 누름 버튼
- 8 -----------------------------> 두 번째 누름 버튼
- 9 -----------------------------> 첫 번째 누름 버튼
- 11 -----------------------------> 16x2 LCD 디스플레이의 EN 핀
- 12 -----------------------------> 16x2 LCD 디스플레이의 RS 핀
- 13 -----------------------------> 부저 및 LED의 + Ve 핀
- A0 -----------------------------> 누름 버튼 중지
- A4 -----------------------------> DS3231의 SDA
- A5 -----------------------------> DS3231의 SCL
- 3.3V -----------------------------> DS3231의 Vcc
- Gnd -----------------------------> Gnd
이 Medicine Reminder Project 에서 RTC DS3231은 I2C 프로토콜을 통해 Arduino Uno와 인터페이스됩니다. Arduino로 시간을 읽는 데 RTC IC DS1307을 사용할 수도 있습니다. RTC DS3231에는 추가 데이터를 저장하는 데 사용할 수있는 32k 메모리가 내장되어 있습니다. RTC 모듈은 Arduino uno의 3.3V 핀을 통해 전원이 공급됩니다. 16x2 LCD 디스플레이는 SPI를 사용하여 인터페이스됩니다. buzze의 r은 경고에 사용하고이 약을 복용하는 시간이다 것을 생각 나게한다. 각기 다른 선택 기능이있는 4 개의 푸시 버튼 이 사용됩니다. 첫 번째 푸시 버튼은 하루에 한 번 약을 복용하도록 상기시키는 데 사용됩니다. 두 번째 누름 버튼은 하루에 두 번 알리는 데 사용되며 세 번째 누름 버튼은 하루에 세 번 알리는 데 사용됩니다. 네 번째 푸시 버튼은 사용자가 경고를 들었을 때 부저를 중지하는 데 사용됩니다.
자동 약품 알림 시스템 작동
약 알림 경보는 5V 전원을 사용하여 구동된다. 처음 부팅 할 때 " Welcome to Circuit Digest " 로 환영 마사지가 표시됩니다. LCD 화면은 3 개의 화면으로 순환하도록 설정되어 있습니다. 첫 번째 화면에는“ 건강을 유지하고 곧 건강을 유지하십시오 ”라는 마사지가 표시됩니다. 두 번째 화면은 알림을 보낼 하나의 시간 슬롯을 선택하기 위해 선택 푸시 버튼을 누르라는 도움말 화면입니다 (하루에 한 번 / 두 번 / 세 번). 시간 슬롯은 프로그램에서 변경 가능하며 그에 따라 구성 할 수 있습니다. 지금 우리는 이것을 오전 8시, 오후 2시, 오후 8시의 세 가지 기간으로 수정했습니다.
시간 슬롯을 세 가지 모드로 나눴습니다. 모드 1은 사용자가 첫 번째 누름 버튼을 누를 때 오전 8시에 약을 하루에 한 번 복용하도록 선택 합니다. 모드 2는 사용자가 두 번째 누름 버튼을 누를 때 오전 8시와 오후 8시에 하루에 두 번 약을 복용하도록 선택 합니다. 모드 3은 사용자가 세 번째 누름 버튼을 누르면 오전 8시, 오후 2시 및 오후 8시에 약을 하루 세 번 복용하도록 선택 합니다.
10 분 동안 버저를 일시 중지하는 기능도 추가 할 수 있습니다 (이 프로젝트에는 포함되지 않음). 사용자가 푸시 버튼을 눌러 원하는 슬롯을 선택하면 사용자 입력이 기록되고 RTC에서 시간을 가져옵니다. 시간이 선택한 시간대와 일치하면 부저가 울립니다. 사용자는 STOP 버튼을 눌러 부저를 멈출 수 있습니다. 다음 슬롯 알림에도 동일한 프로세스가 계속됩니다. 이 기사의 끝에 주어진 비디오 에 완전한 프로세스가 표시됩니다.
Medicine Reminder를위한 Arduino UNO 프로그래밍
약 복용을 상기시키는 방법을 생각하면 프로그램을 작성하는 것은 매우 쉽습니다. 여기에서 디스플레이에 알림을 표시하고 부저를 울리고 LED를 사용하여 표시합니다. 또한 3 개의 시간 슬롯 (하루에 한 번 / 두 번 / 세 번)을 선택하고 시간이되면 부저를 울려 환자에게 경고를 시작하는 옵션이 있습니다. 그러면 전체 시스템이 다음과 같이 보입니다.
사용자가 디스플레이에 도움말 안내 표시> 사용자가 시간대 선택 (1 일 1 회, 1 일 2 회, 3 회 / 일)> 디스플레이에 확인 메시지 인쇄> 시간 유지 시작> 사용자가 선택한 슬롯과 시간이 일치 할 때 부저 및 LED 시작> 사용자가 멈춤 정지 누름 버튼 누르기> 종료
더 많은 기능을 추가하려면 프로그램과 하드웨어를 변경할 수 있습니다. 훨씬 더 간단하게 이해하기 위해 프로그램을 작은 기능으로 나누었습니다. 기능은 이해하고 구현하기 쉽습니다. 전체 프로그램은이 프로젝트가 끝날 때 제공됩니다. 프로그램부터 시작하겠습니다.
그 이후로 우리는 16x2 LCD 디스플레이, RTC DS3231과 같은 다른 주변 장치를 사용했기 때문에 먼저 라이브러리 f 또는 그 이상 을 포함 해야 합니다. 필요한 라이브러리는 다음과 같습니다.
EEPROM 라이브러리는 Arduino가 켜져 있지 않은 경우 사용자 선택 입력을 추적하는 데 사용됩니다. 그리고 사용자가 Arduino의 전원을 켜면 EEPROM 라이브러리를 사용하여 푸시 버튼의 이전 상태를 가져옵니다. RTC DS3231 모듈은 I2C를 사용하여 통신하므로 Wire.h 라이브러리가 사용됩니다.
RTC가 전체 알림 시스템의 시간을 유지하는 데 중요한 역할을 하므로 RTC가 제대로 연결되었는지 또는 손상되지 않았는지 항상 확인하십시오.
if (! rtc.begin ()) {// rtc가 연결되어 있는지 확인 Serial.println ( "RTC를 찾을 수 없습니다"); 동안 (1); } if (rtc.lostPower ()) {Serial.println ( "RTC의 전원이 끊겼습니다. 시간을 설정하겠습니다!"); }
시간 조정은 시스템 컴파일 시간을 자동으로 사용하거나 수동으로 입력하는 두 가지 방법으로 수행 할 수 있습니다. 시간을 설정했으면 RTC 시간을 다시 변경하지 않으려면 아래 줄에 주석을 추가하십시오.
rtc.adjust (DateTime (F (__ DATE__), F (__ TIME__))); //rtc.adjust(DateTime(2019, 1, 10, 7, 59, 52));
이 switch 문은 이전에 저장된 누름 버튼 상태를 읽고 적절하고 정확한 알림 시간을 위해 상태를 다시 시작하는 데 사용됩니다.
val2 = EEPROM.read (addr); // 이전에 저장된 누름 버튼의 값을 읽어 이전에 남아 있던 위치부터 시작합니다. switch (val2) { case 1: Serial.println ("Set for 1 / day"); push1state = 1; push2state = 0; push3state = 0; pushVal = 01; 단절; case 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 = millis (); // 정의 된 시간 간격으로 LCD 화면 전환을 시작합니다.
푸시 버튼에 연결된 디지털 핀 읽기를 시작합니다.
push1state = digitalRead (push1pin); push2state = digitalRead (push2pin); push3state = digitalRead (push3pin); stopinState = digitalRead (stopPin);
아래 기능은 누름 버튼 상태 를 읽고 EEPROM에 쓰는 데 사용됩니다. 누름 버튼을 누를 때마다 상태가 EEPROM에 기록됩니다. 또한 선택한 사용자 입력 선택의 LCD 디스플레이에 메시지를 인쇄합니다. 마찬가지로 push2 () 및 push3 () 함수 가 사용됩니다.
void push1 () {// 알림을 하루에 한 번 설정하는 함수 if (push1state == 1) { push1state = 0; push2state = 0; push3state = 0; // pushPressed = true; EEPROM.write (addr, 1); Serial.print ("Push1 Written:"); Serial.println (EEPROM.read (addr)); // 디버깅 용 pushVal = 1; // 누름 버튼 -1 상태 저장 lcd.clear (); lcd.setCursor (0, 0); lcd.print ("알림 설정"); lcd.setCursor (0, 1); lcd.print ("1 회 / 하루!"); 지연 (1200); lcd.clear (); } }
아래 기능은 부저를 멈추고 LED를 표시하는 데 사용됩니다. 항상 제안하는 것이 좋습니다. 디스플레이에 "따뜻한 물로 약 복용"제안 메시지를 인쇄합니다.
void stopPins () {// 사용자가 정지 누름 버튼을 누를 때 윙윙 거리는 것을 멈추는 기능 if (stopinState == 1) { // stopinState = 0; // pushPressed = true; pushpressed = 1; lcd.clear (); lcd.setCursor (0, 0); lcd.print ("약 복용"); lcd.setCursor (0, 1); lcd.print ("온수"); 지연 (1200); lcd.clear (); } }
아래 기능은 시간 유지와는 독립적이지만 항상 사용자에게 도움이되는 세 개의 화면으로 순환됩니다. 환자를 돌보는 동안 정서적 지원이 환자를 더 빨리 치료하는 데 매우 도움이된다는 것을 알고 있으므로 인사말을 인쇄 할 수 있습니다. 나만의 창의적인 메시지를 선택할 수 있습니다. "건강을 유지하고 곧 건강을 유지하십시오"라는 메시지를 인쇄 합시다 .
두 번째 화면은 "알림을 위해 버튼을 누르십시오."와 같이 환자에게 지시하는 것입니다. 세 번째 화면은 현재 날짜와 시간을 표시 하는 데 사용됩니다.
void changeScreen () {// 화면 순환 기능 // 정의 된 간격마다 화면 전환 시작 LCD if (currentMillisLCD-previousMillisLCD> intervalLCD) // 디스플레이를 마지막으로 변경 한 시간 저장 { previousMillisLCD = currentMillisLCD; 스크린 ++; if (screens> maxScreen) { screens = 0; // 모든 화면 끝-> 처음부터 시작 } isScreenChanged = true; } // (isScreenChanged) // 화면이 변경된 경우에만 화면을 업데이트하면 현재 화면 표시를 시작 합니다. { isScreenChanged = false; // 다음 반복 스위치 (화면)를 위해 재설정 { case getWellsoon: gwsMessege (); // 곧 메시지 받기 단절; case HELP_SCREEN: helpScreen (); // 지시 화면 중단; case TIME_SCREEN: timeScreen (); // 날짜 및 시간을 인쇄합니다 . break; 기본값: // NOT SET. 단절; } } }
이 기능은 선택한 시간에 도달하면 윙윙 거리는 소리와 LED 점멸을 동시에 시작하는 데 사용됩니다.
void startBuzz () {// 시간이 정의 된 간격에 도달하면 윙윙 거리기 시작하는 함수 // if (pushPressed == false) { if (pushpressed == 0) { Serial.println ("pushpressed is false in blink"); 부호없는 긴 currentMillis = millis (); if (currentMillis-previousMillis> = 간격) { previousMillis = currentMillis; // LED를 마지막으로 깜박 인 시간을 저장합니다. Serial.println ("Start Buzzing"); if (ledState == LOW) {// LED가 꺼져 있으면 켜고 그 반대도 마찬가지입니다. ledState = HIGH; } else { ledState = LOW; } digitalWrite (ledPin, ledState); } } else if (pushpressed == 1) { Serial.println ("pushpressed is true"); ledState = LOW; digitalWrite (ledPin, ledState); } }
이 기능은 오전 8시에 사용자가 선택한 시간 슬롯을 비교하는 데 사용되며 사용자가 정지 누름 버튼을 누를 때까지 부저가 울리고 LED가 깜박입니다. 마찬가지로 void at2pm () 및 void at8pm 함수 는 부저를 시작하는 데 사용되며 오후 2시와 8시에 표시됩니다.
void at8am () {// 오전 8시에 버즈 를 시작하는 함수 DateTime now = rtc.now (); if (int (now.hour ())> = buzz8amHH) { if (int (now.minute ())> = buzz8amMM) { if (int (now.second ())> buzz8amSS) { ////// ////////////////////////////////////////////// startBuzz (); ////////////////////////////////////////////////// /// } } } }
이것이 Arduino를 사용하여 자신 만의 자동 의학 알림을 만드는 방법입니다. 또한 Arduino와 함께 ESP8266을 사용하여 사용자에게 이메일 경고를 보낼 수있는 IoT 프로젝트로 만들 수 있습니다.
전체 코드 및 데모 비디오 가 아래에 제공됩니다.