LCD Arduino+ STONE HMI + Display frequenza cardiaca

Breve introduzione al progetto Arduino LCD

Qualche tempo fa ho trovato nello shopping online un modulo sensore di frequenza cardiaca MAX30100. Questo modulo può raccogliere i dati sull'ossigeno nel sangue e sulla frequenza cardiaca degli utenti, che è anche semplice e comodo da usare.

Secondo i dati, ho scoperto che ci sono librerie di MAX30100 nei file della libreria Arduino. Vale a dire, se utilizzo la comunicazione tra LCD Arduino e MAX30100, posso chiamare direttamente i file della libreria Arduino senza dover riscrivere i file del driver. Questa è una buona cosa, quindi ho acquistato il modulo di MAX30100.

Ho deciso di utilizzare Arduino per verificare la frequenza cardiaca e la funzione di raccolta dell'ossigeno nel sangue di MAX30100. Insieme a STONE Schermo LCD TFT per il monitoraggio della pressione sanguigna.

LCD-Arduino-STONE-HMI-Display-Frequenza cardiaca (1)

Nota: questo modulo per impostazione predefinita solo con comunicazioni MCU di livello 3.3 V, poiché per impostazione predefinita utilizza il pin IIC per aumentare la resistenza da 4.7 K a 1.8 V, quindi non c'è comunicazione con Arduino per impostazione predefinita, se si desidera comunicare con il Arduino e necessitano di due resistori di pull-up da 4.7 K del pin IIC collegati al pin VIN, questi contenuti verranno introdotti alla fine del capitolo.

Assegnazioni funzionali

Prima di iniziare questo progetto, ho pensato ad alcune semplici funzionalità:

  • Sono stati raccolti dati sulla frequenza cardiaca e sull'ossigeno nel sangue
  • I dati sulla frequenza cardiaca e sull'ossigeno nel sangue vengono visualizzati tramite uno schermo LCD

Queste sono le uniche due funzionalità, ma se vogliamo implementarle, dobbiamo pensare di più:

  • Quale MCU master viene utilizzato?
  • Che tipo di display LCD?

Come accennato in precedenza, usiamo Arduino per l'MCU, ma questo è un Progetto Arduino LCD, quindi dobbiamo scegliere il modulo display LCD appropriato. Ho intenzione di utilizzare lo schermo LCD con una porta seriale. Ho un STONE SVI070WT-01 displayer qui, ma se Arduino ha bisogno di comunicare con esso, è necessario MAX3232 per eseguire la conversione del livello.

Quindi i materiali elettronici di base sono determinati come segue:

  1. Scheda di sviluppo Arduino Mini Pro
  2. Modulo sensore di frequenza cardiaca e ossigeno nel sangue MAX30100
  3. STONESVI070WT-01Modulo display porta seriale LCD
  4. Modulo MAX3232

Introduzione all'hardware

MAX30100

Il MAX30100 è una soluzione integrata per la pulsossimetria e il sensore per il monitoraggio della frequenza cardiaca. Combina due LED, un fotorilevatore, un'ottica ottimizzata e un'elaborazione del segnale analogico a basso rumore per rilevare la pulsossimetria e i segnali della frequenza cardiaca. Il MAX30100 funziona con alimentatori da 1.8 V e 3.3 V e può essere spento tramite software con una corrente di standby trascurabile, consentendo all'alimentatore di rimanere sempre connesso.

Applicazioni

  • Dispositivi portatili
  • Dispositivi per l'assistente fitness
  • Dispositivi di monitoraggio medico

Vantaggi e Caratteristiche

1 (pulsossimetro completo e sensore di frequenza cardiaca La soluzione semplifica la progettazione)

  • LED integrati, sensore fotografico e front-end analogico ad alte prestazioni
  • Piccolo sistema ottico a 5.6 pin da 2.8 mm x 1.2 mm x 14 mm incluso nella confezione

2、Il funzionamento a bassissima potenza aumenta la durata della batteria per i dispositivi indossabili

  • Frequenza di campionamento programmabile e corrente LED per il risparmio energetico
  • Corrente di spegnimento ultra bassa (0.7 µA, tipo)

3、La funzionalità avanzata migliora le prestazioni di misurazione

  • L'elevato SNR fornisce una solida resilienza agli artefatti di movimento
  • Cancellazione della luce ambientale integrata
  • Capacità di frequenza di campionamento elevata
  • Capacità di output veloce dei dati

Principio di rilevamento

LCD-Arduino-STONE-HMI-Display-Frequenza cardiaca (1)

Basta premere il dito contro il sensore per stimare la saturazione di ossigeno del polso (SpO2) e il polso (equivalente al battito cardiaco).

Il pulsossimetro (ossimetro) è un mini-spettrometro che UTILIZZA i principi dei diversi spettri di assorbimento dei globuli rossi per analizzare la saturazione di ossigeno del sangue. Questo metodo di misurazione rapida e in tempo reale è anche ampiamente utilizzato in molti riferimenti clinici.

Non introdurrò troppo il MAX30100, perché questi materiali sono disponibili su Internet. Gli amici interessati possono cercare le informazioni di questo modulo per il test della frequenza cardiaca su Internet e avere una comprensione più profonda del suo principio di rilevamento.

Introduzione al SVI070WT-01 espositore

In questo progetto userò il STONE SVI070WT-01 per visualizzare i dati sulla frequenza cardiaca e sull'ossigeno nel sangue.

Il chip del driver è stato integrato all'interno dello schermo del display e c'è un software che gli utenti possono usare. Gli utenti devono solo aggiungere pulsanti, caselle di testo e altra logica tramite le immagini dell'interfaccia utente progettate, quindi generare file di configurazione e scaricarli nella schermata di visualizzazione per l'esecuzione.

Il display di STVI070WT-01 comunica con MCU tramite il segnale UART RS232, il che significa che è necessario aggiungere un chip MAX3232 per convertire il segnale RS232 in un segnale TTL in modo da poter comunicare con Arduino MCU.

Se non sei sicuro di come utilizzare il MAX3232, fai riferimento alle seguenti immagini:

LCD-Arduino-STONE-HMI-Display-Frequenza cardiaca (1)

Se ritieni che la conversione di livello sia troppo problematica, puoi scegliere altri tipi di visualizzatori di STONE Tech, alcuni dei quali possono emettere direttamente il segnale UART-TTL.

Il sito ufficiale ha informazioni dettagliate e un'introduzione:

https://www.stoneitech.com/

Se hai bisogno di video tutorial e tutorial da utilizzare, puoi trovarlo anche sul sito ufficiale.

Fasi di sviluppo

Tre passi di STONE sviluppo dello schermo:

  • Progetta la logica del display e la logica dei pulsanti con STONE UTENSILE software e scarica il file di progettazione nel modulo di visualizzazione.
  • MCU comunica con il STONE Modulo display LCD tramite porta seriale.
  • Con i dati ottenuti nel passaggio 2, l'MCU esegue altre azioni.

STONE Installazione del software STRUMENTO

Scarica l'ultima versione del STONE UTENSILE software (attualmente TOOL2019) dal sito Web e installarlo.

Dopo l'installazione del software, verrà aperta la seguente interfaccia:

1-schermo TFT-LCD integrato

Fare clic su "Compila il ” nell'angolo in alto a sinistra per creare un nuovo progetto, di cui parleremo in seguito.

Arduino LCD

Arduino è una piattaforma di prototipo elettronico open source facile da usare e facile da usare. Comprende la parte hardware (varie schede di sviluppo conformi alle specifiche Arduino) e la parte software (Arduino IDE e relativi kit di sviluppo).

La parte hardware (o scheda di sviluppo) è costituita da un microcontrollore (MCU), una memoria Flash (Flash) e un set di interfacce di input/output universali (GPIO), che puoi considerare come una scheda madre di un microcomputer.

La parte software è composta principalmente da Arduino IDE su PC, un relativo pacchetto di supporto a livello di scheda (BSP) e una ricca libreria di funzioni di terze parti. Con l'IDE Arduino, puoi facilmente scaricare il BSP associato alla tua scheda di sviluppo e le librerie necessarie per scrivere i tuoi programmi.

Arduino è una piattaforma open source. Finora ci sono stati molti modelli e molti controller derivati, tra cui Arduino Uno, Arduino Nano, Arduino Yun e così via. Inoltre, l'IDE Arduino ora non solo supporta le schede di sviluppo della serie Arduino, ma aggiunge anche il supporto per schede di sviluppo popolari come Intel Galileo e NodeMCU introducendo BSP.

Arduino rileva l'ambiente attraverso una varietà di sensori, controllando luci, motori e altri dispositivi per inviare feedback e influenzare l'ambiente. Il microcontrollore sulla scheda può essere programmato con un linguaggio di programmazione Arduino, compilato in binari e masterizzato nel microcontrollore. La programmazione per Arduino è implementata con il linguaggio di programmazione Arduino (basato su Wiring) e l'ambiente di sviluppo Arduino (basato su Processing). I progetti basati su Arduino possono contenere solo Arduino, oltre ad Arduino e altri software in esecuzione su PC, e comunicano tra loro (come Flash, Processing, MaxMSP).

HMI per ambiente di sviluppo del progetto LCD TFT seriale display Arduino

L'ambiente di sviluppo Arduino è l'IDE Arduino, che può essere scaricato da Internet.

Accedi al sito ufficiale di Arduino e scarica il software

https://www.arduino.cc/en/software/

Dopo aver installato l'IDE Arduino, all'apertura del software apparirà la seguente interfaccia:

LCD-Arduino-STONE-HMI-Display-Frequenza cardiaca (1)

L'IDE Arduino crea due funzioni per impostazione predefinita: la funzione di configurazione e la funzione di loop.

Ci sono molte introduzioni di Arduino su Internet. Se non capisci qualcosa, puoi andare su Internet per trovarlo.

Processo di implementazione del progetto Arduino LCD

connessione hardware

Per garantire che il passaggio successivo nella scrittura del codice proceda senza intoppi, dobbiamo prima determinare l'affidabilità della connessione hardware.

In questo progetto sono stati utilizzati solo quattro componenti hardware:

  1. Scheda di sviluppo professionale Arduino Mini
  2. STONE STVI070WT-01 Schermo TFT-LCD
  3. Sensore di frequenza cardiaca e ossigeno nel sangue MAX30100
  4. MAX3232(rs232-> TTL)

La scheda di sviluppo Arduino Mini Pro e il display TFT-LCD SVI070WT-01 sono collegati tramite UART, che richiede la conversione del livello tramite MAX3232, quindi la scheda di sviluppo Arduino Mini Pro e il modulo MAX30100 sono collegati tramite l'interfaccia IIC. Dopo aver pensato chiaramente, possiamo disegnare la seguente immagine del cablaggio:

LCD-Arduino-STONE-HMI-Display-Frequenza cardiaca (1)

Assicurati che non ci siano errori nella connessione hardware e procedi al passaggio successivo.

STONE Design dell'interfaccia utente TFT LCD

Prima di tutto, dobbiamo progettare un'immagine di visualizzazione dell'interfaccia utente, che può essere progettata da PhotoShop o da altri strumenti di progettazione di immagini. Dopo aver progettato l'immagine di visualizzazione dell'interfaccia utente, salva l'immagine in formato JPG.

Apri il software STONE STRUMENTO 2019 e creare un nuovo progetto:

LCD-Arduino-STONE-HMI-Display-Frequenza cardiaca (1)

LCD-Arduino-STONE-HMI-Display-Frequenza cardiaca (1)

Rimuovi l'immagine che è stata caricata per impostazione predefinita nel nuovo progetto e aggiungi l'immagine dell'interfaccia utente che abbiamo progettato.

Aggiungi il componente di visualizzazione del testo, progetta la cifra del display e il punto decimale, ottieni la posizione di archiviazione del componente di visualizzazione del testo nel visualizzatore.

L'effetto è il seguente:

LCD-Arduino-STONE-HMI-Display-Frequenza cardiaca (1)

Indirizzo del componente del display di testo:

  • Stazioni di connessione:0x0008
  • Frequenza cardiaca :0x0001
  • Ossigeno nel sangue:0x0005

I contenuti principali dell'interfaccia dell'interfaccia utente sono i seguenti:

  • Stato della connessione
  • Visualizzazione della frequenza cardiaca
  • L'ossigeno nel sangue ha mostrato

Genera file di configurazione

LCD-Arduino-STONE-HMI-Display-Frequenza cardiaca (1)

Una volta completata la progettazione dell'interfaccia utente, il file di configurazione può essere generato e scaricato sul display STVI070WT-01.

Innanzitutto, eseguire il passaggio 1, quindi inserire l'unità flash USB nel computer e verrà visualizzato il simbolo del disco. Quindi fare clic su "Scarica su u-disk" per scaricare il file di configurazione sull'unità flash USB, quindi inserire l'unità flash USB in SVI070WT-01 per completare l'aggiornamento.

MAX30100

LCD-Arduino-STONE-HMI-Display-Frequenza cardiaca (1)

MAX30100 comunica tramite IIC. Il suo principio di funzionamento è che il valore ADC della frequenza cardiaca può essere ottenuto attraverso l'irradiazione a led a infrarossi. Il registro MAX30100 può essere suddiviso in cinque categorie: registro di stato, FIFO, registro di controllo, registro della temperatura e registro ID. Il registro della temperatura legge il valore della temperatura del chip per correggere la deviazione causata dalla temperatura. Il registro ID può leggere il numero ID del chip.

MAX30100 è collegato alla scheda di sviluppo Arduino Mini Pro tramite l'interfaccia di comunicazione IIC. Poiché ci sono file di libreria MAX30100 già pronti nell'IDE Arduino, possiamo leggere i dati della frequenza cardiaca e dell'ossigeno nel sangue senza studiare i registri di MAX30100.

Per coloro che sono interessati ad esplorare il registro MAX30100, vedere il Datasheet MAX30100.

Modificare il resistore di pull-up IIC MAX30100

Va notato che la resistenza di pull-up di 4.7k del pin IIC del modulo MAX30100 è collegata a 1.8v, il che non è un problema in teoria. Tuttavia, il livello logico di comunicazione del pin Arduino IIC è 5V, quindi non può comunicare con Arduino senza modificare l'hardware del modulo MAX30100. La comunicazione diretta è possibile se l'MCU è STM32 o un altro MCU a livello logico 3.3v.

Pertanto, è necessario apportare le seguenti modifiche:

Rimuovere le tre resistenze da 4.7k contrassegnate nell'immagine con un saldatore elettrico. Quindi saldare due resistori da 4.7k ai pin di SDA e SCL su VIN, in modo da poter comunicare con Arduino.

Display LCD seriale Arduino

Apri l'IDE Arduino e trova i seguenti pulsanti:

Cercare "MAX30100" per trovare due librerie per MAX30100, quindi fare clic su download e installa.

Dopo l'installazione, puoi trovare la Demo di MAX30100 nella cartella della libreria LIB di LCD Arduino:

Fare doppio clic sul file per aprirlo.

Questa Demo può essere testata direttamente. Se la connessione hardware è ok, puoi scaricare la compilazione del codice nella scheda di sviluppo Arduino e vedere i dati di MAX30100 nello strumento di debug seriale.

Il codice completo è il seguente:

/*

Libreria di sensori integrati per ossimetria/frequenza cardiaca Arduino-MAX30100

Copyright (C) 2016 OXullo Intersezioni

Questo programma è un software gratuito: puoi ridistribuirlo e / o modificarlo

secondo i termini della GNU General Public License come pubblicato da

la Free Software Foundation, versione 3 della Licenza, oppure

(a tua scelta) qualsiasi versione successiva.

Questo programma è distribuito nella speranza che possa essere utile,

ma SENZA ALCUNA GARANZIA; senza nemmeno la garanzia implicita di

COMMERCIABILITÀ o IDONEITÀ PER UNO SCOPO PARTICOLARE. Vedi il

Licenza GNU General Public per maggiori dettagli.

Dovresti aver ricevuto una copia della GNU General Public License

insieme a questo programma. Se no, vedi.

*/

#include

#include "MAX30100_PulseOximeter.h"

#define REPORTING_PERIOD_MS     1000

// PulseOximeter is the higher level interface to the sensor

// it offers:

//  * beat detection reporting

//  * heart rate calculation

//  * SpO2 (oxidation level) calculation

PulseOximeter pox;

uint32_t tsLastReport = 0;

// Callback (registered below) fired when a pulse is detected

void onBeatDetected()

{

    Serial.println("Beat!");

}

void setup()

{

    Serial.begin(115200);

    Serial.print("Initializing pulse oximeter..");

    // Initialize the PulseOximeter instance

    // Failures are generally due to an improper I2C wiring, missing power supply

    // or wrong target chip

    if (!pox.begin()) {

        Serial.println("FAILED");

        for(;;);

    } else {

        Serial.println("SUCCESS");

    }

    // The default current for the IR LED is 50mA and it could be changed

    //   by uncommenting the following line. Check MAX30100_Registers.h for all the

    //   available options.

    // pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);

    // Register a callback for the beat detection

    pox.setOnBeatDetectedCallback(onBeatDetected);

}

void loop()

{

    // Make sure to call update as fast as possible

    pox.update();

    // Asynchronously dump heart rate and oxidation levels to the serial

    // For both, a value of 0 means "invalid"

    if (millis() - tsLastReport > REPORTING_PERIOD_MS) {

        Serial.print("Heart rate:");

        Serial.print(pox.getHeartRate());

        Serial.print("bpm / SpO2:");

        Serial.print(pox.getSpO2());

        Serial.println("%");

        tsLastReport = millis();

    }

}

Questo codice è molto semplice, credo che tu possa capirlo a colpo d'occhio. Devo dire che la programmazione modulare di Arduino è molto comoda, e non ho nemmeno bisogno di capire come viene implementato il codice driver di Uart e IIC.

Ovviamente, il codice sopra è una demo ufficiale e devo ancora apportare alcune modifiche per visualizzare i dati STONEespositore.

Visualizza i dati al STONE visualizzazione tramite Arduino LCD

Innanzitutto, dobbiamo ottenere l'indirizzo del componente che visualizza i dati della frequenza cardiaca e dell'ossigeno nel sangue STONEespositore di:

Nel mio progetto, l'indirizzo è il seguente:

Indirizzo del componente di visualizzazione della frequenza cardiaca: 0x0001

Indirizzo del modulo di visualizzazione dell'ossigeno nel sangue: 0x0005

Indirizzo di stato della connessione del sensore: 0x0008

Se è necessario modificare il contenuto del display nello spazio corrispondente, è possibile modificare il contenuto del display inviando i dati all'indirizzo corrispondente dello schermo del display tramite il porta seriale di Arduino.

Il codice modificato è il seguente:

/*

Arduino-MAX30100 oximetry / heart rate integrated sensor library

Copyright (C) 2016  OXullo Intersecans<x@brainrapers.org style="box-sizing: border-box; -webkit-tap-highlight-color: transparent;"></x@brainrapers.org>

This program is free software: you can redistribute it and/or modify

it under the terms of the GNU General Public License as published by

the Free Software Foundation, either version 3 of the License, or

(at your option) any later version.

This program is distributed in the hope that it will be useful,

but WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

GNU General Public License for more details.

You should have received a copy of the GNU General Public License

along with this program.  If not, see.

*/

#include

#include "MAX30100_PulseOximeter.h"

#define REPORTING_PERIOD_MS     1000

#define Heart_dis_addr          0x01

#define Sop2_dis_addr           0x05

#define connect_sta_addr        0x08

unsigned char heart_rate_send[8]= {0xA5, 0x5A, 0x05, 0x82,\

                                   0x00, Heart_dis_addr, 0x00, 0x00};

unsigned char Sop2_send[8]=       {0xA5, 0x5A, 0x05, 0x82, 0x00, \

                                   Sop2_dis_addr,  0x00, 0x00};

unsigned char connect_sta_send[8]={0xA5, 0x5A, 0x05, 0x82, 0x00, \

                                   connect_sta_addr,0x00, 0x00};

// PulseOximeter is the higher level interface to the sensor

// it offers:

//  * beat detection reporting

//  * heart rate calculation

//  * SpO2 (oxidation level) calculation

PulseOximeter pox;

uint32_t tsLastReport = 0;

// Callback (registered below) fired when a pulse is detected

void onBeatDetected()

{

  //  Serial.println("Beat!");

}

void setup()

{

    Serial.begin(115200);

   // Serial.print("Initializing pulse oximeter..");

    // Initialize the PulseOximeter instance

    // Failures are generally due to an improper I2C wiring, missing power supply

    // or wrong target chip

    if (!pox.begin()) {

       // Serial.println("FAILED");

            // connect_sta_send[7]=0x00;

            // Serial.write(connect_sta_send,8);

             for(;;);

    } else {

             connect_sta_send[7]=0x01;

             Serial.write(connect_sta_send,8);

      //  Serial.println("SUCCESS");

    }

    // The default current for the IR LED is 50mA and it could be changed

    //   by uncommenting the following line. Check MAX30100_Registers.h for all the

    //   available options.

     pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);

    // Register a callback for the beat detection

    pox.setOnBeatDetectedCallback(onBeatDetected);

}

void loop()

{

    // Make sure to call update as fast as possible

    pox.update();

    // Asynchronously dump heart rate and oxidation levels to the serial

    // For both, a value of 0 means "invalid"

    if (millis() - tsLastReport > REPORTING_PERIOD_MS) {

     //   Serial.print("Heart rate:");

     //   Serial.print(pox.getHeartRate());

     //   Serial.print("bpm / SpO2:");

     //   Serial.print(pox.getSpO2());

     //   Serial.println("%");

     heart_rate_send[7]=(uint32_t)pox.getHeartRate();

     Serial.write(heart_rate_send,8);

     Sop2_send[7]=pox.getSpO2();

     Serial.write(Sop2_send,8);

        tsLastReport = millis();

    }

}

Compila il codice, scaricalo sulla scheda di sviluppo LCD del display seriale Arduino e sei pronto per iniziare il test.

Possiamo vedere che quando le dita lasciano il MAX30100, la frequenza cardiaca e l'ossigeno nel sangue visualizzano 0. Posiziona il dito sul collettore MAX30100 per vedere la frequenza cardiaca e i livelli di ossigeno nel sangue in tempo reale.

STONE L'effetto del progetto Arduino LCD può essere visto nell'immagine seguente

LCD-Arduino-STONE-HMI-Display-Frequenza cardiaca (20)

LCD-Arduino-STONE-HMI-Display-Frequenza cardiaca (20)

Scorrere fino a Top