- 必要なコンポーネント
- Arduinoを搭載したMAX30205–回路図
- ArduinoとMAX30205体温センサーのインターフェース
- ArduinoでMAX30205をプログラミングする
- Arduino体温計–テスト
医療または臨床用途の場合、人間の体温を測定することは、個人の健康状態を判断するための重要なパラメータです。ただし、温度を感知する方法はたくさんありますが、すべてが体温計の仕様を満たす精度を備えているわけではありません。MAX30205温度センサーは、このアプリケーション用に特別に設計されています。このセンサーは非接触温度センサーではないことに注意してください。非接触IR温度測定をお探しの場合は、以前に設計したMLX90614温度計を確認してください。
このプロジェクトでは、フィットネスバンドと簡単に接続できる、または医療目的で使用できるMAX30205人体温度センサーを接続します。Arduino Nanoをメインのマイクロコントローラーユニットとして使用し、7セグメントディスプレイを使用して華氏で検出された温度を表示します。センサーの使用方法がわかれば、好きなアプリケーションで使用できます。また、MAX30205と組み合わせて個人の体温を監視できるこのArduinoスマートウォッチプロジェクトを確認することもできます。
必要なコンポーネント
- Arduino NANO
- 7セグメントディスプレイ共通カソード-3個
- 74HC595-3個
- 680R抵抗-24個
- MAX30205モジュールボード
- 5V電源
- ブレッドボード
- たくさんのフックアップワイヤー
- Arduino IDE
- マイクロUSBケーブル
Arduinoを搭載したMAX30205–回路図
Arduinoを体温センサーMAX30205に接続するための完全な回路図を以下に示します。回路は非常にシンプルですが、7セグメントディスプレイを使用しているため、少し複雑に見えます。Arduinoを使用した7セグメントディスプレイは、非常に低コストで価値を大きく明るく表示するための優れた方法です。ただし、必要に応じて、これらの値をOLEDまたはLCDに表示することもできます。
ArduinoNanoは3つの74HC595に接続されています。3つの74HC595をカスケード接続して、3つの7セグメントディスプレイを接続するためのArduinoNanoからの追加の出力ピンを節約します。以前、Arduinoクロック、LEDボードディスプレイ、Arduinoスネークゲームなど、他の多くのプロジェクトで74HC595をArduinoとともに使用しました。
MAX30205モジュールボードはI2Cプロトコルと通信するため、追加のプルアップ抵抗が必要です。ただし、プルアップ抵抗はすでにモジュール内にあるため、追加のプルアップを必要としないモジュールボードはほとんどありません。したがって、モジュールボードに内部プルアップ抵抗があるかどうか、または外部プルアップが追加で必要かどうかを確認する必要があります。このプロジェクトで使用されるボードには、モジュールボード内にすでにプルアップ抵抗が組み込まれています。
ArduinoとMAX30205体温センサーのインターフェース
ここで使用されているセンサーは、マキシム・インテグレーテッドのMAX30205です。MAX30205温度センサーは0.1°Cの精度(37°Cから39°C)で温度を正確に測定します。センサーはI2Cプロトコルで動作します。
モジュールボードは5または3.3Vで動作します。ただし、ボードは5Vの動作電圧で使用するように構成されています。センサー自体が電力またはデータ通信関連の目的で最大3.3Vをサポートするため、ロジックレベルシフターも含まれています。
出力では、3つの74HC595、8ビットシフトレジスタを使用して、3つの7セグメントディスプレイをArduinoNANOとインターフェイスさせます。ピンダイアグラムは下の画像に表示されます-
74HC595のピンの説明は以下の表で見ることができます-
QA〜QHは、7セグメントディスプレイに接続されているデータ出力ピンです。3つの74HC595がカスケード接続されているため、最初のシフトレジスタのデータ入力ピン(PIN14)はArduino NANOに接続され、シリアルデータ出力ピンは次のシフトレジスタにデータを提供します。このシリアルデータ接続は、3番目の74HC595まで継続されます。
ArduinoでMAX30205をプログラミングする
このチュートリアルの完全なプログラムは、このページの下部にあります。このコードの説明は次のとおりです。まず、標準のArduinoI2Cライブラリヘッダーファイルをインクルードします。
#include
上記の行には、protocentralからArduinoが提供したライブラリが含まれます。このライブラリには、MAX30205センサーと通信するための重要な機能があります。ライブラリは以下のGitHubリンクから取得されます-
https://github.com/protocentral/ProtoCentral_MAX30205
ライブラリをインポートした後、以下に示すようにMAX30205オブジェクトデータを定義します-
#include "Protocentral_MAX30205.h" MAX30205 tempSensor;
次の2行は、パラメータを設定するために重要です。以下の線は、trueに設定されている場合、華氏の温度を示します。結果を摂氏で表示するには、行をfalseに設定する必要があります。
const bool fahrenheittemp = true; //華氏で温度を表示しています。摂氏で温度を表示する場合は、この変数をfalseにします。
一般的なカソードタイプの7セグメントディスプレイがハードウェアで使用されている場合は、以下の行を構成する必要があります。共通アノードを使用する場合はfalseにします。
const bool commonCathode = true; //共通のアノードを使用している場合は共通のカソード7セグメントを使用しており、値をfalseに変更します。const byte Digit_pattern = {// 7セグメントディスプレイを備えた74HC595アウトピン接続。// Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 // abcdefg DP 0b11111100、// 0 0b01100000、// 1 0b11011010、// 2 0b11110010、// 3 0b01100110、// 4 0b10110110、// 5 0b10111110、// 6 0b11100000 、// 7 0b11111110、// 8 0b11110110、// 9 0b11101110、// A 0b00111110、// b 0b00011010、// C 0b01111010、// d 0b10011110、// E 0b10001110、// F 0b00000001 //。};
上記の配列は、7セグメントディスプレイの数字パターンを格納するために使用されます。
セットアップ機能では、74HC595ピンのピンモードを設定した後、I2Cプロトコルと温度センサーの読み取り値が初期化されます。
void setup(){//セットアップコードをここに配置して、1回実行します。//シリアルポートを9600に設定しますSerial.begin(9600); delay(1000); // 74HC595制御ピンを出力として設定pinMode(latchPin、OUTPUT); // 74HC595のST_CPpinMode(clkPin、OUTPUT); // 74HC595のSH_CPpinMode(dtPin、OUTPUT); // 74HC595のDS // I2C Libsを初期化しますWire.begin(); //連続モード、アクティブモードでMAX30205温度の読み取りを開始しますtempSensor.begin(); }
ループでは、温度は関数 tempSensor.getTemperature() によって読み取られ、 temp という名前のfloat変数に格納されます。その後、華氏温度モードが選択されている場合、データは摂氏から華氏に変換されます。次に、変換された検出温度データの3桁が、さらに3桁に分割されます。これを行うには、以下のコード行が使用されます-
//現在の温度から3桁を分離します(temp = 31.23cの場合のように) int dispDigit1 =(int)temp / 10; // Digit1 3 int dispDigit2 =(int)temp%10; // Digit2 1 int dispDigit3 =(temp * 10)-((int)temp * 10); // Digit3 2
これで、分離された3桁は、74HC595シフトレジスタを使用して7セグメントディスプレイに送信されます。LSBは最初に3番目の74HC595を介して3番目の7セグメントディスプレイに表示されたため、3番目の桁が最初に送信されます。これを行うには、ラッチされたピンがLowに引き下げられ、関数 shiftOut() によってデータが74HC595に送信され ます。
同様に、残りの2桁目と1桁目もそれぞれの74HC595に送信されるため、残りの2つの7セグメントディスプレイが表示されます。すべてのデータを送信した後、ラッチピンを解放してHighに引き上げ、データ送信の終了を確認します。それぞれのコードは以下で見ることができます-
//数字を3、7セグメントディスプレイに表示します。digitalWrite(latchPin、LOW); if(commonCathode == true){shiftOut(dtPin、clkPin、LSBFIRST、digit_pattern); shiftOut(dtPin、clkPin、LSBFIRST、digit_pattern-digit_pattern); // 1.(Digit + DP)shiftOut(dtPin、clkPin、LSBFIRST、digit_pattern); } else {shiftOut(dtPin、clkPin、LSBFIRST、〜(digit_pattern)); shiftOut(dtPin、clkPin、LSBFIRST、〜(digit_pattern-digit_pattern)); // 1.(Digit + DP)shiftOut(dtPin、clkPin、LSBFIRST、〜(digit_pattern)); } digitalWrite(latchPin、HIGH);
Arduino体温計–テスト
以下に示すように、回路は2セットのブレッドボードで構成されています。センサーに指を置くと、温度が検出され、出力が7セグメントディスプレイに表示されます。ここでの値は92.1 * Fです。
プロジェクトの完全な動作は、以下にリンクされているビデオで見つけることができます。プロジェクトの構築を楽しんで、何か役立つことを学んだことを願っています。ご不明な点がございましたら、下のコメントセクションに残すか、フォーラムをご利用ください。