SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do...

100
UNIVERSIDADE DE SÃO PAULO ESCOLA DE ENGENHARIA DE SÃO CARLOS DEPARTAMENTO DE ENGENHARIA ELÉTRICA SEL0444 Projeto de Formatura II Monografia Oxímetro de pulso para medição da oxigenação periférica e pulsação cardíaca com interface via web Aluno: Mário Augusto Kushima Orientador: Prof. Dr. Evandro L. L. Rodrigues São Carlos Novembro de 2014

Transcript of SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do...

Page 1: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

UNIVERSIDADE DE SÃO PAULO

ESCOLA DE ENGENHARIA DE SÃO CARLOS

DEPARTAMENTO DE ENGENHARIA ELÉTRICA

SEL0444 – Projeto de Formatura II

Monografia

Oxímetro de pulso para medição da oxigenação periférica e

pulsação cardíaca com interface via web

Aluno: Mário Augusto Kushima

Orientador: Prof. Dr. Evandro L. L. Rodrigues

São Carlos

Novembro de 2014

Page 2: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino
Page 3: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

MÁRIO AUGUSTO KUSHIMA

OXÍMETRO DE PULSO PARA MEDIÇÃO

DA OXIGENAÇÃO PERIFÉRICA E

PULSAÇÃO CARDÍACA COM

INTERFACE VIA WEB

Projeto de conclusão de curso apresentado à

Escola de Engenharia de São Carlos da

Universidade de São Paulo

Curso de Engenharia Elétrica com ênfase em

Eletrônica

ORIENTADOR: Prof. Dr. Evandro L. L. Rodrigues

São Carlos

Novembro de 2014

Page 4: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino
Page 5: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino
Page 6: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino
Page 7: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

i

Agradecimentos

Os meus primeiros agradecimentos são carinhosa e merecidamente dedicados aos meus pais,

Márcia Yoshiko Hoshika Kushima e Mário Kushima, pela dedicação, compreensão e respeito em todos

os anos da minha vida.

Ao meu orientador Evandro Rodrigues, que aceitou a minha proposta para este trabalho e que

sempre esteve sugerindo novas ideias a serem desenvolvidas. Agradeço também à minha primeira

orientadora Liliane Ventura, que me ajudou a desenvolver meus conhecimentos e me apoiou em todos

os momentos.

Aos meus amigos Marcio Makiyama, Tales Santini, Lucas Freitas, Teruo Nakamine, Paula

Fujioka, Tamie Sassaki, Danilo Schwab e Leila Bravo, que não pouparam esforços para me ajudar no

desenvolvimento deste trabalho.

Ao grupo Yanagi Taiko que me acolheu desde o primeiro dia em que estive em São Carlos.

Agradeço a experiência, o conhecimento e a amizade compartilhados com Sônia Kaibara, Bruno

Watanabe, Guilherme Kawamata, Alexandre Romão e Luana Oiko.

Aos colegas de classe junto dos quais enfrentei inúmeros desafios durante estes anos de

graduação. Obrigado Bruno Callegaro, Tiago Martins, João Tardelli, Artur Duarte, Lucas Pacheco e

Tiago Perez.

E também agradeço aqui aos amigos que estiveram comigo durante todos os momentos alegres,

tristes e engraçados que vivenciei em São Carlos.

Page 8: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

ii

Page 9: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

iii

Resumo O monitoramento da saturação de oxigênio pela hemoglobina, um dos principais sinais vitais, é

essencial na rotina hospitalar. Tecnologias para monitorar a oximetria de forma não invasiva, rápida e

precisa, devem ser desenvolvidas para otimizar a rotina hospitalar e levar mais qualidade de vida aos

pacientes. A oximetria de pulso (absorção pelo sangue de dois comprimentos de onda diferentes) permite

a detecção da saturação de oxigênio. Este projeto envolveu o desenvolvimento de um circuito analógico

de aquisição e condicionamento dos sinais de oximetria, controlado por um Arduino Uno, responsável

por enviar os sinais amostrados à Raspberry Pi, via Bluetooth. Estes sinais foram processados pelo

microcomputador para calcular a taxa de saturação de oxigênio no sangue e a frequência cardíaca, os

quais foram armazenados em um banco de dados. A Raspberry Pi disponibilizou uma aplicação web

onde foi possível visualizar o resultado da oximetria e iniciar a realização de uma nova medição. Ao

final do projeto, conseguiu-se a integração de todos os módulos, desde o envio do comando para realizar

uma nova oximetria, a partir da aplicação web, até a visualização dos dados e resultados da oximetria

na aplicação. O projeto possui as mesmas limitações de um oxímetro comercial e o tempo de

processamento é lento se comparado com outros oxímetros. Contudo, a realização da oximetria por meio

da interface web permite um acesso remoto que nenhum outro oxímetro atual realiza.

Palavras-chave: Oxímetro, Arduino Uno, Raspberry Pi, Bluetooth, Web.

Page 10: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

iv

Page 11: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

v

Abstract The monitoring of oxygen saturation by hemoglobin, one of the main vital signs, is essential in

hospital routine. Noninvasive, fast and accurate technologies that allow the monitoring of oximetry must

be developed in order to improve hospital routine and bring more quality of life to patients. Pulse

oximetry (blood absorption by two different wavelengths) allows for the detection of oxygen saturation.

This project involved the development of an analog circuit of acquisition and conditioning of the

oximetry signs controlled by an Arduino Uno, responsible for sending the sampled signs to the

Raspberry Pi via Bluetooth. These signs were then processed by a microcomputer in order to determine

the exact oxygen saturation rate in the blood and the heart frequency. The data is then stored in a

database. Raspberry Pi offers a web application where the oximetry results can be verified and a new

measurement can be initialized. In the end of the project all modules were integrated (from the sending

of the command for a new oximetry measurement to be made in the web application until the

visualization of the data and results of the oximetry application). The project has the same limitations

as a conventional commercial oximeter and the processing time is slow when compared to other

oximeters. However, it allows for the remote execution of the oximetry through the web interface, a

characteristic not found in any other oximeter currently available.

Keywords: Oximeter, Arduino Uno, Raspberry Pi, Bluetooth, Web.

Page 12: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

vi

Page 13: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

vii

Lista de Figuras

Figura 1 - Representação da hematose nos alvéolos pulmonares............................................................ 1

Figura 2 - Representação do sistema circulatório nos seres humanos..................................................... 2

Figura 3 - Sensor ótico para oximetria .................................................................................................... 3

Figura 4 - Tipos de oxímetros existentes ................................................................................................ 3

Figura 5 - Wireless Pulse Oximeter ........................................................................................................ 4

Figura 6 - Curva de dissociação da oxiemoglobina. ............................................................................... 7

Figura 7 - Alteração da curva de dissociação da oxiemoglobina. ........................................................... 8

Figura 8 - Disposição dos LEDs e do sensor de oximetria de pulso. ...................................................... 8

Figura 9 - Diferença da absorção da luz infravermelha e vermelha para a oxiemoglobina e a sua forma

desoxigenada. .......................................................................................................................................... 9

Figura 10 - Absorção para diferentes componentes que a atenuam a transmissão da luz que atravessa o

paciente. .................................................................................................................................................. 9

Figura 11 - Princípio de Beer-Lambert. ................................................................................................ 10

Figura 12 - Alteração da luz transmitida em função da variação do caminho óptico durante o ciclo

cardíaco. ................................................................................................................................................ 12

Figura 13 - Sinais sem e com normalização para diferentes comprimentos de ondas .......................... 13

Figura 14 - Curva teórica e de calibração empírica da saturação de oxigênio pela razão R ................. 14

Figura 15 - Variação dos coeficientes de extinção para diferentes tipos de hemoglobinas .................. 15

Figura 16 - Diagrama em blocos do projeto .......................................................................................... 20

Figura 17 - Sensor ótico ........................................................................................................................ 21

Figura 18 - Curva de resposta do fotodiodo. ......................................................................................... 21

Figura 19 - Arduino Uno ....................................................................................................................... 22

Figura 20 - IDE do Arduino .................................................................................................................. 23

Figura 21 - Módulo Bluetooth HC-05 ................................................................................................... 23

Figura 22 - Ligação entre o Arduino Uno e o Bluetooth HC-05 ........................................................... 24

Figura 23 - Raspverry Pi ....................................................................................................................... 25

Figura 24 - Bluetooth USB - ES388 ...................................................................................................... 26

Figura 25 - Circuito de alimentação ...................................................................................................... 27

Figura 26 - Circuito esquemático de controle dos LEDs ...................................................................... 28

Figura 27 - Amplificador de Transimpedância ..................................................................................... 29

Figura 28 - Filtro ativo passa-baixa com topologia Sallen-Key ............................................................ 30

Figura 29 - Filtro passivo passa alta ...................................................................................................... 31

Figura 30 - Amplificador de ganho não inversor .................................................................................. 31

Figura 31 - Regulador de offset ............................................................................................................. 32

Figura 32 - Amplificador inversor unitário ........................................................................................... 32

Figura 33 - Diagrama em blocos da programação no Arduino ............................................................. 33

Figura 34 - Janela de configuração da Raspberry Pi ............................................................................. 35

Figura 35 - Software de comunicação SSH (Putty) .............................................................................. 36

Figura 36 - Interface gráfica para gerenciamento do banco de dados sqlite3 ....................................... 37

Figura 37 - Diagrama em blocos da programação em Python na Raspberry Pi .................................... 38

Figura 38 - Diagrama em blocos da aplicação web ............................................................................... 42

Figura 39 - Sinais de entrada e saída do filtro passa baixa para uma frequência de 5 Hz ..................... 44

Figura 40 - Comparação entre os dados teóricos e experimentais para o filtro passa baixa ................. 44

Figura 41 - Sinais de entrada e saída do filtro passa alta para uma frequência de 0,07 Hz ................... 45

Figura 42 - Comparação entre os dados teóricos e experimentais para o filtro passa alta .................... 46

Figura 43 - Saída do amplificador de transimpedância ......................................................................... 47

Figura 44 - Saída do filtro passa baixa .................................................................................................. 47

Page 14: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

viii

Figura 45 - Saída do filtro passa alta ..................................................................................................... 48

Figura 46 - Saída do amplificador não inversor .................................................................................... 49

Figura 47 - Saída do circuito de ajuste do offset ................................................................................... 50

Figura 48 - Espectro de potência do sinal de saída do circuito analógico ............................................. 50

Figura 49 - Sinais vermelho e infravermelho não filtrados junto aos seus respectivos picos e vales ... 52

Figura 50 - Sinais vermelho e infravermelho filtrados junto aos seus respectivos picos e vales .......... 52

Figura 51 - Página inicial da aplicação web .......................................................................................... 53

Figura 52 - Página que permite visualizar e requisitar uma nova medição de oximetria ...................... 55

Figura 53 - Visualização dos resultados numéricos da oximetria e da frequência cardíaca.................. 56

Figura 54 - Visualização do sinal de oximetria proveniente dos LEDs vermelho e infravermelho ...... 56

Figura 55 - Visualização do histórico de oximetria e da frequência cardíaca ....................................... 57

Figura 56 - Página de espera enquanto a oximetria está sendo realizada .............................................. 57

Figura 57 - Visão da aplicação web através de um dispositivo móvel .................................................. 58

Figura 58 - Conjunto de testes com diferentes posicionamentos e movimentações do dedo ................ 59

Figura 59 - Sinal vermelho e infravermelho resultante do teste 1 ......................................................... 60

Figura 60 - Sinal vermelho e infravermelho resultante do teste 2 ......................................................... 60

Figura 61 - Sinal vermelho e infravermelho resultante do teste 3 ......................................................... 61

Figura 62 - Sinal vermelho e infravermelho resultante do teste 4 ......................................................... 61

Figura 63 - Sinal vermelho e infravermelho resultante da utilização do esmalte azul .......................... 62

Figura 64 - Sinal vermelho e infravermelho resultante da utilização do esmalte preto ........................ 63

Figura 65 - Sinal vermelho e infravermelho resultante da utilização do esmalte vermelho ................. 63

Page 15: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

ix

Lista de Tabelas

Tabela 1 - Tempo de sobrevivência de alguns órgãos em situação de hipóxia ....................................... 1

Tabela 2 - Lógica de Controle dos LEDs .............................................................................................. 28

Tabela 3 - Dados experimentais do filtro passa baixa ........................................................................... 43

Tabela 4 - Dados experimentais do filtro passa alta .............................................................................. 45

Tabela 5 - Resultados da transmissão Bluetooth ................................................................................... 51

Tabela 6 - Resultados da oximetria e da pulsação cardíaca para os testes ............................................ 59

Tabela 7 - Resultados da oximetria e da pulsação cardíaca quando há esmaltes na unha ..................... 62

Page 16: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

x

Page 17: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

xi

Lista de Abreviaturas e Siglas

λ – Comprimento de Onda

𝛼(𝜆) – Constante de Absorção para determinado Comprimento de Onda

αHbO2(IV) – Constante de Absorção da Oxiemoglobina para o Infravermelho

αHbO2(V) – Constante de Absorção da Oxiemoglobina para o Vermelho

αHb(IV) – Constante de Absorção da Hemoglobina para o Infravermelho

αHb(V) – Constante de Absorção da Hemoglobina para o Vermelho

A – Ampere

AC – Alternate Current

BPM – Batimento Por Minuto

BPS – Bits Por Segundo

CAD – Conversor Analógico-Digital

CI – Circuito Integrado

CO2 – Gás Carbônico

CHbO2 – Concentração de Oxiemoglobina

CHb – Concentração de Hemoglobina

COHb – Carboxiemoglobina

DC – Direct Current

DNS – Domain Name System

Fc – Frequência de Corte

Fa – Frequência de Amostragem

Hb – Hemoglobina Reduzida

HbO2 – Oxiemoglobina

HDMI – High Definition Multimedia Interface

Hz – Hertz

IP – Internet Protocol

Ii(IV) – Intensidade Luminosa Incidente do Infravermelho

Ii(V) – Intensidade Luminosa Incidente do Vermelho

It(V) – Intensidade Luminosa Transmitida do Infravermelho

It(IV) – Intensidade Luminosa Transmitida do Vermelho

Page 18: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

xii

LED – Light Emitting Diode

MetHb – Metemoglobina

O2 – Gás Oxigênio

PCO2 – Pressão Parcial de Gás Carbônico

pH – Atividade do íon H+

PO2 – Pressão Parcial de Gás Oxigênio

SaO2 – Saturação Arterial de Oxigênio

SD – Secure Digital

SO2 – Saturação de Oxigênio

SpO2 – Saturação Pulsátil de Oxigênio

USB – Universal Serial Bus

UTI – Unidade de Terapia Intensiva

V – Volt

W – Watt

Page 19: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

xiii

Sumário

1. Introdução ...................................................................................................................................... 1

1.1. Oximetria de pulso como método de medição da oxigenação. .......................................... 1

1.2. Justificativa do trabalho ....................................................................................................... 4

1.3. Objetivos ................................................................................................................................ 4

1.4. Organização do trabalho ...................................................................................................... 5

2. Fundamentação Teórica ............................................................................................................... 7

2.1. A Oximetria ........................................................................................................................... 7

2.2. Princípios da oximetria de pulso .......................................................................................... 8

2.3. Lei de Beer-Lambert ........................................................................................................... 10

2.4. Medição da concentração de cada substância contida em uma mistura ........................ 10

2.5. Cálculo do SpO2 ................................................................................................................... 11

2.6. Fontes de erros na medição ................................................................................................ 15

2.7. Problemas comuns com oximetria de pulso ...................................................................... 17

3. Materiais e Métodos .................................................................................................................... 19

3.1. Materiais .............................................................................................................................. 21

3.1.1. Sensor de oximetria ..................................................................................................... 21

3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento ................... 22

3.1.3. Microcontrolador – Arduino ...................................................................................... 22

3.1.4. Bluetooth ....................................................................................................................... 23

3.1.5. Microcomputador – Raspberry Pi ............................................................................. 25

3.2. Métodos ................................................................................................................................ 26

3.2.1. Circuito Analógico ....................................................................................................... 26

3.2.2. Programação do Arduino ........................................................................................... 33

3.2.3. Programação da Raspberry Pi ................................................................................... 34

4. Resultados e Discussão ................................................................................................................ 43

4.1. Circuito analógico ............................................................................................................... 43

4.1.1. Filtros analógicos ......................................................................................................... 43

4.1.2. Análise do sinal de oximetria em cada estágio do circuito....................................... 46

4.2. Transmissão Bluetooth ........................................................................................................ 51

4.3. Processamentos digitais do sinal (programação em Python) .......................................... 51

4.4. Aplicação web ...................................................................................................................... 53

4.5. Aferição da oximetria na presença de fontes de erros ..................................................... 58

5. Conclusão ..................................................................................................................................... 65

Referências Bibliográficas .................................................................................................................. 67

Page 20: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

xiv

Apêndices ............................................................................................................................................. 69

Apêndice A – Código do Arduino .................................................................................................. 69

Apêndice B – Programação em Python ......................................................................................... 71

Apêndice C – Validação da transmissão Bluetooth (Arduino) .................................................... 73

Apêndice D – Validação da transmissão Bluetooth (Raspberry Pi) ........................................... 74

Apêndice E – Programação web – index.js.................................................................................... 74

Apêndice F – Programação web – oximeter.js .............................................................................. 76

Apêndice G – Programação web – index.jade ............................................................................... 76

Apêndice H– Programação web – oximeter.jade .......................................................................... 76

Apêndice I – Programação web – executingOximeterPy.jade ..................................................... 78

Apêndice J – Programação web – layout.jade .............................................................................. 78

Apêndice K – Programação web – layout2.jade ........................................................................... 78

Anexo .................................................................................................................................................... 79

Anexo A – Configuração do HC-05 ............................................................................................... 79

Anexo B – Instalação dos drivers do Bluetooth na Raspberry Pi ............................................... 79

Anexo C – Instalação do Node.js .................................................................................................... 80

Anexo D – Instalação do Express ................................................................................................... 80

Page 21: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

1

1. Introdução

1.1. Oximetria de pulso como método de medição da oxigenação.

A oxigenação do sangue é um processo vital para cada célula do corpo humano e a ausência

prolongada de oxigênio pode ocasionar a morte destas células. O processo de oxigenação inicia-se

quando o ar inspirado chega aos pulmões e, então, nos alvéolos, ocorre a hematose (Figura 1), ou seja,

a troca do gás carbônico (CO2) presente no sangue venoso pelo gás oxigênio (O2) contido no ar inspirado

(WEBSTER, 1997).

Figura 1 - Representação da hematose nos alvéolos pulmonares

Fonte: “Hematose”. Disponível em <http://interagircomfono.xpg.uol.com.br/hematose.html>. Acesso

em: 01 nov 2014.

Para enfatizar a importância da oxigenação dos tecidos, na Tabela 1, observou-se o tempo que

um órgão consegue manter sua função em situação de hipóxia (baixa oxigenação nos tecidos).

Tabela 1 - Tempo de sobrevivência de alguns órgãos em situação de hipóxia

Órgão Tempo de Sobrevivência sem oxigenação

Córtex Cerebral Menos de 1 minuto

Coração 5 minutos

Rim e Fígado 10 minutos

Músculos Esqueléticos 2 horas

Fonte: WEBSTER, 1997

Tanto o gás carbônico, antes presente no sangue venoso (rico em gás carbônico), e o gás

oxigênio, no sangue arterial (rico em oxigênio), são transportados pelas moléculas de hemoglobina

contidas nas células chamadas de hemácias ou eritrócitos. A circulação do sangue arterial e do venoso

é feita pelo sistema circulatório (Figura 2).

Page 22: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

2

Figura 2 - Representação do sistema circulatório nos seres humanos

Fonte: “Sistema Cardiovascular”. Disponível em <http://www.euachei.com.br/educacao/corpo-

humano/sistema-cardiovascular/>. Acesso em: 01 nov 2014

Mediante a importância da oxigenação, iniciaram, então, estudos sobre métodos de medição da

saturação de oxigênio no sangue, porém os primeiros procedimentos eram difíceis, invasivos e

demoravam para gerar resultado. Um exemplo destas primeiras medições é o método de Van Slyke, no

qual se utilizavam reações químicas para remover o oxigênio e outros gases dissolvidos no sangue e,

posteriormente, a partir das pressões parciais destes gases retirados, podia-se determinar o nível de

saturação de oxigênio (WEBSTER, 1997). Tal método levava até 20 minutos para ser concluído, logo

não era possível o monitoramento de pacientes em condições de risco, tais como em acidentes,

anestesias, cirurgias e acompanhamento na unidade de tratamento intensivo (UTI), quando danos

irreversíveis podem ocorrer devido à falta de oxigênio no sangue.

Page 23: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

3

A pesquisa e o desenvolvimento na área de bioengenharia possibilitaram o surgimento do

oxímetro de pulso, um dispositivo adequado para a medição devido à rapidez do resultado, à grande

fidelidade e ao fato de não ser invasivo. Tal dispositivo é composto por dois LEDs (diodos emissores

de luz) posicionados em frente a um fotodiodo, sendo que entre eles coloca-se uma parte translúcida do

corpo do paciente (Figura 3). Um dos diodos emite luz com comprimento de onda na faixa espectral

correspondente ao vermelho, enquanto o outro corresponde ao infravermelho. É possível, assim, obter

a taxa de oxigênio no sangue, pois as absorções destes comprimentos de onda diferem conforme a

saturação de oxigênio presente. Consegue-se também medir a frequência cardíaca do paciente a partir

da análise do sinal de oximetria, pois este sinal acompanha a variação do fluxo sanguíneo devido ao

batimento cardíaco.

Figura 3 - Sensor ótico para oximetria

Fonte: Figura adaptada de PHILIPS.

Os sinais recebidos pelo fotodiodo precisam ser condicionados de forma que possam ser

analisados por microprocessadores, os quais realizam cálculos para obterem a taxa de saturação e

frequência cardíaca. Estes resultados são, enfim, mostrados ao usuário em um visor ou monitor.

Atualmente, todo este sistema de oximetria pode ser também encontrado em equipamentos

portáteis, além de maior porte, geralmente utilizados em hospitais ou centros de saúde, ambos com boa

qualidade de medição e fácil visualização dos resultados. Na Figura 4, podem ser vistos exemplos de

oxímetros existentes.

Figura 4 - Tipos de oxímetros existentes

Page 24: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

4

Um modelo de oxímetro, que difere dos anteriores, é o Wireless Pulse Oximeter (Figura 5) da

empresa iHealth, o qual é composto por um oxímetro atual e por um aplicativo que pode ser executado

no sistema operacional iOS. Os dados de oximetria e pulsação cardíaca podem ser enviados via

Bluetooth ao dispositivo que esteja executando o aplicativo. Estes dados podem ser visualizados no

dispositivo e armazenados em um banco de dados remoto.

Figura 5 - Wireless Pulse Oximeter

Fonte: “wireless pulse oximeter”. Disponível em <http://www.ihealthlabs.com/fitness-

devices/wireless-pulse-oximeter/>. Acesso em: 01 nov 2014.

1.2. Justificativa do trabalho

A medição da saturação de oxigênio no sangue e da frequência cardíaca, a partir do método de

oximetria de pulso, mostra-se importante, visto ser um processo rápido e não invasivo.

Apesar de existirem diversos modelos de oxímetros de pulso, nenhum deles possui um

aplicativo web, que permite ao usuário utilizar como interface para acessar, visualizar e controlar o

processo de oximetria de pulso. A utilização de um banco de dados digital integrado a este aplicativo

possibilita o armazenamento dos sinais e resultados de uma forma segura e eficiente.

Portanto, a elaboração de um aplicativo web, integrado a um banco de dados digital para

medição da oximetria de pulso, permite o monitoramento remoto dos sinais de saturação de oxigênio e

pulsação cardíaca de um paciente.

1.3. Objetivos

O principal objetivo deste trabalho foi projetar e implementar um sistema de medição da

oxigenação arterial e da pulsação cardíaca, com interface via web, baseado no método da oximetria de

pulso. Para obter tal objetivo foi necessário:

Page 25: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

5

O desenvolvimento de um circuito analógico para o condicionamento do sinal do sensor

optoeletrônico e controle dos LEDs.

A programação do microcontrolador, responsável pelo controle do circuito analógico e pela

transmissão dos dados, via Bluetooth, para o microcomputador

A programação deste microcomputador para inicializar a comunicação Bluetooth, realizar o

processamento digital do sinal, obter a taxa de oxigenação sanguínea e frequência cardíaca,

armazenar estes sinais e resultados em um banco de dados e gerar uma aplicação web, que

serviu como interface da oximetria.

A configuração da comunicação Bluetooth.

1.4. Organização do trabalho

O trabalho elaborado foi dividido em cinco capítulos. O primeiro contém a descrição, o objetivo

e a justificativa do trabalho, a explicação do tema e o estado da arte referente à oximetria. No segundo,

encontra-se o embasamento teórico do projeto. No terceiro, são apresentados os materiais escolhidos e

os métodos utilizados. O quarto é composto pelos resultados e discussões. Por fim, no quinto, é

apresentada a conclusão referente ao trabalho desenvolvido e as futuras melhorias que podem ser

implementadas.

Page 26: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

6

.

Page 27: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

7

2. Fundamentação Teórica

2.1. A Oximetria

O processo de oxigenação ocorre devido ao transporte de gás oxigênio, O2, pelas moléculas de

hemoglobina encontradas nas células do sangue denominadas hemácias ou eritrócitos. Este transporte

só é possível devido à capacidade da hemoglobina de ligar-se a uma molécula de oxigênio de forma

reversível, assim resultando na oxiemoglobina, HbO2. As hemoglobinas que não estão carregando

moléculas de oxigênio são denominadas hemoglobinas reduzidas, Hb. Conforme o número de moléculas

de oxigênio ligadas à hemoglobina (que varia de um a quatro), diz-se que ela está mais ou menos

saturada. A afinidade desta ligação eleva-se proporcionalmente ao aumento da quantidade existente de

moléculas de hemoglobina oxigenadas (HAEBISCH, 1980), permitindo que o sangue arterial mantenha

um nível de oxigenação constante e possibilite que o organismo sobreviva em regiões de baixa pressão

de oxigênio, tais como em locais de grande altitude.

O índice que mede a oxigenação arterial é denominado saturação arterial de oxigênio, SaO2,

expresso em porcentagem e determinado pela concentração de oxiemoglobina sobre esta somada à

concentração de hemoglobinas reduzidas, como na equação (1).

SaO2 =CHbO2

CHbO2 + CHb (1)

Onde CHbO2 é a concentração de oxiemoglobina e CHb é a concentração de hemoglobina

reduzida. A quantidade de oxigênio presente no sangue gera uma pressão parcial, PO2, que é relacionada

à saturação arterial de oxigênio, SaO2. Esta relação é conhecida como curva de dissociação da

oxiemoglobina (Figura 6).

Figura 6 - Curva de dissociação da oxiemoglobina.

Fonte: MARIEB e HOEHN (2008).

Page 28: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

8

A pressão parcial influencia na saturação arterial de oxigênio, ou seja, na afinidade de

combinação entre as moléculas de hemoglobinas e de oxigênio. A curva de dissociação pode sofrer

alguns desvios, em decorrência de fatores, tais como, a temperatura, o pH do sangue ([H+]), a pressão

parcial de gás carbônico (PCO2), e a quantidade de 2,3 BPG (2,3-bifosfoglicerato). Na Figura 7, pode-

se observar a influência destes fatores na alteração da curva.

Figura 7 - Alteração da curva de dissociação da oxiemoglobina.

Fonte: Figura adaptada de PHILIPS.

2.2. Princípios da oximetria de pulso

O sensor de oximetria é constituído por dois LEDs de 660 nm e 895 nm, que correspondem,

respectivamente, ao espectro de luz vermelho e infravermelho. Estes LEDs emitem luz que atravessa

uma parte translúcida do corpo do paciente (as pontas dos dedos ou a orelha). Parte desta luz é espalhada

e/ou absorvida quando atravessa o paciente, enquanto a radiação que o atravessa completamente é

medida por um sensor de luz (fotodiodo), posicionado no lado oposto do corpo do paciente. Na Figura

8, é possível observar a disposição dos componentes citados anteriormente.

Figura 8 - Disposição dos LEDs e do sensor de oximetria de pulso.

Fonte: (ANDRADE, 2009).

A medição da saturação pode ser realizada comparando-se a quantidade da radiação em 660 nm

com a de 895 nm detectadas pelo sensor, pois a oxiemoglobina absorve mais a luz infravermelha do que

Page 29: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

9

a vermelha, enquanto que a hemoglobina reduzida se comporta de modo oposto (Figura 9). Esta medição

depara-se com o problema: Como separar a quantidade de luz que é absorvida pelo sangue arterial da

que é absorvida pelos tecidos, ossos e sangue venoso.

Figura 9 - Diferença da absorção da luz infravermelha e vermelha para a oxiemoglobina e a sua forma

desoxigenada.

Fonte: (ANDRADE, 2010).

A parcela de luz absorvida devido aos tecidos não apresenta significantes mudanças em curtos

períodos de tempo, ao passo que a de absorção, referente ao sangue arterial, apresenta variações devido

às alterações na pulsação (embora exista um nível constante de sangue arterial). Desse modo, como o

sangue arterial é o único componente da absorção que apresenta mudanças em curtos períodos de tempo,

esta pode ser isolada dos outros componentes e assim, utilizada para realizar a medição de saturação.

Na Figura 10, podem ser vistos os componentes da absorção da luz que atravessa o paciente.

Figura 10 - Absorção para diferentes componentes que a atenuam a transmissão da luz que atravessa o

paciente.

Fonte: Figura adaptada de (WEBSTER, 1997)

Page 30: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

10

2.3. Lei de Beer-Lambert

O princípio de Beer-Lambert (Figura 11), que relaciona a absorção de luz com as propriedades

do material, consiste em um feixe de luz incidente, Iincidente, com comprimento de onda λ, que atinge

um anteparo não totalmente opaco, resultando em um feixe transmitido, Itransmitido, que é dependente

do comprimento do anteparo, l [cm], da constante de absorção deste para o comprimento de onda λ,

α(λ) [L/mmol.cm], e da concentração de partículas responsáveis pela atenuação do sinal, C [mmol/L].

A equação (2) expressa a relação do princípio de Beer-Lambert.

Figura 11 - Princípio de Beer-Lambert.

Fonte: (LIMA, 2009)

𝐼𝑡𝑟𝑎𝑛𝑠𝑚𝑖𝑡𝑖𝑑𝑜 = 𝐼𝑖𝑛𝑐𝑖𝑑𝑒𝑛𝑡𝑒 ∗ 𝑒−𝛼(𝜆).𝐶.𝑙 (2)

A transmitância, T(λ), desse processo é a relação entre a luz transmitida e a incidente, equação

(3); enquanto que a absorbância, A(λ), é o logaritmo natural negativo desta relação, equação (4).

T(λ) =ItransmitidoIincidente

= e−α(λ).C.l (3)

|𝐴(λ)| = − ln(T(λ)) = α(λ). C. l (4)

2.4. Medição da concentração de cada substância contida em uma mistura

A lei de Beer-Lambert pode também ser aplicada a uma mistura que possui mais de uma

substância que absorve a luz, quando atravessada. A absorção parcial de cada substância contribui para

a absorção total da luz. Portanto, a representação matemática desta absorção total pode ser obtida pela

superposição de cada absorção individual. Por exemplo, suponha uma mistura com n substâncias

diferentes, então a absorção total, At, pode ser obtida através da equação (5).

Page 31: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

11

At = α1(λ). C1. l1 + α2(λ). C2. l2 +⋯+ αn(λ). Cn. ln (5)

Onde, cada 𝛼𝑛(𝜆) corresponde à constante de absorção, 𝐶𝑛 à concentração e ln ao comprimento

óptico, que é atravessado pelo feixe de luz de comprimento λ, para cada substância contida nesta mistura.

Uma vez, conhecendo a constante de absorção de cada substância, mantendo um mesmo

caminho óptico de comprimento L para todas e medindo a absorção total para diferentes comprimentos

de onda, é possível montar um sistema linear (6) com n equações de modo que seja possível se

determinar as concentrações das n substâncias que compõem a mistura.

{At(λ1) = α1(λ1). C1. L + α2(λ1). C2. L + ⋯+ αn(λ1). Cn. L

⋮At(λn) = α1(λn). C1. L + α2(λn). C2. L + ⋯+ αn(λn). Cn. L

(6)

Esta abordagem não é viável para a determinação da oximetria de pulso deste projeto, visto que

os comprimentos ópticos não são os mesmos para as diferentes substâncias, as constantes de absorção

possuem uma variabilidade entre indivíduos e, também, o sensor adquirido não permite uma análise

simultânea da intensidade incidente da transmitida, através do dedo do paciente, de modo a determinar

a intensidade total absorvida. Outro fator limitante é a necessidade de mais de dois comprimentos de

ondas diferentes, o que não é possível de se obter com o sensor disponível (WEBSTER, 1997).

2.5. Cálculo do SpO2

O índice SpO2 é definido como a taxa de saturação pulsátil de oxigenação, correspondente ao

SaO2, e sua sigla é diferente devido ao método pelo qual este índice é obtido. O método para o cálculo

do SpO2 é baseado na pulsação cardíaca, que acaba alterando o fluxo sanguíneo responsável pela

oxigenação do indivíduo. Um ciclo cardíaco é composto pela sístole e pela diástole. As artérias contêm

mais sangue a sístole do que na diástole. Dessa forma, a concentração e o comprimento óptico das

hemoglobinas aumentam, consequentemente a intensidade luminosa dos feixes que atravessam diminui.

O processo inverso pode ser inferido durante a diástole.

Na Figura 10, pode-se observar a variação da absorção e da transmissão do feixe luminoso,

devido ao ciclo cardíaco. Nesta mesma figura, são indicados dois sinais, IH e IL, o primeiro

correspondendo à intensidade máxima transmitida, enquanto que IL, à intensidade mínima transmitida.

Estes dois sinais podem ser expressos conforme o sistema de equações (7) (WEBSTER, 1997).

{IH = IO. e

−αDC(λ).CDC.dDC . e−[αHb(λ).CHb+αHbO2(λ).CHbO2]dmin

IL = IO. e−αDC(λ).CDC.dDC . e−[αHb(λ).CHb+αHbO2(λ).CHbO2]dmax

(7)

Page 32: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

12

Onde,

IO é a intensidade de luz incidente;

αDC, CDC e dDC é a constante de absorção, a concentração e o comprimento óptico das componentes que

possuem absorção constante, com exceção do sangue arterial não pulsátil;

αHb(λ) e αHbO2(λ) são as constantes de absorção da hemoglobina reduzida e da oxiemoglobina para

determinado comprimento de onda λ;

CHb e CHbO2 são as concentrações de oxiemoglobina e hemoglobina reduzida;

dmin é o comprimento óptico mínimo para a hemoglobina reduzida e a oxiemoglobina durante a diástole;

dmax é o comprimento óptico máximo para a hemoglobina reduzida e a oxiemoglobina durante a sístole.

Durante o ciclo cardíaco, a intensidade transmitida I é uma função do diâmetro d, da artéria, que

pode variar de dmin a dmax, ou seja, d pode ser substituído por dmin + Δd, onde Δd varia de 0 até dmax

- dmin. Sendo assim, I pode ser expresso como uma função de IH e Δd.

I = IH. 𝑒−[αHb(λ).CHb+αHbO2(λ).CHbO2].Δd (8)

Na Figura 12, pode-se observar a alteração da luz transmitida entre um valor IMIN a um IMAX

conforme altera-se a distância x entre dmin a dmax.

Figura 12 - Alteração da luz transmitida em função da variação do caminho óptico durante o ciclo

cardíaco.

Fonte: Figura adaptada de (WEBSTER, 1997)

Antes de se iniciar o cálculo do SpO2, deve-se normalizar os sinais de oximetria proveniente dos

LEDs, visto que estes não emitem luz com a mesma intensidade, havendo também a variação da

sensibilidade do sensor para diferentes comprimentos de onda. A normalização é realizada dividindo-se

Page 33: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

13

o valor amostrado pelo valor máximo, equação (9), o que resulta em sinais com a mesma intensidade

durante a diástole para os diferentes comprimentos de onda (este efeito é melhor visualizado na Figura

13).

Figura 13 - Sinais sem e com normalização para diferentes comprimentos de ondas

Fonte: Figura adaptada de (WEBSTER, 1997)

IN =I

IH= e−[αHb(λ).CHb+αHbO2(λ).CHbO2].Δd (9)

O cálculo das absorbâncias das luzes, sistema de equações (10), é equivalente ao total absorvido

devido ao componente AC do sinal.

{At,V = ln (IN,V) = −[αHb(λV). CHb + αHbO2(λV). CHbO2]. ΔdV

At,IV = ln (IN,IV) = −[αHb(λIV). CHb + αHbO2(λIV). CHbO2]. ΔdIV (10)

A razão das absorbâncias dos sinais já normalizados é definida como um fator R (equação (11)).

R =At,VAt,IV

=[αHb(λV). CHb + αHbO2(λV). CHbO2]. ΔdV

[αHb(λIV). CHb + αHbO2(λIV). CHbO2]. ΔdIV (11)

Considerando que o comprimento óptico é o mesmo para os dois comprimentos de onda e

utilizando a definição de SaO2 da equação (1), pode-se concluir que a saturação pulsátil de oxigenação,

SpO2, calcula-se conforme a equação (12).

SpO2 =αHb(λV) − R ∗ αHb(λIV)

R ∗ (αHbO2(λIV) − αHb(λIV)) + (αHb(λV) − αHbO2(λV)) (12)

Onde a razão R também pode ser calculada como:

Page 34: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

14

𝑅 =ln (𝐼𝐿,𝑉𝐼𝐻,𝑉

)

ln (𝐼𝐿,𝐼𝑉𝐼𝐻,𝐼𝑉

)

(13)

Este é o modelo teórico para se obter a saturação pulsátil de oxigênio, SpO2. No entanto, as

constantes de absorção, que variam para cada indivíduo, a presença de hemoglobinas não funcionais e

o efeito de espalhamento da luz são fatores que não foram considerados para o modelo em questão

(WEBSTER, 1997). Usualmente, utiliza-se na prática, uma curva de calibração empírica (Figura 14)

que relaciona a razão R com o nível de oxigenação.

Figura 14 - Curva teórica e de calibração empírica da saturação de oxigênio pela razão R

Fonte: Figura adaptada de (WEBSTER, 1997)

Na literatura, há alguns polinômios que tentam obter uma curva empírica que se aproxime da

teórica, dentre estes:

SpO2 = 110 − 25. R (14)

SpO2 =1000 − 550. R

900 − 350. R (15)

SpO2 = 10,0002. R3 − 52,887. R2 + 26,871. R + 98,283 (16)

Fontes: Equação (14) – (WEBSTER, 1997). Equação (15) – (BRONZINO, 1999). Equação (16) –

(NGHIA, 2012)

Page 35: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

15

2.6. Fontes de erros na medição

Hemoglobinas não funcionais

A principal fonte de erro que afeta a medição da saturação de oxigênio advém da presença da

hemoglobina não-funcional (WEBSTER, 1997). Em alguns pacientes, há uma grande quantidade destas

hemoglobinas incapazes de transportar oxigênio. A carboxiemoglobina (HbCO) e a metemoglobina

(METHb) são alguns tipos de hemoglobina não funcionais. Na Figura 15, pode-se perceber como estas

hemoglobinas não funcionais influenciam uma medição incorreta do SpO2, por possuírem, em alguns

determinados comprimentos de onda, um coeficiente de extinção superior ou muito próximo ao das

hemoglobinas funcionais (oxiemoglobinas e hemoglobina reduzida). Sendo assim, a medição da

saturação pulsátil de oxigênio deveria ser:

SpO2 =CHbO2

CHb + CHbO2 + CHbCO + CMETHb + Coutras hemoglobinas não funcionais (17)

Contudo, para que seja possível essa medição, seriam necessários outros feixes de luz com

comprimentos de ondas diferentes, que possibilitem distinguir a absorção de uma determinada

hemoglobina em relação as outras.

Quando a quantidade de hemoglobinas não funcionais é muito baixa, as equações possuem

grande correspondência. Ao passo que, na presença de grande quantidade destes tipos de hemoglobina,

os resultados obtidos são divergentes em relação ao estado real do paciente (WEBSTER, 1997).

A poluição por monóxido de carbono e o fumo excessivo são fatores que influenciam a formação

de hemoglobinas não funcionais.

Figura 15 - Variação dos coeficientes de extinção para diferentes tipos de hemoglobinas

Fonte: Figura adaptada de (WEBSTER, 1997)

Page 36: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

16

Efeito de espalhamento da luz

Nem todo o feixe de luz incidente é absorvido ou transmitido. Uma parte desta luz também é

refletida e espalhada dentro do paciente. Essa luz espalhada é novamente absorvida, transmitida e

espalhada enquanto estiver dentro do paciente. Desse modo, há um aumento de absorção da luz que não

é considerado no modelo teórico. O aumento da absorção não é somente relacionado a esse

espalhamento e ao aumento do diâmetro da artéria durante a diástole. A mudança do eixo das células

vermelhas do sangue altera a absorção da luz. As células vermelhas possuem um formato bicôncavo,

cujo maior eixo é alinhado ao fluxo sanguíneo durante a diástole e o menor eixo, na sístole. Assim, na

diástole, a luz possui maior caminho a ser percorrido, aumentando, consequentemente, sua absorção

pelo sangue. Este posicionamento variável do eixo destas células também modifica a quantidade de luz

refletida. Como resultado desta propriedade, a absorção e a reflexão da luz causada pelo sangue depende

do ciclo cardíaco e da velocidade do fluxo sanguíneo (MOYLE, 1994).

A intensidade da luz espalhada depende de fatores como a concentração de células vermelhas

no sangue, o tamanho, o formato, a orientação, o índice de refração e a espessura dos tecidos (FINE e

WEINREB, 1995). Tais fatores, além da distância entre os LEDs e o fotodiodo, variam de paciente para

paciente, dificultando a obtenção de uma modelagem para estas diversas circunstâncias. Existem alguns

modelos da absorção de luz, incluindo o espalhamento, os quais são baseados em teoremas estatísticos

e quânticos, o que os torna mais complexos e assim inviáveis na prática.

Steinke e Shepherd demonstraram que o espalhamento dos feixes luminosos depende do

comprimento de onda da luz e da taxa de saturação. A relação entre o espalhamento de luz e a taxa de

saturação é linear e pode ser vista não somente como uma fonte de erro, pois o espalhamento aumenta

a taxa de absorção dessa luz, ou seja, aumenta-se a sensibilidade da medição (Steinke e Shepherd, 1986).

Comprimentos de ondas emitidos pelos LEDs

Os comprimentos de onda escolhidos são tais que suas absorções pela pele, tecidos e a água

sejam inferiores em relação a outros comprimentos de onda, de modo que haja uma diferença

significativa entre as constantes de absorção da hemoglobina reduzida e da oxiemoglobina (WEBSTER,

1997). Sabe-se que os LEDs não emitem em somente um comprimento de onda, isto é, os LEDs emitem

uma faixa de comprimentos de ondas em torno daquele que foi escolhido inicialmente. Dessa forma

mesmo que se escolha um LED com uma estreita faixa de comprimentos de onda em torno do desejado,

a medição de oximetria possui erro devido a esta característica.

Page 37: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

17

Anemia

Um paciente com anemia possui uma baixa quantidade de células vermelhas, o que diminui,

consequentemente, a quantidade de hemoglobina no seu sangue. Um paciente anêmico pode não possuir

hemoglobinas funcionais suficientes em seu sangue para oxigenar os tecidos. A pequena quantidade de

hemoglobinas funcionais pode estar completamente saturada, o que indica que o paciente possui uma

taxa normal de SpO2, mas, na realidade, não possui oxigenação suficiente em seus tecidos (WEBSTER,

1997).

Corantes

Em alguns procedimentos cirúrgicos, especialmente em cardiologia e urologia, são injetados

corantes no sangue do paciente, com a finalidade de se mapear o fluxo sanguíneo. Estes corantes

interferem na transmissão da luz que atravessa o sangue, provocando uma leitura incorreta da oximetria

(WEBSTER, 1997).

Hipotermia

Em casos de hipotermia, o corpo reduz a perda de calor pela pele, diminuindo a circulação

periférica, o que afeta significantemente a medição da oxigenação periférica. Também, devido ao frio,

o paciente pode apresentar tremores que atrapalham a aquisição de dados pelo sensor (WEBSTER,

1997).

2.7. Problemas comuns com oximetria de pulso

As principais dificuldades que são encontradas no oxímetro de pulso são:

Interferência de luz externa

Uma má isolação do sensor em relação à luz externa pode ocasionar leituras incorretas da

oximetria, isto porque o fotodiodo é também sensível a luz ambiente.

Movimentos do paciente

A movimentação voluntária ou involuntária do paciente, até mesmo oriunda do ato da fala afeta

a leitura do sinal, pois o movimento acaba gerando pequenas distorções no sinal.

Page 38: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

18

Adaptação do sensor ao corpo do paciente

Mesmo que o sensor seja fabricado para se adaptar da melhor maneira ao paciente, existem

casos em que não há um encaixe adequado do sensor ao dedo do paciente, o que possibilita que os

problemas anteriores ocorram e interfiram na qualidade do sinal obtido.

Esmaltes de unhas

A coloração dos esmaltes utilizados nas unhas pode interferir significantemente na análise da

oximetria, pois pode absorver ou refletir a luz emitida pelos diodos.

Page 39: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

19

3. Materiais e Métodos

Neste capítulo, são apresentados os materiais e os métodos utilizados para a implementação do

projeto. Um esquema geral deste pode ser visto na Figura 16, onde cada bloco representa um módulo

do projeto com suas respectivas funções, características e componentes.

O projeto foi composto primeiramente por um sensor de oximetria que inclui dois LEDs e um

fotodiodo conforme especificado nos dois primeiros capítulos. Este sensor foi conectado a um circuito

analógico que condicionou o sinal de modo que pudesse ser convertido para um sinal digital pelo

microcontrolador Arduino Uno.

O Arduino Uno foi o responsável por controlar a emissão dos LEDs e pela transmissão via

Bluetooth, sendo que algumas configurações precisaram ser realizadas neste tipo de comunicação. Os

dados enviados, via Bluetooth, foram recebidos pelo microcomputador Raspberry Pi. A Raspberry Pi

foi configurada e alguns programas e drivers foram instalados. Neste microcomputador, foram

desenvolvidos dois programas: programação em Python e web. O programa em Python foi responsável

por inicializar a comunicação Bluetooth, o processamento digital dos sinais e o armazenamento destes

em um banco de dados. A programação web, que envolveu um servidor Node.js, o framework Express,

plug-ins e suas configurações, foi responsável por gerar o site, que serviu como interface para o usuário

realizar a oximetria e visualizar o resultado.

O site gerado foi uma aplicação web, composta por uma página inicial do projeto, uma segunda

que permitiu a visualização da oximetria e a obtenção de uma nova medição e, por fim, uma responsável

por executar o programa em Python.

A oximetria foi realizada a partir do momento em que o usuário, por meio da aplicação web,

requisitou uma nova medição, que o redirecionou a uma página que executou o programa em Python. O

referido programa iniciou a comunicação Bluetooth entre a Raspberry Pi e o Arduino Uno. Estabelecida

a comunicação, a Raspberry enviou um sinal para que o Arduino Uno começasse controlar a emissão

dos LEDs do sensor, de modo que o sinal de saída do fotodiodo pudesse ser condicionado pelo circuito

analógico. O sinal atravessou todos os módulos conforme explicado anteriormente até que os resultados

fossem armazenados no banco de dados. Por fim, a aplicação web redirecionou o usuário para a página

de visualização da oximetria, para uma análise dos resultados obtidos.

A constituição, as características ou as funções de cada módulo do projeto são descritas

detalhadamente ao longo deste capítulo.

Page 40: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

20

Figura 16 - Diagrama em blocos do projeto

Page 41: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

21

3.1. Materiais

3.1.1. Sensor de oximetria

O sensor utilizado (Figura 17) é composto por um adaptador de dedo, um cabo blindado e um

conector DB9. Este sensor possui dois LEDs emissores de luz nos comprimentos de onda de 660 nm e

895 nm, e um fotodiodo, que funciona como uma fonte de corrente com saída diretamente proporcional

à intensidade da luz recebida.

Figura 17 - Sensor ótico

O fotodiodo possui uma curva de sensibilidade (Figura 18) que varia conforme o comprimento

de onda, com sensibilidade para o infravermelho (895 nm) diferente para o vermelho (660 nm).

Figura 18 - Curva de resposta do fotodiodo.

Fonte: (SANTINI, 2010

Page 42: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

22

3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento

Os componentes utilizados no projeto foram transístores, amplificadores operacionais,

resistores, capacitores, reguladores e inversor de tensão. Os transístores foram utilizados para chavear

uma ponte-H que controlou a emissão dos LEDs. Os amplificadores operacionais foram implementados

como filtros analógicos, amplificadores de transimpedância, amplificadores não-inversores e isoladores.

O inversor de tensão foi utilizado para que, a partir de uma única fonte de tensão, pudesse gerar uma

alimentação simétrica utilizada nos amplificadores operacionais que necessitam deste tipo de

alimentação. Os resistores e capacitores atuaram em conjunto com os demais componentes para

polarizar ou permitir a função desejada para aquele circuito.

3.1.3. Microcontrolador – Arduino

Neste projeto, o microcontrolador teve a função de controlar o circuito analógico, realizar a

aquisição dos sinais provenientes dos LEDs e enviar estes dados ao microcomputador, via comunicação

Bluetooth.

O microcontrolador escolhido foi o Arduino Uno (Figura 19), que é um microcontrolador

baseado no ATmega328. Este microcontrolador possui como características principais:

Alimentação de 5V;

Frequência de clock de 16 MHz;

14 pinos digitais de entrada ou saída;

6 entradas analógicas com Conversores Analógico/Digital de 10 bits cada;

Memória flash de 32 kB, SRAM de 2 kB e EEPROM de 1 kB

Conector USB (do inglês, “Universal Serial Bus”) utilizado para programação do

microprocessador, comunicação serial e alimentação. (ARDUINO, 2014, Arduino Uno).

Figura 19 - Arduino Uno

Fonte: (ARDUINO, 2014, Arduino Uno)

Page 43: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

23

As principais vantagens que podem ser observadas neste módulo são:

A facilidade para acessar os seus periféricos que são utilizados no controle do circuito

analógico e na aquisição dos sinais deste projeto;

O conector USB, já acoplado a placa, que permite uma rápida programação através da sua IDE

(do inglês, “Integrated Developmnet Environment”, que significa Ambiente Integrado de

Desenvolvimento). Esta IDE (Figura 20) pode ser encontrado em (ARDUINO, 2014,

Download the Arduino Software), onde o usuário deve escolher a IDE conforme o sistema

operacional em que está desenvolvendo a aplicação.

Programação em C/C++, grande quantidade de informação compartilhada entre seus usuários

e o módulo Bluetooth, HC-05, que pode ser facilmente acoplado a esta placa.

Figura 20 - IDE do Arduino

3.1.4. Bluetooth

O módulo Bluetooth utilizado para se conectar ao Arduino Uno foi o HC-05 (Figura 21), que é

um módulo desenvolvido para ser utilizado junto aos diversos Arduinos existentes, apesar de que nada

impede a utilização deste por outros microcontroladores. Este módulo Bluetooth teve como função a

transmissão dos dados amostrados pelo Arduino Uno e processados pelo microcomputador.

Figura 21 - Módulo Bluetooth HC-05

Fonte: “HC-05”. Disponível em < http://blog.roman-mueller.ch/index.php/2013/04/24/connecting-to-

arduino-using-processing-and-bluetooth-hc-05-hc06/ >. Acesso em: 01 nov 2014.

Page 44: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

24

A ligação entre o módulo e o Arduino Uno deu-se seguindo rigorosamente o esquema mostrado

na Figura 22. Os pinos Tx e Rx do HC-05 foram ligados aos pinos 10 e 11 do Arduino, respectivamente.

Além disso, o pino 9 somente foi ligado ao HC-05 quando se desejou entrar no modo de configuração

do módulo por meio dos comandos AT. No Anexo A – Configuração do HC-05 encontra-se uma

lista de comandos e um código exemplo para a configuração do módulo Bluetooth.

Figura 22 - Ligação entre o Arduino Uno e o Bluetooth HC-05

Fonte: “Ligação entre o Arduino e o HC-05”. Disponível em

<http://www.instructables.com/id/Modify-The-HC-05-Bluetooth-Module-Defaults-Using-

A/?ALLSTEPS>. Acesso em: 01 nov 2014.

Apesar do tipo de comunicação entre o Arduino Uno e o módulo HC-05 ser serial e os pinos

digitais 0 e 1 do Arduino já serem configurados para este tipo de comunicação, neste projeto, utilizaram-

se os pinos 10 e 11, porque durante o desenvolvimento foi preciso utilizar a comunicação serial via USB,

como forma de verificação e validação do código desenvolvido no Arduino. Para utilizar estes pinos em

uma comunicação serial é necessária uma biblioteca, denominada “SoftwareSerial Library”, que permita

a existência de uma serial por software (ARDUINO, 2014, SoftwareSerial Library).

Para este projeto foram alteradas algumas configurações deste módulo, tais como: o nome do

módulo, a senha de acesso para pareamento e a taxa de transmissão (Baud Rate) para 115.200 BPS (Bits

Por Segundo). Os dois primeiros parâmetros de configurações foram escolhidos apenas para aumentar

a segurança dos dados transmitidos. A taxa de transmissão escolhida foi a que possibilitasse a realização

as amostragens dos dados pelo Arduino sem que houvesse erros ou impossibilidade de transmissão dos

dados, via Bluetooth.

A taxa de transmissão foi escolhida empiricamente durante o desenvolvimento, visto que outros

valores para esta taxa não permitiram a completa transmissão dos dados, devido ao estouro do buffer de

transmissão, ou não eram valores disponíveis para o módulo Bluetooth conectado ao microcomputador.

Page 45: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

25

3.1.5. Microcomputador – Raspberry Pi

O microcomputador utilizado é a Raspberry Pi modelo B (Figura 23), que é um mini computador

do tamanho de um cartão de crédito capaz de se conectar a um monitor via HDMI (do inglês, High

Definition Media Interface).

A Raspberry Pi foi um conceito desenvolvido por Eben Upton que queria um computador

minimalista, com baixo consumo, baixo custo e flexível para incentivar, nos estudantes de Ensino Médio

e Superior, o aprendizado da programação.

O projeto evoluiu e se tornou uma Fundação: Raspberry Foundation. O sucesso de vendas desse

computador foi imediato e hoje, além do cunho educacional, tornou-se a plataforma de desenvolvimento

preferida de estudantes universitários e projetistas experientes, sendo utilizada em diversas aplicações

comerciais ou não, inclusive na aplicação desenvolvida nesse trabalho (RASPBERRY PI, 2014, About

Us).

Figura 23 - Raspverry Pi

Fonte: “Raspberry Pi”. Disponível em < http://pt.wikipedia.org/wiki/Raspberry_Pi>. Acesso em: 01

nov 2014.

As especificações do modelo Raspberry Pi Model-B Rev.2, modelo utilizado nesse projeto são

as seguintes:

System on Chip (SoC): Broadcom BCM2835 (CPU, GPU, DSP, e SDRAM):

o ARM1176JZF-S core (Família Clássica ARM11) – 700 MHz;

o Broadcom VideoCore IV, OpenGL ES 2.0, 1080p30 decodificador h.264/MPEG-4 AVC;

o 512 MB (compartilhada com GPU);

2 Portas USB 2.0 (via hub USB integrado);

Saídas de vídeo: RCA Composta e HDMI;

Page 46: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

26

Saídas de áudio: HDMI e Conector de 3,5mm;

Armazenamento principal: SD / MMC / slot para cartão SDIO;

Rede Onboard: 10/100 Ethernet (RJ45);

Outros: 8 × GPIO, UART, I²C, SPI com dois seletores de chip, +3,3 V, +5 V, terra; Potência:

700 mA (3,5 W); Tamanho: 85,60 mm × 53,98 mm (RASPBERRY PI, 2014, Raspberry Pi

Models And Revisions).

A Raspberry Pi foi utilizada neste projeto para o processamento dos dados e obtenção dos

resultados da oximetria. Ela gerou uma página web, a qual serviu como interface para o usuário, a fim

de que ele pudesse controlar e visualizar o processo de oximetria. Outra característica importante foi a

possibilidade de armazenamento dos dados em um banco que permitiu a elaboração de um histórico das

medições realizadas.

O módulo Bluetooth utilizado, neste projeto, para se conectar à Raspberry Pi foi o Bluetooth

USB - ES388 (Figura 24), o qual permitiu facilmente a conexão e uma boa fixação.

Figura 24 - Bluetooth USB - ES388

Fonte: “Bluetooth USB - ES338”. Disponível em <http://www.fasttech.com/product/1019100-es-388-

bluetooth-v20-usb-dongle-adapter-black>. Acesso em: 01 nov 2014.

3.2. Métodos

3.2.1. Circuito Analógico

O circuito analógico é responsável pelo controle dos LEDs, aquisição do sinal de saída do

fotodiodo e condicionamento do sinal para que este seja processado pelo microcontrolador.

Basicamente, este circuito analógico é composto pelos blocos:

Circuito de alimentação;

Controle dos LEDs;

Amplificador de transimpedância

Filtro passa baixa;

Filtro passa alta;

Amplificador de ganho não inversor;

Regulador de offset;

Buffer de saída utilizando um amplificador “single-supply rail-to-rail”.

Page 47: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

27

Circuito de alimentação

Para eliminar possíveis ruídos e harmônicos da rede de alimentação, foi utilizada uma bateria

de 9V para alimentar o circuito analógico; o que permitiu também uma proteção ao usuário, visto que

não havia possibilidade de ele entrar em contato com alta tensão.

O circuito de alimentação também foi composto por um inversor de tensão, que permitiu a partir

de uma tensão positiva se obter uma negativa, cujo valor em módulo é o mesmo da bateria utilizada para

a alimentação. O inversor de tensão escolhido foi o CI (Circuito Integrado) TL7660 cuja faixa de

operação é de 1,5 V a 10 V de entrada, convertidos em -1,5 V a -10 V na saída. Este CI possui uma

eficiência de 98% e requer apenas dois capacitores eletrolíticos externos (TEXAS INSTRUMENTS,

2006, datasheet TL7660).

Por fim, utilizaram-se dois reguladores de tensão, um positivo e outro negativo, de modo que a

alimentação do circuito tornasse mais estável, diminuindo possíveis ruídos que interfiram nos sinais. Os

CIs utilizados foram o KA7805 e L7905, reguladores de tensão positiva e negativa, respectivamente.

Estes CIs suportam correntes de saída de até 1 A e possuem proteção de curto circuito e de

sobreaquecimento (FAIRCHILD, 2001, datasheet KA78XX/KA78XXA) (ST, 2012, datasheet L79xxAC).

Na Figura 25, podem ser observadas as ligações dos componentes utilizados no circuito de

alimentação. Os valores dos capacitores foram obtidos por meio das recomendações presentes nos

datasheets dos fabricantes. Há, inclusive, uma chave mecânica, que serviu apenas para controlar se o

circuito estava energizado ou não.

Outro ponto importante foi a utilização de capacitores de cerâmica com valor nominal de 100

nF em cada ponto de alimentação do circuito, o que permitiu aumentar a estabilidade da alimentação,

de forma que não interferisse no condicionamento do sinal.

Figura 25 - Circuito de alimentação

Page 48: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

28

Controle dos LEDs

Como os LEDs vermelho e infravermelho estão ligados em antiparalelo dentro do sensor e

apenas há um fotodiodo, é necessário ligar os LEDs de forma alternada, isto é, enquanto um está

emitindo, o outro está desligado.

Foi implementado um circuito de controle no formato de uma ponte-H como pode ser visto na

Figura 26. Nesta configuração, os transístores se comportaram como chaves,.

Na Tabela 2, pode ser vista a lógica de controle utilizada para controlar os LEDs, na qual 0

significa nível lógico baixo da saída do microcontrolador, que seria zero volts, e 1 representa nível lógico

alto correspondente a cinco volts.

Tabela 2 - Lógica de Controle dos LEDs

CtrlLed_1 CtrlLed_2 CtrlLed_3 CtrlLed_4 LED

Vermelho

LED

Infravermelho

0 0 1 1 Apagado Ligado

1 1 0 0 Ligado Apagado

1 0 0 1 Apagado Apagado

Figura 26 - Circuito esquemático de controle dos LEDs

Os transístores utilizados foram os BC558 e os BC548, que são do tipo PNP e NPN,

respectivamente. Os valores dos demais componentes utilizados foram obtidos a partir das

recomendações do fabricante para que os transístores atuassem como chaves eletrônicas (FAIRCHILD,

2002, datasheet BC556/557/558/559/560) (FAIRCHILD, 2002, datasheet BC548/BC548A/BC548B/

BC548C).

Page 49: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

29

Amplificador de Transimpedância

O sinal de saída do fotodiodo é uma corrente proporcional à luz que incide sobre ele. Dessa

forma, é necessário transformar em tensão esta corrente. Para tal, é utilizado um circuito amplificador

de transimpedância, conforme a Figura 27.

Figura 27 - Amplificador de Transimpedância

O capacitor, Cf, no circuito tem a função de limitar a banda de frequência do amplificador,

enquanto o resistor, Rf, promove o ganho e a transformação da corrente em tensão, visto que:

Vsaída = Ifotodiodo ∗ Rf (18)

Onde, Ifotodiodo é a corrente reversa do fotodiodo e Vsaída é a tensão de saída do amplificador

de transimpedância.

Filtro Passa Baixa

Mesmo que fossem seguidos todos os procedimentos necessários para eliminar os ruídos, estes

ainda continuaram presentes no circuito. Como, em geral, os ruídos são de alta frequência, foi projetado

um filtro passa baixa com frequência de corte tal que eliminasse ou atenuasse tais ruídos e não

interferisse no espectro do sinal condicionado.

Utilizou-se um filtro ativo passa baixa com topologia Sallen-Key, como pode ser visto na Figura

28. Este é um tipo de filtro ativo de segunda ordem, onde o equacionamento de seus parâmetros e

características são expressos pelo conjunto de equações (19).

Page 50: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

30

Figura 28 - Filtro ativo passa-baixa com topologia Sallen-Key

{

fc =

1

2 ∗ π ∗ √R1 ∗ R2 ∗ C1 ∗ C2

Q =√R1 ∗ R2 ∗ C1 ∗ C2

C2 ∗ (R1 + R2)

(19)

Onde, f𝑐 é a frequência de corte selecionada e Q é o fator de qualidade do filtro.

Sabe-se que a frequência cardíaca de um adulto está, normalmente, entre 60 a 100 BPM

(PORTO, 2014). Considerando um indivíduo que possui no máximo uma frequência cardíaca de 100

BPM, o que corresponde a um sinal de oximetria de 1,67 Hz, a maior parte do espectro de potência deste

sinal está contido em até 5 Hz. Isto porque, em um sinal de oximetria, 90% a 95% de seu espectro de

potência estão concentrados a partir da frequência cardíaca do indivíduo em até três vezes esta

frequência (HAYES, 2001).

Um filtro foi projetado com um fator de qualidade igual a 1 e frequência de corte em 5 Hz, pois

a maioria dos sinais de oximetria possuem grande parte dos seus espectros de potência contidos até esta

frequência. Os valores que são mostrados na Figura 28 foram calculados, levando em conta estas

considerações.

Filtro Passa Alta

Antes de realizar a amplificação do sinal, foi necessário remover o nível DC deste, pois assim o

sinal estaria centrado em torno de zero volts. Desse modo, pôde-se ser melhor amplificado sem que

houvesse distorção devido ao comportamento não linear dos amplificadores, quando o sinal de saída

possui magnitude próxima aos valores da alimentação.

Foi implementado um filtro passivo passa alta de primeira ordem, que filtrou o nível DC e as

oscilações de baixa frequência que ocorreram na prática. Na Figura 29, pode ser visto o filtro

Page 51: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

31

implementado, onde os valores do capacitor e do resistor foram dimensionados de modo que a

frequência de corte, calculada por meio da equação (20), fosse em torno de 0,05 Hz, o que não alterou

o espectro do sinal de oximetria.

𝑓𝑐 =1

2. 𝜋. 𝑅. 𝐶 (20)

Figura 29 - Filtro passivo passa alta

Amplificador de ganho não inversor

Após essas etapas de filtragem, foi necessário um estágio de amplificação para que o sinal se

estabelecesse em valores adequados para realizar sua amostragem pelo microcontrolador. Na Figura 30,

pode ser visto o amplificador implementado do tipo não inversor, onde os valores das resistências

utilizadas foram dimensionados, baseando-se na equação (21), de modo que o ganho fosse

aproximadamente igual a 4,7.

Vsaída = (1 +R2

R1)Ventrada (21)

Figura 30 - Amplificador de ganho não inversor

Page 52: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

32

Regulador de offset

Como o nível DC foi removido pelo filtro passa alta, o sinal possuía alguns valores negativos

de tensão, o que tornou impossível a conversão deste pelo conversor analógico-digital, CAD, do Arduino

Uno. Dessa forma, foi necessário introduzir uma tensão de offset no sinal de modo que este estivesse

contido na faixa de conversão do CAD. Para tanto, foi utilizado o circuito da Figura 31 que é um divisor

de tensão resistivo com desacoplamento feito pelo capacitor eletrolítico. Este circuito se comportou

como um filtro passa alta, cuja frequência de corte é igual a 0.03 Hz, porém sua função principal foi

inserir um offset de 2,5V no sinal visto que este é o valor central da faixa de conversão do CAD que

está contido entre 0 a 5V.

Figura 31 - Regulador de offset

Buffer de saída utilizando um amplificador single-supply rail-to-rail

O último estágio do circuito analógico foi um buffer, ou seguidor de tensão, que utilizou um

amplificador single-supply rail-to-rail (Figura 32). O buffer foi utilizado devido à possibilidade do sinal,

mesmo com o ajuste de offset, apresentar algum valor negativo que pudesse danificar o CAD do

Arduino. Além disso, esse buffer isola todo o circuito analógico do conversor, evitando, assim, que

algum efeito de carregamento pudesse ocasionar erros durante a conversão do sinal.

Figura 32 - Amplificador inversor unitário

Page 53: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

33

3.2.2. Programação do Arduino

A programação do Arduino foi realizada pela IDE fornecida pelo próprio fabricante em seu site.

O diagrama em blocos da programação do Arduino pode ser visto na Figura 33.

A programação foi composta inicialmente pela configuração:

Das variáveis que são utilizadas;

Das portas digitais que controlam o circuito analógico;

Da serial Bluetooth que transmite os dados e da USB que é utilizada para verificação do código;

Dos timers que geram as interrupções necessárias para realizar as amostragens e a

temporização de cada processo.

Figura 33 - Diagrama em blocos da programação no Arduino

Após esta configuração, o programa teve de esperar até receber algum dado via Bluetooth. Caso

recebesse era necessário verificar se esse dado era válido. Se sim, deveria iniciar o processo de oximetria

de pulso.

Esse processo começa ligando primeiramente o LED vermelho por 10 segundos antes de se

realizar a leitura. Foi necessário esperar este tempo para que o sinal se estabilizasse em torno de um

valor. Esperado este tempo, foi realizada a leitura do sinal vermelho durante 5 segundos com um

Page 54: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

34

intervalo de 4 ms entre cada leitura executada, ou seja, a uma taxa de amostragem de 250 Hz. Cada

amostra adquirida foi enviada via Bluetooth.

O processo se repetiu para o LED infravermelho. No entanto, 15 segundos foram precisos para

que o sinal se estabilizasse. Este tempo foi escolhido empiricamente durante os testes do circuito. Após

concluída a leitura dos dois sinais, o microcontrolador apagou os dois LEDs e ficou aguardando um

novo dado recebido via Bluetooth para que se iniciasse o processo de oximetria novamente.

O código desenvolvido é apresentado no Apêndice A – Código do Arduino.

3.2.3. Programação da Raspberry Pi

Raspbian – Sistema Operacional da Raspberry Pi

A programação se iniciou a partir da instalação de um Sistema Operacional em um cartão de

memória SD (do inglês, “Secure Digital”) com capacidade de 4 GB, utilizado pela Raspberry Pi. Esta

característica é um grande diferencial que ela possui em relação a outros microcontroladores, pois

permite uma programação em alto nível.

Existem diversos tipos de Sistemas Operacionais compatíveis para a Raspberry Pi, que podem

ser encontrados em seu site oficial (RASPBERRY PI, 2014, Downloads). Foi escolhido o Raspbian, que

é um sistema operacional baseado na distribuição Debian otimizado para o hardware da Raspberry Pi.

As instruções sobre a instalação do Raspbian no cartão SD foram encontradas no mesmo site do

fabricante, havendo variações dos passos a serem seguidos, dependendo do Sistema Operacional (Linux,

Mac OS ou Windows) do computador em que o usuário está desenvolvendo.

Terminada a instalação, pôde-se realizar o boot da Rasperry Pi a partir do cartão SD que contém

a imagem do Raspbian. A alimentação do dispositivo foi feita a partir de um conector micro USB, onde

a tensão de alimentação é de 5V com 700 a 1000 mA (RASPBERRY PI, 2014, FAQs: What Are The

Power Requirements?). Foi utilizada uma fonte que forneceu uma corrente de 1 A ou mais, visto que

durante o desenvolvimento percebeu-se, diversas vezes, que o boot do Raspbian falhava devido à baixa

capacidade de corrente da fonte. Foi preciso também que a cada etapa do desenvolvimento se fizesse

um backup da imagem do Raspbian utilizada, pois o cartão SD é corrompido a cada possível falha do

boot. O modo como se realiza este backup depende do Sistema Operacional que o usuário utiliza.

O Raspbian, por ser um Sistema Operacional baseado na distribuição Debian, permite que o seu

controle seja feito por meio de linhas de comando, sendo elas as mesmas utilizadas na maioria dos

sistemas Linux.

Page 55: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

35

Configuração Inicial do Sistema Operacional

Para a primeira configuração, conectou-se a Raspberry Pi a um monitor, via cabo HDMI, e

realizou-se o login que, pelo padrão de fábrica, possui os termos “pi” e “raspberry” como usuário e

senha, respectivamente. A partir de então, a Raspberry redirecionou a tela para uma janela de

configuração, como pode ser vista na Figura 34. As configurações feitas referiram-se à expansão da

partição raiz de modo que todo o espaço do cartão SD estivesse disponível para a instalação dos

programas. A imagem do Raspbian necessita de 2 GB pelo menos. No entanto como mencionado

anteriormente, foi utilizado um cartão de 4 GB, garantindo espaço para o desenvolvimento de todo o

trabalho.

Figura 34 - Janela de configuração da Raspberry Pi

Outra configuração realizada foi a mudança da senha padrão para o usuário “pi”, o que permitiu

uma maior segurança em relação ao acesso ao Sistema Operacional. Após a realização destas

configurações, o sistema reiniciou para que as configurações fossem aplicadas.

Atribuindo um IP fixo

O próximo passo foi a configuração de um IP (do inglês, Internet Protocol) estático para a

Raspberry Pi, de modo que fosse possível acessar remotamente o dispositivo, o que dispensou a

necessidade de um monitor ligado à placa durante o desenvolvimento. Para realizar este procedimento,

conectou-se um cabo Ethernet entre a Raspberry Pi e um roteador. Em seguida, o roteador disponibilizou

um IP dinâmico e um conjunto de variáveis de configuração ao dispositivo. Este conjunto de variáveis,

juntamente com o IP fornecido, foram inseridos dentro de um arquivo de configuração de rede da

Raspberry Pi (MODMYPI, 2010).

Page 56: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

36

Iniciando uma comunicação SSH

A partir de um IP fixo atribuído a Raspberry Pi, o acesso pôde ser feito por meio de uma

comunicação SSH (Secure Shell), que é uma ferramenta de acesso remoto, com grande ênfase em

segurança, onde os dados transmitidos entre dois dispositivos conectados por meio desta comunicação

são automaticamente criptografados e descriptografados.

A comunicação foi realizada por meio do software Putty (PUTTY, 2014). Na Figura 35, pode-

se observar uma imagem da janela do Putty, onde foi necessário colocar o IP fixo da Raspberry Pi no

campo “Host Name” e o número 22 no campo “Port”, cujo significado é a Porta de Comunicação SSH

utilizada para esta comunicação.

Figura 35 - Software de comunicação SSH (Putty)

Configuração do Bluetooth

Para utilizar a comunicação Bluetooth é necessário instalar alguns drivers e ajustar algumas

variáveis de configuração (DAWN ROBOTICS, 2013) (MYPIANDME, 2013). Durante esta

configuração, houve um problema na comunicação devido à versão do kernel utilizada pelo Sistema

Operacional. Um downgrade dessa versão possibilitou o correto funcionamento da comunicação

(RASPEBERRY PI, 2014, Connecting to arduino bluetooth module) (CHAN, 2014).

Page 57: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

37

Programação em Python

A programação da Raspberry Pi foi composta por um programa em Python que inicializou a

comunicação Bluetooth, executou o processamento do sinal e o armazenamento dos resultados em um

banco de dados.

Para a programação em Python, foi necessário instalar um banco de dados na Raspberry Pi. O

banco utilizado neste projeto foi o sqlite3. A instalação do Python e do banco de dados sqlite3, pode ser

realizada a partir das seguintes linhas de comando.

Para gerenciar e visualizar o banco de dados, foi instalada a interface gráfica sqlitebrowser

(SQLITEBROWSER, 2014). Na Figura 36, pode ser observada esta interface gráfica.

Figura 36 - Interface gráfica para gerenciamento do banco de dados sqlite3

Foi criado um banco de dados contendo 3 tabelas que são:

allDatas – Guarda todos os dados recebidos do sinal vermelho e do infravermelho;

historyResult – Guarda todos os resultados da saturação pulsátil de oxigênio (SpO2) e

frequência cardíaca (BPM);

lastData – Guarda apenas os últimos dados recebidos do sinal vermelho e do infravermelho.

~$ sudo apt-get update

~$ sudo apt-get install python

~$ Sudo apt-get install sqlite3

Page 58: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

38

Esta forma de separação foi escolhida para facilitar e agilizar o processo de busca dos dados

posteriormente efetuada pelo programa web.

Na Figura 37, pode ser observado como o programa em Python foi estruturado. Ele foi composto

inicialmente pela importação das bibliotecas necessárias e pela inicialização das variáveis,

posteriormente, iniciou-se a conexão Bluetooth que recebeu os dados enviados pelo Arduino Uno.

Enquanto a quantidade esperada de dados, que corresponde a 5 segundos de cada amostra dos sinais,

não for recebida, o programa ficou em loop. Após o completo recebimento dos dados, estes sinais foram

filtrados por um filtro de média móvel para remover os ruídos de 60 Hz.

Figura 37 - Diagrama em blocos da programação em Python na Raspberry Pi

O filtro de média móvel se inicia realizando a média aritmética das M primeiras amostras. Em

seguida a primeira amostra é descartada e é inserida a próxima para o cálculo da média novamente. Esse

processo se repete até que seja realizada a média de todo o sinal.

Este tipo de filtro atenua uma determinada frequência dada pela equação (22) e todos os

múltiplos inteiros desta frequência.

fc =𝑓𝑎𝑀

(22)

Onde,

𝑓𝑐 é a primeira frequência atenuada;

𝑓𝑎 é a frequência de amostragem;

M é quantidade de amostras que serão utilizadas para a média.

Page 59: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

39

Sabendo que o Arduino realiza a amostragem dos sinais a uma taxa igual a 250 Hz e desejando

que a primeira frequência atenuada seja em 10 Hz, pode-se concluir que o comprimento M do filtro deve

ser igual a 25 amostras. Logo, o ruído de 60 Hz foi atenuado, pois este é múltiplo inteiro dessa

frequência.

Após executada a filtragem, o programa realizou um algoritmo de busca e localização dos picos

e dos vales dos sinais, para que na próxima etapa, fosse possível o cálculo da oximetria de pulso e da

frequência cardíaca. O algoritmo de busca dos picos e dos vales estabeleceu uma comparação entre n

amostras. Esta comparação verificou qual era o maior e o menor valor dentro desta quantidade de

amostras, sendo que n era um número inferior à quantidade total de amostras de cada sinal. Verificadas

estas n primeiras amostras, o algoritmo repetiu o mesmo processo para as seguintes n amostras, até que

se percorresse todo sinal. O algoritmo de procura dos picos e dos vales terminou quando se obteve a

média aritmética entre os picos e entre os vales de cada sinal.

A partir dos picos e dos vales obtidos foi possível calcular a relação R dada pela equação (13),

e, posteriormente, o cálculo da oximetria é realizado a partir da curva de calibração da equação (14).

A frequência cardíaca foi calculada a partir da média aritmética da frequência de cada sinal,

visto que o algoritmo de busca dos picos e dos vales salvou as posições onde estes extremos ocorreram.

Desse modo, pôde-se determinar o período entre cada pico, uma vez que a frequência de amostragem

foi fixada em 250 Hz pelo Arduino Uno.

O programa termina após a inserção dos dados e resultados no banco de dados, criado pelo

sqlitebrowser. No entanto, não foram inseridas todas as amostras dos sinais vermelho e infravermelho,

já que consome um processamento muito grande, tanto na escrita como na leitura do banco de dados.

Portanto, os dados destes sinais foram inseridos a cada 10 amostras. O que se teve, dessa forma, foi um

sinal salvo equivalente ao sinal original amostrado a uma frequência igual a 250

10 = 25 Hz. Mesmo

ocorrendo esta “redução” da taxa de amostragem, ela ainda atendeu ao critério de Nyquist, visto que o

espectro do sinal não é superior a 5 Hz.

Programação web

A aplicação web deste projeto foi desenvolvida por meio da utilização da plataforma Node.js e

do framework Express.

O Node.js é uma plataforma que utiliza o mecanismo V8 JavaScript do Google Chrome para

construir aplicações de rede rápidas e escaláveis. O Node.js é um modelo orientado a eventos, focado

em I/O (do inglês, Input/Output) não bloqueante, de modo que suas aplicações sejam leves e eficientes,

Page 60: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

40

o que é perfeito para aplicações em tempo real com fluxo de dados em grande quantidade e rapidez por

meio de dispositivos distribuídos (MOREIRA, 2013, “O que é Node.Js?”).

O Express é um framework para o Node.js, sendo que esse é minimalista, flexível e possui um

robusto conjunto de recursos para desenvolver aplicações web, sistema de roteamento, executável para

geração de aplicações, dentre outras funções (MOREIRA, 2013, Primeiros passos com Express em

Node.js).

É necessário que a instalação do Node.js seja para a arquitetura da Raspberry Pi (NODEARM,

2014). Terminada a instalação do Node.js pôde-se iniciar a instalação do framework Express

(EXPRESS, 2014).

O método de instalação do framework Express utiliza o comando “npm” (do inglês, node

package modules), que é um gerenciador de pacotes do Node.js. Este comando foi utilizado para instalar

mais dois pacotes, que são o Sqlite3 e o Nodemon. O pacote Sqlite3 é responsável por permitir a

manipulação de um banco de dados do tipo sqlite3. O Nodemon é um outro pacote que auxiliou durante

o desenvolvimento do projeto, visto que ele monitora qualquer mudança em algum código que compõe

a aplicação web e, quando há detecção de alguma alteração, o pacote reinicia automaticamente a

aplicação web que está rodando sobre o Node.js (NPM, 2014) (NODEMON, 2014).

A instalação do framework Express criou uma pasta onde já está iniciado um projeto sobre o

Node.js e utilizando o framework Express. Esta é denominada a pasta raiz do projeto, e nela foi inserido

o programa em Python desenvolvido. Dentro da pasta “public/datas” colocou-se o banco de dados, que

é acessado tanto pelo programa em Python quanto pela aplicação web, quando for necessário inserir ou

buscar os dados e resultados armazenados.

Na pasta “public/images” foram colocadas as imagens que compõem a aplicação web, tal como

o logotipo desenvolvido. Na pasta “public/javascripts” encontram-se os programas em javascripts

responsáveis por gerar os gráficos, a dinâmica de algumas páginas e o layout destas. Na pasta

“public/stylesheets” foram inseridos os arquivos do tipo “css”, responsáveis pela formatação,

estruturação e pelo “layout” das páginas.

O conteúdo de cada página foi definido dentro da pasta “views”, em arquivos do tipo “Jade”. O

“Jade” é um “template engine” exclusivo para o Node.js o que permitiu facilmente a descrição do

conteúdo de uma página. O arquivo “index.jade” foi responsável pelo conteúdo da página inicial, o

“oximeter.jade” pelo conteúdo da página que mostra os resultados das medidas de oximetria e permite

a requisição de uma nova medida, e o “executingOximeterPy.jade” é a página redirecionada quando se

executa o programa em Python localizado na pasta raiz.

Page 61: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

41

O arquivo “index.js” localizado na pasta “routes” foi responsável por gerenciar o roteamento

das páginas, enviar ou receber variáveis do browser, ler os dados e resultados do banco de dados e

executar o programa em Python da pasta raiz.

Na Figura 38, pode ser visto o diagrama em blocos da aplicação web, onde se percebem as

funcionalidades que foram descritas sobre o arquivo “index.js” e como as páginas foram interligadas

por meio da atuação deste arquivo.

Page 62: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

42

Figura 38 - Diagrama em blocos da aplicação web

Page 63: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

43

4. Resultados e Discussão

Neste capítulo são apresentados os resultados obtidos no projeto referente ao circuito analógico,

ao processamento digital do sinal (programação em Python) e à aplicação web. Serão feitas algumas

análises e discussões sobre cada resultado que foi obtido.

4.1. Circuito analógico

4.1.1. Filtros analógicos

A validação dos filtros implementados no circuito tem a finalidade de verificar se as

características postuladas em teoria, confirmam-se na prática. Assim foram obtidas as respostas em

frequência teóricas destes filtros, no software de simulação de circuitos elétricos e eletrônicos LTSpice,

e, posteriormente, os resultados foram comparados com dados experimentais realizados em bancada.

Os dados experimentais foram obtidos a partir da comparação entre o sinal de saída e o de

entrada inserido nos circuitos dos filtros. O sinal de teste inserido é uma onda senoidal com frequência

variável e amplitude fixa em 1 V pico a pico.

Tanto o sinal de entrada quanto o de saída foram analisados por meio da utilização do

osciloscópio DSO-X 2002A da Agilent Technologies, enquanto o sinal senoidal foi gerado a partir do

gerador de funções MFG-4221 da Minipa.

Filtro passa baixa

Os dados experimentais obtidos para o filtro passa baixa são mostrados na Tabela 3, enquanto,

na Figura 39, pode ser observado o sinal de entrada e de saída para uma frequência de 5 Hz, estabelecida

como a de corte para o projeto do filtro passa baixa ativo.

Tabela 3 - Dados experimentais do filtro passa baixa

Frequência (Hz) Entrada (Vpp1) Saída (Vpp) Ganho (dB) Fase (°)

0,50 1,07 1,07 0,00 -0,30

1,00 1,07 1,09 0,16 -6,70

2,00 1,07 1,11 0,32 -16,90

3,00 1,07 1,17 0,78 -31,10

4,00 1,07 1,23 1,21 -46,09

5,00 1,07 1,21 1,07 -68,00

6,00 1,07 1,09 0,16 -87,20

7,00 1,07 0,90 -1,50 -104,60

8,00 1,07 0,72 -3,44 -118,40

9,00 1,07 0,60 -5,02 -127,80

10,00 1,07 0,48 -6,96 -134,80

1 Tensão em volts de pico a pico do sinal

Page 64: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

44

Figura 39 - Sinais de entrada e saída do filtro passa baixa para uma frequência de 5 Hz

Por meio da utilização do Matlab, esses dados experimentais foram comparados com o teórico

fornecido pelo software de simulação LTSpice. Na Figura 40, pode-se observar a comparação entre estes

dados.

Figura 40 - Comparação entre os dados teóricos e experimentais para o filtro passa baixa

Page 65: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

45

Nota-se, pelo gráfico, que há pequenas diferenças entre os dados teóricos e experimentais. As

discrepâncias existem devido à tolerância de fabricação dos componentes.

Filtro passa alta

Analogamente ao que foi apresentado para o filtro passa baixa, os dados experimentais do filtro

passa alta são apresentados na Tabela 4, enquanto, na Figura 41 podem-se observar os sinais de entrada

e saída do filtro passa alta para uma frequência de 0,07 Hz.

Tabela 4 - Dados experimentais do filtro passa alta

Frequência (Hz) Entrada (Vpp2) Saída (Vpp) Ganho (dB) Fase (°)

0,02 1,07 0,42 -8,12 72,10

0,05 1,07 0,70 -3,69 54,80

0,07 1,07 0,82 -2,31 44,80

0,09 1,07 0,90 -1,50 35,87

0,12 1,07 0,96 -0,94 32,60

0,20 1,07 1,03 -0,33 20,19

0,50 1,07 1,07 0,00 8,70

1,00 1,07 1,07 0,00 4,33

10,00 1,07 1,07 0,00 1,55

Figura 41 - Sinais de entrada e saída do filtro passa alta para uma frequência de 0,07 Hz

2 Tensão em volts de pico a pico do sinal

Page 66: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

46

Figura 42 - Comparação entre os dados teóricos e experimentais para o filtro passa alta

Novamente, percebe-se que há uma grande correlação entre os dados. As diferenças entre os

valores teóricos e experimentais se devem ao fato da tolerância de fabricação dos componentes.

4.1.2. Análise do sinal de oximetria em cada estágio do circuito

A validação dos outros estágios de condicionamento do sinal dentro do circuito analógico foi

realizada a partir da análise do sinal de saída em cada estágio do circuito. Para isso, utilizou-se um sinal

de oximetria real, no qual liga-se apenas um LED e a luz emitida por este atravessa o dedo de um

indivíduo.

Amplificador de transimpedância

O amplificador de transimpedância é responsável por converter a corrente do fotodiodo, que é

proporcional à luz recebida por este, em tensão. Na Figura 43, pode ser observado que o sinal de saída

deste estágio é muito ruidoso.

Page 67: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

47

Figura 43 - Saída do amplificador de transimpedância

Filtro passa baixa

Devido à grande magnitude ruído existente no sinal de saída do estágio de transimpedância,

justificou-se o uso do filtro passa baixa. Na Figura 44, pode ser observado o resultado da filtragem do

sinal.

Figura 44 - Saída do filtro passa baixa

Page 68: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

48

Percebe-se a grande redução do ruído no sinal, sendo possível reconhecer o padrão presente em

sinais de oximetria. Repara-se que a amplitude do sinal ainda é muito baixa, sendo necessário realizar

uma amplificação deste para uma melhor precisão dos resultados.

Filtro passa alta

Antes de se realizar a amplificação do sinal, este é submetido a um filtro passa alta para remoção

do nível DC e das flutuações de baixa frequência que acontecem na prática em um sinal de oximetria.

Pela Figura 45, nota-se que o sinal apresenta o mesmo padrão que na saída do filtro passa baixa, porém

o nível DC existente neste é praticamente nulo.

Figura 45 - Saída do filtro passa alta

Amplificador não inversor

Após a remoção do nível DC, pôde-se realizar a amplificação do sinal para obter melhor

resolução durante a conversão analógica-digital. Esta amplificação pode ser vista na Figura 46. Na saída

deste estágio, o sinal mantém o mesmo padrão, contudo, percebe-se a amplificação de todo o sinal e

uma alteração do nível DC.

A partir de uma análise das tensões de pico a pico dos sinais de saída e de entrada do

amplificador não inversor, calculou-se que o ganho prático deste amplificador foi:

Page 69: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

49

𝑔𝑎𝑛ℎ𝑜 =(𝑉𝑚𝑎𝑥 − 𝑉𝑚𝑖𝑛)𝑠𝑎í𝑑𝑎(𝑉𝑚𝑎𝑥 − 𝑉𝑚𝑖𝑛)𝑒𝑛𝑡𝑟𝑎𝑑𝑎

=760 − (−820)

177 − (−177)= 4,46 (23)

Considerando que o ganho teórico dimensionado para este amplificador foi de 4,7. Pode-se

concluir que o valor experimental do ganho está dentro do esperado, visto que o erro existe devido à

presença da tolerância dos componentes utilizados na prática.

Figura 46 - Saída do amplificador não inversor

Ajuste de offset

O sinal de saída do amplificador não inversor possui valores negativos de tensão, logo não é

possível a conversão analógico-digital do sinal pelo CAD do Arduino. Portanto, se faz necessário um

ajuste do nível DC do sinal. Na Figura 47, é observado o sinal resultante do circuito de ajuste de offset

implementado, nota-se o mesmo padrão do sinal, porém com um nível DC por volta de 2,52 V.

Sabendo que o nível DC dimensionado para a saída deste circuito foi de 2,5 V, que corresponde

à metade da faixa de conversão suportada pelo Arduino, conclui-se que há uma grande correlação entre

os valores teórico e experimental.

Page 70: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

50

Figura 47 - Saída do circuito de ajuste do offset

Apesar do condicionamento analógico do sinal aplicado, ainda há ruídos presentes no sinal de

oximetria, como pode ser visto pelo espectro de potência deste sinal (Figura 48). Percebe-se que há um

componente presente neste sinal com frequência em 60 Hz.

Figura 48 - Espectro de potência do sinal de saída do circuito analógico

A existência deste componente é esperada, visto que diversos aparelhos emitem radiação (ruído)

na mesma frequência da rede elétrica. Dessa forma, foi necessário o uso de um filtro para remover este

Page 71: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

51

componente que está interferindo no sinal. Para esta finalidade utilizou-se um filtro digital de média

móvel, o qual foi implementado no processamento digital do sinal contido na programação em Python.

4.2. Transmissão Bluetooth

Para a validação da transmissão Bluetooth foi programado que o Arduino Uno enviasse uma

forma de onda padrão por meio da serial do Bluetooth e, quando a Raspberry Pi recebeu esses dados,

eles foram comparados com o mesmo padrão gravado no Arduino. Dessa forma, a Raspberry Pi soube

qual a ordem dos dados que deveria receber.

O sinal padrão em questão foi uma onda dente de serra, com valores inteiros, que iam de 0 até

1023. Este intervalo foi escolhido, porque durante a conversão analógica-digital os possíveis valores

convertidos estavam contidos justamente nesta gama de valores. O intervalo entre uma transmissão de

um dado e o seguinte foi definido em 4 ms, que corresponde a frequência de amostragem escolhida para

o projeto.

Este teste foi realizado em três situações diferentes: na primeira, a distância entre o Arduino

Uno e a Raspberry Pi foi de 1,5 m; na segunda, a distância foi de 6 m e na última a distância foi de 4 m,

porém havia uma parede entre eles nesta última situação.

Na Tabela 5, podem ser visualizados os resultados do teste da transmissão. Nota-se que nos três

casos, não houve erros na transmissão dos dados.

Tabela 5 - Resultados da transmissão Bluetooth

Teste Quantidade de

Dados Enviados

Quantidade de Dados

Recebidos Corretos

Quantidade de Dados

Recebidos Errados

1 1000000 1000000 0

2 1000000 1000000 0

3 1000000 1000000 0

Foi realizado um teste para verificar a distância máxima em que era possível o pareamento entre

os módulos Bluetooth. Descobriu-se que esta podia chegar a uma distância máxima de 12 m sem

obstáculos entre os módulos ou a 7 m quando havia algumas paredes entre eles.

4.3. Processamentos digitais do sinal (programação em Python)

Os principais processamentos digitais do sinal aplicados envolveram a filtragem de média móvel

e a localização dos picos e vales. Estes processos estavam contidos dentro do programa em Python que

inicializou a comunicação Bluetooth e o armazenamento dos dados e resultados em um banco de dados.

Nas Figuras 49 e 50, podem ser observados os resultados obtidos deste processamento. Na Figura 49,

Page 72: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

52

são apresentados os sinais vermelho e infravermelho não filtrados com seus respectivos vales e picos

encontrados pelo algoritmo, enquanto, na Figura 50, podem ser visualizados os mesmos resultados para

esses sinais após o filtro de média móvel ser aplicado.

Nota-se que os primeiros e últimos picos e vales de cada sinal são desconsiderados, visto que

não há a necessidade de se utilizar todos os extremos encontrado (pois o sinal de oximetria não apresenta

uma variação repentina) para o cálculo da oximetria e também pela possibilidade do algoritmo

interpretar um falso extremo no começo ou no fim das sequências dos sinais.

Figura 49 - Sinais vermelho e infravermelho não filtrados junto aos seus respectivos picos e vales

Figura 50 - Sinais vermelho e infravermelho filtrados junto aos seus respectivos picos e vales

Page 73: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

53

4.4. Aplicação web

A visualização e o controle do processo de oximetria deste projeto foram feitos pela aplicação

web, gerada pela Raspberry Pi por meio do Node.js e do framework Express. Esta aplicação web

permitiu que o usuário visualizasse três páginas diferentes:

A página inicial, que contêm informações sobre o projeto;

A página que permite verificar a oximetria e requisitar uma nova medição desta;

A página em que o usuário fica aguardando a realização da oximetria.

A página inicial pode ser observada na Figura 51. Foi composta apenas por uma mensagem de

boas-vindas, informações sobre o aplicativo, um botão que permite redirecionar o usuário para a

página de visualização da oximetria e o logotipo que foi criado para o projeto.

Figura 51 - Página inicial da aplicação web

Ao clicar no botão “Check your oximetry!”, o usuário abre uma nova página na qual visualiza

os dados e os resultados referentes à última medição de oximetria realizada (Figura 52). Esta página é

composta por três setores principais. No primeiro, conforme na Figura 53, observa-se o valor numérico

da oximetria e da frequência cardíaca, o horário e o dia em que foi realizada a medição referente aos

valores mostrados, um botão em que o usuário pode executar uma nova oximetria (“New oximetry!”) e

outro que permite retornar à página inicial (“Home page”).

O segundo setor (Figura 54) é composto por dois templates de gráficos (HIGHCHARTS, 2014).

O primeiro corresponde ao sinal de oximetria proveniente do LED vermelho, enquanto o segundo é

Page 74: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

54

referente ao LED infravermelho. Ambos os gráficos refletem os sinais de oximetria correspondentes aos

valores numéricos apresentados no primeiro setor desta página. Estes gráficos permitem que o usuário,

utilizando o cursor do mouse, visualize os pontos que foram coletados durante a oximetria.

Por fim, na Figura 55, é mostrado o último setor que compõe esta página. Neste, é possível

observar o histórico das medições da oximetria e da frequência cardíaca por meio de dois gráficos

gerados pelo mesmo template anterior. Estes gráficos permitem selecionar e pressionar os pontos que

os geram. Caso isso aconteça, a página será atualizada juntamente com os dois primeiros setores.

A última página que compõe o aplicativo web é mostrada somente quando o usuário requer uma

nova oximetria. Esta página é mantida por aproximadamente 50 segundos, que corresponde ao tempo

de aquisição, transmissão via Bluetooth, processamento digital do sinal e armazenamento dos dados e

resultados no banco de dados. Passado este tempo, o usuário é redirecionado automaticamente para a

página de visualização da oximetria.

Page 75: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

55

Figura 52 - Página que permite visualizar e requisitar uma nova medição de oximetria

Page 76: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

56

Figura 53 - Visualização dos resultados numéricos da oximetria e da frequência cardíaca

Figura 54 - Visualização do sinal de oximetria proveniente dos LEDs vermelho e infravermelho

Page 77: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

57

Figura 55 - Visualização do histórico de oximetria e da frequência cardíaca

Figura 56 - Página de espera enquanto a oximetria está sendo realizada

Page 78: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

58

O aplicativo desenvolvido pode ser acessado por dispositivos móveis, tais como smartphones e

tablets. Na Figura 57, observa-se o aplicativo por meio de um smartphone. Nota-se que o aplicativo

automaticamente se redimensiona para uma melhor visualização no dispositivo.

Figura 57 - Visão da aplicação web através de um dispositivo móvel

4.5. Aferição da oximetria na presença de fontes de erros

Os resultados foram obtidos com usuário em repouso, respirando normalmente, com o sensor

conectado de forma correta ao seu dedo, sem esmaltes na unha e com iluminação ambiente baixa. Esse

conjunto de situações minimizam as fontes de erro para a realização da oximetria.

Page 79: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

59

Para verificar o comportamento em situações desfavoráveis da oximetria, foram realizados

testes com diferentes posicionamentos e movimentações do dedo, durante a oximetria. Posteriormente,

executaram-se outros testes utilizando algumas cores de esmaltes de unha.

Na Figura 58, pode-se observar os testes aplicados para análise da oximetria em diferentes

posicionamentos e movimentações do dedo. O teste 1 mostra a interferência pela pressão do dedo ao

clip do sensor; o teste 2, pela flexão do dedo; o teste 3, por movimentos ondulatórios da mão; e o teste

4, pela combinação destes três primeiros (ANDRADE, 2009).

Figura 58 - Conjunto de testes com diferentes posicionamentos e movimentações do dedo

Fonte: (ANDRADE, 2009)

Os sinais obtidos nos testes 1 a 4 podem ser observados, respectivamente, nas Figuras 59, 60,

61 e 62, enquanto os resultados da oximetria e da pulsação destes testes estão disponibilizados na Tabela

6.

Tabela 6 - Resultados da oximetria e da pulsação cardíaca para os testes

Teste SpO2 (%) Frequência Cardíaca (BPM)

1 70 79

2 98 77

3 96 66

4 105 52

Nota-se pelos gráficos que o único sinal que não apresentou grandes distorções ocorreu durante

o teste 2, enquanto os piores resultados aconteceram nos testes 3 e 4. Os últimos testes possuem uma

grande flutuação dos seus sinais, visto que a movimentação do dedo gera grande ruído durante a medição

da oximetria. Portanto, este resultado demonstra ser essencial que o usuário esteja em repouso.

Page 80: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

60

O sinal vermelho do teste 1 apresenta uma flutuação significativa em seu sinal vermelho, devido

ao fato do sensor estar mais exposto à luz ambiente durante o processo. Por fim, em ambos os testes

percebe-se que o algoritmo de busca dos picos e dos vales e a filtragem de média móvel mostraram bons

resultados.

Figura 59 - Sinal vermelho e infravermelho resultante do teste 1

Figura 60 - Sinal vermelho e infravermelho resultante do teste 2

Page 81: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

61

Figura 61 - Sinal vermelho e infravermelho resultante do teste 3

Figura 62 - Sinal vermelho e infravermelho resultante do teste 4

O próximo teste consiste na medição da oximetria quando há esmaltes de cores opacas nas

unhas. Os sinais resultantes da utilização do esmalte de cor azul, preta e vermelha são apresentados nas

Figuras 63, 64 e 65, respectivamente. Na Tabela 7, podem ser visualizados os resultados da oximetria e

da pulsação cardíaca para cada cor de esmalte.

Page 82: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

62

Tabela 7 - Resultados da oximetria e da pulsação cardíaca quando há esmaltes na unha

Cor do esmalte SpO2 (%) Frequência Cardíaca (BPM)

Azul 106 75

Preta 107 76

Vermelha 70 71

Os sinais de oximetria sofreram distorções para todas as cores utilizadas, isto porque a cor do

esmalte acaba absorvendo ou refletindo certos componentes da luz que incide sobre a unha. Esta

distorção gera resultados de oximetria comprometidos, que podem ser observados nos valores de SpO2

mostrados na Tabela 7. Nota-se, assim, que a frequência cardíaca está entre os valores esperados, o que

pode indicar que a cor do esmalte altera o sinal de oximetria em relação à amplitude, mas a frequência

não sofre grande efeito.

Enfim, o que se pode afirmar a partir destes testes, é que a presença de esmaltes de cores opacas

na unha deve ser evitada, pois altera o espectro do sinal de oximetria, resultando consequentemente em

falsos valores de oxigenação periférica.

Figura 63 - Sinal vermelho e infravermelho resultante da utilização do esmalte azul

Page 83: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

63

Figura 64 - Sinal vermelho e infravermelho resultante da utilização do esmalte preto

Figura 65 - Sinal vermelho e infravermelho resultante da utilização do esmalte vermelho

Page 84: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

64

Page 85: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

65

5. Conclusão

Ao final deste projeto, foi possível obter conhecimentos acerca de vários itens: a importância e

o modo de aferição da oxigenação periférica do sangue e da pulsação cardíaca por meio da oximetria de

pulso; a utilização de dispositivos ópticos-eletrônicos (LEDs e fotodiodo); os circuitos analógicos para

o condicionamento do sinal (amplificador de transimpedância, filtros passa baixa e passa alta,

amplificadores de ganho, ajuste de offset, isoladores ou buffers, ponte-h, inversor e reguladores de

tensão); a programação do microcontrolador Arduino Uno; a aplicação do Teorema da Amostragem

para determinar a taxa de aquisição sem que resulte em aliasing do sinal; a transmissão Bluetooth

utilizando o módulo HC-05 e o dongle ES338; a configuração do microcomputador Raspberry Pi e a

instalação de pacotes, drivers e programas para desenvolvimento neste microcomputador; a

comunicação SSH para acessar a Raspberry Pi e assim realizar sua programação remotamente; o

desenvolvimento de programas utilizando a linguagem de programação Python que permitiu a

comunicação Bluetooth, o processamento digital do sinal e o armazenamento dos dados e resultados em

um banco de dados; a geração e a manipulação de um banco de dados do tipo “sqlite”; e a programação

web utilizando o Node.js e o framework Express, que permitem em conjunto a elaboração de um

aplicativo web;

O foco do projeto foi propiciar ao usuário a comodidade de iniciar a medição de oximetria e

visualizar seu resultado através de um aplicativo web, sem a necessidade da utilização de um display

específico para esta aplicação. Como se trata de uma aplicação web, qualquer dispositivo que permita

acesso à rede, pode ser utilizado como visualizador, tais como computadores, tablets e smartphones,

independente do tipo de sistema operacional que se utilize. O que se fez necessário para este projeto foi

a utilização de um roteador que permitiu conectar o dispositivo escolhido para visualização e controle

da oximetria com a aplicação web que era executada na Raspberry Pi.

A utilização de uma rede que permite a ligação de qualquer dispositivo com a aplicação web

possibilita o acionamento do oxímetro ligado a um usuário por uma outra pessoa dentro da rede interna.

Isso não impede que, ao mesmo tempo, o usuário ou outro indivíduo acesse seus dados e resultados de

oximetria.

O aplicativo web que se conecta ao oxímetro também pode ser acessado através de uma rede

externa. Para tanto, é necessário que se conheça o IP externo utilizado pela Raspberry Pi, ou, então, que

se realize um redirecionamento das portas do roteador e se atribua um domínio DNS (do inglês, Domain

Name System) a este.

A possibilidade do controle e da visualização da oximetria de modo remoto permite que este

projeto seja implementado em hospitais, onde enfermeiros são redirecionados, em intervalos de tempo

regulares, para coletar dados de oximetria de alguns pacientes e, posteriormente, anotar os resultados

Page 86: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

66

em uma ficha de acompanhamento do paciente, que é guardada à frente de sua cama. Com este sistema,

é necessário apenas um funcionário para realizar, remotamente, a aferição da oximetria de todos os

pacientes. Os dados e os resultados são armazenados em um banco de dados digital que pode ser

arquivado ao final do acompanhamento do paciente. A utilização dos bancos de dados é uma forma útil

para casos onde se deve verificar se as medições foram realizadas nos horários corretos ou para futuras

análises de pesquisa ou de estatística.

As restrições encontradas neste projeto relacionam-se ao tempo de aquisição prolongado,

porque quando se ligou um LED foi necessário esperar um certo tempo até que o sinal de oximetria se

estabelecesse em torno de um valor. Uma possível solução, então, seria o chaveamento dos LEDs de

forma alternada e, posteriormente, a utilização de um circuito de “Sample&Hold” para separar os sinais,

visto que há apenas um fotodiodo para ambos os LEDs. Para que a solução anterior seja viável, é

necessária a escolha de um sensor que possua uma resposta rápida o suficiente para acompanhar o

chaveamento dos LEDs. Sobre o sensor, também é possível fazer uma análise do conjunto de LEDs

utilizados, da isolação de luz ambiente e da imobilização do dedo durante a oximetria de modo a

melhorar a qualidade do sinal. A distância e a taxa de transmissão do Bluetooth são outros limitantes do

projeto, sendo que uma alternativa para esta transmissão seria a utilização de outros radiotransmissores.

Por fim, o processamento da Raspberry Pi para a geração da aplicação web se mostrou limitado, visto

que durante a geração da página de visualização dos dados de oximetria, a unidade de processamento

da Raspberry Pi chegou a 100% e assim houve uma demora na resposta deste microcomputador.

Trabalhos futuros poderão ser feitos em todo o projeto, como por exemplo, a escolha de outro

sensor que tenha melhor resposta; o desenvolvimento de uma placa de circuito impresso para diminuir

capacitâncias parasitas e ruídos que são normalmente encontrados em protoboards; a utilização de

chaveamento alternado dos LEDs para diminuir o tempo de aquisição dos dados; a troca do

microcontrolador Arduino Uno por um ARM que permite um maior e mais rápido processamento

computacional; a mudança da comunicação Bluetooth por outra com maior alcance e taxa de

transmissão; e a utilização de outro sistema embarcado análogo a Raspberry Pi, tal como a BeagleBone

ou a Odroid.

Estes possíveis melhoramentos não só possibilitarão uma melhor análise da oximetria de pulso,

como também permitirão que outros sistemas de medições de sinais vitais sejam acoplados a este

projeto, de forma a gerar uma central de monitoramento de diversos sinais utilizando uma aplicação

web.

Page 87: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

67

Referências Bibliográficas

ANDRADE, L. A. K., Sistema de Medição para Oximetria de Pulso. Curitiba, 2009.

ARDUINO, Arduino Uno. Arduino. 2014. Disponível em:

<http://arduino.cc/en/Main/ArduinoBoardUno>. Acesso em: 01 nov 2014.

ARDUINO, Download the Arduino Software. Arduino. 2014. Disponível em:

<http://arduino.cc/en/main/software>. Acesso em: 01 nov 2014.

ARDUINO, SoftwareSerial Library. Arduino. 2014. Disponível em:

<http://arduino.cc/en/Reference/softwareSerial>. Acesso em: 01 nov 2014.

CHAN, E., Upgrade/Downgrade to a specific firmware-kernel version with rpi-update in Raspbian.

2014. Disponível em: <http://tech.enekochan.com/en/2014/03/08/upgradedowngrade-to-a-specific-

firmware-kernel-version-with-rpi-update-in-raspbian/>. Acesso em: 01 nov 14.

DAWN ROBOTICS, Talking to a Bluetooth Serial Module with a Raspberry Pi. Dawn Robotics.

2013. Disponível em: <http://blog.dawnrobotics.co.uk/2013/11/talking-to-a-bluetooth-serial-module-

with-a-raspberry-pi/>. Acesso em: 01 nov 2014.

EXPRESS, Installing. 2014. Disponível em: <http://expressjs.com/starter/installing.html>. Acesso em:

01 nov 14.

FAIRCHILD, datasheet KA78XX/KA78XXA. Electronic Components Datasheet Search. 2001.

Disponível em: <http://pdf1.alldatasheet.com/datasheet-pdf/view/99445/FAIRCHILD/KA7805.html>.

Acesso em: 01 nov 2014.

FAIRCHILD, datasheet BC556/557/558/559/560. Datasheet Catalog. 2002. Disponível em:

<http://pdf.datasheetcatalog.com/datasheet/fairchild/BC558.pdf>. Acesso em: 01 nov 2014.

FAIRCHILD, datasheet BC548/BC548A/BC548B/BC548C. Datasheet Catalog. 2002. Disponível em:

<http://pdf.datasheetcatalog.com/datasheet/fairchild/BC548.pdf>. Acesso em: 01 nov 2014.

FINE, I.; WEINREB, A., Multiple scattering effect in transmission pulse oximetry. 1995.

HAYES, M. J.; SMITH, P. R., A new Method For Pulse Oximetry Possessing Inherent Insensitivity to

Artifact. In: IEEE Transactions on Biomedical Engineering, vol. 48, no. 4, p.452-461, 2001.

KIKUTHI, P. M. B., Desenvolvimento de um Circuito Sensor Analógico para um Oxímetro não

Invasivo. São Carlos, 2012.

LIMA, D. W. C., Oxímetro de Pulso com Transmissão de Sinal Sem Fios. Porto Alegre, 2009.

MARIEB, E. N.; HOEHN, K., Human Anatomy & Physiology. Eight ed., San Francisco: Benjamin

Cummings, ISBN: 987-0-8053-956-3, 2008.

MODMYPI, Tutorial How to Give Your Raspberry Pi a Static IP Address. ModMyPi. 2010.

Disponível em: <https://www.modmypi.com/blog/tutorial-how-to-give-your-raspberry-pi-a-static-ip-

address.>. Acesso em: 01 nov 2014.

MOREIRA, R. H., O que é Node.js?.2013. Disponível em: <http://nodebr.com/o-que-e-node-js/>.

Acesso em: 01 nov 14.

MOREIRA, R. H., Primeiros passos com Express em Node.js. 2013. Disponível em:

<http://nodebr.com/o-que-e-node-js/>. Acesso em: 01 nov 14.

MOYLE, J. T. B., Pulse Oximetry. London: BMJ, 1994.

Page 88: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

68

MYPIANDME, Bluetooth Serial Communications with HC-05. MyRaspberryAndMe. 2013.

Disponível em http://myraspberryandme.wordpress.com/2013/11/20/bluetooth-serial-communication-

with-hc-05>. Acesso em: 01 nov 2014.

NGHIA, L. N. T., Design of a SpO2 Pulse Oximeter Prototype. Ho Chi Minh city-Vietnam, 2012.

NODEARM, An easy way to install node.js on the Raspberry Pi. 2014. Disponível em: <http://node-

arm.herokuapp.com/>. Acesso em: 01 nov 14.

NODEMON, nodemon reload automatically. 2014. Disponível em: <http://nodemon.io/>. Acesso em:

01 nov 14.

NPM, sqlite3. 2014. Disponível em: <https://www.npmjs.org/package/sqlite3>. Acesso em: 01 nov 14.

PHILIPS, Understanding Pulse Oximetry SpO2 Concepts. Disponível em:

<http://incenter.medical.philips.com/doclib/enc/fetch/586262/586457/Understanding_Pulse_Oximetry.

pdf%3Fnodeid%3D586458%26vernum%3D2>. Acesso em: 01 nov 2014.

PORTO, C. C., Semiologia Medica. 7. ed. Rio de Janeiro: Guanabara Koogan, 2014. 1413 p

PUTTY, Download Putty. Putty. 2014. Disponível em: <http://www.putty.org/>. Acesso em: 01 nov

2014.

RASPBERRY PI, About Us. Raspberry Pi. 2014. Disponível em: <http://www.raspberrypi.org/about/

>. Acesso em: 01 nov 2014.

RASPBERRY PI, Connecting to arduino bluetooth module. Raspberry Pi. 2014. Disponível em:

<http://www.raspberrypi.org/forums/viewtopic.php?f=28&t=81934>. Acesso em: 01 nov 2014.

RASPBERRY PI, Downloads. Raspberry Pi. 2014. Disponível em:

<http://www.raspberrypi.org/downloads/>. Acesso em: 01 nov 2014.

RASPBERRY PI, FAQs: “What Are The Power Requirements?”. Raspberry Pi. 2014. Disponível em:

<http://www.raspberrypi.org/help/faqs/#powerReqs>. Acesso em: 01 nov 2014.

RASPBERRY PI, Raspberry Pi Models And Revisions. Raspberry Pi. 2014. Disponível em:

<http://www.raspberrypi.org/documentation/hardware/raspberrypi/models/ >. Acesso em: 01 nov

2014.

SANTINI, T. R. S., Projeto de um Oxímetro de Pulso com Comunicação USB. São Carlos, 2010.

SQLITEBROWSER, DB Browser for Sqlite. 2014. Disponível em: <http://sqlitebrowser.org/>.

Acesso em: 01 nov 14.

ST, datasheet L79xxAC. Farnell. 2012. Disponível em:

<http://www.farnell.com/datasheets/1689812.pdf>. Acesso em: 01 nox 2014.

STEINKE, J. M.; SHEPHERD, A. P., Role of light scattering in whole blood oximetry. 1986.

TEXAS INSTRUMENTS, datasheet TL7660. Electronic Components Datasheet Search. 2006.

Disponível em: <http://pdf1.alldatasheet.com/datasheet-pdf/view/162545/TI/TL7660.html>. Acesso

em: 01 nov 2014.

TOWNSEND, N., Lecture 6 – Pulse Oximetry. C3B Medical Electronics. 2001. Disponível em:

<http://www.robots.ox.ac.uk/~neil/teaching/lectures/med_elec/lecture6.pdf >.

WEBSTER, J. G., Design of Pulse Oximeters. Wisconsin-Madison, 1997.

Page 89: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

69

Apêndices

Apêndice A – Código do Arduino

#include <TimerOne.h>

#include <SoftwareSerial.h>

/**

pino10(Rx) do arduino <-> Tx do HC05

pino11(Tx) do arduino <-> Rx do HC05

**/

SoftwareSerial BTSerial(10, 11); // RX | TX

int readAD = 0; // O canal de entrada dos sinais Vermelho e Infravermelho será o ADC 0

int ctrlLed2 = 6; // Controle do LED - Fio Verde

int ctrlLed3 = 7; // Controle do LED - Fio Branco

int ctrlLed4 = 8; // Controle do LED - Fio Amarelo

int ctrlLed5 = 9; // Controle do LED - Fio Vermelho

int ledRed = 5;

int ledReadRed= 4;

int ledIRed = 3;

int ledReadIRed = 2;

char dataBTReceive;

#define MaxSizeBuffer 1250

int IndexRed;

int IndexIR;

boolean EndRed = false;

boolean EndIRed = false;

#define waitTime5 1250

#define waitTime10 2500

#define waitTime15 3750

int time;

int BufferRed;

int BufferIRed;

/**

state= 0: Todos os LEDs desligados

state= 1: Liga o LED Vermelho, realiza a leitura equivalente a 5 seg, envia os dados via Bluetooth e desliga o LED Vermelho

state= 3: Liga o LED Infravermelho, realiza a leitura equivalente a 5 seg, envia os dados via Bluetooth e desliga o LED

Infravermelho

**/

int state;

void redOn(); // Liga o LED Vermelho

void iredOn(); // Liga o LED Infravermelho

void allOff(); // Desliga todos os LEDs

void readRedLed();

void readlRedLed();

void setup()

{

pinMode(ctrlLed2, OUTPUT);

pinMode(ctrlLed3, OUTPUT);

pinMode(ctrlLed4, OUTPUT);

pinMode(ctrlLed5, OUTPUT);

pinMode(ledRed,OUTPUT);

pinMode(ledReadRed,OUTPUT);

pinMode(ledIRed,OUTPUT);

pinMode(ledReadIRed,OUTPUT);

state = 0; // estado inicial

allOff();

digitalWrite(ledRed,LOW);

digitalWrite(ledReadRed,LOW);

digitalWrite(ledIRed,LOW);

digitalWrite(ledReadIRed,LOW);

IndexRed = 0;

IndexIR = 0;

time = 0;

Serial.begin(115200);

Serial.flush();

BTSerial.begin(115200);

BTSerial.flush();

Timer1.initialize(4000); // Overflow do Timer1

Timer1.attachInterrupt(switchState); // A cada overflow do timer chama-se esta funcao

Serial.println("newOximeter2");

}

void loop() {

if (BTSerial.available()) {

dataBTReceive = char(BTSerial.read());

if(dataBTReceive == '1'){

Serial.println(dataBTReceive);

BTSerial.flush();

state++;

}

else

Page 90: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

70

Serial.println("dado incorreto");

}

}

void switchState() {

switch (state) {

case 0:

allOff();

break;

case 1:

redOn();

digitalWrite(ledRed,HIGH);

if(time++ == waitTime10-1) {

time = 0;

state++;

}

break;

case 2:

digitalWrite(ledReadRed,HIGH);

readRedLed();

if (EndRed == true) {

iredOn();

digitalWrite(ledRed,LOW);

digitalWrite(ledReadRed,LOW);

state++;

EndRed = false;

}

break;

case 3:

iredOn();

digitalWrite(ledIRed,HIGH);

if(time++ == waitTime15-1) {

time = 0;

state++;

}

break;

case 4:

digitalWrite(ledReadIRed,HIGH);

readIRedLed();

if (EndIRed == true) {

allOff();

digitalWrite(ledIRed,LOW);

digitalWrite(ledReadIRed,LOW);

state = 0;

EndIRed = false;

}

break;

}

}

void redOn() {

digitalWrite(ctrlLed2,HIGH);

digitalWrite(ctrlLed3,HIGH);

digitalWrite(ctrlLed4,LOW);

digitalWrite(ctrlLed5,LOW);

}

void iredOn() {

digitalWrite(ctrlLed2,LOW);

digitalWrite(ctrlLed3,LOW);

digitalWrite(ctrlLed4,HIGH);

digitalWrite(ctrlLed5,HIGH);

}

void allOff() {

digitalWrite(ctrlLed2,HIGH);

digitalWrite(ctrlLed3,LOW);

digitalWrite(ctrlLed4,HIGH);

digitalWrite(ctrlLed5,LOW);

}

void readRedLed() {

BTSerial.println("R");

BTSerial.flush();

BTSerial.println(analogRead(readAD));

BTSerial.flush();

if(IndexRed++ == MaxSizeBuffer-1) {

IndexRed= 0;

EndRed = true;

}

}

void readIRedLed() {

BTSerial.println("I");

BTSerial.flush();

BTSerial.println(analogRead(readAD));

BTSerial.flush();

if(IndexIR++ == MaxSizeBuffer-1) {

IndexIR= 0;

EndIRed = true;

}

}

Page 91: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

71

Apêndice B – Programação em Python

#-*- coding: utf-8 -*-

#! /usr/bin/python

import serial

import sqlite3

import time

import numpy as np

import math

redDataIn = []

iredDataIn = []

redData = []

iredData = []

redDataFiltered = []

iredDataFiltered = []

indexValleyRed = []

indexValleyIRed = []

indexPeakRed = []

indexPeakIRed = []

valleyRed = []

valleyIRed = []

peakRed = []

peakIRed = []

dbname='public/datas/oximeterlog.db'

####################### Comunicacao Bluetooth #######################

bluetoothSerial = serial.Serial( "/dev/rfcomm0", baudrate=115200)

open("red.dat",'w').close()

open("ired.dat",'w').close()

bluetoothSerial.write("1")

bluetoothSerial.flush()

i = 0

while i<2500: #cuidado com este valor!!!! = 2*MaxSizeBuffer

bt_data =(bluetoothSerial.readline().rstrip('\r\n'))

bluetoothSerial.flush()

i +=1

if (bt_data == "R"):

if (i == 1250):

bt_data =(bluetoothSerial.readline().rstrip('\r\n'))

else:

bt_data =(bluetoothSerial.readline())

bluetoothSerial.flush()

with open("red.dat","a") as file:

file.write(bt_data)

elif (bt_data == "I"):

bt_data =(bluetoothSerial.readline().rstrip('\r\n'))

else:

bt_data =(bluetoothSerial.readline())

bluetoothSerial.flush()

with open("ired.dat","a") as file:

file.write(bt_data)

else:

print(bt_data)

print("error")

####################### Processamento dos Sinais #######################

def find_peak_valley(data,peakOrValley):

index=[]

extreme=[]

npts = 100

i = 0

if (peakOrValley == 1):

while (i < npts):

if(max(data[0:i+npts]) == data[i]):

index.append(i)

extreme.append(data[i])

i = i+npts

else:

i = i+1

while (i < len(data)-npts):

if(max(data[i-npts:i+npts]) == data[i]):

index.append(i)

extreme.append(data[i])

i = i+npts

else:

i = i+1

while (i < len(data)):

if(max(data[i-npts:len(data)]) == data[i]):

index.append(i)

extreme.append(data[i])

i = i+npts

else:

i = i+1

return index,extreme

elif (peakOrValley == -1):

Page 92: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

72

while (i < npts):

if(min(data[0:i+npts]) == data[i]):

index.append(i)

extreme.append(data[i])

i = i+npts

else:

i = i+1

while (i < len(data)-npts):

if(min(data[i-npts:i+npts]) == data[i]):

index.append(i)

extreme.append(data[i])

i = i+npts

else:

i = i+1

while (i < len(data)):

if(min(data[i-npts:len(data)]) == data[i]):

index.append(i)

extreme.append(data[i])

i = i+npts

else:

i = i+1

return index,extreme

else:

print("error!")

return index, extreme

def save(nameFile,index,extreme):

i = 0

open(nameFile,'w').close()

while (i < len(index)):

with open(nameFile,'a') as file:

file.write(str(index[i])+' ')

file.write(str(extreme[i])+'\n')

i = i+1

f = open('red.dat','r')

for line in f:

redDataIn.append(float(line.rstrip('\n'))) #Cuidado -> nao deixe linha em branco

f.closed

f = open('ired.dat','r')

for line in f:

iredDataIn.append(float(line.rstrip('\n'))) #Cuidado -> nao deixe linha em branco

f.closed

redData = np.array(redDataIn) * 5.0 / 1024.0

iredData = np.array(iredDataIn) * 5.0 / 1024.0

# Aplicando um filtro de media 25

k = 1

while (k < len(redData) - 25):

x = 0

y = 0

for l in range (k,k+25):

x = x + redData [l]

y = y + iredData [l]

redDataFiltered.append(x / 25.0)

iredDataFiltered.append(y / 25.0)

k = k + 1

# Encontrando os Picos e Vales do Vemelho e Infravermelho

indexValleyRed,valleyRed = find_peak_valley(redDataFiltered ,-1)

indexValleyIRed,valleyIRed = find_peak_valley(iredDataFiltered ,-1)

indexPeakRed,peakRed = find_peak_valley(redDataFiltered ,1)

indexPeakIRed,peakIRed = find_peak_valley(iredDataFiltered ,1)

# Eliminando o primeiro e o último extremo

indexPeakRedUtil = indexPeakRed[1:len(indexPeakRed)-1]

peakRedUtil = peakRed[1:len(peakRed)-1]

indexValleyRedUtil = indexValleyRed[1:len(indexValleyRed)-1]

valleyRedUtil = valleyRed[1:len(valleyRed)-1]

indexPeakIRedUtil = indexPeakIRed[1:len(indexPeakIRed)-1]

peakIRedUtil = peakIRed[1:len(peakIRed)-1]

indexValleyIRedUtil = indexValleyIRed[1:len(indexValleyIRed)-1]

valleyIRedUtil = valleyIRed[1:len(valleyIRed)-1]

# Medias dos Picos e Vales de cada sinal

peakRed = np.mean(peakRedUtil)

valleyRed = np.mean(valleyRedUtil)

peakIRed = np.mean(peakIRedUtil)

valleyIRed = np.mean(valleyIRedUtil)

# Calculo da razao R pelo metodo dos picos e vales

r = math.log(valleyRed / peakRed)/math.log(valleyIRed / peakIRed)

# Calculo do SpO2

spo2_1 = (1000.0 - 550.0 * r) / (900.0 - 350.0 * r) * 100.0

spo2_2 = 10.0002 * math.pow(r,3) - 52.887 * math.pow(r,2) + 26.871 * r + 98.283

spo2_3 = 110.0 - 25.0 * r

#print(spo2_1)

#print(spo2_2)

#print(spo2_3)

# Calculo da frequencia cardiaca

k = 0

periodsRed = []

Page 93: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

73

while (k < len(indexPeakRedUtil)-1):

periodsRed.append(indexPeakRedUtil[k+1]-indexPeakRedUtil[k])

k = k + 1

freqRed = 1 / (0.004 * sum(periodsRed) / len(periodsRed))

bpmRed = freqRed * 60.0

k = 0

periodsIRed = []

while (k < len(indexPeakIRedUtil)-1):

periodsIRed.append(indexPeakIRedUtil[k+1]-indexPeakIRedUtil[k])

k = k + 1

freqRed = 1 / (0.004 * sum(periodsIRed) / len(periodsIRed))

bpmIRed = freqRed * 60.0

bpm = (bpmRed + bpmIRed) / 2.0

#print(bpm)

# Salvar os Picos e Vales do Red e InfraRed nos arquivos .dat

save("peak_red.dat",indexPeakRedUtil ,peakRedUtil )

save("valley_red.dat",indexValleyRedUtil ,valleyRedUtil )

save("peak_ired.dat",indexPeakIRedUtil ,peakIRedUtil )

save("valley_ired.dat",indexValleyIRedUtil ,valleyIRedUtil )

####################### Banco de Dados #######################

def log_dB():

conn=sqlite3.connect(dbname)

curs=conn.cursor()

# Salva os valores de SpO2 e BPM

curs.execute("INSERT INTO historyResult values(datetime('now'), (?), (?))", (format(spo2_3, '.0f'), format(bpm, '.0f'),))

# Limpa a tabela lastData

curs.execute("DELETE FROM lastData")

index = 0

record_data = []

while(index < len(redDataFiltered)):

record_data.append( (index, format(redDataFiltered[index], '.2f'), format(iredDataFiltered[index], '.2f')) )

index = index + 10

# Salva os dados recebidos dos sinais vermelho e infravermelho na tabela lastData

curs.executemany("INSERT INTO lastData (samplingTime, red, ired) values((?), (?), (?))", record_data)

# Obtem quantas medidas já foram realizadas anteriormente

curs.execute("SELECT COUNT(*) FROM allDatas")

nRows = list(curs.fetchone())

nSampling = nRows[0] / 123

index = 0

record_data = []

while(index < len(redDataFiltered)):

record_data.append( (nSampling * 1230 + index, format(redDataFiltered[index], '.2f'), format(iredDataFiltered[index],

'.2f')) )

index = index + 10

# Salva os dados recebidos dos sinais vermelho e infravermelho na tabela allDatas

curs.executemany("INSERT INTO allDatas (samplingTime, red, ired) values((?), (?), (?))", record_data)

conn.commit()

conn.close()

# Salva os resultados no banco de dados

log_dB()

print("1")

Apêndice C – Validação da transmissão Bluetooth (Arduino)

#include <TimerOne.h>

#include <SoftwareSerial.h>

/**

pino10(Rx) do arduino <-> Tx do HC05

pino11(Tx) do arduino <-> Rx do HC05

**/

SoftwareSerial BTSerial(10, 11); // RX | TX

int btData;

char dataBTReceive;

int nDataSent;

int signal;

int state;

#define maxDataSent 1000000 // equivale a 4000 seg = 1h e 6 min

void setup()

{

btData = 0;

nDataSent = 0;

state = 0;

signal = 0;

Serial.begin(115200);

Serial.flush();

BTSerial.begin(115200);

BTSerial.flush();

Page 94: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

74

Timer1.initialize(4000); // Timer1's overflow

Timer1.attachInterrupt(switchState); // A cada overflow do timer chama-se esta funcao

}

void loop() {

if (BTSerial.available()) {

dataBTReceive = char(BTSerial.read());

if(dataBTReceive == '1'){

Serial.println(dataBTReceive);

BTSerial.flush();

state++;

}

else

Serial.println("dado incorreto");

}

}

void switchState() {

switch (state) {

case 0:

break;

case 1:

if(nDataSent == maxDataSent) {

state = 0;

nDataSent = 0;

signal = 0;

}

else {

BTSerial.println(signal);

BTSerial.flush();

nDataSent++;

if(++signal == 1024){

signal = 0;

}

}

break;

}

}

Apêndice D – Validação da transmissão Bluetooth (Raspberry Pi)

#! /usr/bin/python

import serial

bluetoothSerial = serial.Serial( "/dev/rfcomm0", baudrate=115200)

send_command = raw_input("write '1' to begin: ")

open("BTdata.dat",'w').close()

bluetoothSerial.write(send_command)

bluetoothSerial.flush()

i = 0

signal = 0

error = 0

while i<1000000:

bt_data =(bluetoothSerial.readline().rstrip('\r\n'))

bluetoothSerial.flush()

if (int(bt_data) != signal):

error += 1

print("number of errors: " + str(error))

i +=1

signal +=1

if (signal == 1024):

signal = 0

print("Ok!")

with open("BTdata.dat","a") as file:

file.write(bt_data + '\r\n')

with open("BTdata.dat","a") as file:

file.write("number of errors: " + str(error))

print(">>number of errors: " + str(error))

print("end!")

Apêndice E – Programação web – index.js

var express = require('express');

var router = express.Router();

var exec = require('child_process').exec;

var child;

var labels;

var labelsTime;

var seriesSpo2;

var seriesBpm;

var seriesRed;

var seriesIRed;

var showSpo2;

var showBpm;

var showTime;

var tickInterval;

Page 95: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

75

var sendDatas = function(res) {

res.render('oximeter', {

title: 'Web Pulse Oximeter',

mLabels: labels,

mseriesSpo2: seriesSpo2,

mseriesBpm: seriesBpm,

mtime: labelsTime,

mred: seriesRed,

mired: seriesIRed,

mshowSpo2: showSpo2,

mshowBpm: showBpm,

mshowTime: showTime,

mtickInterval: tickInterval

});

};

router.get('/', function(req, res) {

res.render('index', { title: 'Web Pulse Oximeter' });

});

router.get('/oximeter', function(req, res) {

var sqlite3 = require('sqlite3').verbose();

var db = new sqlite3.Database('public/datas/oximeterlog.db');

var section = req.query.section;

var index = (section * 123) + 1;

var upperIndex = index+123;

var nSampligns = 0;

labels = [];

labelsTime = [];

seriesSpo2 = [];

seriesBpm = [];

seriesRed = [];

seriesIRed = [];

db.serialize(function(){

if (section > -1) {

while (index < upperIndex) {

db.each("SELECT samplingTime AS time, red, ired FROM allDatas WHERE rowid = " + (index), function(err, row) {

labelsTime.push('\'' + String(row.time) + '\'');

seriesRed.push(row.red);

seriesIRed.push(row.ired);

});

index++;

}

var rowId = ++section;

db.each("SELECT timestamp AS time, spo2, bpm, rowid FROM historyResult", function(err, row) {

labels.push('\'' + String(row.time) + '\'');

seriesSpo2.push(row.spo2);

seriesBpm.push(row.bpm);

nSampligns = ++nSampligns;

if(row.rowid == (rowId)) {

showSpo2 = row.spo2;

showBpm = row.bpm;

showTime = row.time;

}

}, function(err2, row2) {

tickInterval = Math.round(nSampligns / 6);

sendDatas(res);

});

}

else {

db.each("SELECT samplingTime AS time, red, ired FROM lastData", function(err, row) {

labelsTime.push('\'' + String(row.time) + '\'');

seriesRed.push(row.red);

seriesIRed.push(row.ired);

});

db.each("SELECT timestamp AS time, spo2, bpm FROM historyResult", function(err, row) {

labels.push('\'' + String(row.time) + '\'');

seriesSpo2.push(row.spo2);

seriesBpm.push(row.bpm);

nSampligns = ++nSampligns;

showSpo2 = row.spo2;

showBpm = row.bpm;

showTime = row.time;

}, function(err2, row2) {

tickInterval = Math.round(nSampligns / 6);

sendDatas(res);

});

}

});

db.close();

});

router.get('/executingOximeterPy', function(req, res) {

child = exec("python oximeter.py",

function (error, stdout, stderr) {

if (error !== null) {

console.log('exec error: ' + error);

}

if (stdout == 1) {

console.log('executingOximeterPy page will be closed!');

}

});

res.render('executingOximeterPy', { title: 'Web Pulse Oximeter' })

});

module.exports = router;

Page 96: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

76

Apêndice F – Programação web – oximeter.js

/* Wait time function */

var waitTime = function() {

setTimeout(function() {

location.href='/oximeter?section=-1';

}, 50000);

}

Apêndice G – Programação web – index.jade

extends layout

block content

h1 Welcome to #{title}

p In this web app, you are able to measure your Peripheral Oxygen Saturation (SpO2) and Beats Per Minute (BPM).

div

a(href='/oximeter?section=-1')

button.btn.btn-primary.btn-lg See your oximetry!

img(src="images/logoWebPulseOximeter.png", alt="Logo WebPulseOximeter")

Apêndice H– Programação web – oximeter.jade

extends layout

block content

h1 Hello! Here you can visualize your oximetry.

.row

div.col-md-2

a(target='_self', href='/executingOximeterPy')

button.btn.btn-success.btn-lg New oximetry!

div.col-md-2

a(href="/")

button.btn.btn-info.btn-lg Home Page

h2 These are your oximetry data at #{mshowTime}.

.row

div.col-md-4

h2 SpO2:

span.label.label-primary #{mshowSpo2} %

div.col-md-4

h2 BPM:

span.label.label-primary #{mshowBpm}

#chart-red

#chart-ired

h2 Your Oximetry and Heart Rate history.

h3 Click on a point at any of the charts below in order to see the corresponding oximetry data.

#chart-spo2

#chart-bpm

script(text='javascript').

$('#chart-spo2').highcharts({

title: {

text: 'Peripheral Oxygen Saturation',

x: -20, //center

style: {

"color": "#000",

"fontSize": "26px",

"fontWeight": "bold"

}

},

colors: ['#0f0'],

xAxis: {

categories: [#{mLabels}],

tickInterval: #{mtickInterval},

tickWidth: 0,

gridLineWidth: 1

},

yAxis: {

title: {

text: 'SpO2 (%)'

}

},

tooltip: {

valueSuffix: ' %'

},

legend: {

layout: 'vertical',

align: 'right',

verticalAlign: 'middle',

borderWidth: 0

},

plotOptions: {

series: {

cursor: 'pointer',

point: {

events: {

Page 97: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

77

click: function (e) {

console.log('section: ' + this.x);

location.href='/oximeter?section=' + this.x ;

}

}

}

}

},

series: [{

name: 'SpO2',

data: [#{mseriesSpo2}]

}]

});

$('#chart-bpm').highcharts({

title: {

text: 'Beats Per Minute',

x: -20, //center

style: {

"color": "#000",

"fontSize": "26px",

"fontWeight": "bold"

}

},

colors: ['#00f'],

xAxis: {

categories: [#{mLabels}],

tickInterval: #{mtickInterval},

tickWidth: 0,

gridLineWidth: 1

},

yAxis: {

title: {

text: 'BPM'

}

},

tooltip: {

valueSuffix: ' BPM'

},

legend: {

layout: 'vertical',

align: 'right',

verticalAlign: 'middle',

borderWidth: 0

},

plotOptions: {

series: {

cursor: 'pointer',

point: {

events: {

click: function (e) {

console.log('section: ' + this.x);

location.href='/oximeter?section=' + this.x ;

}

}

}

}

},

series: [{

name: 'BPM',

data: [#{mseriesBpm}]

}]

});

$('#chart-red').highcharts({

title: {

text: 'Red signal data',

x: -20, //center

style: {

"color": "#000",

"fontSize": "26px",

"fontWeight": "bold"

}

},

colors: ['#f00'],

xAxis: {

categories: [#{mtime}],

tickInterval: 15,

tickWidth: 0,

gridLineWidth: 1

},

yAxis: {

title: {

text: 'Voltage (V)'

}

},

tooltip: {

valueSuffix: ' V'

},

legend: {

layout: 'vertical',

align: 'right',

verticalAlign: 'middle',

borderWidth: 0

},

series: [{

name: 'RED',

data: [#{mred}]

}]

});

$('#chart-ired').highcharts({

Page 98: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

78

title: {

text: 'InfraRed signal data',

x: -20, //center

style: {

"color": "#000",

"fontSize": "26px",

"fontWeight": "bold"

}

},

colors: ['#ff851f'],

xAxis: {

categories: [#{mtime}],

tickInterval: 15,

tickWidth: 0,

gridLineWidth: 1

},

yAxis: {

title: {

text: 'Voltage (V)'

}

},

tooltip: {

valueSuffix: ' V'

},

legend: {

layout: 'vertical',

align: 'right',

verticalAlign: 'middle',

borderWidth: 0

},

series: [{

name: 'IRED',

data: [#{mired}]

}]

});

div

a(href="/")

img(src="images/logoWebPulseOximeter.png", alt="Logo WebPulseOximeter")

Apêndice I – Programação web – executingOximeterPy.jade

extends layout2

block content

script(src='/javascripts/oximeter.js')

script(src='/javascripts/pace.min.js')

h1 Assessing your oximetry!

h3 Wait a moment please, while we are assessing your oximetry!

link(rel='stylesheet', href='/stylesheets/cornerIndicator.css')

script.

waitTime();

Apêndice J – Programação web – layout.jade

doctype html

html

head

title= title

link(rel='stylesheet', href='/stylesheets/style.css')

link(rel='stylesheet', href='/stylesheets/bootstrap.min.css')

body

header

h1 #{title}

script(src='/javascripts/jquery.js')

script(src='/javascripts/bootstrap.min.js')

script(src='/javascripts/highcharts.js')

script(src='/javascripts/exporting.js')

.container

.row

.col-md-12

block content

footer

p Web Pulse Oximeter.

Apêndice K – Programação web – layout2.jade doctype html

html

head

title= title

link(rel='stylesheet', href='/stylesheets/style.css')

link(rel='stylesheet', href='/stylesheets/bootstrap.min.css')

body

header

h1 #{title}

.container

.row

.col-md-12

block content

footer

p Web Pulse Oximeter.

Page 99: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

79

Anexo

Anexo A – Configuração do HC-05

Modify The HC-05 Bluetooth Module Defaults Using AT Commands by techbitar <http://www.instructables.com/id/Modify-The-HC-05-Bluetooth-Module-Defaults-Using-

A/?ALLSTEPS>

This Arduino program (HC_05.ino) does two things. It takes the AT commands you enter from the Arduino IDE Serial Monitor and sends those commands to the HC-05. The program then

reads the output of the HC-05 and displays it on the Arduino IDE Serial Monitor. You can also use a terminal emulator such as Tera Term instead of the Arduino Serial Monitor.

The Arduino communicates with the HC-05 using the SoftwareSerial ports while the Arduino communicates with the user via the Serial Monitor.

/*

AUTHOR: Hazim Bitar (techbitar)

DATE: Aug 29, 2013

LICENSE: Public domain (use at your own risk)

CONTACT: techbitar at gmail dot com (techbitar.com)

*/

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(10, 11); // RX | TX

void setup()

{

pinMode(9, OUTPUT); // this pin will pull the HC-05 pin 34 (key pin) HIGH to switch module to AT mode

digitalWrite(9, HIGH);

Serial.begin(9600);

Serial.println("Enter AT commands:");

BTSerial.begin(38400); // HC-05 default speed in AT command more

}

void loop()

{

// Keep reading from HC-05 and send to Arduino Serial Monitor

if (BTSerial.available())

Serial.write(BTSerial.read());

// Keep reading from Arduino Serial Monitor and send to HC-05

if (Serial.available())

BTSerial.write(Serial.read());

}

You can send AT Commands to the HC-05 from the Arduino IDE Serial Monitor while the Arduino is running the attached Arduino program.

I have listed a few popular AT commands that will change the HC-05 device name, pass code, and speed. You will find a full set of AT commands from the attached HC-05 reference PDF

file.

(remove double quotes from AT command)

To return HC-05 to mfg. default settings: "AT+ORGL"

To get version of your HC-05 enter: "AT+VERSION?"

To change device name from the default HC-05 to let's say MYBLUE enter: "AT+NAME=MYBLUE"

To change default security code from 1234 to 2987 enter: "AT+PSWD=2987"

To change HC-05 baud rate from default 9600 to 115200, 1 stop bit, 0 parity enter: "AT+UART=115200,1,0"

Anexo B – Instalação dos drivers do Bluetooth na Raspberry Pi

Bluetooth Serial Communication with HC-05 by MYPIANDME < http://myraspberryandme.wordpress.com/2013/11/20/bluetooth-serial-communication-with-hc-05/ >

The first step is to install bluetooth support for the Raspberry Pi. These packages will install myriads of other stuff, so plan on spending some time before the terminal. I have not yet figured

out which packages could be safely purged after installation. So here we go:

sudo apt-get install bluetooth bluez-utils

After everything is installed plug in your Bluetooth USB dongle. I used a KeySonic dongle that came with a bluetooth keyboard. Then check with lsusb if the device gets recognized. You

should get something like this:

Switch on the Arduino with the HC-05 connected and the sketch from above loaded. It’s time to scan for devices from the Raspberry side of things. Type in hcitool scan and this should get

you:

This is the name and the MAC address of the device we configured from the Arduino. Now every manual on the internet begins referring to the sdptool command to discover services and

channels. This is not needed. You may also read something about editing configuration files to add support for the SPP protocol and so on. This is not needed, in fact it didn’t work for me at

all. So this time I deliberately skipped these steps.

The only configuration file that needs editing is the rfcomm.conf file, where we will add a permanent connection to the module we just discovered. I’m using nano as an editor here. Type in

sudo cp /etc/bluetooth/rfcomm.conf rfcomm.conf.orig

sudo nano /etc/bluetooth/rfcomm.conf

The first line just copies the file we are editing. In case things do not work out one can always revert back. Edit the rfcomm.conf file that it looks like this: Just change the address to the

address of your HC-05 module and set the comment to whatever you like.

# RFCOMM configuration file.

rfcomm0 {

# Automatically bind the device at startup

bind yes;

# Bluetooth address of the device

device 98:D3:31:b0:80:6C;

# RFCOMM channel for the connection

channel 1;

Page 100: SEL0444 Projeto de Formatura II - Biblioteca Digital de ... · 3.1.2. Componentes eletrônicos do sistema de aquisição e condicionamento..... 22 3.1.3. Microcontrolador – Arduino

80

# Description of the connection

comment "LS-ONE";

}

The HC-05 modules come with a passkey configured. The default PIN is “1234” and can be set using the “AT+PIN=xxxx” command. To enable us to automatically connect to the module,

this pin needs to be written to a file called “pincodes” that is located under “/var/lib/bluetooth/xx:xx:xx:xx:xx:xx/”, where xx… is the MAC address of the bluetooth dongle plugged into the

Raspberry Pi.

The easiest way to edit this file is to use the “echo” command to append a line to the file:

sudo echo "98:D3:31:B0:80:6C 1234" >> /var/lib/bluetooth/xx:xx:xx:xx:xx:xx/pincodes

Just type in until right after “bluetooth/” and then use the shell’s autocomplete feature by pressing the TAB key.

Time for a first test. Therefore the bluetooth service needs to be restarted:

sudo /etc/init.d/bluetooth restart

By now a device called /dev/rfcomm0 should have been created. If the Arduino is not running, start it and start the Serial Monitor. As a first test we are going to echo something to the

rfcomm0-device. In the raspberry terminal type:

echo "TEST" > /dev/rfcomm0

Anexo C – Instalação do Node.js

Node.js + Rasberry Pi by node-arm < http://node-arm.herokuapp.com/ >

Step 1: Download

To Download via command line

* wget http://node-arm.herokuapp.com/node_latest_armhf.deb

Other options are

* http://node-arm.herokuapp.com/node_0.10.32_armhf.deb

* http://node-arm.herokuapp.com/node_0.10.31_armhf.deb

Step 2: Install

sudo dpkg -i node_latest_armhf.deb

# Check installation

node -v

Anexo D – Instalação do Express

Express Framework – Installing by Express <http://expressjs.com/starter/installing.html >

First, create a directory to hold your application, if you haven't already done so, and make that your working directory.

$ mkdir myapp

$ cd myapp

Create a package.json file in the directory of interest, if it does not exist already, with the npm init command.

$ npm init

Install Express in the app directory and save it in the dependecies list:

$ npm install express --save

To install Express temporarily, and not add it to the dependecies list, omit the --save option:

$ npm install express

Node modules installed with the --save option are added to the dependencies list in the package.json file. Then using npm install in the app directory will automatically install modules in the

dependecies list.