IoT-монитор пульса в реальном времени на Arduino и MAX30100
Компоненты и материалы
| Arduino UNO | 1 шт. |
| Датчик пульса и оксиметра ProtoCentral на базе MAX30100 | 1 шт. |
| Кабель USB-A — Micro-USB | 1 шт. |
| Перемычки (набор) | 1 шт. |
Приложения и онлайн-сервисы
| Arduino IDE |
| Node.js |
| Amazon Web Services (AWS EC2) |
О проекте
В этом проекте мы создадим систему обнаружения и мониторинга сердечного ритма с использованием Arduino. Датчик пульса определяет удары сердца и выводит показания в ударах в минуту (BPM). Проект возник из интереса к Node.js и развился в работающий прототип, отображающий частоту сердечных сокращений с ИК-пульсовым сенсором.
Для реализации можно использовать ПК, Mac или Raspberry Pi.
1. Подготовка Arduino
Загрузите скетч в Arduino и убедитесь, что данные поступают в Serial Monitor:
2. Установка Node.js
Установите Node.js на ваш компьютер / Mac / Linux / Raspberry Pi:
- Windows: скачайте установщик с nodejs.org.
- Mac: в терминале выполните
brew install nodejs. - Linux / Raspberry Pi:
sudo apt-get install nodejs.
3. Установка пакетов для Node.js
Выполните в терминале:
npm install -g socket.io
npm install -g serialport
npm install -g johnny-five
npm install -g express
4. Запуск скриптов
- Подключите Arduino к ПК / Raspberry Pi, убедитесь, что данные приходят в Serial Monitor.
- Запустите скрипты в указанном порядке:
node <файл>. - Когда в терминале появится «Communication is on!», откройте
page.htmlв браузере — вы увидите значения пульса. - Это будет работать только в локальной сети (localhost).
Для доступа через интернет необходимо настроить Amazon Web Services (AWS).
5. Настройка Amazon Web Services (AWS)
- Создайте аккаунт или войдите в AWS.
- Перейдите в модуль EC2.
- Нажмите «Launch Instance».
- Выберите любую ОС.
- Нажмите «Review and Launch», затем «Launch».
- Создайте новую пару ключей и скачайте её (файл .pem) — он понадобится для будущего доступа.
- После запуска инстанса выберите сервисы, показанные на скриншотах, и нажмите «Connect».
- Откроется URL и SSH-ссылка.
- В терминале в папке с ключом выполните SSH-команду для подключения.
- На удалённом сервере повторите шаги 2, 3 и 4 (установка Node.js, пакетов, запуск скриптов).
- После завершения закройте терминал, снова выберите сервисы и нажмите «Connect» — используйте полученный URL для просмотра данных через интернет.
Видео
На этом всё!
Код
IR_Pulsr.ino (Arduino)
int UpperThreshold = 518;
int LowerThreshold = 490;
int reading = 0;
float BPM = 0.0;
bool IgnoreReading = false;
bool FirstPulseDetected = false;
unsigned long FirstPulseTime = 0;
unsigned long SecondPulseTime = 0;
unsigned long PulseInterval = 0;
void setup(){
Serial.begin(9600);
}
void loop(){
reading = analogRead(0);
if(reading > UpperThreshold && IgnoreReading == false){
if(FirstPulseDetected == false){
FirstPulseTime = millis();
FirstPulseDetected = true;
} else{
SecondPulseTime = millis();
PulseInterval = SecondPulseTime - FirstPulseTime;
FirstPulseTime = SecondPulseTime;
}
IgnoreReading = true;
}
if(reading < LowerThreshold){
IgnoreReading = false;
}
BPM = (1.0/PulseInterval) * 60.0 * 1000;
Serial.print(BPM);
Serial.println(" BPM");
Serial.flush();
}
run.js (Node.js сервер)
var SerialPort = require('serialport');
var Readline = SerialPort.parsers.Readline;
var express = require('express');
var socket = require('socket.io');
var app = express();
var server = app.listen(3005);
app.use(express.static('public'));
var io = socket(server);
io.on('connection', function(socket){
console.log(socket.id);
});
var serialPort = new SerialPort('/dev/tty.usbmodem1421', { baudRate: 9600 });
var parser = new Readline();
serialPort.pipe(parser);
parser.on('data', function (data) {
io.sockets.emit('map', data);
});
serialPort.on('open', function () {
console.log('Communication is on!');
});
page.html (веб-страница)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src='nerve.js'></script>
<script src='speech.js'></script>
<meta name="viewport" content="user-scalable=no,initial-scale=1,maximum-scale=1" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.0/socket.io.dev.js"></script>
<title></title>
<style>
/* CSS стили для отображения пульса */
</style>
</head>
<body>
<h1 id="hello"></h1>
<script>
var socket = io.connect("https://localhost:3005");
var socket_1 = io.connect("https://ec2-18-220-142-52.us-east-2.compute.amazonaws.com:4000");
socket.on('map', function(data){
socket_1.emit('map', data);
document.getElementById('hello').innerHTML = data;
});
</script>
</body>
</html>
Схемы
Производственный процесс
- Считывание пульса сердечного ритма на Windows 10 IoT Core на Raspberry Pi — пошаговое руководство
- Система удалённого мониторинга сердечного ритма с алертами AWS IoT
- Революция в пчеловодстве: ИоТ-датчики мониторят здоровье ульев и повышают опыление культур
- Создание потрясающей системы Ambilight для монитора на Arduino
- IoT-монитор пульса в реальном времени на Arduino и MAX30100
- Удаленное IoT-управление самодельной манипулятором
- Надежный ИК-датчик пульса на Arduino: пошаговое руководство
- Умная банка на ESP8266 + Arduino: мониторинг наполненности в реальном времени
- Управление телевизором через Alexa и Arduino IoT Cloud — пошаговое руководство
- Интегрированные датчики сердечного ритма в умной одежде: надежный носимый мониторинг