指先の心拍数、指で心拍数波形を測定

心拍センサー

ここに画像の説明を挿入

今回紹介する脈拍センサーは、光電反射の原理で人の脈拍を検出する心拍数センサーです。人の血管の光透過率を心拍で測定します。センサーは、光電によって収集された信号をフィルタリングします。増幅などの一連の回路処理では、出力はアナログ電圧です。アナログ電圧の大きさを検出することで、心拍数データを処理および計算できます。

検出原理

センサーに指を付けてアナログ電圧を出力します。マイクロコントローラーを使用してリアルタイムで電圧を検出し、処理したデータをシリアルポート経由でコンピューターに出力し、コンピューターで処理して波形や心拍などを生成します。このプロセスは少し複雑に見えます。データはシングルチップマイクロコントローラーによって処理され、コンピューターがデータを処理します。公式プログラムがさまざまなタイプのシングルチップマイクロコントローラーを提供していることを心配しないでください(STM32、 arduino、51シリーズ)コンピューターでのデータ処理もオープンソースなので、ここでは必要ありません。ダウンロードできる限り、プログラムを書いて、突然安心するかどうか見てみましょう。

センサーフィルム

ここに画像の説明を挿入
新しいセンサーが到着したら、急いでワイヤーを接続しないでください。まず、フィルムを貼り付けて、前面と背面にバックルを付けます。1つは、電子機器の指からの発汗を防ぎ、もう1つは、指の接触による静電干渉を防ぎ、簡単です。修正するために、あまりナンセンスではありません。たとえば、投稿された2つの写真を見てください。
投稿する前に

図1センサーの前面
図2センサーの背面

フィルムを貼り付けた後

図1フロントフィルム
図2背面のベルクロ

arduino配線

ハードウェア配線の前に、センサーのピンを紹介しましょう。センサーには+、-、Sのマークが付いた3つのピンシルクスクリーンがあります。対応する特定の機能については、以下の表を参照してください。

ピン名 ピン機能
+ 正電源(3.3Vまたは5V使用可能)
- パワーネガティブ
S アナログ出力ピン

今号では、まずarduinoを使用して心拍数データを処理します。最初にarduino開発ボードへの接続を紹介します。arduinoのA0ポートはセンサーのアナログ出力を検出するために使用されます。他のピンは電源ピンです。 。配線については、次の表と下の図を参照してください。

arduino センサー
5V +
GND -
A0 S

ここに画像の説明を挿入

arduinoプログラムのダウンロード

データから次のファイルを見つけてダブルクリックして開きます(arduinoソフトウェアとドライバーはBaiduの公式ウェブサイトにインストールできます。データはたくさんあります)

ここに画像の説明を挿入
開発ボードとシリアルポートを選択します

ここに画像の説明を挿入
クリックしてダウンロードし、ダウンロードが完了するのを待ちます

ここに画像の説明を挿入
次に、STM32を使用する必要がない場合は、ホストコンピューターの使用に直接ジャンプできます。

STM32配線

STM32の配線をもう一度見てみましょう。上記のarduinoの使用法はインターネットと製品情報で説明されています。比較的簡単です。情報を見ると、STM32の使用はコードのみを提供し、説明するドキュメントはありません。操作方法(はい、情報が必要な場合は、以下にメッセージまたはプライベートチャットを残すことができます)、ここではSTM32F103ZET6ボードを使用して操作し、情報を開き、以下の32プログラムの圧縮パッケージを
ここに画像の説明を挿入
見つけ解凍して、プロジェクトを開いて、MDK5がインストールされていないBaiduのインストールチュートリアルを見つけます。はい(多くはオンライン)

ここに画像の説明を挿入
開いた後、最初に主な機能部分が表示され、主な機能コードを以下に投稿します

int main(void)
{
    
    
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_TIM3_Init();
  MX_USART2_UART_Init();
  HAL_TIM_Base_Start_IT(&htim3);
  while (1)
  {
    
    
    sendDataToProcessing('S', Signal);     // send Processing the raw Pulse Sensor data
    if (QS == true)
    {
    
    
      sendDataToProcessing('B',BPM);   // send heart rate with a 'B' prefix
      sendDataToProcessing('Q',IBI);   // send time between beats with a 'Q' prefix
      QS = false;                      // reset the Quantified Self flag for next time
    }
    HAL_Delay(20); //delay for 20ms
  }
}

上記のコードを確認してくださいMX_USART2_UART_Init();センサーの処理後にSTM32によって出力されたデータがシリアルポート2から出力されていることがわかります。STM32F103UART2はPA2としてTXに、PA3としてRXに対応します。シリアルポートが出力されていることを確認した後これらの2つのピンから、次のことを行うだけです。これらの2つのピンをUSB-TTLに接続した後、データをコンピューターに変換できます。

USB-TTL STM32システムボード
処方箋 PA2
TX PA3

関数MX_ADC1_Init();を開き、関数コードの一部を投稿します

void MX_ADC1_Init(void)
{
    
    
  ADC_ChannelConfTypeDef sConfig;
  
  hadc1.Instance = ADC1;
  hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
  hadc1.Init.ContinuousConvMode = DISABLE;
  hadc1.Init.DiscontinuousConvMode = DISABLE;
  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  hadc1.Init.NbrOfConversion = 1;
  HAL_ADC_Init(&hadc1);
  
  sConfig.Channel = ADC_CHANNEL_0;
  sConfig.Rank = 1;
  sConfig.SamplingTime = ADC_SAMPLETIME_13CYCLES_5;
  HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}

上記のコードを分析すると、使用されているSTM32のADC1チャネル0を確認できます。マニュアルのADCハウスキーパー比較表を確認して、ADC1チャネル0に対応するPA0ピンを確認してください。この収集では、PA0ピンを使用してセンサー信号を収集します。 。配線については、次の表を参照してください。

STM32 センサー
3v3 +
GND -
PA0 S

ここに画像の説明を挿入

STM32プログラムのダウンロード

ケーブルを接続した後、電源データケーブル、ST-LINK、USB-TTLをコンピュータに接続し、プログラムをダウンロードします(シリアルポートのダウンロードとST-LINKの両方を使用できます)。ST-LINKを使用してここからプログラムをダウンロードします。まず、マジックワンドのDEVICEをZE
ここに画像の説明を挿入
ここに画像の説明を挿入
DEBUGに変更し、次の図に従って構成します。
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
構成後、ここでST-LINKを使用し、クリックしてMDKに直接ダウンロードします。

ここに画像の説明を挿入
しばらくすると、STM32プログラムがダウンロードされます。

PCビュー

プログラムarduinoをダウンロードした後、直接コンピューターに接続できます。STM32の電源を入れたら、以前に接続したUSB-TTLをコンピューターに接続します。上位のコンピューターProcessingは、Baiduからダウンロードするか、以下のリンクをクリックしてダウンロードできます。 。
リンク:ダウンロードするには私をクリックしてください

ダウンロード後、ダブルクリックして下図のように開きます。
ここに画像の説明を挿入
ホストコンピューターのインターフェースに入った、ファイルをクリックし、開くをクリックし、データからPulseSensorAmpd_Processing_1dot1という名前のファイルを見つけて
ここに画像の説明を挿入
ここに画像の説明を挿入
開きます。開いた後、最初に実行します。次に終了して、シリアルポート番号を表示します。

ここに画像の説明を挿入
デバイスマネージャでarduinoまたはSTM32に対応するポート番号を見つけます。ここでは例としてarduinoを取り上げます。

ここに画像の説明を挿入

次に、コードの次の部分を見つけます。COM1、COM5、COM6、COM8は0、1、2、3に対応し、COM5は1に対応し、Serial.list()[0]の角かっこ内の0を1に変更して開きます。 COM5

 port = new Serial(this, Serial.list()[1], 115200);
 port.clear();  
 port.bufferUntil('\n');

前の手順で問題がない場合は、以下に示すように指を上に上げると波形が表示されます。強く結びすぎないでください。指を押すと、心拍数の測定値が高くなります。

ここに画像の説明を挿入

ここに画像の説明を挿入

総括する

運用工程は細心の注意を払っており、同様の記事が長く掲載されていますので、どうぞよろしくお願いいたします。今回の指先ハートビート号はこれで終了です。いつでもお気軽にメッセージを残してください。

おすすめ

転載: blog.csdn.net/qq_42250136/article/details/106781006