Надежный ИК-датчик пульса на Arduino: пошаговое руководство
Компоненты и материалы
| Arduino UNO | 1 |
| ИК-излучатель (generic) | 1 |
| ИК-приёмник (generic) | 1 |
| USB-A — Mini-USB кабель | 1 |
Приложения и онлайн-сервисы
- Arduino IDE
О проекте
Как возникла идея
Во время пандемии COVID-19 спрос на медицинское оборудование (вентиляторы и др.) взлетел, создав дефицит. Нужны дешёвые альтернативы. Этот DIY-датчик пульса стоит < $15 и эффективно детектирует сердечные сокращения, строя график в реальном времени. Единственное усилие — приложить палец к сенсору.
Принцип работы
Основа — разная непроницаемость пальца для ИК-света в зависимости от объёма крови в сосудах. При систоле кровь наполняет сосуды — палец становится более непрозрачным. При диастоле — менее. Измеряя непроницаемость, строим кривую пульса.
ИК-излучатель светит сквозь палец. Часть света поглощается, часть отражается, часть проходит. Приёмник с другой стороны фиксирует этот малый прошедший поток. Его интенсивность меняется с пульсацией крови — строим график пульса в реальном времени.


График выводится в Serial Plotter Arduino IDE.
Точность: фильтрация паразитных сигналов
Главная ошибка — фоновое ИК-излучение от окружающих объектов (в т.ч. нашего тела). Arduino заранее измеряет среднее «мусорное» значение и вычитает его, получая чистый сигнал.
Код усреднения фона (5 замеров):
// Для отладки
for(int i=0; i<5; i++) {
reading = reading + analogRead(A0);
}
reading_final = reading / 5; // Среднее значение фона
Полезный сигнал:
delay(100);
Heart_rate = analogRead(A0) - reading_final; // Чистое значение
Затем переменная Heart_rate выводится в Serial Plotter.
Сборка железа сенсора
Сенсор = ИК-излучатель + ИК-приёмник. Схема подключения:

Итоговый вид сборки:

Результат
Короткое видео работы: Google Drive. Виден реальный график пульса.
Лайфхак, если нет компонентов:
ИК-пульт от ТВ (с зажатой кнопкой) может служить излучателем. А фоторезистор (LDR) — приёмником, подбрав порог по даташитам.
Жду отзывов, предложений по улучшению и идей для новых проектов в комментариях!
Код
heart_Beat_sensor_101/code (Arduino)
// code by YaSh
// Heart_Rate_Sensor code
int reading = 0;
int reading_final;
int Heart_rate;
void setup() {
Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
}
void loop() {
for(int i=0; i<5; i++) { // Усреднение фона
reading = reading + analogRead(A0);
}
reading_final = reading / 5;
delay(100);
Heart_rate = analogRead(A0) - reading_final; // Чистый сигнал
Serial.println(Heart_rate); // График в Serial Plotter
}
Схемы
Схема подключения ИК-приёмника и излучателя к Arduino:
Производственный процесс
- Искусственное сердце: технологии, история и перспективы
- Построение DIY инфракрасного датчика движения для Raspberry Pi — пошаговое руководство
- Управление светодиодом с PIR-датчиком движения на Raspberry Pi
- Передача данных температуры и влажности между двумя Arduino через Firebase
- DIY-консоль управления Photoshop на Arduino Nano RP2040 Connect
- Робот для поиска людей на базе Arduino Uno: пошаговая интеграция датчиков
- Умный вольтметр на Arduino и смартфоне — простое DIY-проект
- IoT-монитор пульса в реальном времени на Arduino и MAX30100
- Умная банка на ESP8266 + Arduino: мониторинг наполненности в реальном времени
- Сенсорная башня на Arduino Cloud: Мониторинг температуры, движения и газа