日別アーカイブ: 2025/11/16

コインECG251116

23年秋に,永松や津崎が作ったECGアンプを回収。波形を測定した。ブレッドボードの出来が悪い。手直ししてLT1167をAD8226 に入れ替えよう。

ピン配置は・・・ほう・・・。これはブレッドボード上で入れ替えられそうだね。ブレッドボードの配線を入れ替えて測定してみる。

こころなしかLT1167で測ったものよりきれいに感じる。・・・まぁちょっとわからないか。心電図回路の電源をコイン電池に変え,AD変換器を取り外し,コンピュータをnRf52840に入れ替えて測ると,無事に測れました。これで消費電流がどれくらいになってるのかわからないが,とりあえず動作するところまではきた。TLE2426が消費電流が多くコイン電池向きじゃないとのことで,変える必要がある。

nRf52840はちょっとクセがある。一度書き込むとシリアルポートが消失し,書き込めなくなる。これは,書き込んだプログラムがシリアル通信しない場合,「いらないよね?」とシリアル通信をOFFにされてしまうようだ。リセットボタンを二回早押しすると回復する。維持したい場合は,シリアル通信をプログラムに追加すればよいのだが,Adafruit_TinyUSBライブラリを入れないとダメなようだ。

#include <Adafruit_TinyUSB.h>  // XIAO nRF52840系でSerialを使うため

// サンプリング間隔(マイクロ秒)
// 1000us = 1kHzサンプリング
const uint32_t SAMPLE_INTERVAL_US = 2000;
const uint32_t threshold = 1900;

uint32_t lastMicros = 0;

void setup() {
  // LED(お好みで)
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);  // XIAOはHIGHで消灯のことが多い

  // USBシリアル開始
  Serial.begin(115200);
  // 開発中はPC接続を待ってもよい
  while (!Serial) {
    delay(10);
  }

  // ADC分解能を12bitに(0〜4095)
  analogReadResolution(12);
}

void loop() {
  uint32_t now = micros();

  // 一定間隔ごとにサンプリング
  if (now - lastMicros >= SAMPLE_INTERVAL_US) {
    lastMicros += SAMPLE_INTERVAL_US;  // ドリフトを抑える書き方

    // ADCチャネル0(A0ピン)の読み取り
    int value = analogRead(A0);

    // タイムスタンプ[us], ADC値 をCSV形式で送信
    //Serial.print(now);     // マイクロ秒タイムスタンプ
    //Serial.print(",");
    Serial.print(3000);
    Serial.print(",");
    Serial.print(1000);
    Serial.print(",");
    Serial.print(threshold);
    Serial.print(",");
    Serial.println(value); // 0〜4095(12bit)

    if(value>threshold){digitalWrite(LED_BUILTIN, LOW); }
    else{digitalWrite(LED_BUILTIN, HIGH); }

  }
}