AD8232 - Измерение частоты сердечных сокращений только при касании USB-разъема. Проблема с заземлением?

TL;DR

Я могу считать свой сердечный ритм, но мне нужно физически коснуться GND Arduino, иначе сигнал будет просто шумом.

Описание

Итак, я начал экспериментировать с Arduino и хотел попробовать модуль датчика сердечного ритма (AD8232).

Вот код, который я использую для этого:

const int CONNECTED_LED = 13;

const int LO_MINUS = 10;
const int LO_PLUS = 11;

bool disconnected = true;

enum State {
  CONNECTED,
  DISCONNECTED,
  LO_MINUS_DISCONNECTED,
  LO_PLUS_DISCONNECTED
};

enum State currentState = DISCONNECTED;


void setup() {
  Serial.begin(9600);
  pinMode(LO_MINUS, INPUT); // Настройка обнаружения отсоединения LO +
  pinMode(LO_PLUS, INPUT); // Настройка для обнаружения отведений LO -
}


void loop() {
  State nextState = getState();

  if (nextState != currentState) {
    // Сохраняем текущее состояние
    currentState = nextState;
    switch (nextState) {
      case DISCONNECTED:
        break;
      case LO_MINUS_DISCONNECTED:
        break;
      case LO_PLUS_DISCONNECTED:
        break;
    }
  }

  if (currentState == CONNECTED) {
    digitalWrite(CONNECTED_LED, HIGH);
    Serial.println(analogRead(A0));
  } else {
    digitalWrite(CONNECTED_LED, LOW);
    // Serial.println(-1);
  }

  delay(1);
}

State getState() {
  if (digitalRead(LO_MINUS) == 1 && digitalRead(LO_PLUS) == 1) {
    return DISCONNECTED;
  } else if (digitalRead(LO_PLUS) == 1) {
    return LO_PLUS_DISCONNECTED;
  } else if (digitalRead(LO_MINUS) == 1) {
    return LO_MINUS_DISCONNECTED;
  }
  return CONNECTED;
}

Вот как я соединяю платы (я уже дважды проверил)

AD8232  | Arduino UNO R3
------------------------
GND     |  GND
3.3v    |  3.3V
OUTPUT  |  A0
LD-     |  ~10
LD+     |  ~11
SDN     |  <not used>

Я использовал эту схему для подключения электродов:

Однако результатом является случайный сигнал, если только я не касаюсь разъема USB или заземления Arduino.

Ниже вы можете увидеть случайный сигнал и момент, когда я коснулся разъема. Я заметил это случайно после того, как нажал кнопку сброса, задаваясь вопросом, почему я получаю только этот случайный сигнал:

Итак... что здесь происходит? У меня подключены все три электрода.

Я даже пробовал использовать разные модули (дважды покупал AD8232), но обнаружил одинаковые проблемы с обоими модулями.

Если я коснусь чего-то еще, например, радиатора (обогревателя), то сигнал станет другим видом случайного. Это работает только при прикосновении к разъему.

Поскольку это похоже на проблему с заземлением, я проверил целостность цепи от контакта GND AR8232 до разъема USB, и целостность обеспечена.

Я недостаточно опытен (пока), чтобы увидеть проблему. Кто-нибудь?

, 👍0

Обсуждение

Учебник Sparkfun https://learn.sparkfun.com/tutorials/ad8232-heart-rate-monitor-hookup-guide/all ссылается на скетч, в котором также указаны контакты 10 и 11 (для обнаружения проблем с размещением/подключением электрода), которые вы игнорируете., @6v6gt

@ 6v6gt Я обновил свой код до того, что я использую. Оба электрода кажутся подключенными (лишь изредка я вижу разъединение), но большую часть времени я могу считывать значения с «A0». Просто она совсем не похожа на ЭКГ сердцебиения., @Stefan Falk

Вы питаете модуль 3,3 вольта? Если вы используете 5-вольтовый Uno, он увидит максимальное аналоговое показание около 675 для пиков в сигнале 3,3 вольта. Кажется, что есть некоторое отсечение в верхнем диапазоне сигнала., @6v6gt

Да, по тем туториалам и модулю питание должно быть 3,3В. Ничего из того, что я вижу, здесь не имеет смысла. Я пробовал некоторые проверки работоспособности, потому что начал думать, что, может быть, я случайно убил Atmega, но базовое «мигание светодиода» все еще работает нормально. Я совершенно не понимаю, чего эта штука хочет от меня XD, @Stefan Falk

Интересно, что ваш последовательный плоттер показывает диапазон в 50 единиц (образцов?) по оси X. Это будет около 50 мс, что для нормального сердечного ритма явно недостаточно. Последовательный плоттер с IDE версии 1.8.19 показывает диапазон в 500 единиц по оси X, который выглядит так же, как на снимках экрана с учебным пособием Sparkfun. Попробуйте увеличить задержку до тех пор, пока полная шкала не станет равной 3 или 4 нормальным сердечным сокращениям, или экспортируйте результаты, скажем, в Excel и постройте график там., @6v6gt

@ 6v6gt Я только что обновил код и сюжет. Странно.. Я уже пробовал несколько задержек. Кажется, что сердцебиение занимает около секунды (согласно Google), поэтому я пробовал 1, 10, 25, 50 и 100 миллисекунд, используя delay(), но всегда получаю хаотичные результаты. Как вы можете видеть выше, график не является непрерывным, как если бы электроды время от времени не были подключены. Это очень нервно, и я понятия не имею, почему. Если я нажимаю датчики на коже, среднее значение прыгает, но это все. Непонятно где проблема.., @Stefan Falk

В вашем коде есть несколько операторов Serial.println(), которые могут вызывать пробелы. У вас должен быть только один (символ новой строки) после печати строки данных (состоящей из 0, 750 и аналогового значения). Если получен плохой результат, просто напечатайте, скажем, 10 вместо аналогового значения, чтобы на плоттер отправлялись только числовые данные. Может быть, добавить четвертый график, который переключается, скажем, между 700 и 740 каждые 100 мс., @6v6gt

Пробовал это. Значения прыгают между 300 и 700 - я не могу понять, что происходит. Либо он полностью сломался, либо плоттер не работает должным образом . Я устанавливаю выходной контакт 13 в состояние HIGH, чтобы увидеть, подключен я или нет - этот индикатор мигает, поэтому все еще кажется, что соединения не работают должным образом . Я проверил все на непрерывность с помощью мультиметра, поэтому я не думаю, что есть проблема - за исключением, может быть, колодок, но я не использовал их раньше. На днях я проверил датчик дыма, который работал просто отлично.., @Stefan Falk

Вы увидите, что ограниченное количество сэмплов, которое позволяет плоттер IDE V2.xx Serial (по умолчанию), вызвало некоторую критику. Также в конце этой темы есть очевидное решение: https://github.com/arduino/arduino-ide/issues/803. Одна из ваших проблем заключается в том, что если вы увеличите задержку между выборками настолько, чтобы отобразить около 2 секунд данных (скажем, 40 мс), если разрешено только 50 выборок, вы можете пропустить интересные пики., @6v6gt

Я собирался опубликовать ту же ссылку, так как увеличил количество образцов до 5 тыс., но результат - просто мусор. Я просто не понимаю, что, черт возьми, здесь происходит..., @Stefan Falk

@ 6v6gt Хорошо, так что .. У меня это работает .. оно работает, только если я прикасаюсь к USB-разъему Arduino. Обнаружил это только случайно. Есть идеи, в чем проблема? Без этого должно работать, не так ли?, @Stefan Falk

Прочитайте обзоры [здесь](https://www.sparkfun.com/products/12650) и посмотрите, не выскакивает ли что-нибудь. Обзоры под названием «Отличная, но плохая распиновка», «Плохое отношение сигнал-шум (SNR)», «Это действительно работает! Для хобби» — все они, кажется, содержат что-то, что может иметь отношение к вашей проблеме., @timemage

@timemage хм, не уверен. Похоже, мне самому нужно заземлиться, потому что после прикосновения к GND сигнал «в порядке». Да, это очень шумно, но вы можете вычислить частоту сердечных сокращений. Моя проблема в том, что я не понимаю, почему я должен быть заземлен, чтобы получить сигнал. Я думал, что это измеряет разницу напряжений между двумя точками с учетом контрольной точки., @Stefan Falk

Да, я видел это. Я говорю, что прикосновение к экрану USB может иметь множество эффектов, связанных с вещами, упомянутыми в этих обзорах. Я не могу проверить, что произойдет, если вы запустите его от батареи, или если вы измените соединения с разъемом, или если вы отфильтруете частоту сети. Но ты., @timemage

Я запускаю его через USB-кабель, но я могу попробовать переключить его на батарею. Это интересно, потому что если я прикоснусь к радиатору, то он будет читать дисконнект. Если я коснусь GND Arduino, он «работает». Все остальное — просто случайный шум. Странный. ^^, @Stefan Falk

Используете ли вы электроды производства Sparkfun или сами их подключили?, @timemage

Я использую те, что идут в комплекте с самим модулем., @Stefan Falk


1 ответ


1

Один из трех отведений ЭКГ эквивалентен заземлению (человеческого) тела и не имеет контакта. Я потратил слишком много времени на создание этого изображения, чтобы объяснить его, что должно помочь вам намного больше, чем мне. Я имею в виду, что у меня нет платы в руках, поэтому я не могу видеть, какой провод к какому контакту. Вы можете легко проверить мультиметром непрерывность между: ПРАВАЯ РУКА, ПРАВАЯ НОГА, ЛЕВОЕ РУКОЯТИЕ (RA, RL, LA) места пайки и наконечник, кольцо, ствол домкрата. Однако следует помнить о переключателе разъема для наушников. Когда вилка физически вставлена, этот переключатель размыкается. Опять же, я не собираюсь направлять ваш мультиметр, поэтому это изображение — лучшее, что я могу сделать для вас. Один из ваших выводов будет заземляющим. Это может быть "черный" один, это может быть (традиционно) "RL"; один, это может быть другой, я не могу сказать.

Когда вы прикасаетесь к заземлению USB, вы эффективно заменяете контакт с телом отсутствующего заземляющего провода. Я сделал эти изображения для вас, чтобы лучше понять это. Вы сможете найти неисправность за несколько минут с помощью MM и проверки непрерывности. объединенное изображение AD8232 с рентгеновским зрением и отведениями

,

Я проверил все три электрода и могу определить непрерывность каждого из них на стволе домкрата. Я не думаю, что это проблема. Как уже упоминалось, у меня есть две платы и два набора электродов, и проблема одинакова в обоих случаях. Однако есть ли шанс, что это может быть источник питания? Сейчас я питаю его через USB-кабель от своего ПК. может быть шанс, что мне придется изолировать датчик и вместо этого использовать батарею?, @Stefan Falk

_Я могу определить непрерывность каждого из них на стволе домкрата_ эм... так.... все три электрода замыкаются на ствол при подключении к разъему? Если это так, вам нужно перечитать то, что я вам написал., @littlegreenrock

Нет, я имел в виду, что RL, LA и RA связаны. Кабели в порядке., @Stefan Falk

Я не могу быть более полезным для вас. Информация, которая вам нужна, представлена, и я не могу быть там, чтобы сделать это за вас., @littlegreenrock