Monitor de Frequência Cardíaca IoT em Tempo Real com Arduino e MAX30100
Componentes e Materiais
| Arduino UNO | 1 |
| Sensor de Oximetria de Pulso e Frequência Cardíaca MAX30100 (ProtoCentral) | 1 |
| Cabo USB-A para Micro-USB | 1 |
| Jumpers (genéricos) | 1 conjunto |
Aplicativos e Serviços Online
| Arduino IDE |
| Node.js |
| Amazon Web Services (AWS) EC2 |
Sobre o Projeto
Neste projeto, vamos criar um Sistema de Detecção e Monitoramento de Batimentos Cardíacos usando Arduino que detectará os batimentos usando o Sensor de Pulso e mostrará as leituras em BPM (Batimentos Por Minuto).
1) Preparação do Arduino
Carregue o sketch fornecido no Arduino e certifique-se de que está recebendo dados no Monitor Serial:
2) Instalar Node.js
Instale o Node.js no seu PC / Mac / Linux / Raspberry Pi:
- Windows: Baixe e instale o pacote de nodejs.org
- Mac: Abra o terminal e digite
brew install nodejs - Linux / Raspberry Pi: Abra o terminal e digite
sudo apt-get install nodejs
3) Instalar Pacotes Necessários para Node.js
Execute os seguintes comandos no terminal para instalar os pacotes:
npm install -g socket.io
npm install -g serialport
npm install -g johnny-five
npm install -g express
4) Executar os Scripts
- Após instalar os pacotes, conecte a placa Arduino ao PC / Raspberry Pi e verifique se os dados estão sendo recebidos no Monitor Serial da Arduino IDE.
- Uma vez verificado, é hora de executar nossos scripts. Execute-os na ordem mencionada abaixo:
node run.js
- Quando você vir "Communication is on!" no terminal.
- Então abra o page.html em um navegador e você verá os valores sendo exibidos.
- Isso executará seu programa apenas no localhost do PC.
Para visualizar pela internet, você precisa configurar o AMAZON WEB SERVICES (AWS).
5) Configurar o Amazon Web Services (AWS)
- Crie uma conta ou faça login na sua conta AWS
- Vá para o módulo EC2
- Clique em "Launch Instance"
- Selecione qualquer sistema operacional
- Clique em "Review and Launch"
- Clique em "Launch" na próxima página e crie um novo par de chaves e faça o download (este arquivo será usado para acessar o módulo AWS no futuro)
- Após a criação, clique em "Launch Instance"
- Escolha os serviços mostrados e clique em "Connect"
- Uma URL junto com um link SSH será mostrada
- Vá para a localização do arquivo onde você baixou a chave de segurança, abra o terminal nessa pasta, cole e execute o link SSH
- Agora repita os passos 2, 3 e 4 aqui no servidor AWS
- Após tudo terminar, feche o terminal
- Escolha os serviços anteriores e clique em "Connect" novamente
- Use a URL fornecida para visualizar a saída pela internet.
6) O Vídeo
Fim!
Código
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;
// Descomente estas linhas caso queira ver os vários valores no console...
/*
Serial.print(reading);
Serial.print("\t");
Serial.print(PulseInterval);
Serial.print("\t");
*/
Serial.print(BPM);
Serial.println(" BPM");
Serial.flush();
}
run.js (JavaScript/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) {
//console.log('data received: ' + data)
io.sockets.emit('map', data);
})
serialPort.on('open', function () {
console.log('Communication is on!')
})
page.html (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>
body { margin: 0; background-image: url('https://www.skipprichard.com/wp-content/uploads/2015/07/bigstock-Red-Heart-On-Wooden-Background-56485448.jpg') }
#speech { overflow: auto; }
.sender { border-bottom-right-radius: 5px; border-top-right-radius: 5px; border-top-left-radius: 5px; text-align: left; background-color: yellow; }
.receiver { border-bottom-left-radius: 5px; border-top-right-radius: 5px; border-top-left-radius: 5px; text-align: right; background-color: white; }
.bub { border: 1px solid #000; padding: 5px; margin-right: auto; margin-left: auto; width: 90%; max-width: 500px; }
#name { font-family: arial; font-size: 20px; color: black; white-space: nowrap; font-weight: 600; }
#rank { font-family: arial; font-size: 15px; color: black; white-space: nowrap; }
.bubble { font-family: arial; font-size: 20px; font-weight: 400; }
.dot { width: 10px; height: 10px; margin-left: auto; border-radius: 5px; }
.read { border: 1px solid red; }
.red { background-color: red; }
.yellow { background-color: gold; }
.green { background-color: green; }
#stat { padding: 10px; margin-right: auto; margin-left: auto; width: 90%; max-width: 500px; }
#nav { border-bottom: 1px solid #000; width: 100%; text-align: left; background-color: white; padding-bottom: 3px; }
#photo { position: relative; top: 4px; left: 5px; border-radius: 40px; height: 80px; float: left; }
.time { font-weight: 400; font-family: arial; }
#online { color: green; }
#offline { color: red; }
#foot { border-top: 1px solid #000; width: 100%; position: fixed; bottom: 0; background-color: white; padding: 10px; }
#box { border: none; resize: none; width: 75%; font-weight: 400; font-size: 20px; font-family: arial; overflow: hidden; }
#enter { border:0; background-color: white; color: #0BB5FF; font-size: 20px; }
h1 { padding-top: 100px; font-family: monospace; text-align: center; font-size: 100px; }
</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"); // forneça o link gerado pelo AWS após ligar para vincular código com internet...
socket.on('map', function(data){
//console.log(data);
socket_1.emit('map', data);
document.getElementById('hello').innerHTML = data;
});
</script>
</body>
</html>
Esquemáticos
Processo de manufatura
- Leia Pulso de Frequência Cardíaca com Windows 10 IoT Core no Raspberry Pi – Guia Passo a Passo
- Sistema Remoto de Monitoramento de Frequência Cardíaca com Alertas AWS IoT
- Revolucionando a Apicultura: Sensores IoT Monitoram Saúde da Colmeia e Impulsionam Polinização de Culturas
- Crie um Sistema Ambilight Impressionante para Monitor com Arduino
- Monitor de Frequência Cardíaca IoT em Tempo Real com Arduino e MAX30100
- Controle IoT Remoto de Braço Robótico Personalizado
- Construa um Sensor de Batimento Cardíaco Infravermelho Confiável com Arduino: Guia Passo a Passo
- Construa um Pote Inteligente IoT com ESP8266, Arduino e Sensor Ultrassônico – Monitoramento em Tempo Real
- Controle sua TV com Alexa via Arduino IoT Cloud – Guia Passo a Passo
- Sensores de Frequência Cardíaca Integrados em Roupas Inteligentes: Monitoramento Vestível Confiável