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, и целостность обеспечена.
Я недостаточно опытен (пока), чтобы увидеть проблему. Кто-нибудь?
@Stefan Falk, 👍0
Обсуждение1 ответ
Один из трех отведений ЭКГ эквивалентен заземлению (человеческого) тела и не имеет контакта. Я потратил слишком много времени на создание этого изображения, чтобы объяснить его, что должно помочь вам намного больше, чем мне. Я имею в виду, что у меня нет платы в руках, поэтому я не могу видеть, какой провод к какому контакту. Вы можете легко проверить мультиметром непрерывность между: ПРАВАЯ РУКА, ПРАВАЯ НОГА, ЛЕВОЕ РУКОЯТИЕ (RA, RL, LA) места пайки и наконечник, кольцо, ствол домкрата. Однако следует помнить о переключателе разъема для наушников. Когда вилка физически вставлена, этот переключатель размыкается. Опять же, я не собираюсь направлять ваш мультиметр, поэтому это изображение — лучшее, что я могу сделать для вас. Один из ваших выводов будет заземляющим. Это может быть "черный" один, это может быть (традиционно) "RL"; один, это может быть другой, я не могу сказать.
Когда вы прикасаетесь к заземлению USB, вы эффективно заменяете контакт с телом отсутствующего заземляющего провода. Я сделал эти изображения для вас, чтобы лучше понять это. Вы сможете найти неисправность за несколько минут с помощью MM и проверки непрерывности.
Я проверил все три электрода и могу определить непрерывность каждого из них на стволе домкрата. Я не думаю, что это проблема. Как уже упоминалось, у меня есть две платы и два набора электродов, и проблема одинакова в обоих случаях. Однако есть ли шанс, что это может быть источник питания? Сейчас я питаю его через USB-кабель от своего ПК. может быть шанс, что мне придется изолировать датчик и вместо этого использовать батарею?, @Stefan Falk
_Я могу определить непрерывность каждого из них на стволе домкрата_ эм... так.... все три электрода замыкаются на ствол при подключении к разъему? Если это так, вам нужно перечитать то, что я вам написал., @littlegreenrock
Нет, я имел в виду, что RL, LA и RA связаны. Кабели в порядке., @Stefan Falk
Я не могу быть более полезным для вас. Информация, которая вам нужна, представлена, и я не могу быть там, чтобы сделать это за вас., @littlegreenrock
- Подключение двух датчиков к одному аналоговому выводу
- Шум в Analog Read Serial от инструментального усилителя (ina122p)
- Зачем использовать несколько фильтров, выводящих тысячи значений, использовать один или два фильтра, которые могут выводить нормальное значение?
- Двойной щелчок для аналогового датчика с порогом
- Какова работа pulseIn?
- Сколько датчиков может поддерживать один модуль Arduino?
- Получение BPM из данного кода
- DS18B20 дает высокие показания. Как заставить его вернуть правильную температуру?
Учебник 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