工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

MAX30102で心拍数とSpO2を測定する

コンポーネントと消耗品

>
Arduino UNO
× 1
Adafruit OLED 128x32
× 1
ブザー
× 1
Maxim IntegratedMAX30102高感度パルスオキシメータおよび心拍数センサーウェアラブルヘルス
× 1

このプロジェクトについて

イントロ

こんにちは、このチュートリアルでは、MAX30102:パルスオキシメトリと心拍数モニターモジュールをArduino UNOボードとインターフェースし、このモジュール+ OLEDディスプレイとブザーを使用してBPMを測定するプロジェクトを作成します。

BPMは「1分あたりの心拍数」であり、通常の人の場合は約65〜75で、陸上競技の場合はそれよりも低い場合があります。SpO2は酸素飽和度であり、通常の人の場合は95%を超えます。

MAX30102はさまざまなモジュールで見つけることができます。私はWAVGATバージョンを持っていますが、ICがMAX30102である限り問題ありません。

コンポーネント

これが私が使うものです

<図> <図> <図> <図>

テスト:

チュートリアルで使用したコードは非常に明確で、Sparkfun_MAX3010xライブラリの単なる例です。

OLEDとブザー用に作成したコードは、「HeartRate」の例を修正したもので、センサーに指を置くように求められます。

<図>

指を置いたら、ブザーの「ビープ音」が心拍と同期するか、OLEDアニメーションが同期するまで、しばらく落ち着いてください。そうすると、正しいBPMを読み取ることができます。

注:コードでは、実際に平均BPMを出力しています。これは、平均4 BPMを実行するため、少し時間をとっておくだけでより正確になります。

<図>

OLEDのビットマップを作成する

表示される心臓(小さい)はビットマップ画像であり、センサーが心拍を検出するたびに、しばらくの間別の心臓(大きい)ビットマップ画像に切り替え、ブザーからのビープ音とともに心拍の印象を与えます。

これは、後でコードで呼び出すコード内の2つのビットマップです

<図>

これらを作成するには、画面に表示したいものの画像(黒と白の背景)を探します。サイズを忘れないでください。使用しているのは128x32ピクセルで、画像はそれよりも小さいです(32x32 px)および(24x21 px)

<図>

LCD Assistantをダウンロードして開きます(以下のいくつかの手順)

<図> <図> <図> <図> <図>

そして、ここにあなたの「数字」があります

<図>

そして、これが私がコードでそれを呼んだ方法です

  display.drawBitmap(5、5、logo2_bmp、24、21、WHITE);  

つまり

  display.drawBitmap(Starting x pos、Starting y pos、Bitmap name、Width、Height、Color);  

コードでわかるように、1つは指が検出されたときに呼び出され、もう1つは心拍が検出されたときに呼び出されます。

そして、ここであなたはあなたが望むものを作りに行きます。

コード

  • MAX_BPM_OLED_Buzzer.ino
MAX_BPM_OLED_Buzzer.ino Arduino
SparkFunMAX3010xライブラリから変更
 / *このコードはMAX30102 + 128x32 OLED i2c +ブザーとArduinoUNOで動作します*平均BPMを画面に表示し、アニメーションとブザー音を鳴らします*心拍が検出されるたびに*これは、HeartRateライブラリの例の修正バージョンです。*詳細についてはwww.surtrtech.comを参照するか、SurtrTechYouTubeチャンネルを参照してください* /#include  // OLEDライブラリ#include  #include  #include "MAX30105.h" // MAX3010x library#include "heartRate.h" //心拍数計算アルゴリズムMAX30105particleSensor; const byte RATE_SIZE =4; //これを増やすと、平均化が進みます。 4は良いです。byterates[RATE_SIZE]; //心拍数の配列byterateSpot =0; long lastBeat =0; //最後のビートが発生した時刻floatbeatsPerMinute; int beatAvg; #define SCREEN_WIDTH 128 // OLEDディスプレイ幅(ピクセル単位)#define SCREEN_HEIGHT 32 // OLEDディスプレイ高さ(ピクセル単位)#define OLED_RESET -1 //ピン番号をリセット(または-1 Arduinoリセットピンを共有する場合)Adafruit_SSD1306ディスプレイ(SCREEN_WIDTH、SCREEN_HEIGHT、&Wire、OLED_RESET); //表示名の宣言(display)static const unsigned char PROGMEM logo2_bmp [] ={0x03、0xC0、0xF0、0x06、0x71、0x8C、0x0C、0x1B、0x06、0x18、0x0E、0x02、0x10、0x0C、0x03、0x 、// Logo2とLogo3は、呼び出された場合にOLEDに表示される2つのbmp画像です。 0x08、0xB8、0x04、0xFF、0x37、0x08、0x01、0x30、0x18、0x01、0x90、0x30、0x00、0xC0、0x60、0x00、0x60、0xC0、0x00、0x31、0x80、0x00、0x1B、0 0x0E、0x00、0x00、0x04、0x00、}; static const unsigned char PROGMEM logo3_bmp [] ={0x01、0xF0、0x0F、0x80、0x06、0x1C、0x38、0x60、0x18、0x06、0x60、0x18、0x10 0x80、0x08、0x20、0x01、0x80、0x04、0x40、0x00、0x00、0x02、0x40、0x00、0x00、0x02、0xC0、0x00、0x08、0x03、0x80、0x00、0x08、0x01、0x80、0x00 0x01、0x80、0x00、0x1C、0x01、0x80、0x00、0x14、0x00、0x80、0x00、0x14、0x00、0x80、0x00、0x14、0x00、0x40、0x10、0x12、0x00、0x40、0x10、0x12 0x7E、0x1F、0x23、 0xFE、0x03、0x31、0xA0、0x04、0x01、0xA0、0xA0、0x0C、0x00、0xA0、0xA0、0x08、0x00、0x60、0xE0、0x10、0x00、0x20、0x60、0x20、0x06、0x 0x03、0x00、0x40、0xC0、0x01、0x80、0x01、0x80、0x00、0xC0、0x03、0x00、0x00、0x60、0x06、0x00、0x00、0x30、0x0C、0x00、0x00、0x08、0x10、0x 0x06、0x60、0x00、0x00、0x03、0xC0、0x00、0x00、0x01、0x80、0x00}; void setup(){display.begin(SSD1306_SWITCHCAPVCC、0x3C); // OLEDディスプレイを開始しますdisplay.display(); delay(3000); //センサーを初期化しますparticleSensor.begin(Wire、I2C_SPEED_FAST); //デフォルトのI2Cポート、400kHz速度のparticleSensor.setup();を使用します。 //デフォルト設定でセンサーを構成しますparticleSensor.setPulseAmplitudeRed(0x0A); //赤いLEDを低くして、センサーが実行中であることを示します} void loop(){long irValue =particleSensor.getIR(); // IR値を読み取ると、センサーに指があるかどうかを知ることができます//また、heartbeatif(irValue> 7000){//指が検出された場合display.clearDisplay(); //表示をクリアしますdisplay.drawBitmap(5、5、logo2_bmp、24、21、WHITE); //最初のbmp画像(小さなハート)を描画しますdisplay.setTextSize(2); //その近くに平均BPMが表示されます。display.setTextColor(WHITE);が必要な場合はBPMを表示できます。 display.setCursor(50,0); display.println( "BPM"); display.setCursor(50,18); display.println(beatAvg); display.display(); if(checkForBeat(irValue)==true)//心拍が検出された場合{display.clearDisplay(); //表示をクリアしますdisplay.drawBitmap(0、0、logo3_bmp、32、32、WHITE); // 2番目の画像(大きなハート)を描画しますdisplay.setTextSize(2); //それでも平均BPMを表示しますdisplay.setTextColor(WHITE); display.setCursor(50,0); display.println( "BPM"); display.setCursor(50,18); display.println(beatAvg); display.display();トーン(3,1000); //そしてブザーを100msトーンします。それを減らすことができます。delay(100); noTone(3); //ブザーを非アクティブにして「ビップ」の効果を出します//ビートを感知しました!長いデルタ=ミリ秒()-lastBeat; // 2ビート間の持続時間を測定lastBeat =millis(); beatsPerMinute =60 /(デルタ/ 1000.0); // BPMを計算するif(beatsPerMinute <255 &&beatsPerMinute> 20)//平均を計算するには、いくつかの値(4)を計算してから、いくつかの計算を行って平均を計算します{rates [rateSpot ++] =(byte)beatsPerMinute; //この読み取り値を配列に格納しますrateSpot%=RATE_SIZE; //ラップ変数//読み取り値の平均を取るbeatAvg =0; for(byte x =0; x  
SparkFunMAX3010xライブラリ
https://github.com/sparkfun/SparkFun_MAX3010x_Sensor_Library
Adafruit SSD1306
https://github.com/adafruit/Adafruit_SSD1306
AdafruitGFXライブラリ
https://github.com/adafruit/Adafruit-GFX-Library

回路図

両方のモジュールにi²cインターフェースがあります。GND付きの2ピンブザー(-)と抵抗付きの(+)を使用している場合は、D3

製造プロセス

  1. QR、RFID、温度検証によるアクセス制御
  2. 1線式DS18B20センサーとRaspberryPiを使用して温度を測定します
  3. ラズベリーパイと湿度センサーを備えたエアロポニックス
  4. リモート心拍数モニター
  5. RaspberryPiとPythonを使用したロボットの構築
  6. Portentaおよび熱電対センサー(MAX6675を使用)
  7. MPU-6050を搭載したArduinoジャイロスコープゲーム
  8. IoTを使用した心拍数モニター
  9. フォトレジスターによる心拍数の検出
  10. 銅による電気めっき
  11. Visual Components と Matterport – ProFeeder X による新しい自動化の可能性