You are on page 1of 100

UNIVERSIDADE DE SO PAULO

ESCOLA DE ENGENHARIA DE SO CARLOS


DEPARTAMENTO DE ENGENHARIA ELTRICA

SEL0444 Projeto de Formatura II


Monografia
Oxmetro de pulso para medio da oxigenao perifrica e
pulsao cardaca com interface via web

Aluno: Mrio Augusto Kushima


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

So Carlos
Novembro de 2014

MRIO AUGUSTO KUSHIMA

OXMETRO DE PULSO PARA MEDIO


DA OXIGENAO PERIFRICA E
PULSAO CARDACA COM
INTERFACE VIA WEB

Projeto de concluso de curso apresentado


Escola de Engenharia de So Carlos da
Universidade de So Paulo

Curso de Engenharia Eltrica com nfase em


Eletrnica

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

So Carlos
Novembro de 2014

Agradecimentos
Os meus primeiros agradecimentos so carinhosa e merecidamente dedicados aos meus pais,
Mrcia Yoshiko Hoshika Kushima e Mrio Kushima, pela dedicao, compreenso 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. Agradeo tambm 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 no pouparam esforos para me ajudar no
desenvolvimento deste trabalho.
Ao grupo Yanagi Taiko que me acolheu desde o primeiro dia em que estive em So Carlos.
Agradeo a experincia, o conhecimento e a amizade compartilhados com Snia Kaibara, Bruno
Watanabe, Guilherme Kawamata, Alexandre Romo e Luana Oiko.
Aos colegas de classe junto dos quais enfrentei inmeros desafios durante estes anos de
graduao. Obrigado Bruno Callegaro, Tiago Martins, Joo Tardelli, Artur Duarte, Lucas Pacheco e
Tiago Perez.
E tambm agradeo aqui aos amigos que estiveram comigo durante todos os momentos alegres,
tristes e engraados que vivenciei em So Carlos.

ii

Resumo
O monitoramento da saturao de oxignio pela hemoglobina, um dos principais sinais vitais,
essencial na rotina hospitalar. Tecnologias para monitorar a oximetria de forma no invasiva, rpida e
precisa, devem ser desenvolvidas para otimizar a rotina hospitalar e levar mais qualidade de vida aos
pacientes. A oximetria de pulso (absoro pelo sangue de dois comprimentos de onda diferentes) permite
a deteco da saturao de oxignio. Este projeto envolveu o desenvolvimento de um circuito analgico
de aquisio e condicionamento dos sinais de oximetria, controlado por um Arduino Uno, responsvel
por enviar os sinais amostrados Raspberry Pi, via Bluetooth. Estes sinais foram processados pelo
microcomputador para calcular a taxa de saturao de oxignio no sangue e a frequncia cardaca, os
quais foram armazenados em um banco de dados. A Raspberry Pi disponibilizou uma aplicao web
onde foi possvel visualizar o resultado da oximetria e iniciar a realizao de uma nova medio. Ao
final do projeto, conseguiu-se a integrao de todos os mdulos, desde o envio do comando para realizar
uma nova oximetria, a partir da aplicao web, at a visualizao dos dados e resultados da oximetria
na aplicao. O projeto possui as mesmas limitaes de um oxmetro comercial e o tempo de
processamento lento se comparado com outros oxmetros. Contudo, a realizao da oximetria por meio
da interface web permite um acesso remoto que nenhum outro oxmetro atual realiza.
Palavras-chave: Oxmetro, Arduino Uno, Raspberry Pi, Bluetooth, Web.

iii

iv

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.

vi

Lista de Figuras
Figura 1 - Representao da hematose nos alvolos pulmonares............................................................ 1
Figura 2 - Representao do sistema circulatrio nos seres humanos..................................................... 2
Figura 3 - Sensor tico para oximetria .................................................................................................... 3
Figura 4 - Tipos de oxmetros existentes ................................................................................................ 3
Figura 5 - Wireless Pulse Oximeter ........................................................................................................ 4
Figura 6 - Curva de dissociao da oxiemoglobina. ............................................................................... 7
Figura 7 - Alterao da curva de dissociao da oxiemoglobina. ........................................................... 8
Figura 8 - Disposio dos LEDs e do sensor de oximetria de pulso. ...................................................... 8
Figura 9 - Diferena da absoro da luz infravermelha e vermelha para a oxiemoglobina e a sua forma
desoxigenada. .......................................................................................................................................... 9
Figura 10 - Absoro para diferentes componentes que a atenuam a transmisso da luz que atravessa o
paciente. .................................................................................................................................................. 9
Figura 11 - Princpio de Beer-Lambert. ................................................................................................ 10
Figura 12 - Alterao da luz transmitida em funo da variao do caminho ptico durante o ciclo
cardaco. ................................................................................................................................................ 12
Figura 13 - Sinais sem e com normalizao para diferentes comprimentos de ondas .......................... 13
Figura 14 - Curva terica e de calibrao emprica da saturao de oxignio pela razo R ................. 14
Figura 15 - Variao dos coeficientes de extino 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 - Mdulo Bluetooth HC-05 ................................................................................................... 23
Figura 22 - Ligao 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 alimentao ...................................................................................................... 27
Figura 26 - Circuito esquemtico de controle dos LEDs ...................................................................... 28
Figura 27 - Amplificador de Transimpedncia ..................................................................................... 29
Figura 28 - Filtro ativo passa-baixa com topologia Sallen-Key ............................................................ 30
Figura 29 - Filtro passivo passa alta ...................................................................................................... 31
Figura 30 - Amplificador de ganho no inversor .................................................................................. 31
Figura 31 - Regulador de offset............................................................................................................. 32
Figura 32 - Amplificador inversor unitrio ........................................................................................... 32
Figura 33 - Diagrama em blocos da programao no Arduino ............................................................. 33
Figura 34 - Janela de configurao da Raspberry Pi ............................................................................. 35
Figura 35 - Software de comunicao SSH (Putty) .............................................................................. 36
Figura 36 - Interface grfica para gerenciamento do banco de dados sqlite3 ....................................... 37
Figura 37 - Diagrama em blocos da programao em Python na Raspberry Pi .................................... 38
Figura 38 - Diagrama em blocos da aplicao web............................................................................... 42
Figura 39 - Sinais de entrada e sada do filtro passa baixa para uma frequncia de 5 Hz ..................... 44
Figura 40 - Comparao entre os dados tericos e experimentais para o filtro passa baixa ................. 44
Figura 41 - Sinais de entrada e sada do filtro passa alta para uma frequncia de 0,07 Hz ................... 45
Figura 42 - Comparao entre os dados tericos e experimentais para o filtro passa alta .................... 46
Figura 43 - Sada do amplificador de transimpedncia ......................................................................... 47
Figura 44 - Sada do filtro passa baixa .................................................................................................. 47
vii

Figura 45 - Sada do filtro passa alta ..................................................................................................... 48


Figura 46 - Sada do amplificador no inversor .................................................................................... 49
Figura 47 - Sada do circuito de ajuste do offset ................................................................................... 50
Figura 48 - Espectro de potncia do sinal de sada do circuito analgico ............................................. 50
Figura 49 - Sinais vermelho e infravermelho no 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 - Pgina inicial da aplicao web .......................................................................................... 53
Figura 52 - Pgina que permite visualizar e requisitar uma nova medio de oximetria ...................... 55
Figura 53 - Visualizao dos resultados numricos da oximetria e da frequncia cardaca.................. 56
Figura 54 - Visualizao do sinal de oximetria proveniente dos LEDs vermelho e infravermelho ...... 56
Figura 55 - Visualizao do histrico de oximetria e da frequncia cardaca ....................................... 57
Figura 56 - Pgina de espera enquanto a oximetria est sendo realizada .............................................. 57
Figura 57 - Viso da aplicao web atravs de um dispositivo mvel .................................................. 58
Figura 58 - Conjunto de testes com diferentes posicionamentos e movimentaes 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 utilizao do esmalte azul .......................... 62
Figura 64 - Sinal vermelho e infravermelho resultante da utilizao do esmalte preto ........................ 63
Figura 65 - Sinal vermelho e infravermelho resultante da utilizao do esmalte vermelho ................. 63

viii

Lista de Tabelas
Tabela 1 - Tempo de sobrevivncia de alguns rgos em situao de hipxia ....................................... 1
Tabela 2 - Lgica 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 transmisso Bluetooth ................................................................................... 51
Tabela 6 - Resultados da oximetria e da pulsao cardaca para os testes ............................................ 59
Tabela 7 - Resultados da oximetria e da pulsao cardaca quando h esmaltes na unha ..................... 62

ix

Lista de Abreviaturas e Siglas


Comprimento de Onda
() Constante de Absoro para determinado Comprimento de Onda
HbO2 (IV) Constante de Absoro da Oxiemoglobina para o Infravermelho
HbO2 (V) Constante de Absoro da Oxiemoglobina para o Vermelho
Hb(IV) Constante de Absoro da Hemoglobina para o Infravermelho
Hb(V) Constante de Absoro da Hemoglobina para o Vermelho
A Ampere
AC Alternate Current
BPM Batimento Por Minuto
BPS Bits Por Segundo
CAD Conversor Analgico-Digital
CI Circuito Integrado
CO2 Gs Carbnico
CHbO2 Concentrao de Oxiemoglobina
CHb Concentrao de Hemoglobina
COHb Carboxiemoglobina
DC Direct Current
DNS Domain Name System
Fc Frequncia de Corte
Fa Frequncia 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
xi

LED Light Emitting Diode


MetHb Metemoglobina
O2 Gs Oxignio
PCO2 Presso Parcial de Gs Carbnico
pH Atividade do on H+
PO2 Presso Parcial de Gs Oxignio
SaO2 Saturao Arterial de Oxignio
SD Secure Digital
SO2 Saturao de Oxignio
SpO2 Saturao Pulstil de Oxignio
USB Universal Serial Bus
UTI Unidade de Terapia Intensiva
V Volt
W Watt

xii

Sumrio
1.

2.

3.

Introduo ...................................................................................................................................... 1
1.1.

Oximetria de pulso como mtodo de medio da oxigenao. .......................................... 1

1.2.

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

1.3.

Objetivos ................................................................................................................................ 4

1.4.

Organizao do trabalho ...................................................................................................... 5

Fundamentao Terica ............................................................................................................... 7


2.1.

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

2.2.

Princpios da oximetria de pulso .......................................................................................... 8

2.3.

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

2.4.

Medio da concentrao de cada substncia contida em uma mistura ........................ 10

2.5.

Clculo do SpO2 ................................................................................................................... 11

2.6.

Fontes de erros na medio ................................................................................................ 15

2.7.

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

Materiais e Mtodos .................................................................................................................... 19


3.1.

3.1.1.

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

3.1.2.

Componentes eletrnicos do sistema de aquisio e condicionamento ................... 22

3.1.3.

Microcontrolador Arduino ...................................................................................... 22

3.1.4.

Bluetooth....................................................................................................................... 23

3.1.5.

Microcomputador Raspberry Pi ............................................................................. 25

3.2.

4.

Mtodos ................................................................................................................................ 26

3.2.1.

Circuito Analgico....................................................................................................... 26

3.2.2.

Programao do Arduino ........................................................................................... 33

3.2.3.

Programao da Raspberry Pi ................................................................................... 34

Resultados e Discusso ................................................................................................................ 43


4.1.

5.

Materiais .............................................................................................................................. 21

Circuito analgico ............................................................................................................... 43

4.1.1.

Filtros analgicos ......................................................................................................... 43

4.1.2.

Anlise do sinal de oximetria em cada estgio do circuito....................................... 46

4.2.

Transmisso Bluetooth ........................................................................................................ 51

4.3.

Processamentos digitais do sinal (programao em Python) .......................................... 51

4.4.

Aplicao web ...................................................................................................................... 53

4.5.

Aferio da oximetria na presena de fontes de erros ..................................................... 58

Concluso ..................................................................................................................................... 65

Referncias Bibliogrficas .................................................................................................................. 67


xiii

Apndices ............................................................................................................................................. 69
Apndice A Cdigo do Arduino .................................................................................................. 69
Apndice B Programao em Python ......................................................................................... 71
Apndice C Validao da transmisso Bluetooth (Arduino).................................................... 73
Apndice D Validao da transmisso Bluetooth (Raspberry Pi) ........................................... 74
Apndice E Programao web index.js.................................................................................... 74
Apndice F Programao web oximeter.js .............................................................................. 76
Apndice G Programao web index.jade............................................................................... 76
Apndice H Programao web oximeter.jade .......................................................................... 76
Apndice I Programao web executingOximeterPy.jade ..................................................... 78
Apndice J Programao web layout.jade .............................................................................. 78
Apndice K Programao web layout2.jade ........................................................................... 78
Anexo .................................................................................................................................................... 79
Anexo A Configurao do HC-05 ............................................................................................... 79
Anexo B Instalao dos drivers do Bluetooth na Raspberry Pi ............................................... 79
Anexo C Instalao do Node.js.................................................................................................... 80
Anexo D Instalao do Express ................................................................................................... 80

xiv

1. Introduo
1.1.

Oximetria de pulso como mtodo de medio da oxigenao.


A oxigenao do sangue um processo vital para cada clula do corpo humano e a ausncia

prolongada de oxignio pode ocasionar a morte destas clulas. O processo de oxigenao inicia-se
quando o ar inspirado chega aos pulmes e, ento, nos alvolos, ocorre a hematose (Figura 1), ou seja,
a troca do gs carbnico (CO2) presente no sangue venoso pelo gs oxignio (O2) contido no ar inspirado
(WEBSTER, 1997).

Figura 1 - Representao da hematose nos alvolos pulmonares


Fonte: Hematose. Disponvel em <http://interagircomfono.xpg.uol.com.br/hematose.html>. Acesso
em: 01 nov 2014.

Para enfatizar a importncia da oxigenao dos tecidos, na Tabela 1, observou-se o tempo que
um rgo consegue manter sua funo em situao de hipxia (baixa oxigenao nos tecidos).
Tabela 1 - Tempo de sobrevivncia de alguns rgos em situao de hipxia
rgo
Crtex Cerebral
Corao
Rim e Fgado
Msculos Esquelticos
Fonte: WEBSTER, 1997

Tempo de Sobrevivncia sem oxigenao


Menos de 1 minuto
5 minutos
10 minutos
2 horas

Tanto o gs carbnico, antes presente no sangue venoso (rico em gs carbnico), e o gs


oxignio, no sangue arterial (rico em oxignio), so transportados pelas molculas de hemoglobina
contidas nas clulas chamadas de hemcias ou eritrcitos. A circulao do sangue arterial e do venoso
feita pelo sistema circulatrio (Figura 2).

Figura 2 - Representao do sistema circulatrio nos seres humanos


Fonte: Sistema Cardiovascular. Disponvel em <http://www.euachei.com.br/educacao/corpohumano/sistema-cardiovascular/>. Acesso em: 01 nov 2014

Mediante a importncia da oxigenao, iniciaram, ento, estudos sobre mtodos de medio da


saturao de oxignio no sangue, porm os primeiros procedimentos eram difceis, invasivos e
demoravam para gerar resultado. Um exemplo destas primeiras medies o mtodo de Van Slyke, no
qual se utilizavam reaes qumicas para remover o oxignio e outros gases dissolvidos no sangue e,
posteriormente, a partir das presses parciais destes gases retirados, podia-se determinar o nvel de
saturao de oxignio (WEBSTER, 1997). Tal mtodo levava at 20 minutos para ser concludo, logo
no era possvel o monitoramento de pacientes em condies de risco, tais como em acidentes,
anestesias, cirurgias e acompanhamento na unidade de tratamento intensivo (UTI), quando danos
irreversveis podem ocorrer devido falta de oxignio no sangue.

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


oxmetro de pulso, um dispositivo adequado para a medio devido rapidez do resultado, grande
fidelidade e ao fato de no 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 translcida 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. possvel, assim, obter
a taxa de oxignio no sangue, pois as absores destes comprimentos de onda diferem conforme a
saturao de oxignio presente. Consegue-se tambm medir a frequncia cardaca do paciente a partir
da anlise do sinal de oximetria, pois este sinal acompanha a variao do fluxo sanguneo devido ao
batimento cardaco.

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 clculos para obterem a taxa de saturao e
frequncia cardaca. Estes resultados so, enfim, mostrados ao usurio em um visor ou monitor.
Atualmente, todo este sistema de oximetria pode ser tambm encontrado em equipamentos
portteis, alm de maior porte, geralmente utilizados em hospitais ou centros de sade, ambos com boa
qualidade de medio e fcil visualizao dos resultados. Na Figura 4, podem ser vistos exemplos de
oxmetros existentes.

Figura 4 - Tipos de oxmetros existentes


3

Um modelo de oxmetro, que difere dos anteriores, o Wireless Pulse Oximeter (Figura 5) da
empresa iHealth, o qual composto por um oxmetro atual e por um aplicativo que pode ser executado
no sistema operacional iOS. Os dados de oximetria e pulsao cardaca 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. Disponvel em <http://www.ihealthlabs.com/fitnessdevices/wireless-pulse-oximeter/>. Acesso em: 01 nov 2014.

1.2.

Justificativa do trabalho
A medio da saturao de oxignio no sangue e da frequncia cardaca, a partir do mtodo de

oximetria de pulso, mostra-se importante, visto ser um processo rpido e no invasivo.


Apesar de existirem diversos modelos de oxmetros de pulso, nenhum deles possui um
aplicativo web, que permite ao usurio utilizar como interface para acessar, visualizar e controlar o
processo de oximetria de pulso. A utilizao 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 elaborao de um aplicativo web, integrado a um banco de dados digital para
medio da oximetria de pulso, permite o monitoramento remoto dos sinais de saturao de oxignio e
pulsao cardaca de um paciente.

1.3.

Objetivos
O principal objetivo deste trabalho foi projetar e implementar um sistema de medio da

oxigenao arterial e da pulsao cardaca, com interface via web, baseado no mtodo da oximetria de
pulso. Para obter tal objetivo foi necessrio:
4

O desenvolvimento de um circuito analgico para o condicionamento do sinal do sensor


optoeletrnico e controle dos LEDs.

A programao do microcontrolador, responsvel pelo controle do circuito analgico e pela


transmisso dos dados, via Bluetooth, para o microcomputador

A programao deste microcomputador para inicializar a comunicao Bluetooth, realizar o


processamento digital do sinal, obter a taxa de oxigenao sangunea e frequncia cardaca,
armazenar estes sinais e resultados em um banco de dados e gerar uma aplicao web, que
serviu como interface da oximetria.

1.4.

A configurao da comunicao Bluetooth.

Organizao do trabalho
O trabalho elaborado foi dividido em cinco captulos. O primeiro contm a descrio, o objetivo

e a justificativa do trabalho, a explicao do tema e o estado da arte referente oximetria. No segundo,


encontra-se o embasamento terico do projeto. No terceiro, so apresentados os materiais escolhidos e
os mtodos utilizados. O quarto composto pelos resultados e discusses. Por fim, no quinto,
apresentada a concluso referente ao trabalho desenvolvido e as futuras melhorias que podem ser
implementadas.

2. Fundamentao Terica
2.1.

A Oximetria
O processo de oxigenao ocorre devido ao transporte de gs oxignio, O2, pelas molculas de

hemoglobina encontradas nas clulas do sangue denominadas hemcias ou eritrcitos. Este transporte
s possvel devido capacidade da hemoglobina de ligar-se a uma molcula de oxignio de forma
reversvel, assim resultando na oxiemoglobina, HbO2. As hemoglobinas que no esto carregando
molculas de oxignio so denominadas hemoglobinas reduzidas, Hb. Conforme o nmero de molculas
de oxignio ligadas hemoglobina (que varia de um a quatro), diz-se que ela est mais ou menos
saturada. A afinidade desta ligao eleva-se proporcionalmente ao aumento da quantidade existente de
molculas de hemoglobina oxigenadas (HAEBISCH, 1980), permitindo que o sangue arterial mantenha
um nvel de oxigenao constante e possibilite que o organismo sobreviva em regies de baixa presso
de oxignio, tais como em locais de grande altitude.
O ndice que mede a oxigenao arterial denominado saturao arterial de oxignio, SaO2,
expresso em porcentagem e determinado pela concentrao de oxiemoglobina sobre esta somada
concentrao de hemoglobinas reduzidas, como na equao (1).

SaO2 =

CHbO2
CHbO2 + CHb

(1)

Onde CHbO2 a concentrao de oxiemoglobina e CHb a concentrao de hemoglobina


reduzida. A quantidade de oxignio presente no sangue gera uma presso parcial, PO2, que relacionada
saturao arterial de oxignio, SaO2. Esta relao conhecida como curva de dissociao da
oxiemoglobina (Figura 6).

Figura 6 - Curva de dissociao da oxiemoglobina.


Fonte: MARIEB e HOEHN (2008).
7

A presso parcial influencia na saturao arterial de oxignio, ou seja, na afinidade de


combinao entre as molculas de hemoglobinas e de oxignio. A curva de dissociao pode sofrer
alguns desvios, em decorrncia de fatores, tais como, a temperatura, o pH do sangue ([H+]), a presso
parcial de gs carbnico (PCO2), e a quantidade de 2,3 BPG (2,3-bifosfoglicerato). Na Figura 7, podese observar a influncia destes fatores na alterao da curva.

Figura 7 - Alterao da curva de dissociao da oxiemoglobina.


Fonte: Figura adaptada de PHILIPS.

2.2.

Princpios da oximetria de pulso


O sensor de oximetria constitudo 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 translcida do corpo do paciente (as pontas dos dedos ou a orelha). Parte desta luz espalhada
e/ou absorvida quando atravessa o paciente, enquanto a radiao que o atravessa completamente
medida por um sensor de luz (fotodiodo), posicionado no lado oposto do corpo do paciente. Na Figura
8, possvel observar a disposio dos componentes citados anteriormente.

Figura 8 - Disposio dos LEDs e do sensor de oximetria de pulso.


Fonte: (ANDRADE, 2009).
A medio da saturao pode ser realizada comparando-se a quantidade da radiao em 660 nm
com a de 895 nm detectadas pelo sensor, pois a oxiemoglobina absorve mais a luz infravermelha do que
8

a vermelha, enquanto que a hemoglobina reduzida se comporta de modo oposto (Figura 9). Esta medio
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 - Diferena da absoro da luz infravermelha e vermelha para a oxiemoglobina e a sua forma
desoxigenada.
Fonte: (ANDRADE, 2010).

A parcela de luz absorvida devido aos tecidos no apresenta significantes mudanas em curtos
perodos de tempo, ao passo que a de absoro, referente ao sangue arterial, apresenta variaes devido
s alteraes na pulsao (embora exista um nvel constante de sangue arterial). Desse modo, como o
sangue arterial o nico componente da absoro que apresenta mudanas em curtos perodos de tempo,
esta pode ser isolada dos outros componentes e assim, utilizada para realizar a medio de saturao.
Na Figura 10, podem ser vistos os componentes da absoro da luz que atravessa o paciente.

Figura 10 - Absoro para diferentes componentes que a atenuam a transmisso da luz que atravessa o
paciente.
Fonte: Figura adaptada de (WEBSTER, 1997)

2.3.

Lei de Beer-Lambert
O princpio de Beer-Lambert (Figura 11), que relaciona a absoro de luz com as propriedades

do material, consiste em um feixe de luz incidente, Iincidente, com comprimento de onda , que atinge
um anteparo no totalmente opaco, resultando em um feixe transmitido, Itransmitido , que dependente
do comprimento do anteparo, l [cm], da constante de absoro deste para o comprimento de onda ,
() [L/mmol.cm], e da concentrao de partculas responsveis pela atenuao do sinal, C [mmol/L].
A equao (2) expressa a relao do princpio de Beer-Lambert.

Figura 11 - Princpio de Beer-Lambert.


Fonte: (LIMA, 2009)

= ()..

(2)

A transmitncia, T(), desse processo a relao entre a luz transmitida e a incidente, equao
(3); enquanto que a absorbncia, A(), o logaritmo natural negativo desta relao, equao (4).

T() =

Itransmitido
= e().C.l
Iincidente

|()| = ln(T()) = (). C. l

2.4.

(3)

(4)

Medio da concentrao de cada substncia contida em uma mistura


A lei de Beer-Lambert pode tambm ser aplicada a uma mistura que possui mais de uma

substncia que absorve a luz, quando atravessada. A absoro parcial de cada substncia contribui para
a absoro total da luz. Portanto, a representao matemtica desta absoro total pode ser obtida pela
superposio de cada absoro individual. Por exemplo, suponha uma mistura com n substncias
diferentes, ento a absoro total, At , pode ser obtida atravs da equao (5).
10

At = 1 (). C1 . l1 + 2 (). C2 . l2 + + n (). Cn . ln

(5)

Onde, cada () corresponde constante de absoro, concentrao e ln ao comprimento


ptico, que atravessado pelo feixe de luz de comprimento , para cada substncia contida nesta mistura.
Uma vez, conhecendo a constante de absoro de cada substncia, mantendo um mesmo
caminho ptico de comprimento L para todas e medindo a absoro total para diferentes comprimentos
de onda, possvel montar um sistema linear (6) com n equaes de modo que seja possvel se
determinar as concentraes das n substncias que compem 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 no vivel para a determinao da oximetria de pulso deste projeto, visto que
os comprimentos pticos no so os mesmos para as diferentes substncias, as constantes de absoro
possuem uma variabilidade entre indivduos e, tambm, o sensor adquirido no permite uma anlise
simultnea da intensidade incidente da transmitida, atravs 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 no possvel de se obter com o sensor disponvel (WEBSTER, 1997).

2.5.

Clculo do SpO2
O ndice SpO2 definido como a taxa de saturao pulstil de oxigenao, correspondente ao

SaO2, e sua sigla diferente devido ao mtodo pelo qual este ndice obtido. O mtodo para o clculo
do SpO2 baseado na pulsao cardaca, que acaba alterando o fluxo sanguneo responsvel pela
oxigenao do indivduo. Um ciclo cardaco composto pela sstole e pela distole. As artrias contm
mais sangue a sstole do que na distole. Dessa forma, a concentrao e o comprimento ptico das
hemoglobinas aumentam, consequentemente a intensidade luminosa dos feixes que atravessam diminui.
O processo inverso pode ser inferido durante a distole.
Na Figura 10, pode-se observar a variao da absoro e da transmisso do feixe luminoso,
devido ao ciclo cardaco. Nesta mesma figura, so indicados dois sinais, IH e IL, o primeiro
correspondendo intensidade mxima transmitida, enquanto que IL, intensidade mnima transmitida.
Estes dois sinais podem ser expressos conforme o sistema de equaes (7) (WEBSTER, 1997).

IH = IO . eDC().CDC .dDC . e[Hb ().CHb +HbO2 ().CHbO2 ]dmin


IL = IO . eDC().CDC .dDC . e[Hb ().CHb +HbO2 ().CHbO2 ]dmax
11

(7)

Onde,
IO a intensidade de luz incidente;
DC , CDC e dDC a constante de absoro, a concentrao e o comprimento ptico das componentes que
possuem absoro constante, com exceo do sangue arterial no pulstil;
Hb () e HbO2 () so as constantes de absoro da hemoglobina reduzida e da oxiemoglobina para
determinado comprimento de onda ;
CHb e CHbO2 so as concentraes de oxiemoglobina e hemoglobina reduzida;
dmin o comprimento ptico mnimo para a hemoglobina reduzida e a oxiemoglobina durante a distole;
dmax o comprimento ptico mximo para a hemoglobina reduzida e a oxiemoglobina durante a sstole.
Durante o ciclo cardaco, a intensidade transmitida I uma funo do dimetro d, da artria, que
pode variar de dmin a dmax , ou seja, d pode ser substitudo por dmin + d, onde d varia de 0 at dmax
- dmin . Sendo assim, I pode ser expresso como uma funo de IH e d.

I = IH . [Hb ().CHb +HbO2 ().CHbO2 ].d

(8)

Na Figura 12, pode-se observar a alterao da luz transmitida entre um valor IMIN a um IMAX
conforme altera-se a distncia x entre dmin a dmax .

Figura 12 - Alterao da luz transmitida em funo da variao do caminho ptico durante o ciclo
cardaco.
Fonte: Figura adaptada de (WEBSTER, 1997)
Antes de se iniciar o clculo do SpO2, deve-se normalizar os sinais de oximetria proveniente dos
LEDs, visto que estes no emitem luz com a mesma intensidade, havendo tambm a variao da
sensibilidade do sensor para diferentes comprimentos de onda. A normalizao realizada dividindo-se
12

o valor amostrado pelo valor mximo, equao (9), o que resulta em sinais com a mesma intensidade
durante a distole para os diferentes comprimentos de onda (este efeito melhor visualizado na Figura
13).

Figura 13 - Sinais sem e com normalizao para diferentes comprimentos de ondas


Fonte: Figura adaptada de (WEBSTER, 1997)

IN =

I
= e[Hb ().CHb +HbO2 ().CHbO2 ].d
IH

(9)

O clculo das absorbncias das luzes, sistema de equaes (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 razo das absorbncias dos sinais j normalizados definida como um fator R (equao (11)).

R=

[Hb (V ). CHb + HbO2 (V ). CHbO2 ]. dV


At,V
=
At,IV [Hb (IV ). CHb + HbO2 (IV ). CHbO2 ]. dIV

(11)

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


utilizando a definio de SaO2 da equao (1), pode-se concluir que a saturao pulstil de oxigenao,
SpO2, calcula-se conforme a equao (12).

SpO2 =

Hb (V ) R Hb (IV )
R (HbO2 (IV ) Hb (IV )) + (Hb (V ) HbO2 (V ))

Onde a razo R tambm pode ser calculada como:

13

(12)

ln(, )
,

ln(, )
,

(13)

Este o modelo terico para se obter a saturao pulstil de oxignio, SpO2. No entanto, as
constantes de absoro, que variam para cada indivduo, a presena de hemoglobinas no funcionais e
o efeito de espalhamento da luz so fatores que no foram considerados para o modelo em questo
(WEBSTER, 1997). Usualmente, utiliza-se na prtica, uma curva de calibrao emprica (Figura 14)
que relaciona a razo R com o nvel de oxigenao.

Figura 14 - Curva terica e de calibrao emprica da saturao de oxignio pela razo R


Fonte: Figura adaptada de (WEBSTER, 1997)

Na literatura, h alguns polinmios que tentam obter uma curva emprica que se aproxime da
terica, dentre estes:

SpO2 = 110 25. R

SpO2 =

1000 550. R
900 350. R

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

(14)

(15)

(16)

Fontes: Equao (14) (WEBSTER, 1997). Equao (15) (BRONZINO, 1999). Equao (16)
(NGHIA, 2012)

14

2.6.

Fontes de erros na medio

Hemoglobinas no funcionais
A principal fonte de erro que afeta a medio da saturao de oxignio advm da presena da
hemoglobina no-funcional (WEBSTER, 1997). Em alguns pacientes, h uma grande quantidade destas
hemoglobinas incapazes de transportar oxignio. A carboxiemoglobina (HbCO) e a metemoglobina
(METHb) so alguns tipos de hemoglobina no funcionais. Na Figura 15, pode-se perceber como estas
hemoglobinas no funcionais influenciam uma medio incorreta do SpO2, por possurem, em alguns
determinados comprimentos de onda, um coeficiente de extino superior ou muito prximo ao das
hemoglobinas funcionais (oxiemoglobinas e hemoglobina reduzida). Sendo assim, a medio da
saturao pulstil de oxignio deveria ser:

SpO2 =

CHbO2
CHb + CHbO2 + CHbCO + CMETHb + Coutras hemoglobinas no funcionais

(17)

Contudo, para que seja possvel essa medio, seriam necessrios outros feixes de luz com
comprimentos de ondas diferentes, que possibilitem distinguir a absoro de uma determinada
hemoglobina em relao as outras.
Quando a quantidade de hemoglobinas no funcionais muito baixa, as equaes possuem
grande correspondncia. Ao passo que, na presena de grande quantidade destes tipos de hemoglobina,
os resultados obtidos so divergentes em relao ao estado real do paciente (WEBSTER, 1997).
A poluio por monxido de carbono e o fumo excessivo so fatores que influenciam a formao
de hemoglobinas no funcionais.

Figura 15 - Variao dos coeficientes de extino para diferentes tipos de hemoglobinas


Fonte: Figura adaptada de (WEBSTER, 1997)
15

Efeito de espalhamento da luz


Nem todo o feixe de luz incidente absorvido ou transmitido. Uma parte desta luz tambm
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 absoro da luz que no
considerado no modelo terico. O aumento da absoro no somente relacionado a esse
espalhamento e ao aumento do dimetro da artria durante a distole. A mudana do eixo das clulas
vermelhas do sangue altera a absoro da luz. As clulas vermelhas possuem um formato bicncavo,
cujo maior eixo alinhado ao fluxo sanguneo durante a distole e o menor eixo, na sstole. Assim, na
distole, a luz possui maior caminho a ser percorrido, aumentando, consequentemente, sua absoro
pelo sangue. Este posicionamento varivel do eixo destas clulas tambm modifica a quantidade de luz
refletida. Como resultado desta propriedade, a absoro e a reflexo da luz causada pelo sangue depende
do ciclo cardaco e da velocidade do fluxo sanguneo (MOYLE, 1994).
A intensidade da luz espalhada depende de fatores como a concentrao de clulas vermelhas
no sangue, o tamanho, o formato, a orientao, o ndice de refrao e a espessura dos tecidos (FINE e
WEINREB, 1995). Tais fatores, alm da distncia entre os LEDs e o fotodiodo, variam de paciente para
paciente, dificultando a obteno de uma modelagem para estas diversas circunstncias. Existem alguns
modelos da absoro de luz, incluindo o espalhamento, os quais so baseados em teoremas estatsticos
e qunticos, o que os torna mais complexos e assim inviveis na prtica.
Steinke e Shepherd demonstraram que o espalhamento dos feixes luminosos depende do
comprimento de onda da luz e da taxa de saturao. A relao entre o espalhamento de luz e a taxa de
saturao linear e pode ser vista no somente como uma fonte de erro, pois o espalhamento aumenta
a taxa de absoro dessa luz, ou seja, aumenta-se a sensibilidade da medio (Steinke e Shepherd, 1986).

Comprimentos de ondas emitidos pelos LEDs


Os comprimentos de onda escolhidos so tais que suas absores pela pele, tecidos e a gua
sejam inferiores em relao a outros comprimentos de onda, de modo que haja uma diferena
significativa entre as constantes de absoro da hemoglobina reduzida e da oxiemoglobina (WEBSTER,
1997). Sabe-se que os LEDs no 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 medio de oximetria possui erro devido a esta caracterstica.

16

Anemia
Um paciente com anemia possui uma baixa quantidade de clulas vermelhas, o que diminui,
consequentemente, a quantidade de hemoglobina no seu sangue. Um paciente anmico pode no 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, no possui oxigenao suficiente em seus tecidos (WEBSTER,
1997).

Corantes
Em alguns procedimentos cirrgicos, especialmente em cardiologia e urologia, so injetados
corantes no sangue do paciente, com a finalidade de se mapear o fluxo sanguneo. Estes corantes
interferem na transmisso 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 circulao
perifrica, o que afeta significantemente a medio da oxigenao perifrica. Tambm, devido ao frio,
o paciente pode apresentar tremores que atrapalham a aquisio de dados pelo sensor (WEBSTER,
1997).

2.7.

Problemas comuns com oximetria de pulso


As principais dificuldades que so encontradas no oxmetro de pulso so:

Interferncia de luz externa


Uma m isolao do sensor em relao luz externa pode ocasionar leituras incorretas da
oximetria, isto porque o fotodiodo tambm sensvel a luz ambiente.

Movimentos do paciente
A movimentao voluntria ou involuntria do paciente, at mesmo oriunda do ato da fala afeta
a leitura do sinal, pois o movimento acaba gerando pequenas distores no sinal.

17

Adaptao do sensor ao corpo do paciente


Mesmo que o sensor seja fabricado para se adaptar da melhor maneira ao paciente, existem
casos em que no 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 colorao dos esmaltes utilizados nas unhas pode interferir significantemente na anlise da
oximetria, pois pode absorver ou refletir a luz emitida pelos diodos.

18

3. Materiais e Mtodos
Neste captulo, so apresentados os materiais e os mtodos utilizados para a implementao do
projeto. Um esquema geral deste pode ser visto na Figura 16, onde cada bloco representa um mdulo
do projeto com suas respectivas funes, caractersticas e componentes.
O projeto foi composto primeiramente por um sensor de oximetria que inclui dois LEDs e um
fotodiodo conforme especificado nos dois primeiros captulos. Este sensor foi conectado a um circuito
analgico que condicionou o sinal de modo que pudesse ser convertido para um sinal digital pelo
microcontrolador Arduino Uno.
O Arduino Uno foi o responsvel por controlar a emisso dos LEDs e pela transmisso via
Bluetooth, sendo que algumas configuraes precisaram ser realizadas neste tipo de comunicao. 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: programao em Python e web. O programa em Python foi responsvel
por inicializar a comunicao Bluetooth, o processamento digital dos sinais e o armazenamento destes
em um banco de dados. A programao web, que envolveu um servidor Node.js, o framework Express,
plug-ins e suas configuraes, foi responsvel por gerar o site, que serviu como interface para o usurio
realizar a oximetria e visualizar o resultado.
O site gerado foi uma aplicao web, composta por uma pgina inicial do projeto, uma segunda
que permitiu a visualizao da oximetria e a obteno de uma nova medio e, por fim, uma responsvel
por executar o programa em Python.
A oximetria foi realizada a partir do momento em que o usurio, por meio da aplicao web,
requisitou uma nova medio, que o redirecionou a uma pgina que executou o programa em Python. O
referido programa iniciou a comunicao Bluetooth entre a Raspberry Pi e o Arduino Uno. Estabelecida
a comunicao, a Raspberry enviou um sinal para que o Arduino Uno comeasse controlar a emisso
dos LEDs do sensor, de modo que o sinal de sada do fotodiodo pudesse ser condicionado pelo circuito
analgico. O sinal atravessou todos os mdulos conforme explicado anteriormente at que os resultados
fossem armazenados no banco de dados. Por fim, a aplicao web redirecionou o usurio para a pgina
de visualizao da oximetria, para uma anlise dos resultados obtidos.
A constituio, as caractersticas ou as funes de cada mdulo do projeto so descritas
detalhadamente ao longo deste captulo.

19

Figura 16 - Diagrama em blocos do projeto


20

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 sada 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

21

3.1.2.

Componentes eletrnicos do sistema de aquisio e condicionamento


Os componentes utilizados no projeto foram transstores, amplificadores operacionais,

resistores, capacitores, reguladores e inversor de tenso. Os transstores foram utilizados para chavear
uma ponte-H que controlou a emisso dos LEDs. Os amplificadores operacionais foram implementados
como filtros analgicos, amplificadores de transimpedncia, amplificadores no-inversores e isoladores.
O inversor de tenso foi utilizado para que, a partir de uma nica fonte de tenso, pudesse gerar uma
alimentao simtrica utilizada nos amplificadores operacionais que necessitam deste tipo de
alimentao. Os resistores e capacitores atuaram em conjunto com os demais componentes para
polarizar ou permitir a funo desejada para aquele circuito.

3.1.3.

Microcontrolador Arduino
Neste projeto, o microcontrolador teve a funo de controlar o circuito analgico, realizar a

aquisio dos sinais provenientes dos LEDs e enviar estes dados ao microcomputador, via comunicao
Bluetooth.
O microcontrolador escolhido foi o Arduino Uno (Figura 19), que um microcontrolador
baseado no ATmega328. Este microcontrolador possui como caractersticas principais:

Alimentao de 5V;

Frequncia de clock de 16 MHz;

14 pinos digitais de entrada ou sada;

6 entradas analgicas com Conversores Analgico/Digital de 10 bits cada;

Memria flash de 32 kB, SRAM de 2 kB e EEPROM de 1 kB

Conector USB (do ingls, Universal Serial Bus) utilizado para programao do
microprocessador, comunicao serial e alimentao. (ARDUINO, 2014, Arduino Uno).

Figura 19 - Arduino Uno


Fonte: (ARDUINO, 2014, Arduino Uno)
22

As principais vantagens que podem ser observadas neste mdulo so:

A facilidade para acessar os seus perifricos que so utilizados no controle do circuito


analgico e na aquisio dos sinais deste projeto;

O conector USB, j acoplado a placa, que permite uma rpida programao atravs da sua IDE
(do ingls, 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 usurio deve escolher a IDE conforme o sistema
operacional em que est desenvolvendo a aplicao.

Programao em C/C++, grande quantidade de informao compartilhada entre seus usurios


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

Figura 20 - IDE do Arduino

3.1.4.

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

um mdulo desenvolvido para ser utilizado junto aos diversos Arduinos existentes, apesar de que nada
impede a utilizao deste por outros microcontroladores. Este mdulo Bluetooth teve como funo a
transmisso dos dados amostrados pelo Arduino Uno e processados pelo microcomputador.

Figura 21 - Mdulo Bluetooth HC-05


Fonte: HC-05. Disponvel em < http://blog.roman-mueller.ch/index.php/2013/04/24/connecting-toarduino-using-processing-and-bluetooth-hc-05-hc06/ >. Acesso em: 01 nov 2014.
23

A ligao entre o mdulo 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.
Alm disso, o pino 9 somente foi ligado ao HC-05 quando se desejou entrar no modo de configurao
do mdulo por meio dos comandos AT. No Anexo A Configurao do HC-05 encontra-se uma
lista de comandos e um cdigo exemplo para a configurao do mdulo Bluetooth.

Figura 22 - Ligao entre o Arduino Uno e o Bluetooth HC-05


Fonte: Ligao entre o Arduino e o HC-05. Disponvel em
<http://www.instructables.com/id/Modify-The-HC-05-Bluetooth-Module-Defaults-UsingA/?ALLSTEPS>. Acesso em: 01 nov 2014.

Apesar do tipo de comunicao entre o Arduino Uno e o mdulo HC-05 ser serial e os pinos
digitais 0 e 1 do Arduino j serem configurados para este tipo de comunicao, neste projeto, utilizaramse os pinos 10 e 11, porque durante o desenvolvimento foi preciso utilizar a comunicao serial via USB,
como forma de verificao e validao do cdigo desenvolvido no Arduino. Para utilizar estes pinos em
uma comunicao serial necessria uma biblioteca, denominada SoftwareSerial Library, que permita
a existncia de uma serial por software (ARDUINO, 2014, SoftwareSerial Library).
Para este projeto foram alteradas algumas configuraes deste mdulo, tais como: o nome do
mdulo, a senha de acesso para pareamento e a taxa de transmisso (Baud Rate) para 115.200 BPS (Bits
Por Segundo). Os dois primeiros parmetros de configuraes foram escolhidos apenas para aumentar
a segurana dos dados transmitidos. A taxa de transmisso escolhida foi a que possibilitasse a realizao
as amostragens dos dados pelo Arduino sem que houvesse erros ou impossibilidade de transmisso dos
dados, via Bluetooth.
A taxa de transmisso foi escolhida empiricamente durante o desenvolvimento, visto que outros
valores para esta taxa no permitiram a completa transmisso dos dados, devido ao estouro do buffer de
transmisso, ou no eram valores disponveis para o mdulo Bluetooth conectado ao microcomputador.
24

3.1.5.

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

do tamanho de um carto de crdito capaz de se conectar a um monitor via HDMI (do ingls, 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 flexvel para incentivar, nos estudantes de Ensino Mdio
e Superior, o aprendizado da programao.
O projeto evoluiu e se tornou uma Fundao: Raspberry Foundation. O sucesso de vendas desse
computador foi imediato e hoje, alm do cunho educacional, tornou-se a plataforma de desenvolvimento
preferida de estudantes universitrios e projetistas experientes, sendo utilizada em diversas aplicaes
comerciais ou no, inclusive na aplicao desenvolvida nesse trabalho (RASPBERRY PI, 2014, About
Us).

Figura 23 - Raspverry Pi
Fonte: Raspberry Pi. Disponvel em < http://pt.wikipedia.org/wiki/Raspberry_Pi>. Acesso em: 01
nov 2014.

As especificaes do modelo Raspberry Pi Model-B Rev.2, modelo utilizado nesse projeto so


as seguintes:

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


o

ARM1176JZF-S core (Famlia Clssica ARM11) 700 MHz;

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

512 MB (compartilhada com GPU);

2 Portas USB 2.0 (via hub USB integrado);

Sadas de vdeo: RCA Composta e HDMI;


25

Sadas de udio: HDMI e Conector de 3,5mm;

Armazenamento principal: SD / MMC / slot para carto SDIO;

Rede Onboard: 10/100 Ethernet (RJ45);

Outros: 8 GPIO, UART, IC, SPI com dois seletores de chip, +3,3 V, +5 V, terra; Potncia:
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 obteno dos

resultados da oximetria. Ela gerou uma pgina web, a qual serviu como interface para o usurio, a fim
de que ele pudesse controlar e visualizar o processo de oximetria. Outra caracterstica importante foi a
possibilidade de armazenamento dos dados em um banco que permitiu a elaborao de um histrico das
medies realizadas.
O mdulo Bluetooth utilizado, neste projeto, para se conectar Raspberry Pi foi o Bluetooth
USB - ES388 (Figura 24), o qual permitiu facilmente a conexo e uma boa fixao.

Figura 24 - Bluetooth USB - ES388


Fonte: Bluetooth USB - ES338. Disponvel em <http://www.fasttech.com/product/1019100-es-388bluetooth-v20-usb-dongle-adapter-black>. Acesso em: 01 nov 2014.

3.2.

Mtodos

3.2.1.

Circuito Analgico
O circuito analgico responsvel pelo controle dos LEDs, aquisio do sinal de sada do

fotodiodo e condicionamento do sinal para que este seja processado pelo microcontrolador.
Basicamente, este circuito analgico composto pelos blocos:

Circuito de alimentao;

Controle dos LEDs;

Amplificador de transimpedncia

Filtro passa baixa;

Filtro passa alta;

Amplificador de ganho no inversor;

Regulador de offset;

Buffer de sada utilizando um amplificador single-supply rail-to-rail.


26

Circuito de alimentao
Para eliminar possveis rudos e harmnicos da rede de alimentao, foi utilizada uma bateria
de 9V para alimentar o circuito analgico; o que permitiu tambm uma proteo ao usurio, visto que
no havia possibilidade de ele entrar em contato com alta tenso.
O circuito de alimentao tambm foi composto por um inversor de tenso, que permitiu a partir
de uma tenso positiva se obter uma negativa, cujo valor em mdulo o mesmo da bateria utilizada para
a alimentao. O inversor de tenso escolhido foi o CI (Circuito Integrado) TL7660 cuja faixa de
operao de 1,5 V a 10 V de entrada, convertidos em -1,5 V a -10 V na sada. Este CI possui uma
eficincia de 98% e requer apenas dois capacitores eletrolticos externos (TEXAS INSTRUMENTS,
2006, datasheet TL7660).
Por fim, utilizaram-se dois reguladores de tenso, um positivo e outro negativo, de modo que a
alimentao do circuito tornasse mais estvel, diminuindo possveis rudos que interfiram nos sinais. Os
CIs utilizados foram o KA7805 e L7905, reguladores de tenso positiva e negativa, respectivamente.
Estes CIs suportam correntes de sada de at 1 A e possuem proteo de curto circuito e de
sobreaquecimento (FAIRCHILD, 2001, datasheet KA78XX/KA78XXA) (ST, 2012, datasheet L79xxAC).
Na Figura 25, podem ser observadas as ligaes dos componentes utilizados no circuito de
alimentao. Os valores dos capacitores foram obtidos por meio das recomendaes presentes nos
datasheets dos fabricantes. H, inclusive, uma chave mecnica, que serviu apenas para controlar se o
circuito estava energizado ou no.
Outro ponto importante foi a utilizao de capacitores de cermica com valor nominal de 100
nF em cada ponto de alimentao do circuito, o que permitiu aumentar a estabilidade da alimentao,
de forma que no interferisse no condicionamento do sinal.

Figura 25 - Circuito de alimentao


27

Controle dos LEDs


Como os LEDs vermelho e infravermelho esto ligados em antiparalelo dentro do sensor e
apenas h um fotodiodo, necessrio 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 configurao, os transstores se comportaram como chaves,.
Na Tabela 2, pode ser vista a lgica de controle utilizada para controlar os LEDs, na qual 0
significa nvel lgico baixo da sada do microcontrolador, que seria zero volts, e 1 representa nvel lgico
alto correspondente a cinco volts.

Tabela 2 - Lgica de Controle dos LEDs


CtrlLed_1

CtrlLed_2

CtrlLed_3

CtrlLed_4

0
1
1

0
1
0

1
0
0

1
0
1

LED
Vermelho
Apagado
Ligado
Apagado

LED
Infravermelho
Ligado
Apagado
Apagado

Figura 26 - Circuito esquemtico de controle dos LEDs

Os transstores utilizados foram os BC558 e os BC548, que so do tipo PNP e NPN,


respectivamente. Os valores dos demais componentes utilizados foram obtidos a partir das
recomendaes do fabricante para que os transstores atuassem como chaves eletrnicas (FAIRCHILD,
2002, datasheet BC556/557/558/559/560) (FAIRCHILD, 2002, datasheet BC548/BC548A/BC548B/
BC548C).

28

Amplificador de Transimpedncia
O sinal de sada do fotodiodo uma corrente proporcional luz que incide sobre ele. Dessa
forma, necessrio transformar em tenso esta corrente. Para tal, utilizado um circuito amplificador
de transimpedncia, conforme a Figura 27.

Figura 27 - Amplificador de Transimpedncia


O capacitor, Cf, no circuito tem a funo de limitar a banda de frequncia do amplificador,
enquanto o resistor, Rf, promove o ganho e a transformao da corrente em tenso, visto que:

Vsada = Ifotodiodo R f

(18)

Onde, Ifotodiodo a corrente reversa do fotodiodo e Vsada a tenso de sada do amplificador


de transimpedncia.

Filtro Passa Baixa


Mesmo que fossem seguidos todos os procedimentos necessrios para eliminar os rudos, estes
ainda continuaram presentes no circuito. Como, em geral, os rudos so de alta frequncia, foi projetado
um filtro passa baixa com frequncia de corte tal que eliminasse ou atenuasse tais rudos e no
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 parmetros e
caractersticas so expressos pelo conjunto de equaes (19).

29

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

fc =

2 R1 R2 C1 C2
(19)
R1 R2 C1 C2
Q=
C2 (R1 + R2)
{
Onde, f a frequncia de corte selecionada e Q o fator de qualidade do filtro.
Sabe-se que a frequncia cardaca de um adulto est, normalmente, entre 60 a 100 BPM
(PORTO, 2014). Considerando um indivduo que possui no mximo uma frequncia cardaca de 100
BPM, o que corresponde a um sinal de oximetria de 1,67 Hz, a maior parte do espectro de potncia deste
sinal est contido em at 5 Hz. Isto porque, em um sinal de oximetria, 90% a 95% de seu espectro de
potncia esto concentrados a partir da frequncia cardaca do indivduo em at trs vezes esta
frequncia (HAYES, 2001).
Um filtro foi projetado com um fator de qualidade igual a 1 e frequncia de corte em 5 Hz, pois
a maioria dos sinais de oximetria possuem grande parte dos seus espectros de potncia contidos at esta
frequncia. Os valores que so mostrados na Figura 28 foram calculados, levando em conta estas
consideraes.

Filtro Passa Alta


Antes de realizar a amplificao do sinal, foi necessrio remover o nvel DC deste, pois assim o
sinal estaria centrado em torno de zero volts. Desse modo, pde-se ser melhor amplificado sem que
houvesse distoro devido ao comportamento no linear dos amplificadores, quando o sinal de sada
possui magnitude prxima aos valores da alimentao.
Foi implementado um filtro passivo passa alta de primeira ordem, que filtrou o nvel DC e as
oscilaes de baixa frequncia que ocorreram na prtica. Na Figura 29, pode ser visto o filtro
30

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


frequncia de corte, calculada por meio da equao (20), fosse em torno de 0,05 Hz, o que no alterou
o espectro do sinal de oximetria.

1
2. . .

(20)

Figura 29 - Filtro passivo passa alta

Amplificador de ganho no inversor


Aps essas etapas de filtragem, foi necessrio um estgio de amplificao 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 no inversor, onde os valores das resistncias
utilizadas foram dimensionados, baseando-se na equao (21), de modo que o ganho fosse
aproximadamente igual a 4,7.

Vsada = (1 +

R2
)V
R1 entrada

Figura 30 - Amplificador de ganho no inversor


31

(21)

Regulador de offset
Como o nvel DC foi removido pelo filtro passa alta, o sinal possua alguns valores negativos
de tenso, o que tornou impossvel a converso deste pelo conversor analgico-digital, CAD, do Arduino
Uno. Dessa forma, foi necessrio introduzir uma tenso de offset no sinal de modo que este estivesse
contido na faixa de converso do CAD. Para tanto, foi utilizado o circuito da Figura 31 que um divisor
de tenso resistivo com desacoplamento feito pelo capacitor eletroltico. Este circuito se comportou
como um filtro passa alta, cuja frequncia de corte igual a 0.03 Hz, porm sua funo principal foi
inserir um offset de 2,5V no sinal visto que este o valor central da faixa de converso do CAD que
est contido entre 0 a 5V.

Figura 31 - Regulador de offset

Buffer de sada utilizando um amplificador single-supply rail-to-rail


O ltimo estgio do circuito analgico foi um buffer, ou seguidor de tenso, 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. Alm disso, esse buffer isola todo o circuito analgico do conversor, evitando, assim, que
algum efeito de carregamento pudesse ocasionar erros durante a converso do sinal.

Figura 32 - Amplificador inversor unitrio


32

3.2.2.

Programao do Arduino
A programao do Arduino foi realizada pela IDE fornecida pelo prprio fabricante em seu site.

O diagrama em blocos da programao do Arduino pode ser visto na Figura 33.


A programao foi composta inicialmente pela configurao:

Das variveis que so utilizadas;

Das portas digitais que controlam o circuito analgico;

Da serial Bluetooth que transmite os dados e da USB que utilizada para verificao do cdigo;

Dos timers que geram as interrupes necessrias para realizar as amostragens e a


temporizao de cada processo.

Figura 33 - Diagrama em blocos da programao no Arduino

Aps esta configurao, o programa teve de esperar at receber algum dado via Bluetooth. Caso
recebesse era necessrio verificar se esse dado era vlido. Se sim, deveria iniciar o processo de oximetria
de pulso.
Esse processo comea ligando primeiramente o LED vermelho por 10 segundos antes de se
realizar a leitura. Foi necessrio 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

33

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. Aps
concluda 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 cdigo desenvolvido apresentado no Apndice A Cdigo do Arduino.

3.2.3.

Programao da Raspberry Pi

Raspbian Sistema Operacional da Raspberry Pi


A programao se iniciou a partir da instalao de um Sistema Operacional em um carto de
memria SD (do ingls, Secure Digital) com capacidade de 4 GB, utilizado pela Raspberry Pi. Esta
caracterstica um grande diferencial que ela possui em relao a outros microcontroladores, pois
permite uma programao em alto nvel.
Existem diversos tipos de Sistemas Operacionais compatveis 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 distribuio Debian otimizado para o hardware da Raspberry Pi.
As instrues sobre a instalao do Raspbian no carto SD foram encontradas no mesmo site do
fabricante, havendo variaes dos passos a serem seguidos, dependendo do Sistema Operacional (Linux,
Mac OS ou Windows) do computador em que o usurio est desenvolvendo.
Terminada a instalao, pde-se realizar o boot da Rasperry Pi a partir do carto SD que contm
a imagem do Raspbian. A alimentao do dispositivo foi feita a partir de um conector micro USB, onde
a tenso de alimentao 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 tambm que a cada etapa do desenvolvimento se fizesse
um backup da imagem do Raspbian utilizada, pois o carto SD corrompido a cada possvel falha do
boot. O modo como se realiza este backup depende do Sistema Operacional que o usurio utiliza.
O Raspbian, por ser um Sistema Operacional baseado na distribuio Debian, permite que o seu
controle seja feito por meio de linhas de comando, sendo elas as mesmas utilizadas na maioria dos
sistemas Linux.

34

Configurao Inicial do Sistema Operacional


Para a primeira configurao, conectou-se a Raspberry Pi a um monitor, via cabo HDMI, e
realizou-se o login que, pelo padro de fbrica, possui os termos pi e raspberry como usurio e
senha, respectivamente. A partir de ento, a Raspberry redirecionou a tela para uma janela de
configurao, como pode ser vista na Figura 34. As configuraes feitas referiram-se expanso da
partio raiz de modo que todo o espao do carto SD estivesse disponvel para a instalao dos
programas. A imagem do Raspbian necessita de 2 GB pelo menos. No entanto como mencionado
anteriormente, foi utilizado um carto de 4 GB, garantindo espao para o desenvolvimento de todo o
trabalho.

Figura 34 - Janela de configurao da Raspberry Pi

Outra configurao realizada foi a mudana da senha padro para o usurio pi, o que permitiu
uma maior segurana em relao ao acesso ao Sistema Operacional. Aps a realizao destas
configuraes, o sistema reiniciou para que as configuraes fossem aplicadas.

Atribuindo um IP fixo
O prximo passo foi a configurao de um IP (do ingls, Internet Protocol) esttico para a
Raspberry Pi, de modo que fosse possvel 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 dinmico e um conjunto de variveis de configurao ao dispositivo. Este conjunto de variveis,
juntamente com o IP fornecido, foram inseridos dentro de um arquivo de configurao de rede da
Raspberry Pi (MODMYPI, 2010).

35

Iniciando uma comunicao SSH


A partir de um IP fixo atribudo a Raspberry Pi, o acesso pde ser feito por meio de uma
comunicao SSH (Secure Shell), que uma ferramenta de acesso remoto, com grande nfase em
segurana, onde os dados transmitidos entre dois dispositivos conectados por meio desta comunicao
so automaticamente criptografados e descriptografados.
A comunicao foi realizada por meio do software Putty (PUTTY, 2014). Na Figura 35, podese observar uma imagem da janela do Putty, onde foi necessrio colocar o IP fixo da Raspberry Pi no
campo Host Name e o nmero 22 no campo Port, cujo significado a Porta de Comunicao SSH
utilizada para esta comunicao.

Figura 35 - Software de comunicao SSH (Putty)

Configurao do Bluetooth
Para utilizar a comunicao Bluetooth necessrio instalar alguns drivers e ajustar algumas
variveis de configurao (DAWN ROBOTICS, 2013) (MYPIANDME, 2013). Durante esta
configurao, houve um problema na comunicao devido verso do kernel utilizada pelo Sistema
Operacional. Um downgrade dessa verso possibilitou o correto funcionamento da comunicao
(RASPEBERRY PI, 2014, Connecting to arduino bluetooth module) (CHAN, 2014).

36

Programao em Python
A programao da Raspberry Pi foi composta por um programa em Python que inicializou a
comunicao Bluetooth, executou o processamento do sinal e o armazenamento dos resultados em um
banco de dados.
Para a programao em Python, foi necessrio instalar um banco de dados na Raspberry Pi. O
banco utilizado neste projeto foi o sqlite3. A instalao do Python e do banco de dados sqlite3, pode ser
realizada a partir das seguintes linhas de comando.
~$ sudo apt-get update
~$ sudo apt-get install python
~$ Sudo apt-get install sqlite3
Para gerenciar e visualizar o banco de dados, foi instalada a interface grfica sqlitebrowser
(SQLITEBROWSER, 2014). Na Figura 36, pode ser observada esta interface grfica.

Figura 36 - Interface grfica para gerenciamento do banco de dados sqlite3

Foi criado um banco de dados contendo 3 tabelas que so:

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

historyResult Guarda todos os resultados da saturao pulstil de oxignio (SpO2) e


frequncia cardaca (BPM);

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


37

Esta forma de separao 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 importao das bibliotecas necessrias e pela inicializao das variveis,
posteriormente, iniciou-se a conexo 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,
no for recebida, o programa ficou em loop. Aps o completo recebimento dos dados, estes sinais foram
filtrados por um filtro de mdia mvel para remover os rudos de 60 Hz.

Figura 37 - Diagrama em blocos da programao em Python na Raspberry Pi

O filtro de mdia mvel se inicia realizando a mdia aritmtica das M primeiras amostras. Em
seguida a primeira amostra descartada e inserida a prxima para o clculo da mdia novamente. Esse
processo se repete at que seja realizada a mdia de todo o sinal.
Este tipo de filtro atenua uma determinada frequncia dada pela equao (22) e todos os
mltiplos inteiros desta frequncia.

fc =

(22)

Onde,
a primeira frequncia atenuada;
a frequncia de amostragem;
M quantidade de amostras que sero utilizadas para a mdia.
38

Sabendo que o Arduino realiza a amostragem dos sinais a uma taxa igual a 250 Hz e desejando
que a primeira frequncia atenuada seja em 10 Hz, pode-se concluir que o comprimento M do filtro deve
ser igual a 25 amostras. Logo, o rudo de 60 Hz foi atenuado, pois este mltiplo inteiro dessa
frequncia.
Aps executada a filtragem, o programa realizou um algoritmo de busca e localizao dos picos
e dos vales dos sinais, para que na prxima etapa, fosse possvel o clculo da oximetria de pulso e da
frequncia cardaca. O algoritmo de busca dos picos e dos vales estabeleceu uma comparao entre n
amostras. Esta comparao verificou qual era o maior e o menor valor dentro desta quantidade de
amostras, sendo que n era um nmero 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
mdia aritmtica entre os picos e entre os vales de cada sinal.
A partir dos picos e dos vales obtidos foi possvel calcular a relao R dada pela equao (13),
e, posteriormente, o clculo da oximetria realizado a partir da curva de calibrao da equao (14).
A frequncia cardaca foi calculada a partir da mdia aritmtica da frequncia de cada sinal,
visto que o algoritmo de busca dos picos e dos vales salvou as posies onde estes extremos ocorreram.
Desse modo, pde-se determinar o perodo entre cada pico, uma vez que a frequncia de amostragem
foi fixada em 250 Hz pelo Arduino Uno.
O programa termina aps a insero dos dados e resultados no banco de dados, criado pelo
sqlitebrowser. No entanto, no 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 frequncia igual a

250
10

= 25 Hz. Mesmo

ocorrendo esta reduo da taxa de amostragem, ela ainda atendeu ao critrio de Nyquist, visto que o
espectro do sinal no superior a 5 Hz.

Programao web
A aplicao web deste projeto foi desenvolvida por meio da utilizao da plataforma Node.js e
do framework Express.
O Node.js uma plataforma que utiliza o mecanismo V8 JavaScript do Google Chrome para
construir aplicaes de rede rpidas e escalveis. O Node.js um modelo orientado a eventos, focado
em I/O (do ingls, Input/Output) no bloqueante, de modo que suas aplicaes sejam leves e eficientes,

39

o que perfeito para aplicaes em tempo real com fluxo de dados em grande quantidade e rapidez por
meio de dispositivos distribudos (MOREIRA, 2013, O que Node.Js?).
O Express um framework para o Node.js, sendo que esse minimalista, flexvel e possui um
robusto conjunto de recursos para desenvolver aplicaes web, sistema de roteamento, executvel para
gerao de aplicaes, dentre outras funes (MOREIRA, 2013, Primeiros passos com Express em
Node.js).
necessrio que a instalao do Node.js seja para a arquitetura da Raspberry Pi (NODEARM,
2014). Terminada a instalao do Node.js pde-se iniciar a instalao do framework Express
(EXPRESS, 2014).
O mtodo de instalao do framework Express utiliza o comando npm (do ingls, node
package modules), que um gerenciador de pacotes do Node.js. Este comando foi utilizado para instalar
mais dois pacotes, que so o Sqlite3 e o Nodemon. O pacote Sqlite3 responsvel por permitir a
manipulao 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 mudana em algum cdigo que compe
a aplicao web e, quando h deteco de alguma alterao, o pacote reinicia automaticamente a
aplicao web que est rodando sobre o Node.js (NPM, 2014) (NODEMON, 2014).
A instalao 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 aplicao web, quando for necessrio inserir ou
buscar os dados e resultados armazenados.
Na pasta public/images foram colocadas as imagens que compem a aplicao web, tal como
o logotipo desenvolvido. Na pasta public/javascripts encontram-se os programas em javascripts
responsveis por gerar os grficos, a dinmica de algumas pginas e o layout destas. Na pasta
public/stylesheets foram inseridos os arquivos do tipo css, responsveis pela formatao,
estruturao e pelo layout das pginas.
O contedo de cada pgina 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 descrio do
contedo de uma pgina. O arquivo index.jade foi responsvel pelo contedo da pgina inicial, o
oximeter.jade pelo contedo da pgina que mostra os resultados das medidas de oximetria e permite
a requisio de uma nova medida, e o executingOximeterPy.jade a pgina redirecionada quando se
executa o programa em Python localizado na pasta raiz.

40

O arquivo index.js localizado na pasta routes foi responsvel por gerenciar o roteamento
das pginas, enviar ou receber variveis 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 aplicao web, onde se percebem as
funcionalidades que foram descritas sobre o arquivo index.js e como as pginas foram interligadas
por meio da atuao deste arquivo.

41

Figura 38 - Diagrama em blocos da aplicao web

42

4. Resultados e Discusso
Neste captulo so apresentados os resultados obtidos no projeto referente ao circuito analgico,
ao processamento digital do sinal (programao em Python) e aplicao web. Sero feitas algumas
anlises e discusses sobre cada resultado que foi obtido.

4.1.

Circuito analgico

4.1.1.

Filtros analgicos
A validao dos filtros implementados no circuito tem a finalidade de verificar se as

caractersticas postuladas em teoria, confirmam-se na prtica. Assim foram obtidas as respostas em


frequncia tericas destes filtros, no software de simulao de circuitos eltricos e eletrnicos LTSpice,
e, posteriormente, os resultados foram comparados com dados experimentais realizados em bancada.
Os dados experimentais foram obtidos a partir da comparao entre o sinal de sada e o de
entrada inserido nos circuitos dos filtros. O sinal de teste inserido uma onda senoidal com frequncia
varivel e amplitude fixa em 1 V pico a pico.
Tanto o sinal de entrada quanto o de sada foram analisados por meio da utilizao do
osciloscpio DSO-X 2002A da Agilent Technologies, enquanto o sinal senoidal foi gerado a partir do
gerador de funes MFG-4221 da Minipa.

Filtro passa baixa


Os dados experimentais obtidos para o filtro passa baixa so mostrados na Tabela 3, enquanto,
na Figura 39, pode ser observado o sinal de entrada e de sada para uma frequncia de 5 Hz, estabelecida
como a de corte para o projeto do filtro passa baixa ativo.
Tabela 3 - Dados experimentais do filtro passa baixa
Frequncia (Hz)
0,50
1,00
2,00
3,00
4,00
5,00
6,00
7,00
8,00
9,00
10,00
1

Entrada (Vpp1)
1,07
1,07
1,07
1,07
1,07
1,07
1,07
1,07
1,07
1,07
1,07

Sada (Vpp)
1,07
1,09
1,11
1,17
1,23
1,21
1,09
0,90
0,72
0,60
0,48

Tenso em volts de pico a pico do sinal

43

Ganho (dB)
0,00
0,16
0,32
0,78
1,21
1,07
0,16
-1,50
-3,44
-5,02
-6,96

Fase ()
-0,30
-6,70
-16,90
-31,10
-46,09
-68,00
-87,20
-104,60
-118,40
-127,80
-134,80

Figura 39 - Sinais de entrada e sada do filtro passa baixa para uma frequncia de 5 Hz

Por meio da utilizao do Matlab, esses dados experimentais foram comparados com o terico
fornecido pelo software de simulao LTSpice. Na Figura 40, pode-se observar a comparao entre estes
dados.

Figura 40 - Comparao entre os dados tericos e experimentais para o filtro passa baixa
44

Nota-se, pelo grfico, que h pequenas diferenas entre os dados tericos e experimentais. As
discrepncias existem devido tolerncia de fabricao dos componentes.

Filtro passa alta


Analogamente ao que foi apresentado para o filtro passa baixa, os dados experimentais do filtro
passa alta so apresentados na Tabela 4, enquanto, na Figura 41 podem-se observar os sinais de entrada
e sada do filtro passa alta para uma frequncia de 0,07 Hz.
Tabela 4 - Dados experimentais do filtro passa alta
Frequncia (Hz)
0,02
0,05
0,07
0,09
0,12
0,20
0,50
1,00
10,00

Entrada (Vpp2)
1,07
1,07
1,07
1,07
1,07
1,07
1,07
1,07
1,07

Sada (Vpp)
0,42
0,70
0,82
0,90
0,96
1,03
1,07
1,07
1,07

Ganho (dB)
-8,12
-3,69
-2,31
-1,50
-0,94
-0,33
0,00
0,00
0,00

Fase ()
72,10
54,80
44,80
35,87
32,60
20,19
8,70
4,33
1,55

Figura 41 - Sinais de entrada e sada do filtro passa alta para uma frequncia de 0,07 Hz

Tenso em volts de pico a pico do sinal

45

Figura 42 - Comparao entre os dados tericos e experimentais para o filtro passa alta

Novamente, percebe-se que h uma grande correlao entre os dados. As diferenas entre os
valores tericos e experimentais se devem ao fato da tolerncia de fabricao dos componentes.

4.1.2.

Anlise do sinal de oximetria em cada estgio do circuito


A validao dos outros estgios de condicionamento do sinal dentro do circuito analgico foi

realizada a partir da anlise do sinal de sada em cada estgio 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
indivduo.

Amplificador de transimpedncia
O amplificador de transimpedncia responsvel por converter a corrente do fotodiodo, que
proporcional luz recebida por este, em tenso. Na Figura 43, pode ser observado que o sinal de sada
deste estgio muito ruidoso.

46

Figura 43 - Sada do amplificador de transimpedncia

Filtro passa baixa


Devido grande magnitude rudo existente no sinal de sada do estgio de transimpedncia,
justificou-se o uso do filtro passa baixa. Na Figura 44, pode ser observado o resultado da filtragem do
sinal.

Figura 44 - Sada do filtro passa baixa

47

Percebe-se a grande reduo do rudo no sinal, sendo possvel reconhecer o padro presente em
sinais de oximetria. Repara-se que a amplitude do sinal ainda muito baixa, sendo necessrio realizar
uma amplificao deste para uma melhor preciso dos resultados.

Filtro passa alta


Antes de se realizar a amplificao do sinal, este submetido a um filtro passa alta para remoo
do nvel DC e das flutuaes de baixa frequncia que acontecem na prtica em um sinal de oximetria.
Pela Figura 45, nota-se que o sinal apresenta o mesmo padro que na sada do filtro passa baixa, porm
o nvel DC existente neste praticamente nulo.

Figura 45 - Sada do filtro passa alta

Amplificador no inversor
Aps a remoo do nvel DC, pde-se realizar a amplificao do sinal para obter melhor
resoluo durante a converso analgica-digital. Esta amplificao pode ser vista na Figura 46. Na sada
deste estgio, o sinal mantm o mesmo padro, contudo, percebe-se a amplificao de todo o sinal e
uma alterao do nvel DC.
A partir de uma anlise das tenses de pico a pico dos sinais de sada e de entrada do
amplificador no inversor, calculou-se que o ganho prtico deste amplificador foi:

48

( )
760 (820)
=
= 4,46
( ) 177 (177)

(23)

Considerando que o ganho terico 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
presena da tolerncia dos componentes utilizados na prtica.

Figura 46 - Sada do amplificador no inversor

Ajuste de offset
O sinal de sada do amplificador no inversor possui valores negativos de tenso, logo no
possvel a converso analgico-digital do sinal pelo CAD do Arduino. Portanto, se faz necessrio um
ajuste do nvel DC do sinal. Na Figura 47, observado o sinal resultante do circuito de ajuste de offset
implementado, nota-se o mesmo padro do sinal, porm com um nvel DC por volta de 2,52 V.
Sabendo que o nvel DC dimensionado para a sada deste circuito foi de 2,5 V, que corresponde
metade da faixa de converso suportada pelo Arduino, conclui-se que h uma grande correlao entre
os valores terico e experimental.

49

Figura 47 - Sada do circuito de ajuste do offset

Apesar do condicionamento analgico do sinal aplicado, ainda h rudos presentes no sinal de


oximetria, como pode ser visto pelo espectro de potncia deste sinal (Figura 48). Percebe-se que h um
componente presente neste sinal com frequncia em 60 Hz.

Figura 48 - Espectro de potncia do sinal de sada do circuito analgico


A existncia deste componente esperada, visto que diversos aparelhos emitem radiao (rudo)
na mesma frequncia da rede eltrica. Dessa forma, foi necessrio o uso de um filtro para remover este
50

componente que est interferindo no sinal. Para esta finalidade utilizou-se um filtro digital de mdia
mvel, o qual foi implementado no processamento digital do sinal contido na programao em Python.

4.2.

Transmisso Bluetooth
Para a validao da transmisso Bluetooth foi programado que o Arduino Uno enviasse uma

forma de onda padro por meio da serial do Bluetooth e, quando a Raspberry Pi recebeu esses dados,
eles foram comparados com o mesmo padro gravado no Arduino. Dessa forma, a Raspberry Pi soube
qual a ordem dos dados que deveria receber.
O sinal padro em questo foi uma onda dente de serra, com valores inteiros, que iam de 0 at
1023. Este intervalo foi escolhido, porque durante a converso analgica-digital os possveis valores
convertidos estavam contidos justamente nesta gama de valores. O intervalo entre uma transmisso de
um dado e o seguinte foi definido em 4 ms, que corresponde a frequncia de amostragem escolhida para
o projeto.
Este teste foi realizado em trs situaes diferentes: na primeira, a distncia entre o Arduino
Uno e a Raspberry Pi foi de 1,5 m; na segunda, a distncia foi de 6 m e na ltima a distncia foi de 4 m,
porm havia uma parede entre eles nesta ltima situao.
Na Tabela 5, podem ser visualizados os resultados do teste da transmisso. Nota-se que nos trs
casos, no houve erros na transmisso dos dados.
Tabela 5 - Resultados da transmisso Bluetooth
Teste
1
2
3

Quantidade de
Dados Enviados
1000000
1000000
1000000

Quantidade de Dados
Recebidos Corretos
1000000
1000000
1000000

Quantidade de Dados
Recebidos Errados
0
0
0

Foi realizado um teste para verificar a distncia mxima em que era possvel o pareamento entre
os mdulos Bluetooth. Descobriu-se que esta podia chegar a uma distncia mxima de 12 m sem
obstculos entre os mdulos ou a 7 m quando havia algumas paredes entre eles.

4.3.

Processamentos digitais do sinal (programao em Python)


Os principais processamentos digitais do sinal aplicados envolveram a filtragem de mdia mvel

e a localizao dos picos e vales. Estes processos estavam contidos dentro do programa em Python que
inicializou a comunicao 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,
51

so apresentados os sinais vermelho e infravermelho no filtrados com seus respectivos vales e picos
encontrados pelo algoritmo, enquanto, na Figura 50, podem ser visualizados os mesmos resultados para
esses sinais aps o filtro de mdia mvel ser aplicado.
Nota-se que os primeiros e ltimos picos e vales de cada sinal so desconsiderados, visto que
no h a necessidade de se utilizar todos os extremos encontrado (pois o sinal de oximetria no apresenta
uma variao repentina) para o clculo da oximetria e tambm pela possibilidade do algoritmo
interpretar um falso extremo no comeo ou no fim das sequncias dos sinais.

Figura 49 - Sinais vermelho e infravermelho no filtrados junto aos seus respectivos picos e vales

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

4.4.

Aplicao web
A visualizao e o controle do processo de oximetria deste projeto foram feitos pela aplicao

web, gerada pela Raspberry Pi por meio do Node.js e do framework Express. Esta aplicao web
permitiu que o usurio visualizasse trs pginas diferentes:

A pgina inicial, que contm informaes sobre o projeto;

A pgina que permite verificar a oximetria e requisitar uma nova medio desta;

A pgina em que o usurio fica aguardando a realizao da oximetria.


A pgina inicial pode ser observada na Figura 51. Foi composta apenas por uma mensagem de

boas-vindas, informaes sobre o aplicativo, um boto que permite redirecionar o usurio para a
pgina de visualizao da oximetria e o logotipo que foi criado para o projeto.

Figura 51 - Pgina inicial da aplicao web

Ao clicar no boto Check your oximetry!, o usurio abre uma nova pgina na qual visualiza
os dados e os resultados referentes ltima medio de oximetria realizada (Figura 52). Esta pgina
composta por trs setores principais. No primeiro, conforme na Figura 53, observa-se o valor numrico
da oximetria e da frequncia cardaca, o horrio e o dia em que foi realizada a medio referente aos
valores mostrados, um boto em que o usurio pode executar uma nova oximetria (New oximetry!) e
outro que permite retornar pgina inicial (Home page).
O segundo setor (Figura 54) composto por dois templates de grficos (HIGHCHARTS, 2014).
O primeiro corresponde ao sinal de oximetria proveniente do LED vermelho, enquanto o segundo
53

referente ao LED infravermelho. Ambos os grficos refletem os sinais de oximetria correspondentes aos
valores numricos apresentados no primeiro setor desta pgina. Estes grficos permitem que o usurio,
utilizando o cursor do mouse, visualize os pontos que foram coletados durante a oximetria.
Por fim, na Figura 55, mostrado o ltimo setor que compe esta pgina. Neste, possvel
observar o histrico das medies da oximetria e da frequncia cardaca por meio de dois grficos
gerados pelo mesmo template anterior. Estes grficos permitem selecionar e pressionar os pontos que
os geram. Caso isso acontea, a pgina ser atualizada juntamente com os dois primeiros setores.
A ltima pgina que compe o aplicativo web mostrada somente quando o usurio requer uma
nova oximetria. Esta pgina mantida por aproximadamente 50 segundos, que corresponde ao tempo
de aquisio, transmisso via Bluetooth, processamento digital do sinal e armazenamento dos dados e
resultados no banco de dados. Passado este tempo, o usurio redirecionado automaticamente para a
pgina de visualizao da oximetria.

54

Figura 52 - Pgina que permite visualizar e requisitar uma nova medio de oximetria

55

Figura 53 - Visualizao dos resultados numricos da oximetria e da frequncia cardaca

Figura 54 - Visualizao do sinal de oximetria proveniente dos LEDs vermelho e infravermelho

56

Figura 55 - Visualizao do histrico de oximetria e da frequncia cardaca

Figura 56 - Pgina de espera enquanto a oximetria est sendo realizada

57

O aplicativo desenvolvido pode ser acessado por dispositivos mveis, 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 visualizao no dispositivo.

Figura 57 - Viso da aplicao web atravs de um dispositivo mvel

4.5.

Aferio da oximetria na presena de fontes de erros


Os resultados foram obtidos com usurio em repouso, respirando normalmente, com o sensor

conectado de forma correta ao seu dedo, sem esmaltes na unha e com iluminao ambiente baixa. Esse
conjunto de situaes minimizam as fontes de erro para a realizao da oximetria.

58

Para verificar o comportamento em situaes desfavorveis da oximetria, foram realizados


testes com diferentes posicionamentos e movimentaes 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 anlise da oximetria em diferentes
posicionamentos e movimentaes do dedo. O teste 1 mostra a interferncia pela presso do dedo ao
clip do sensor; o teste 2, pela flexo do dedo; o teste 3, por movimentos ondulatrios da mo; e o teste
4, pela combinao destes trs primeiros (ANDRADE, 2009).

Figura 58 - Conjunto de testes com diferentes posicionamentos e movimentaes 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 pulsao destes testes esto disponibilizados na Tabela
6.
Tabela 6 - Resultados da oximetria e da pulsao cardaca para os testes
Teste
1
2
3
4

SpO2 (%)
70
98
96
105

Frequncia Cardaca (BPM)


79
77
66
52

Nota-se pelos grficos que o nico sinal que no apresentou grandes distores ocorreu durante
o teste 2, enquanto os piores resultados aconteceram nos testes 3 e 4. Os ltimos testes possuem uma
grande flutuao dos seus sinais, visto que a movimentao do dedo gera grande rudo durante a medio
da oximetria. Portanto, este resultado demonstra ser essencial que o usurio esteja em repouso.
59

O sinal vermelho do teste 1 apresenta uma flutuao 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 mdia mvel mostraram bons
resultados.

Figura 59 - Sinal vermelho e infravermelho resultante do teste 1

Figura 60 - Sinal vermelho e infravermelho resultante do teste 2

60

Figura 61 - Sinal vermelho e infravermelho resultante do teste 3

Figura 62 - Sinal vermelho e infravermelho resultante do teste 4

O prximo teste consiste na medio da oximetria quando h esmaltes de cores opacas nas
unhas. Os sinais resultantes da utilizao do esmalte de cor azul, preta e vermelha so apresentados nas
Figuras 63, 64 e 65, respectivamente. Na Tabela 7, podem ser visualizados os resultados da oximetria e
da pulsao cardaca para cada cor de esmalte.

61

Tabela 7 - Resultados da oximetria e da pulsao cardaca quando h esmaltes na unha


Cor do esmalte
Azul
Preta
Vermelha

SpO2 (%)
106
107
70

Frequncia Cardaca (BPM)


75
76
71

Os sinais de oximetria sofreram distores 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
distoro gera resultados de oximetria comprometidos, que podem ser observados nos valores de SpO2
mostrados na Tabela 7. Nota-se, assim, que a frequncia cardaca est entre os valores esperados, o que
pode indicar que a cor do esmalte altera o sinal de oximetria em relao amplitude, mas a frequncia
no sofre grande efeito.
Enfim, o que se pode afirmar a partir destes testes, que a presena de esmaltes de cores opacas
na unha deve ser evitada, pois altera o espectro do sinal de oximetria, resultando consequentemente em
falsos valores de oxigenao perifrica.

Figura 63 - Sinal vermelho e infravermelho resultante da utilizao do esmalte azul

62

Figura 64 - Sinal vermelho e infravermelho resultante da utilizao do esmalte preto

Figura 65 - Sinal vermelho e infravermelho resultante da utilizao do esmalte vermelho

63

64

5. Concluso
Ao final deste projeto, foi possvel obter conhecimentos acerca de vrios itens: a importncia e
o modo de aferio da oxigenao perifrica do sangue e da pulsao cardaca por meio da oximetria de
pulso; a utilizao de dispositivos pticos-eletrnicos (LEDs e fotodiodo); os circuitos analgicos para
o condicionamento do sinal (amplificador de transimpedncia, filtros passa baixa e passa alta,
amplificadores de ganho, ajuste de offset, isoladores ou buffers, ponte-h, inversor e reguladores de
tenso); a programao do microcontrolador Arduino Uno; a aplicao do Teorema da Amostragem
para determinar a taxa de aquisio sem que resulte em aliasing do sinal; a transmisso Bluetooth
utilizando o mdulo HC-05 e o dongle ES338; a configurao do microcomputador Raspberry Pi e a
instalao de pacotes, drivers e programas para desenvolvimento neste microcomputador; a
comunicao SSH para acessar a Raspberry Pi e assim realizar sua programao remotamente; o
desenvolvimento de programas utilizando a linguagem de programao Python que permitiu a
comunicao Bluetooth, o processamento digital do sinal e o armazenamento dos dados e resultados em
um banco de dados; a gerao e a manipulao de um banco de dados do tipo sqlite; e a programao
web utilizando o Node.js e o framework Express, que permitem em conjunto a elaborao de um
aplicativo web;
O foco do projeto foi propiciar ao usurio a comodidade de iniciar a medio de oximetria e
visualizar seu resultado atravs de um aplicativo web, sem a necessidade da utilizao de um display
especfico para esta aplicao. Como se trata de uma aplicao 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 necessrio para este projeto foi
a utilizao de um roteador que permitiu conectar o dispositivo escolhido para visualizao e controle
da oximetria com a aplicao web que era executada na Raspberry Pi.
A utilizao de uma rede que permite a ligao de qualquer dispositivo com a aplicao web
possibilita o acionamento do oxmetro ligado a um usurio por uma outra pessoa dentro da rede interna.
Isso no impede que, ao mesmo tempo, o usurio ou outro indivduo acesse seus dados e resultados de
oximetria.
O aplicativo web que se conecta ao oxmetro tambm pode ser acessado atravs de uma rede
externa. Para tanto, necessrio que se conhea o IP externo utilizado pela Raspberry Pi, ou, ento, que
se realize um redirecionamento das portas do roteador e se atribua um domnio DNS (do ingls, Domain
Name System) a este.
A possibilidade do controle e da visualizao da oximetria de modo remoto permite que este
projeto seja implementado em hospitais, onde enfermeiros so redirecionados, em intervalos de tempo
regulares, para coletar dados de oximetria de alguns pacientes e, posteriormente, anotar os resultados
65

em uma ficha de acompanhamento do paciente, que guardada frente de sua cama. Com este sistema,
necessrio apenas um funcionrio para realizar, remotamente, a aferio da oximetria de todos os
pacientes. Os dados e os resultados so armazenados em um banco de dados digital que pode ser
arquivado ao final do acompanhamento do paciente. A utilizao dos bancos de dados uma forma til
para casos onde se deve verificar se as medies foram realizadas nos horrios corretos ou para futuras
anlises de pesquisa ou de estatstica.
As restries encontradas neste projeto relacionam-se ao tempo de aquisio prolongado,
porque quando se ligou um LED foi necessrio esperar um certo tempo at que o sinal de oximetria se
estabelecesse em torno de um valor. Uma possvel soluo, ento, seria o chaveamento dos LEDs de
forma alternada e, posteriormente, a utilizao de um circuito de Sample&Hold para separar os sinais,
visto que h apenas um fotodiodo para ambos os LEDs. Para que a soluo anterior seja vivel,
necessria a escolha de um sensor que possua uma resposta rpida o suficiente para acompanhar o
chaveamento dos LEDs. Sobre o sensor, tambm possvel fazer uma anlise do conjunto de LEDs
utilizados, da isolao de luz ambiente e da imobilizao do dedo durante a oximetria de modo a
melhorar a qualidade do sinal. A distncia e a taxa de transmisso do Bluetooth so outros limitantes do
projeto, sendo que uma alternativa para esta transmisso seria a utilizao de outros radiotransmissores.
Por fim, o processamento da Raspberry Pi para a gerao da aplicao web se mostrou limitado, visto
que durante a gerao da pgina de visualizao 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 podero 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
capacitncias parasitas e rudos que so normalmente encontrados em protoboards; a utilizao de
chaveamento alternado dos LEDs para diminuir o tempo de aquisio dos dados; a troca do
microcontrolador Arduino Uno por um ARM que permite um maior e mais rpido processamento
computacional; a mudana da comunicao Bluetooth por outra com maior alcance e taxa de
transmisso; e a utilizao de outro sistema embarcado anlogo a Raspberry Pi, tal como a BeagleBone
ou a Odroid.
Estes possveis melhoramentos no s possibilitaro uma melhor anlise da oximetria de pulso,
como tambm permitiro que outros sistemas de medies de sinais vitais sejam acoplados a este
projeto, de forma a gerar uma central de monitoramento de diversos sinais utilizando uma aplicao
web.

66

Referncias Bibliogrficas
ANDRADE, L. A. K., Sistema de Medio para Oximetria de Pulso. Curitiba, 2009.
ARDUINO, Arduino Uno. Arduino. 2014. Disponvel em:
<http://arduino.cc/en/Main/ArduinoBoardUno>. Acesso em: 01 nov 2014.
ARDUINO, Download the Arduino Software. Arduino. 2014. Disponvel em:
<http://arduino.cc/en/main/software>. Acesso em: 01 nov 2014.
ARDUINO, SoftwareSerial Library. Arduino. 2014. Disponvel 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. Disponvel em: <http://tech.enekochan.com/en/2014/03/08/upgradedowngrade-to-a-specificfirmware-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. Disponvel em: <http://blog.dawnrobotics.co.uk/2013/11/talking-to-a-bluetooth-serial-modulewith-a-raspberry-pi/>. Acesso em: 01 nov 2014.
EXPRESS, Installing. 2014. Disponvel em: <http://expressjs.com/starter/installing.html>. Acesso em:
01 nov 14.
FAIRCHILD, datasheet KA78XX/KA78XXA. Electronic Components Datasheet Search. 2001.
Disponvel 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. Disponvel em:
<http://pdf.datasheetcatalog.com/datasheet/fairchild/BC558.pdf>. Acesso em: 01 nov 2014.
FAIRCHILD, datasheet BC548/BC548A/BC548B/BC548C. Datasheet Catalog. 2002. Disponvel 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 Analgico para um Oxmetro no
Invasivo. So Carlos, 2012.
LIMA, D. W. C., Oxmetro de Pulso com Transmisso 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.
Disponvel em: <https://www.modmypi.com/blog/tutorial-how-to-give-your-raspberry-pi-a-static-ipaddress.>. Acesso em: 01 nov 2014.
MOREIRA, R. H., O que Node.js?.2013. Disponvel 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. Disponvel em:
<http://nodebr.com/o-que-e-node-js/>. Acesso em: 01 nov 14.
MOYLE, J. T. B., Pulse Oximetry. London: BMJ, 1994.
67

MYPIANDME, Bluetooth Serial Communications with HC-05. MyRaspberryAndMe. 2013.


Disponvel em http://myraspberryandme.wordpress.com/2013/11/20/bluetooth-serial-communicationwith-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. Disponvel em: <http://nodearm.herokuapp.com/>. Acesso em: 01 nov 14.
NODEMON, nodemon reload automatically. 2014. Disponvel em: <http://nodemon.io/>. Acesso em:
01 nov 14.
NPM, sqlite3. 2014. Disponvel em: <https://www.npmjs.org/package/sqlite3>. Acesso em: 01 nov 14.
PHILIPS, Understanding Pulse Oximetry SpO2 Concepts. Disponvel 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. Disponvel em: <http://www.putty.org/>. Acesso em: 01 nov
2014.
RASPBERRY PI, About Us. Raspberry Pi. 2014. Disponvel em: <http://www.raspberrypi.org/about/
>. Acesso em: 01 nov 2014.
RASPBERRY PI, Connecting to arduino bluetooth module. Raspberry Pi. 2014. Disponvel em:
<http://www.raspberrypi.org/forums/viewtopic.php?f=28&t=81934>. Acesso em: 01 nov 2014.
RASPBERRY PI, Downloads. Raspberry Pi. 2014. Disponvel em:
<http://www.raspberrypi.org/downloads/>. Acesso em: 01 nov 2014.
RASPBERRY PI, FAQs: What Are The Power Requirements?. Raspberry Pi. 2014. Disponvel em:
<http://www.raspberrypi.org/help/faqs/#powerReqs>. Acesso em: 01 nov 2014.
RASPBERRY PI, Raspberry Pi Models And Revisions. Raspberry Pi. 2014. Disponvel em:
<http://www.raspberrypi.org/documentation/hardware/raspberrypi/models/ >. Acesso em: 01 nov
2014.
SANTINI, T. R. S., Projeto de um Oxmetro de Pulso com Comunicao USB. So Carlos, 2010.
SQLITEBROWSER, DB Browser for Sqlite. 2014. Disponvel em: <http://sqlitebrowser.org/>.
Acesso em: 01 nov 14.
ST, datasheet L79xxAC. Farnell. 2012. Disponvel 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.
Disponvel 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. Disponvel em:
<http://www.robots.ox.ac.uk/~neil/teaching/lectures/med_elec/lecture6.pdf >.
WEBSTER, J. G., Design of Pulse Oximeters. Wisconsin-Madison, 1997.

68

Apndices
Apndice A Cdigo 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);
int
int
int
int
int
int
int
int
int

readAD = 0;
ctrlLed2 = 6;
ctrlLed3 = 7;
ctrlLed4 = 8;
ctrlLed5 = 9;
ledRed = 5;
ledReadRed= 4;
ledIRed = 3;
ledReadIRed = 2;

// RX | TX
//
//
//
//
//

O canal de entrada dos sinais Vermelho e Infravermelho ser o ADC 0


Controle do LED - Fio Verde
Controle do LED - Fio Branco
Controle do LED - Fio Amarelo
Controle do LED - Fio Vermelho

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
void
void
void
void

redOn();
iredOn();
allOff();
readRedLed();
readlRedLed();

void setup()
{
pinMode(ctrlLed2,
pinMode(ctrlLed3,
pinMode(ctrlLed4,
pinMode(ctrlLed5,

// Liga o LED Vermelho


// Liga o LED Infravermelho
// Desliga todos os LEDs

OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);

pinMode(ledRed,OUTPUT);
pinMode(ledReadRed,OUTPUT);
pinMode(ledIRed,OUTPUT);
pinMode(ledReadIRed,OUTPUT);
state = 0;
allOff();

// estado inicial

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);
Timer1.attachInterrupt(switchState);
Serial.println("newOximeter2");

// Overflow do Timer1
// 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

69

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;
}
}

70

Apndice B Programao em Python


#-*- coding: utf-8 -*#! /usr/bin/python
import
import
import
import
import

serial
sqlite3
time
numpy as np
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):

71

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 = []

72

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((?), (?), (?))",
conn.commit()
conn.close()
# Salva os resultados no banco de dados
log_dB()
print("1")

Apndice C Validao da transmisso 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();

73

record_data)

Timer1.initialize(4000);
Timer1.attachInterrupt(switchState);

// Timer1's overflow
// 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;
}
}

Apndice D Validao da transmisso 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!")

Apndice E Programao web index.js


var
var
var
var
var
var
var
var
var
var
var
var
var
var

express = require('express');
router = express.Router();
exec = require('child_process').exec;
child;
labels;
labelsTime;
seriesSpo2;
seriesBpm;
seriesRed;
seriesIRed;
showSpo2;
showBpm;
showTime;
tickInterval;

74

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
var
var
var
var
var

sqlite3 = require('sqlite3').verbose();
db = new sqlite3.Database('public/datas/oximeterlog.db');
section = req.query.section;
index = (section * 123) + 1;
upperIndex = index+123;
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;

75

Apndice F Programao web oximeter.js


/* Wait time function */
var waitTime = function() {
setTimeout(function() {
location.href='/oximeter?section=-1';
}, 50000);
}

Apndice G Programao 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")

Apndice H Programao 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: {

76

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({

77

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")

Apndice I Programao 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();

Apndice J Programao 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.

Apndice K Programao 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.

78

Anexo
Anexo A Configurao 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-UsingA/?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 Instalao 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. Its 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 didnt 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. Im 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;

79

# 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 shells 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 Instalao 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 Instalao 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.

80

You might also like