Монитор частоты сердца на MAX30102 с Arduino Nano и дисплеем 16x2
Компоненты и материалы
| Название | Количество |
|---|---|
| Arduino Nano R3 | 1 |
| Датчик пульса MAX30102 | 1 |
| RGB LCD 16x2 (Adafruit) | 1 |
| Потенциометр (для контраста LCD) | 1 |
Инструменты
- Паяльник
Программное обеспечение
- Arduino IDE
О проекте
Простой пульсоксиметр на базе модуля MAX30102. Данные выводятся на LCD 16x2: первая строка — средние удары в минуту (BPM), вторая — значение отражённого ИК-сигнала (должно быть стабильным для точных измерений).
Схема подключения
- MAX30102: VCC → 5V, GND → GND, SDA → A4, SCL → A5, INT — не подключен
- LCD 16x2 (I2C или параллельный): RS → 12, E → 11, D4 → 5, D5 → 4, D6 → 3, D7 → 2
- Потенциометр: крайние ноги на 5V и GND, средняя на V0 LCD
Код (Arduino)
Используются библиотеки Wire.h, MAX30105.h, LiquidCrystal.h, heartRate.h. Алгоритм PBA (Penpheral Beat Amplitude) детектирует пульс. Измерения усредняются за 4 отсчёта.
#include <Wire.h>
#include "MAX30105.h"
#include <LiquidCrystal.h>
#include "heartRate.h"
MAX30105 particleSensor;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const byte RATE_SIZE = 4;
byte rates[RATE_SIZE];
byte rateSpot = 0;
long lastBeat = 0;
float beatsPerMinute;
int beatAvg;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
Serial.println("Инициализация...");
if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) {
Serial.println("MAX30105 не найден. Проверьте подключение.");
while (1);
}
Serial.println("Положите палец на датчик с постоянным давлением.");
particleSensor.setup();
particleSensor.setPulseAmplitudeRed(0x0A);
particleSensor.setPulseAmplitudeGreen(0);
}
void loop() {
long irValue = particleSensor.getIR();
if (checkForBeat(irValue)) {
long delta = millis() - lastBeat;
lastBeat = millis();
beatsPerMinute = 60 / (delta / 1000.0);
if (beatsPerMinute < 255 && beatsPerMinute > 20) {
rates[rateSpot++] = (byte)beatsPerMinute;
rateSpot %= RATE_SIZE;
beatAvg = 0;
for (byte x = 0; x < RATE_SIZE; x++) beatAvg += rates[x];
beatAvg /= RATE_SIZE;
}
}
Serial.print("IR="); Serial.print(irValue);
Serial.print(", BPM="); Serial.print(beatsPerMinute);
Serial.print(", Avg BPM="); Serial.print(beatAvg);
if (irValue < 50000) Serial.print(" Нет пальца?");
Serial.println();
lcd.setCursor(0,0); lcd.print("BPM: "); lcd.print(beatAvg);
lcd.setCursor(0,1); lcd.print(" IR: "); lcd.print(irValue);
}
Принципиальная схема
Производственный процесс
- Система удалённого мониторинга сердечного ритма с алертами AWS IoT
- Создание потрясающей системы Ambilight для монитора на Arduino
- Создание анимации и игр на LCD 16×2 с Arduino UNO
- IoT-монитор пульса в реальном времени на Arduino и MAX30100
- Точный измерятель пульса на фоторезисторе и Arduino: сборка и настройка
- Мониторинг термопары газового водонагревателя: SMS/Email алерт при погасании горелки
- Продвинутая система домашнего мониторинга на Arduino Mega с IoT-датчиками
- Надежная погодная станция на Arduino с датчиками DHT
- Построение надежного умного монитора энергии на Arduino UNO – Пошаговое руководство
- Интегрированные датчики сердечного ритма в умной одежде: надежный носимый мониторинг