Sensori con Arduino

Sensore di battiti cardiaci

Sensore di battiti cardiaci per il monitoraggio della frequenza cardiaca - Sensori con Arduino

Descrizione

Vuoi misurare la tua frequenza cardiaca con Arduino? In questo video scoprirai come usare un sensore di battito cardiaco per ottenere dati in tempo reale. Ti guiderò passo dopo passo nel collegamento del sensore e nella lettura dei valori.

Vedrai come scrivere il codice necessario per elaborare i segnali e visualizzare i dati in modo chiaro e preciso. Bastano pochi componenti e alcune righe di codice per trasformare Arduino in un semplice strumento di monitoraggio biometrico.

Alla fine sarai in grado di leggere la frequenza cardiaca direttamente su un display OLED.

Scarica le risorse

Progetto: Battiti cardiaci sul plotter seriale

Schema

Componenti

Codice

#define SENSOR_PIN A0#define ALPHA 0.75 void setup() {  Serial.begin(9600);} void loop() {  Serial.println(readSensor());  delay(20);} float readSensor() {  static float last = 0;  float sum = 0;   for (int i = 0; i < 20; i++) {    sum += analogRead(SENSOR_PIN);    delay(1);  };   last = ALPHA * (sum / 20+ (1 - ALPHA) * last;  return last;}
scarica il file

Progetto: Battiti cardiaci con LED

Schema

Componenti

Codice

#define SENSOR_PIN A0#define ALPHA 0.75#define LED_PIN 9#define BEAT_BUFFER_SIZE 7#define THRESHOLD 3#define MIN_VALUE 100 void setup() {  pinMode(LED_PIN, OUTPUT);} void loop() {  float value = readSensor();   if (detectBeat(value)) {    digitalWrite(LED_PIN, HIGH);  } else {    digitalWrite(LED_PIN, LOW);  }} bool detectBeat(float currentValue) {  static float buffer[BEAT_BUFFER_SIZE] = { 0 };  static int index = 0;  static int counter = 0;  static bool isRising = false;  bool detected = false;   if (currentValue < MIN_VALUE) {    return false;  }   buffer[index] = currentValue;  index = (index + 1% BEAT_BUFFER_SIZE;   int half = BEAT_BUFFER_SIZE / 2;  float olderSum = 0;  float newerSum = 0;  int olderStart = index;  int newerStart = olderStart + BEAT_BUFFER_SIZE - half;    for (int i = 0; i < half; i++) {    olderSum += buffer[(olderStart + i) % BEAT_BUFFER_SIZE];    newerSum += buffer[(newerStart + i) % BEAT_BUFFER_SIZE];  }   counter += newerSum > olderSum ? 1 : -1;   if (abs(counter) > THRESHOLD) {    detected = counter > 0 && !isRising;    isRising = counter > 0;    counter = 0;  }   return detected;} float readSensor() {  static float last = 0;  float sum = 0;   for (int i = 0; i < 20; i++) {    sum += analogRead(SENSOR_PIN);    delay(1);  };   last = ALPHA * (sum / 20+ (1 - ALPHA) * last;  return last;}
scarica il file

Progetto: Frequenza cardiaca

Schema

Componenti

Codice

#include <Adafruit_SSD1306.h>#include "images.h" #define SENSOR_PIN A0#define ALPHA 0.75#define LED_PIN 9#define BEAT_BUFFER_SIZE 7#define THRESHOLD 3#define MIN_VALUE 100#define TIMEOUT 3000#define INTERVALS_SIZE 7 #define OLED_I2C_ADDRESS 0x3C#define OLED_WIDTH 128#define OLED_HEIGHT 64 unsigned long lastTime = 0;float intervals[INTERVALS_SIZE] = { 0 };int intervalIndex = 0;int numBeats = 0; Adafruit_SSD1306 oled(OLED_WIDTH, OLED_HEIGHT); void setup() {  pinMode(LED_PIN, OUTPUT);  if (!oled.begin(SSD1306_SWITCHCAPVCC, OLED_I2C_ADDRESS)) {    while (true);  }  oled.clearDisplay();  showHeader();  showBPM(-1);  oled.display();} void loop() {  float value = readSensor();  unsigned long currentTime = millis();   if (detectBeat(value)) {    digitalWrite(LED_PIN, HIGH);    numBeats++;     if (numBeats > 1) {      intervals[intervalIndex] = currentTime - lastTime;      intervalIndex = (intervalIndex + 1% INTERVALS_SIZE;    }     if (numBeats > INTERVALS_SIZE) {      showBPM(getBPM());      oled.display();    }     lastTime = currentTime;  } else {    digitalWrite(LED_PIN, LOW);  }   if (currentTime - lastTime > TIMEOUT) {    numBeats = 0;    showBPM(-1);    oled.display();    lastTime = currentTime;  }} float getBPM() {  float sum = 0;  for (int i = 0; i < INTERVALS_SIZE; i++) {    sum += intervals[i];  }  return INTERVALS_SIZE * 60000.0 / sum;} bool detectBeat(float currentValue) {  static float buffer[BEAT_BUFFER_SIZE] = { 0 };  static int index = 0;  static int counter = 0;  static bool isRising = false;  bool detected = false;   if (currentValue < MIN_VALUE) {    return false;  }   buffer[index] = currentValue;  index = (index + 1% BEAT_BUFFER_SIZE;   int half = BEAT_BUFFER_SIZE / 2;  float olderSum = 0;  float newerSum = 0;  int olderStart = index;  int newerStart = olderStart + BEAT_BUFFER_SIZE - half;    for (int i = 0; i < half; i++) {    olderSum += buffer[(olderStart + i) % BEAT_BUFFER_SIZE];    newerSum += buffer[(newerStart + i) % BEAT_BUFFER_SIZE];  }   counter += newerSum > olderSum ? 1 : -1;   if (abs(counter) > THRESHOLD) {    detected = counter > 0 && !isRising;    isRising = counter > 0;    counter = 0;  }   return detected;} float readSensor() {  static float last = 0;  float sum = 0;   for (int i = 0; i < 20; i++) {    sum += analogRead(SENSOR_PIN);    delay(1);  };   last = ALPHA * (sum / 20+ (1 - ALPHA) * last;  return last;} void showHeader() {  oled.setTextSize(1);  oled.setTextColor(WHITE);  oled.setCursor(164);  oled.print("Battiti cardiaci");  oled.drawLine(01512815, WHITE);} void showBPM(float bpm) {  int offset = 0;  String content = String((int) bpm);   if (bpm < 0) {    content = "---";  } else if (bpm < 100) {    offset = 24;  }   oled.fillRect(01612863, BLACK);  oled.setTextColor(WHITE);  oled.setTextSize(4);  oled.setCursor(10 + offset, 26);  oled.print(content);   oled.setTextSize(1);  oled.setCursor(9547);  oled.print("BPM");  oled.drawBitmap(9221, heartbeat, 2424, WHITE);}
// 'heartbeat', 48x48pxconst unsigned char heartbeat [] PROGMEM = {  0x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x03  0xe70xc00x070xff0xe00x0f0xff0xf00x0f0xff0xf00x0f0xf30xf00x0f0xe3  0xf00x000x080x000x070xfc0xe00x030xfd0xc00x010xff0x800x000xff0x00  0x000x7e0x000x000x3c0x000x000x180x000x000x000x000x000x000x000x00  0x000x000x000x000x000x000x000x00};
scarica il file

Arduino Software Hero

Vuoi imparare a programmare Arduino, ma non sai da dove cominciare?

Iscriviti al corso online

Libri consigliati

In qualità di Affiliato Amazon riceviamo un guadagno dagli acquisti idonei


Tutorial consigliati

E-commerce di elettronica

Sul nostro negozio online trovi tutti i componenti usati nei tutorial.
Inoltre hai un'ampia scelta di prodotti tra:

  • Arduino
  • Raspberry Pi
  • Sensori
  • Robotica
  • Componenti elettronici
  • Accessori

Compra online, ricevi comodamente a casa

Visita il negozio