Создание простого ЭКГ-монитора с AD8232 и Arduino

Создание простого ЭКГ-монитора с AD8232 и Arduino

Самодельная медицинская наука может быть на удивление увлекательной. Имея всего несколько легкодоступных компонентов, вы можете начать исследовать крошечные электрические сигналы, которые поддерживают работу вашего организма. В то время как врачи и больницы используют эти данные для мониторинга здоровья, любители и энтузиасты свободны экспериментировать, исследовать и учиться творческими способами.

Одно из лучших мест для начала — это сердце. Модуль монитора сердечного ритма AD8232 позволяет легко обнаруживать и визуализировать электрические сигналы, которые ваше сердце производит при каждом ударе.

В этом руководстве вы узнаете, как подключить модуль AD8232 к Arduino, построить базовый ЭКГ-монитор (электрокардиограф) и наблюдать за работой собственного сердца.

Давайте начнём и докажем, что вы не бессердечный!

Понимание сигнала ЭКГ

Прежде чем начать, важно понять, что именно мы пытаемся измерить. Электрические сигналы, производимые вашим сердцем, имеют очень специфический паттерн, и знание его основ поможет вам разобраться в том, что регистрирует AD8232.

Давайте кратко рассмотрим, как работает ваше сердце.

У вашего сердца четыре основные камеры: правое предсердие и левое предсердие вверху, и правый желудочек и левый желудочек внизу.

Анимация работы ЭКГ-монитора на AD8232 и Arduino

Правая сторона сердца (правое предсердие и правый желудочек) собирает кровь, которая уже доставила кислород к телу и теперь обеднена кислородом. Эта обеднённая кислородом кровь направляется в лёгкие для получения нового кислорода. Левая сторона сердца (левое предсердие и левый желудочек) получает свежую насыщенную кислородом кровь из лёгких и перекачивает её к остальным частям тела. После того как кислород израсходован клетками, кровь возвращается к правой стороне сердца, и цикл начинается снова.

Сердцебиение начинается с особой группы клеток в правом предсердии, называемой синоатриальным (СА) узлом. Это естественный кардиостимулятор сердца. Он посылает электрический сигнал, который запускает сокращение сердца и задаёт частоту сердечных сокращений.

Вот как каждая часть электрического сигнала соответствует волне или сегменту на ЭКГ:

Зубец P

Когда предсердия наполнены кровью, СА-узел срабатывает. Этот электрический сигнал распространяется по предсердиям, вызывая их сокращение и проталкивание крови вниз в желудочки. На ЭКГ это электрическое событие отображается как зубец P.

Создание простого ЭКГ-монитора с AD8232 и Arduino

Сегмент PR

Сразу после зубца P следует сегмент PR. Эта короткая задержка даёт желудочкам достаточно времени для наполнения кровью перед сокращением. Во время этой паузы электрический сигнал проходит от предсердий по специальному пути, называемому атриовентрикулярным (АВ) узлом.

Создание простого ЭКГ-монитора с AD8232 и Arduino

Комплекс QRS

Когда сигнал достигает АВ-узла, он продолжает движение через пучок волокон, называемый пучком Гиса, который разделяется на правую и левую ножки пучка. Эти ножки проводят сигнал к нижней части (верхушке) сердца. Это вызывает сокращение желудочков, выталкивая кровь из сердца — в лёгкие (из правого желудочка) и к остальному телу (из левого желудочка). Это мощное электрическое событие создаёт резкий пик на ЭКГ, называемый комплексом QRS.

Создание простого ЭКГ-монитора с AD8232 и Arduino

Сегмент ST

Во время сегмента ST кровь активно выталкивается из сердца.

Создание простого ЭКГ-монитора с AD8232 и Arduino

Зубец T

После того как желудочки выкачали кровь, они начинают расслабляться. Эта часть электрического сигнала представлена зубцом T на ЭКГ. В конце зубца T желудочки полностью расслаблены, и сердце готово начать весь цикл заново.

Создание простого ЭКГ-монитора с AD8232 и Arduino

Обзор оборудования

Теперь, когда у вас есть базовое понимание сигнала ЭКГ и того, что он представляет, давайте подробнее рассмотрим оборудование, которое делает этот проект возможным.

Модуль AD8232 специально разработан для обнаружения и обработки электрической активности вашего сердца.

Модуль AD8232 обнаруживает эти сигналы, удаляет окружающий электрический «шум» и усиливает их для более лёгкого анализа. Затем он выводит очищенный и усиленный сигнал в виде аналогового напряжения, которое АЦП микроконтроллера может считать. После преобразования в цифровую форму эти данные могут использоваться для создания ЭКГ, или электрокардиограммы.

Микросхема AD8232

В центре модуля находится микросхема AD8232 — маломощный однокалнальный ЭКГ фронтенд от Analog Devices.

Создание простого ЭКГ-монитора с AD8232 и Arduino

Она обладает множеством функций, необходимых для обеспечения точных ЭКГ-измерений:

  • Инструментальное усиление: Усиливает крошечные биопотенциальные сигналы. Эти сигналы, измеряемые в микровольтах или милливольтах, должны быть значительно усилены для считывания АЦП микроконтроллера. AD8232 обеспечивает высокий коэффициент усиления для этой цели.

  • Фильтрация: ЭКГ-сигналы подвержены различным формам шума, включая артефакты движения и помехи сетевой частоты (например, шум 50/60 Гц от линий электропередач). AD8232 включает регулируемый фильтр верхних частот второго порядка для устранения артефактов движения и полуэлементного потенциала электродов, а также регулируемый фильтр нижних частот третьего порядка для удаления дополнительного шума.

  • Правая нога (RLD): Для улучшения подавления синфазных помех микросхема включает усилитель правой ноги. Эта схема активно управляет синфазным напряжением тела, приводя его к опорному потенциалу, который обычно является виртуальной землёй, генерируемой самой микросхемой, тем самым уменьшая помехи.

  • Быстрое восстановление: AD8232 имеет функцию «быстрого восстановления», которая позволяет быстро восстановиться после резкого изменения сигнала, которое может «перегрузить» усилитель, например, при отсоединении электрода.

Все эти функции позволяют использовать модуль AD8232 в ряде медицинских ЭКГ и HR-приложений, включая фитнес-мониторы и мониторы активности, портативные ЭКГ, носимые и удалённые мониторы здоровья и подобные устройства.

Обнаружение отсоединения электродов

Одна особенно важная функция — способность обнаруживать, когда один из электродных пластырей, называемых отведениями, не прикреплён должным образом. Микросхема имеет два специальных вывода, LO+ и LO−, которые сообщают, когда одно или оба отведения не подключены. Это важно, потому что отсутствующее или ослабленное отведение может привести к неправильным или отсутствующим данным.

Создание простого ЭКГ-монитора с AD8232 и Arduino

Режим пониженного энергопотребления

Микросхема AD8232 имеет режим пониженного энергопотребления, который можно активировать, подтянув вывод SDN (Shutdown) к низкому логическому уровню, значительно снижая потребление энергии. Это идеально для устройств с батарейным питанием, таких как портативные мониторы или фитнес-браслеты.

Создание простого ЭКГ-монитора с AD8232 и Arduino

При использовании функции обнаружения отсоединения электродов вы можете даже запрограммировать микроконтроллер на переход в режим ожидания одновременно, экономя ещё больше энергии.

Для получения более подробной технической информации обратитесь к официальному техническому описанию AD8232.

Кабель датчика и электроды ЭКГ

Модуль поставляется с кабелем, который имеет стандартный аудиоразъём 3,5 мм на одном конце и три маленьких защёлкивающихся коннектора на другом. Эти коннекторы используются для крепления ЭКГ-электродов — маленьких клейких пластырей. Вы отклеиваете защитную плёнку, прикрепляете пластыри к телу и затем защёлкиваете коннекторы на них.

Создание простого ЭКГ-монитора с AD8232 и Arduino

Имейте в виду, что электроды обычно пригодны только для одного-двух использований, потому что они теряют клейкость и способность хорошо проводить электричество после отклеивания.

Электрические сигналы вашего сердца чрезвычайно слабы, поэтому правильное размещение электродов критически важно для получения хорошего сигнала. Подробнее о правильном размещении электродов будет рассказано далее.

Разъём 3,5 мм

Модуль имеет разъём 3,5 мм, к которому подключается кабель датчика.

Создание простого ЭКГ-монитора с AD8232 и Arduino

Светодиодный индикатор и перемычка

Модуль также имеет маленький светодиод, который мигает в такт с вашим сердцебиением. Это простой, но очень полезный способ быстро увидеть, работает ли устройство и принимает ли сигнал.

Создание простого ЭКГ-монитора с AD8232 и Arduino

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

Распиновка модуля AD8232

Модуль AD8232 выводит девять подключений от микросхемы.

Создание простого ЭКГ-монитора с AD8232 и Arduino

GND — это вывод заземления.

3.3V — это вывод питания; подключите его к источнику питания 3,3 В.

OUTPUT — аналоговый выходной вывод, на который поступает усиленный и отфильтрованный сигнал сердца. Подключите его к аналоговому входному выводу микроконтроллера, например Arduino (например, вывод A0).

LO- и LO+ — это выводы обнаружения отсоединения электродов. Они подают сигнал HIGH, если электрод отсоединился, помогая вам узнать, хорошее ли у вас подключение.

SDN (Shutdown) — специальный вывод, который переводит микросхему в режим пониженного энергопотребления. Для этого подтяните вывод к LOW.

RA, LA и RL — альтернативные выводы для подключения пользовательских датчиков или электродов. Они означают Right Arm (правая рука), Left Arm (левая рука) и Right Leg (правая нога) соответственно и обычно используются в более продвинутых конфигурациях.

Схема подключения модуля AD8232 к Arduino

Давайте подключим модуль AD8232 к Arduino.

Начните с подключения вывода 3.3V модуля к выводу 3.3V на Arduino и вывода GND к одному из выводов заземления Arduino. Затем подключите вывод OUTPUT модуля к аналоговому входному выводу A0 на Arduino.

Также полезно подключить выводы LO+ и LO− модуля к выводам Arduino 10 и 11. Таким образом, когда электроды не прикреплены, Arduino сможет обнаружить отсутствующие отведения и избежать отправки бессмысленных данных в монитор последовательного порта.

Вот краткая справочная таблица подключений:

AD8232 ModuleArduino
3.3V3.3V
GNDGND
OUTPUTA0
LO+10
LO-11

Следуйте схеме ниже для выполнения необходимых подключений.

Создание простого ЭКГ-монитора с AD8232 и Arduino

Размещение электродов

Теперь, когда подключение завершено, следующий шаг — разместить электродные пластыри на теле.

Электроды имеют простую систему обозначений: RA, LA и RL, что означает Right Arm (правая рука), Left Arm (левая рука) и Right Leg (правая нога). RA и LA помогают модулю измерить разность электрических потенциалов между правой и левой рукой. RL обеспечивает опорную точку для подавления шумов.

Кабели обычно имеют цветовую кодировку в соответствии со стандартной конфигурацией, основанной на так называемом треугольнике Эйнтховена.

Один распространённый метод — размещение электродов на предплечьях и правой ноге, как показано на первой схеме. Другой вариант — размещение их на груди, с электродами RA и LA около плеч или верхней части груди, а электрод RL — чуть выше правого бедра, как показано на второй схеме.

Создание простого ЭКГ-монитора с AD8232 и Arduino

Мы обнаружили, что второй вариант даёт наиболее сильные и надёжные показания, поскольку сигналы регистрируются ближе к самому сердцу.

Пример кода Arduino

Ниже приведён простой скетч, который считывает данные сигнала сердца с модуля AD8232 и выводит их в монитор последовательного порта для наблюдения в реальном времени.

Предупреждение:

Этот модуль предназначен исключительно для образовательного и экспериментального использования с ЭКГ-технологией. Он не сертифицирован для клинического или медицинского использования и не должен использоваться для диагностики или лечения каких-либо заболеваний.

const int SENSOR_PIN = A0;
const int LO_POS_PIN = 8;
const int LO_NEG_PIN = 9;

void setup() {
  // initialize the serial communication:
  Serial.begin(9600);

  // Setup for leads off detection
  pinMode(LO_POS_PIN, INPUT);
  pinMode(LO_NEG_PIN, INPUT);
}

void loop() {
  if ((digitalRead(LO_POS_PIN) == 1) || (digitalRead(LO_NEG_PIN) == 1)) {
    Serial.println('!');
  } else {
    Serial.println(analogRead(SENSOR_PIN));
  }
  //Wait for a bit to keep serial data from saturating
  delay(1);
}

После загрузки этого скетча на Arduino откройте монитор последовательного порта и убедитесь, что скорость передачи данных установлена на 9600. Вы должны увидеть числа, выводимые на экран. Ниже приведён пример вывода с электродами, подключёнными около плеч и правого бедра.

Создание простого ЭКГ-монитора с AD8232 и Arduino

Хотя вы можете наблюдать за изменением этих чисел в мониторе последовательного порта, гораздо легче понять происходящее, если смотреть на сигнал в виде графика. Для этого откройте Serial Plotter в Arduino IDE, перейдя в Tools > Serial Plotter. После открытия вы должны увидеть волну, которая движется в такт с вашим сердцебиением. Если ваши электроды хорошо расположены и вы сидите неподвижно, сигнал будет выглядеть как плавный повторяющийся паттерн — это ваша ЭКГ, или электрокардиограмма.

Создание простого ЭКГ-монитора с AD8232 и Arduino

Объяснение кода

Мы начинаем с объявления используемых выводов. Аналоговый сигнал от AD8232 подключён к выводу A0, а два вывода обнаружения отсоединения (LO+ и LO−) подключены к выводам 10 и 11.

const int SENSOR_PIN = A0;
const int LO_POS_PIN = 10;
const int LO_NEG_PIN = 11;

В функции setup() мы сначала инициализируем монитор последовательного порта. Затем настраиваем два вывода обнаружения отсоединения LO+ и LO- как цифровые входы, чтобы Arduino мог их считывать.

void setup() {
  // initialize the serial communication:
  Serial.begin(9600);

  // Setup for leads off detection
  pinMode(LO_POS_PIN, INPUT);
  pinMode(LO_NEG_PIN, INPUT);
}

В разделе loop() мы сначала считываем выводы LO+ и LO−. Если любой из них находится в состоянии HIGH, это означает, что электрод отсоединился или неправильно прикреплён к телу. В этом случае мы выводим простой ! в монитор последовательного порта для предупреждения о плохом контакте. Если всё подключено правильно и оба вывода LO+ и LO− находятся в LOW, мы считываем аналоговый сигнал с выходного вывода датчика и выводим значение в монитор последовательного порта. Это фактические показания сигнала сердца.

В конце цикла мы добавляем очень короткую задержку в 1 миллисекунду для предотвращения переполнения последовательного вывода слишком большим количеством данных.

void loop() {
  if ((digitalRead(LO_POS_PIN) == 1) || (digitalRead(LO_NEG_PIN) == 1)) {
    Serial.println('!');
  } else {
    Serial.println(analogRead(SENSOR_PIN));
  }
  //Wait for a bit to keep serial data from saturating
  delay(1);
}

Получение хорошего сигнала ЭКГ

Если ваш график ЭКГ не выглядит чётким или резким, не беспокойтесь — это очень распространено. ЭКГ известны своей шумностью, особенно потому, что вы измеряете очень слабый электрический импульс от большой и сложной мышцы. Эти сигналы очень слабы, и немногое может им помешать. Но есть несколько простых способов улучшить качество сигнала.

  • Размещайте пластыри ближе к сердцу. Чем ближе пластыри к сердцу, тем сильнее сигнал, который они уловят.

  • Проверьте расположение пластырей. Убедитесь, что пластыри RA (правая рука) и LA (левая рука) размещены на правильных сторонах тела. Неправильное размещение может привести к слабому или инвертированному сигналу.

  • Сидите неподвижно. Старайтесь не двигаться слишком много во время измерения. Движения скелетных мышц могут создавать электрический шум, который мешает сигналу сердца.

  • Используйте свежие пластыри. Электроды теряют способность хорошо проводить сигналы после нескольких использований. Использование нового набора пластырей для каждого измерения может существенно помочь.

  • Очистите область. Перед наклеиванием пластырей убедитесь, что кожа чистая и сухая. Чистая поверхность помогает создать хороший контакт. Помните, что волосы плохо проводят электричество, поэтому старайтесь размещать пластыри на гладкой коже.

  • Подстраивайтесь под каждого человека. Тело каждого человека немного отличается, поэтому вам может потребоваться скорректировать расположение пластырей для получения наилучшего сигнала.