- Arduinoを使用した自動医療リマインダーに必要なコンポーネント
- Arduino回路を使用したArduino医学リマインダー
- 自動医療リマインダーシステムの動作
- 薬のリマインダーのためのArduinoUNOのプログラミング
私たちの愛する人となると、私たちは常に彼らを健康で健康に保ちたいと思っています。しかし、彼らが病気になり、時間通りに薬を服用するのを忘れた場合はどうなりますか。心配ですよね?病院には多くの患者さんがいて、すべての患者さんに時間通りに薬を飲むように促すのは難しいです。伝統的な方法は、時間通りに薬を服用するように彼らに思い出させるために人間の努力を必要とします。デジタル時代はそれに従わず、私たちはそれを行うために機械を使用することができます。Smart Medicine Reminderのアプリケーションは非常に広く、自宅の患者、病院の医師、およびその他の多くの場所で使用できます。思い出させることになると、思い出させる方法はたくさんあります。
- ディスプレイに表示する
- メールまたは電話で通知を送信する
- モバイルアプリの使用
- バズアラーム
- Bluetooth / Wi-Fiの使用
- 電話を受ける
- 現在の時間を思い出しながら、次の薬の時間を思い出させる
必要に応じて組み合わせることもできます。ここでは物事を簡単にするために、Arduinoを使用して簡単な薬のリマインダーを作成しました。これは1日に1、2、3回薬を服用することを思い出させます。タイムスロットは、プッシュボタンを使用して選択できます。また、現在の日付と時刻が表示されます。さらに、電子メールまたはSMS通知がユーザーに送信されるIoTプロジェクトの受信記事に拡張します。この投薬リマインダーは、患者モニタリングシステムと統合することもできます。
Arduinoを使用した自動医療リマインダーに必要なコンポーネント
- Arduino Uno(Pro mini、Nanoなどの他のArduinoボードも使用できます)
- RTCDS3231モジュール
- 16x2LCDディスプレイ
- ブザー
- LED(任意の色)
- ブレッドボード
- ボタンを押す
- 10Kポテンショメータ
- 10K、1K抵抗器
- ジャンパー線
Arduino回路を使用したArduino医学リマインダー
Arduinoを使用してスマートな薬箱を構築するための完全な回路図を以下に示します
以下は、さまざまな周辺機器を備えたArduinoのピン接続です
Arduinoピン周辺ピン
- 2 -----------------------------> 16x2LCDディスプレイのD7
- 3 -----------------------------> 16x2LCDディスプレイのD6
- 4 -----------------------------> 16x2LCDディスプレイのD5
- 5 -----------------------------> 16x2LCDディスプレイのD4
- 7 -----------------------------> 3番目の押しボタン
- 8 -----------------------------> 2番目の押しボタン
- 9 -----------------------------> 1番目の押しボタン
- 11 -----------------------------> 16x2LCDディスプレイのENピン
- 12 -----------------------------> 16x2LCDディスプレイのRSピン
- 13 -----------------------------> +ブザーとLEDのVeピン
- A0 ----------------------------->プッシュボタンの停止
- A4 -----------------------------> DS3231のSDA
- A5 -----------------------------> DS3231のSCL
- 3.3V -----------------------------> DS3231のVcc
- Gnd -----------------------------> Gnd
このMedicineReminder Projectでは、RTCDS3231はI2Cプロトコルを介してArduinoUnoとインターフェースされます。 Arduinoで時間を読み取るためにRTCICDS1307を使用することもできます。 RTC DS3231には、追加データの保存に使用できる32kメモリも組み込まれています。 RTCモジュールは、Arduinounoの3.3Vピンから給電されます。 16x2 LCDディスプレイは、SPIを使用してインターフェースされます。BUZZEのrは警告するために使用し、それが薬を服用する時が来たことを思い出させています。4つのプッシュボタンが使用され、それぞれに個別の選択機能があります。最初の押しボタンは、1日1回薬を服用することを思い出させるために使用されます。 2番目のプッシュボタンは1日2回の通知に使用され、3番目のプッシュボタンは1日3回の通知に使用されます。 4番目のプッシュボタンは、ユーザーがアラートを聞いたときにブザーを停止するために使用されます。
自動医療リマインダーシステムの動作
ピルリマインダーアラームは、 5V電源を使用して供給されています。最初に起動すると、「 Welcome toCircuitDigest 」としてウェルカムマッサージが表示されます。LCD画面は3つの画面で循環するように設定されています。1回目のスクリーンショーは「とマッサージ すぐによくなり、滞在健康 」。2番目の画面は、選択プッシュボタンを押して通知するタイムスロットを1つ選択するように指示するヘルプ画面です(1日に1回/ 2回/ 3回)。タイムスロットはプログラムで変更可能であり、それに応じて構成できます。現在、これを午前8時、午後2時、午後8時の3つの期間に修正しました。
タイムスロットを3つのモードに分割しました。モード1は、ユーザーが最初のプッシュボタンを押した午前8時に1日1回薬を服用することを選択します。モード2は、ユーザーが2番目のプッシュボタンを押すと、午前8時と午後8時に1日2回薬を服用することを選択します。モード3は、ユーザーが3番目のプッシュボタンを押すと、午前8時、午後2時、午後8時に1日3回薬を服用することを選択します。
ブザーを10分間スヌーズする機能を追加することもできます(このプロジェクトには含まれていません)。ユーザーがプッシュボタンを押して目的のスロットを選択すると、ユーザー入力が記録され、RTCから時間が取得されます。選択したタイムスロットと時間が一致すると、ブザーが鳴り始めます。ユーザーはSTOPボタンを押すことでブザーを停止できます。同じプロセスが次のスロットリマインダーにも続きます。完全なプロセスは、この記事の最後にあるビデオに示されています。
薬のリマインダーのためのArduinoUNOのプログラミング
薬を飲むことを思い出させる方法を考えたら、プログラムを書くのはとても簡単です。ここでは、ディスプレイにリマインダーが表示され、ブザーが鳴り、LEDを使用して示されます。また、3つのタイムスロット(1日1回/ 2回/ 3回)を選択するオプションがあり、時間が到達すると、ブザーを鳴らして患者に警告を開始します。次に、システム全体は次のようになります。
ユーザーがディスプレイにヘルプの指示を表示>ユーザーがタイムスロットを選択(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( "Could n't find RTC"); while(1); } if(rtc.lostPower()){ Serial.println( "RTCが電力を失った、時間を設定しましょう!"); }
時間調整は、システムのコンパイル時間を自動的に使用する方法と、手動で入力する方法の2つの方法で実行できます。時間を設定したら、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; ブレーク; ケース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(){//リマインダーを1日1回設定する関数 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 をデバッグするため; //プッシュボタンの状態を保存-1lcd.clear(); lcd.setCursor(0、0); lcd.print( "リマインダーセット"); lcd.setCursor(0、1); lcd.print( "for Once / day!"); delay(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( "温水付き"); delay(1200); lcd.clear(); } }
以下の機能は時間管理とは無関係ですが、ユーザーを助けるために常に3つの画面で循環します。私たちは患者の世話をしているので、感情的なサポートがより迅速に患者を癒すのに非常に役立つことがわかっているので、挨拶メッセージを印刷しましょう。あなたはあなた自身の創造的なメッセージを選ぶことができます。「健康を維持し、すぐに元気になりなさい」というメッセージを印刷しましょう。
2番目の画面は、「ボタンを押してリマインダーを表示する」として患者に指示を与えるためのものです。 3番目の画面は、単に現在の日付と時刻を表示するために使用されます。
void changeScreen(){//画面サイクリングの関数 //定義されたintervalLCDごとに画面の切り替えを開始 if(currentMillisLCD --previousMillisLCD> intervalLCD)//最後に表示を変更した時間を保存 { previousMillisLCD = currentMillisLCD; screens ++; if(screens> maxScreen){ screens = 0; //すべての画面が->最初から開始 } isScreenChanged = true; } //現在の画面の表示を開始する if(isScreenChanged)//画面が変更された場合にのみ画面を更新します。 { isScreenChanged = false; //次の反復 スイッチ(画面)の ためにリセット{ case getWellsoon: gwsMessege(); //すぐに元気になるメッセージ ブレーク; ケースHELP_SCREEN: helpScreen(); //命令画面の 中断; ケースTIME_SCREEN: timeScreen(); //日付と時刻の 区切りを出力します; デフォルト: // 設定されていません。ブレーク; } } }
この機能は、選択した時間に達した場合に、LEDのブザーと点滅を同時に開始するために使用されます。
void startBuzz(){//時間が定義された間隔に達したときにブザーを開始する関数 // if(pushPressed == false){ if(pushpressed == 0){ Serial.println( "pushpressed is false in flash"); unsigned long 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プロジェクトにすることもできます。
完全なコードとデモンストレーションビデオを以下に示します。