無線電子工学および電気工学の百科事典 服薬時刻を知らせるUSBインジケーター。 無線エレクトロニクスと電気工学の百科事典 定期的に薬を服用しなければならない高齢者は、投薬計画を自己遵守することが困難になることがよくあります。 しかし、場合によっては、健康だけでなく人生そのものも、医師の処方箋のタイムリーな実施に依存します。 問題を解決するための通常の組織的方法に加えて、技術的手段も使用できます。 これらには、入力されたスケジュールに従って毎日、服薬の必要性を思い出させる信号を発する提案された信号装置が含まれます。 多くの高齢者は、明らかな理由から、最新のソフトウェア製品を使用することが困難です。 信号装置に関して言えば、そのほとんどは、実際には多少近代化された目覚まし時計であり、XNUMX 種類または XNUMX 種類の薬を使用しても予定どおりに動作することができず、高齢者が使用するのに人間工学的に適合していません。 著者が開発した信号伝達装置の全体図。32つの独立したチャネル(薬物のセルの数に応じて)があり、各チャネルは1日あたり最大XNUMXつのリマインダー信号(合計XNUMXの信号)を送信するように構成できます。図に示されています。 XNUMX. 投薬スケジュールを入力または調整するには、このデバイスを USB 経由でコンピュータに接続し、特別なプログラムを起動します。 スケジュールがロードされると、アラームが自律的に動作します。
信号装置のハードウェア部分とソフトウェア部分は両方とも、視覚障害のある人を含む高齢者が使用できるように設計されています。 デバイスの取り扱いは非常に簡素化されており、プログラムでは作業の利便性を大幅に向上させるアルゴリズムとインターフェイスのソリューションが使用されています。 さらに、信号装置の設計には電気的安全対策が講じられています。 信号装置は約 230 V の主電源から電力を供給され、信号装置に停電が発生した場合には、内蔵の充電式バッテリーからの電力に自動的に切り替わります。 主電源からの消費電力は 5 W を超えず、800 mAh のバッテリー寿命は XNUMX 日間に達します。 これにより、長時間の停電時でもスケジュールの安全性が確保されます。 信号装置の図を図に示します。 2. 動作原理は単純です。マイクロコントローラ プログラムは毎秒、現在時刻の値を指定された信号時刻と比較します。 一致した場合、デバイスはビープ音を鳴らしますが、これは任意に選択されたいくつかのメロディーの 1 つであり、対応する薬剤セルの表示灯が点灯します。 同時に、この信号の時刻が XNUMX 日進みます。 音と光の信号をオフにするには、確認ボタン SBXNUMX を押すだけです。 信号装置で使用されるATmega8A-PU (DD1)マイクロコントローラは、2,7Vに低下した電源電圧で動作できます。 12 MHz のマイクロコントローラー クロック周波数は、ZQ1 水晶振動子によって設定されます。 サウンド信号ユニットは、UMS8-08 (DD2) ミュージック シンセサイザー チップ上に組み込まれています。 マイクロコントローラーは、シンセサイザー チップの入力 S にハイ レベルを印加することで音声信号をオンにします。 SB1ボタンを押すまで信号が鳴り続けます。 音源はピエゾエミッターHA1です。 ボリュームは可変抵抗器 R16 によって制御されます。 再生中にSB2ボタンを押すとメロディが並び替えられます。 UMS シリーズのマイクロ回路の詳細については、[1] を参照してください。 信号装置には、安定化電圧 5 V の変圧器電源があり、図には示されていませんが、統合安定化装置 7805 上の従来の方式に従って組み立てられています。主電源に停電が発生した場合、装置は GB1 からの電力に切り替わります。バッテリー。 消費される平均電流は 5 mA を超えません。 主電源電圧が存在する場合、VD5、VD6、R18 回路のおかげでバッテリーは継続的に再充電されます。 ただし、月に一度電源を切り、3 V の電圧まで放電し、外部充電器を使用して充電するというフル サイクルを実行することをお勧めします。 UMS8-08 ミュージック シンセサイザーのマイクロ回路は、UMS7 および UMS8 シリーズの別のものと交換できます。 それらはメロディーのセットのみが異なります。 抵抗器 R3102 の抵抗値が 3102 kΩ に減少した場合、KT3102B トランジスタを KT547G、KT315E、または輸入品の BC315、および KT17B または KT51G に置き換えることができます。 KD522B ダイオードの代わりに、KD521A、KD521B、KD522A、1N4148 などのダイオードが適しています。 すべての固定抵抗 - S2-33N または MLT。 酸化物コンデンサ C3 および C6 - K50-83、K50-16 または輸入品。 残りのコンデンサはセラミック K10-73-1b、K10-17v です。 希望の発光色の直径が 5 mm の場合、どの LED も適しています。 著者のバージョンでは、患者の邪魔をしないようにHL1として緑色のLEDが取り付けられており、残りは赤色です。 コネクタ XS1 - USB-BF ソケット。 GB1 バッテリーは、容量 80 mAh の単三形ニッケル水素電池 18 本で構成されています。 異なる容量の電池を使用することもできますが、3 V の電圧まで放電した電池の初期充電電流が公称容量の 0,1 に数値的に等しくなるような抵抗 RXNUMX を選択することが望ましいです。 信号装置は、寸法 70x50 mm、穿孔ピッチ 2,54 mm の標準的な穿孔取り付けプレート上に組み立てられます。 取り付け方法 - ホットメルト接着剤によるヒンジ固定。 回路が簡単なため、プリント配線は使用しませんでした。 HL2 ~ HL9 LED を除くデバイスのすべての要素は、寸法 67x80x80 mm の IP40 プラスチック電気接続箱に配置されています。 XS1 コネクタは小さなプリント基板上にあり、その反対側のボックスの壁に適切なサイズの穴が開けられています。 要素 HA1、HL1、GB1、R16、SB1 はホットグルーでボックスの蓋に固定されています。 操作に関係のないSB2ボタンは基板上にあります。 図上。 図 3 は、接続箱内の回路基板とリモート要素の相対位置を示しています。
薬剤は、引き出し付きの 112 つのセルからなる無線コンポーネント用の一般的なカセットに入れられます。 各セルの寸法は 55x120x224 mm です。 カセットホルダーの全体寸法は 110x120xXNUMX mm です。 セルは気密ではありませんが、かなり容量があるため、医薬品は元のパッケージに保管する必要があります。 カセット ホルダーは、特定の種類の医薬品を保管するために必要な光からも保護します。 セルの前面パネルには、薬の名前が書かれた錠剤を入れるための溝が設けられています。 ジャンクションボックスはカセットの左側の壁に M3 ネジとナットで固定されています。 LED HL2 ~ HL9 は各セルの前面パネルに 75 つずつ配置されており、セル内の PVC チューブに敷設されカセットの背面で束ねられたフレキシブル ワイヤによってデバイスに接続されています。 LED につながるワイヤの各ペアの長さの余裕により、セルが完全に開いた状態の 80 ~ XNUMX% まで自由に伸長できるようにする必要があります。 この記事に添付されている USB_HID_ Note.hex ファイルは、マイクロコントローラーのプログラム メモリにロードされる必要があります。 マイクロコントローラーの構成は、表に示す構成に対応している必要があります。 1. 正しく組み立てられたデバイスは調整の必要がありません。 LED の希望の明るさは、抵抗 R5 ~ R10 を選択して電流を 7 ~ 15 mA 以内で変更することで設定できます。 表1
USB 仕様の観点から見ると、このデバイスは HID クラス [2] に属し、よく知られた AVR V-USB ドライバ [3] に基づく USB インターフェイスのソフトウェア実装を備えています。 この場合、インターフェイスを低速 USB 1.1 モードに切り替える必要があることを思い出してください。仕様によれば、これはインターフェイス ライン D- と V の間に接続された抵抗を使用して行われます。バス (この場合、これは抵抗器 R4 です)。 ダイオード VD1 および VD2 を介してマイクロコントローラーを低電圧電源に接続するための一般的なオプションの XNUMX つが使用されました。 これらのダイオードの使用は、USB バスとマイクロコントローラーの論理レベルの一致に対する電圧の影響を排除するため、バッテリーの存在にもかかわらず望ましいものです。 マイクロコントローラーは、V-USB で許可されているクロック速度の 12 つである 4 MHz で動作します。 プログラムはAVR Studio 20100715開発環境のCで書かれており、プログラムテキスト(ファイルmain.c)には詳細な解説が含まれています。 vusb-4 ドライバー リリース [20100110] と WinAVR-5 コンパイラー [XNUMX] が使用されました。 V-USB ライブラリは十分に文書化されているため、ここではプロジェクトの実装またはその機能に直接関連する側面のみを考慮します。 V-USB ライブラリに基づいてプログラムを作成する段階的なプロセスについては、[6] で詳細に説明されています。 AVR Studioでプログラムを作成する際に注意すべき主な点は次のとおりです。 - V-USB アーカイブの USBdrv フォルダーにあるすべてのファイルをプロジェクト フォルダーにコピーする必要があります。 - ファイル usbdrv.c、usbdrvasm.S、oddebug.c を AVR Studio プロジェクトに追加する必要があります (プロジェクト ツリーのコンテキスト メニュー項目「既存のソース ファイルの追加...」を使用)。 - プロジェクト設定 (プロジェクト → 構成オプション → 一般 → 周波数、Hz) で、マイクロコントローラーのクロック周波数を 12000000 Hz に設定する必要があります。 この値に基づいて、AVR Studio はコンパイラに対して V-USB が使用する F_CPU 定数を決定します。 必要な V-USB 構成は usbconfig.h ファイルに含まれており、このファイルもプロジェクト フォルダーに配置する必要があります。 標準の設定ファイルは、記事に添付されているものに置き換える必要があります。 テーブル内。 2 に、このファイルで定義されている最も重要な定数を示します。 USB HID デバイスを自由に開発できることは、重要な点に関連しています。つまり、V-USB ライブラリ [3] の USB-IDs-for-free.txt ドキュメントに従って、VID / PID 識別子のペアを使用する必要があります。 表2
*) この値は、プログラム内の PROGMEM usbHidReportDescriptor 文字配列のサイズと等しくなければなりません。 このプログラムは UNIX 時刻形式を使用しており、時刻値は 00 年 00 月 00 日の 01.01.1970:XNUMX:XNUMX UTC から経過した秒数です。 pdata 変数は、タイムスタンプ (XNUMX バイトの UNIX タイムスタンプ) を渡すために使用されます。 1 日に与えられるシグナルの最大数は、プログラム内で定数 NUM_CALLS によって指定されます。 サイズ NUM_CALLS+0 の u_time 配列は、時刻値を格納するために使用されます。 この場合、u_time[NUM_CALLS] 配列の要素には現在時刻が含まれ、残りの要素には信号の時刻が含まれます。 各チャネル (薬剤カセットのセル) には 3 つのアレイ要素があります。 たとえば、最初のセル - u_time[4] から u_time[7] までの要素、XNUMX 番目のセル - u_time[XNUMX] から u_time[XNUMX] までなどです。配列要素の値が XNUMX に等しい場合、対応する信号が考慮されます。非活性。 このアプローチにより、情報の送信と処理のアルゴリズムを簡素化できます。 パッケージ構造を記述する記述子と、usbFunctionWrite および usbFunctionRead 情報転送手順は、標準ソリューションに基づいています。 基本的な機能は、[3] のヘッダー ファイル usdrv.h で詳細に説明されています。 この手順には、処理チャネル数を確認するための条件が追加されています。 コンピュータは同期のために常に現在時刻を送信するため、デバイスがコンピュータから受信する配列要素の数は、送信した要素の数より XNUMX つ多くなります。 main() プロシージャの開始時に、I/O レジスタが設定され、クロック周波数分周係数が 256 に設定され、タイマ レジスタ TCNT1 に 1 秒の時間間隔を形成するのに必要な数がロードされます。 タイマー オーバーフロー割り込みはデフォルトで無効になっています。 その後、プログラムはメインループに入ります。 USB 接続がない場合、グローバル割り込みとタイマー 1 オーバーフロー割り込みが有効になり、for ループ内で、ゼロ以外の値を持つ u_time[i] 配列の各要素が現在時刻と等しいかどうかチェックされます。 一致が見つかった場合、対応するセルの音声信号と LED がオンになり、このチャネルの応答時間は 86400 秒 (XNUMX 日あたり) 増加します。 次に、入力 PB0 でレベルがチェックされます。 これが Low の場合 (ボタン SB1 を押して信号の受信を確認する)、すべての出力が Low 論理レベルに設定され、信号がオフになります。 これと並行して、毎秒、タイマー 1 のオーバーフローが発生すると、割り込み処理プロシージャ TIMER1_OVF_vect が起動されます。 TCNT1 カウンタのプリセットを復元し、u_time[NUM_CALLS] 配列要素の現在の時刻値を増分し、PB1 出力の状態を変更します (接続されている HL1 LED が 2 秒周期で点滅します)。 デバイスが USB に接続されている場合、PC5 入力は USB バスの Vbus ラインから High レベルを受け取ります。 この場合、if (PINC & (1<<5)) 条件によりタイマー 1 のオーバーフロー割り込みが無効になり、V-USB ドライバーがアクティブになります。 HL1 LED が点灯し、連続点灯します。 V-USBドライバーを起動すると、USB経由で情報のやり取りが可能になります。 usbPoll() 関数はループ内で呼び出され、情報交換がない場合でもインターフェイスをアクティブに保ちます。 情報転送プロセスについては、コンピュータ用プログラムに関する記事のセクションで詳しく説明します。 USB_HID_Note 信号デバイスにスケジュールを入力するためのコンピューター プログラムの検討に移りましょう。 メイン ウィンドウ (図 4) からわかるように、開発プロセスでは、年配のユーザーが使いやすいようにインターフェイスを最適化することに特別な注意が払われました。 このプログラムは、Windows XP、Windows Vista、Windows 7、Windows 8、Windows Server 2003、Windows Server 2008 で動作します。Windows 10 および Windows Server 2012 ではテストされていませんが、問題なく動作すると思われる理由があります。
アナンシエータをコンピュータに接続してプログラムを起動した後、画面上のボタンを押します。 "差し込む"。 接続試行の結果を示すメッセージが表示されます。 成功すると、画面上のボタンが使用可能になります。 「すべて読む」と "保存"。 スケジュールを入力するには、最初のドロップダウン リスト (セレクター) からセル番号を選択し、XNUMX 番目のリストからこのセルの信号番号を選択するだけで十分です。 次に、希望のシグナル時間を設定し、数字の左側にあるチェックボックスをクリックして、選択したセルとシグナルの組み合わせを有効または無効にし(フラグの色が変わります)、唯一の利用可能な行に薬剤の名前を書き込みます。 薬剤の名前はセル番号に関連付けられているため、行の内容は最初のセレクターが切り替えられた場合にのみ変更されます。 イネーブル フラグは、セル番号と信号番号の選択された組み合わせを参照します。 したがって、必要なすべてのセルに入力します。 セルのデフォルト状態はオフなので、すべてをアクティブにする必要はありません。 必要に応じて、セルの設定を変更できます。 入力された値は動的に保存されます。 画面上のボタンを押すことで スケジュールは信号デバイスに転送され、設定ファイルに書き込まれます。 転送結果にはメッセージが表示されます。 検出器に保存されているスケジュールは、画面上のボタンを押すことで読み取ることができます。 。 その後、プログラム ウィンドウで表示し、必要に応じて編集して、検出器にロードし直すことができます。 画面上のボタンを押す 対応するウィンドウ内の薬剤の名前を消去し、別の名前を書き込むことができるようにします。 信号装置の重要な機能は、USB に接続すると現在時刻のタイマーが停止することです。 コンピュータプログラムを終了した瞬間に、スケジュールと現在時刻が自動的に信号装置に書き込まれます(同期)。 したがって、プログラムを閉じた後は、実際の時間と「システム」時間の差を最小限に抑えるために、できるだけ早く USB ケーブルを信号デバイスから取り外してください。 ただし、この場合は数分の違いであっても重大ではないため、この特徴を排除するための対策は講じられていません。 USB_HID_Note プログラムの完了後、信号デバイスが誤って長時間コンピューターに接続されたままになった場合は、このプログラムを再度起動し、画面上のボタンを押すだけで十分です。 、その後 そしてすぐそこに またはプログラムを閉じてください。 アナンシエータによって正しいタイミングが復元され、その後 USB ケーブルを取り外しても構いません。 薬剤名はプログラム構成ファイルに保存され、信号装置が接続されるとコンピュータ画面に表示されます。 プログラムにスケジュールを入力するとともに、カセット ホルダーの各セルに適切な刻印が記載されたタグが確実に提供されるように注意する必要があります。 USB_HID_Note プログラムは、Qt 5.3.2 プログラミング環境の C++ で作成されています。 この環境が選ばれた理由は、無料のクロスプラットフォームで幅広い機能と、あらゆるレベルのアプリケーションを作成およびデバッグできる独自の組み込みツールと、インターフェイス ソリューションの柔軟性によるものです。 アプリケーションの実装タイプは Qt Widget です。 ウィジェットのソース コード - widget.cpp ファイル。 プロジェクト全体は、記事に添付されている USB_HID_Note_ pro.zip アーカイブにコンパイルされます。 このプログラムの機能は、SetupAPI および HID ライブラリの関数を直接呼び出すことです。 したがって、コンパイルが行われるコンピューターには、オペレーティング システムのバージョンに対応する setupapi.lib および hid.lib ファイルが必要です。 これらのファイルは通常、WinDDK に含まれています。 WinDDK パッケージ全体を完全にインストールする必要を避けるために、WinDDK 7600 からのさまざまなバージョンのファイルが作成者によって 16385.1 つの Winddk_libs フォルダーに収集されます。このフォルダーは、エディションの FTP サーバーで利用できます。 コンパイルとデバッグは、Windows 7、Windows Server 2008 R2、Windows Vista SP1、Windows Server 2003 SP1、Windows XP SP3 以降で実行できます。 .pro ファイルでは、たとえば表に示すように、ライブラリへの絶対パスを明示的に指定する必要があります。 3. 表3 プログラムのコンパイル済み実行可能ファイルは、構成ファイル (.cfg) およびスタイル (.qss) とともに、記事に添付されている USB_HID_Note フォルダーにあります。 必要な Qt ダイナミック ライブラリ (.dll ファイル) もそこにあります。 ご存知のとおり、この要件は Qt で開発されたアプリケーションには必須です。 検討中のケースにおけるこれらのライブラリのリストを表に示します。 4. 表4 最後の 5.3 つを除き、すべてのライブラリは ..ToolsQtCreator フォルダーからコピーされます。ただし、最後の 482 つは ..32mingw126_400pluginsplatforms からコピーされ、プログラムの作業フォルダーの適切なサブフォルダーに配置されます。 プログラムがコンパイルされたコンピューターからプログラムの作業フォルダーまたはシステム フォルダーに自分でコピーすることもできます (アーカイブ サイズ - XNUMX MB、解凍済み - XNUMX MB)。 プログラム アルゴリズムは、[7] に記載されている標準ソリューションに基づいています。 実装機能は、まず、さまざまなプログラミング言語の使用に関連付けられています (ソースの Delphi や C# で説明されているものとは対照的に)。 HID API および SetupAPI 関数を使用するには、それぞれ hidsdi.h および setupapi.h ヘッダー ファイルをインクルードする必要があります。 画面上のボタンのクリック ハンドラーは、on_Connect Button_clicked() プロシージャです。 まず、ドライバー関数 HidD_GetHidGuid によって、HID に関連付けられた GUID が特定されます。 次に、SetupAPI 関数が呼び出されて、インターフェイス列挙子が作成され、デバイスの HID 名が取得されます。 これについては、[7] ページで詳しく説明されています。 333. この場合、製品名やシリアル番号を特定する機能は意図的に使用されていません。 VID/PID ペアのみがチェックされます。 これは、デバイスの商用利用の可能性を回避するために行われます。 VID/PID 値は、global_vars.h ファイルの Dev_VID_PID 定数によって設定されます。 デバイスが検出されると、制御は HID ドライバーに戻ります。 CreateFile 関数はそのハンドルを要求し、HidD_GetPreparsedData はデバイス パラメータに関する情報を含むバッファへのポインタを返し、HidP_GetCaps はこれらのパラメータの値を含む構造体を返します。 レポート サイズをプログラム内で直接割り当てる一般的に使用される方法とは異なり、ここではその値は記述子から取得される Caps.FeatureReportByteLength 構造体の要素によって決定されます。 これにより、デバイス記述子のレポート サイズが変更されたときにプログラムを変更したり再コンパイルしたりする必要がない、より汎用的なソリューションを作成できます。 実際の情報交換は、対応する data_read () および data_transfer () プロシージャ内でセルの数に応じたサイクルで呼び出される HidD_Get Feature (読み取り) 関数と HidD_SetFeature (書き込み) 関数を使用して行われます。 すでに述べたように、コンピュータは同期のために常に現在時刻を送信するため、シグナラーが受信する配列要素の数は送信したものより XNUMX つ多くなります。 最も重要な手順の目的を説明する詳細な解説は、プログラムの本文に記載されています。 残りのプロシージャの目的は、標準または直感的なものです。たとえば、 on_comboBox_ currentIndexChanged() - comboBox インデックス変更イベント ハンドラです。 コメントアウトされた qDebug 行とその関連行は、プログラムのデバッグ専用です。 デバッグし、組み込みの Qt デバッガー ウィンドウで情報交換の進行状況を確認する必要がある場合は、これらの命令をすべてコメント解除する必要があります。 プログラムは一般的な設定を settings.cfg ファイルに保存します。 プレーンテキスト形式であり、必要に応じて手動で編集できます。 その [General] セクションにはセルの数 NUM_BOX=8 とセルあたりの信号の数 NUM_BOX_CALL=4 が含まれ、[view] セクションには画面上のプログラム ウィンドウの位置が整数で設定されます。 [names] セクションにはセルごとの薬剤名が含まれ、[used] セクションにはセルの活動フラグが含まれ、[times] セクションには UNIX タイムスタンプ形式の応答時間値が含まれます。 後者は、動作値が信号装置のマイクロコントローラーのメモリにあるため、本質的には主に情報提供です。 ファイルを手動で編集する場合は、名前パラメータが C/C++/Java ソース コード形式 (u3256 など) であることに注意してください。 結論として、デバイスによって与えられる信号の数を個別に変更したい人向けにいくつかの推奨事項を示します。 セルの数が固定されている場合、セルあたりの信号の数は比較的簡単に変更できます。 マイクロコントローラー プログラムでは、このために、まず NUM_CALLS 定数を変更する必要があります。 その値は、セルの数とセルあたりの信号の最大数の積に等しくなければなりません。 この記事で検討されているケースでは、8x4=32 に相当します。 次に、switch...case... プロシージャでは、各行の case ステートメントの数がセルごとの信号の数と等しくなければなりません。 この場合、case ステートメントの引数は 0 から NUM_CALLS-1 までの連続したシーケンスを形成する必要があります。 関数本体と Break ステートメントは変更されません。 その後、プログラムを保存して再コンパイルする必要があります。 コンピュータープログラムは調整の必要がありません。 settings.cfg ファイル内の NUM_BOX_CALL 定数 (セルごとの信号の数) の値を変更するだけで十分です。 マイクロコントローラーのプログラムに厳密に準拠する必要があります。 マイクロコントローラーとコンピューターのプログラムは、ftp://ftp.radio.ru/pub/2017/01/signal.zip からダウンロードできます。 文学
著者: D. パンクラティエフ 他の記事も見る セクション Медицина. 読み書き 有用な この記事へのコメント. 科学技術の最新ニュース、新しい電子機器: スターシップのための宇宙からのエネルギー
08.05.2024 強力なバッテリーを作成する新しい方法
08.05.2024 温かいビールのアルコール度数
07.05.2024
その他の興味深いニュース: ▪ 水素クロスオーバー Audi H-Tron Quattro ▪ 戦場のビデオ ▪ 宇宙で育つフムス
無料の技術ライブラリの興味深い資料: ▪ 記事 ロビンソン・クルーソーのさらなる冒険は描かれていますか? 詳細な回答 ▪ 記事コンリンギア・オリエンタリス。 伝説、栽培、応用方法 ▪ 記事 蛍光灯のスロットレス組み込み。 無線エレクトロニクスと電気工学の百科事典 ▪ 記事 AM および FM 信号のダイレクト コンバージョン受信機。 無線エレクトロニクスと電気工学の百科事典 このページのすべての言語 ホームページ | 図書館 | 物品 | サイトマップ | サイトレビュー www.diagram.com.ua |