Universidade Federal de Juiz de Fora Instituto de Ciências Exatas

Propaganda
Universidade Federal de Juiz de Fora
Instituto de Ciências Exatas
Departamento de Ciência da Computação
Computação Ubíqua Aplicada à Saúde
Marcos Marins da Silva Corrêa
JUIZ DE FORA
JULHO, 2011
Marcos Marins da Silva Corrêa
Computação Ubíqua Aplicada à Saúde
Monografia
submetida
ao
corpo
docente do Departamento de Ciência
da
Computação
Federal
de
Juiz
da
de
Universidade
Fora
para
obtenção do grau de Bacharel em
Ciência da Computação.
Orientador: Marcelo Lobosco
JUIZ DE FORA
JULHO, 2011
Marcos Marins da Silva Corrêa
Computação Ubíqua Aplicada à Saúde
Monografia
submetida
ao
corpo
docente do Departamento de Ciência
da
Computação
Federal
de
Juiz
da
de
Universidade
Fora
para
obtenção do grau de Bacharel em
Ciência da Computação.
14 de Julho de 2011.
Aprovada por:
____________________________________________
Marcelo Lobosco, orientador - UFJF
D.Sc. em Engenharia de Sistemas e Computação,UFRJ
____________________________________________
Eduardo Pagani Julio - UFJF
M.Sc. em Computação, UFF
____________________________________________
Rodrigo Weber dos Santos - UFJF
D.Sc. em Matemática, UFRJ
Agradecimentos
Agradeço a Deus por ter me concedido esta vitória. Tudo é do pai, toda
honra e toda glória. É Dele a vitória alcançada em minha vida.
Agradeço à minha família, pelo investimento e amor incondicional.
Agradeço
ao
meu
orientador
Lobosco,
transmitidos, paciência e persistência.
Agradeço à Sarah, minha maior companheira.
pelos
conhecimentos
Resumo
A Computação Ubíqua é um novo paradigma de computação,
considerado o paradigma do século XXI. Ela propõe a alteração da computação
pessoal tradicional, transformando o relacionamento entre pessoas e computadores.
Seu princípio básico é a criação de ambientes saturados de artefatos eletrônicos
integrados com usuário de maneira harmoniosa e imperceptível, com a finalidade de
auxiliar as pessoas em suas atividades diárias. Um cenário como este, em que
computadores detectam as necessidades dos usuários, pode ser de extrema
utilidade no âmbito da saúde. Dessa forma, aumenta-se a segurança dos pacientes
e evita-se o estresse e a sobrecarga de profissionais da área de saúde. Assim, este
trabalho visa mostrar como a Computação Ubíqua pode ser aplicada na Saúde. O
objetivo é mostrar um exemplo de aplicação pervasiva utilizando objetos eletrônicos
já integrados ao atual moderno estilo de vida.
Palavras-chave: Computação Ubíqua. Computação móvel. Assistência médica
pervasiva.
Abstract
Ubiquitous Computing is a new computing paradigm, considered the twentyfirst century paradigm. It proposes changes in the traditional personal computing,
transforming the relationship between people and computers. Its basic principle is the
creation of environments saturated with electronic device invisibly and seamless
integrated, aiming help people in their daily activities. A scenario like this one, with
computers detecting user's needs, can be extremely useful in healthcare, since the
patient security can be increased as well as it can prevent the stress and the
overload in healthcare professionals. This work aims to show how Ubiquitous
Computing can be applied in healthcare. The goal is to develop a pervasive
application using electronic devices that are currently integrated into the current
modern lifestyle.
Key words: Ubiquitous Computing. Mobile computing. Pervasive Healthcare.
Sumário
1. INTRODUÇÃO ..................................................................................................... 08
1.1. Motivação .......................................................................................................... 08
1.2 Objetivos ............................................................................................................. 09
1.3 Organização ....................................................................................................... 10
2. COMPUTAÇÃO UBÍQUA .................................................................................... 11
2.1. Histórico ............................................................................................................. 11
2.1.1. As Eras da Computação ................................................................................. 11
2.1.2. A origem ......................................................................................................... 13
2.2. Definição ............................................................................................................ 16
2.3. Problemas ......................................................................................................... 17
2.4. Aplicação na Saúde .......................................................................................... 18
2.4.1. Cuidados com o Idoso .................................................................................... 20
3. SUN JAVA WIRELESS TOOLKIT ........................................................................ 22
3.1. Linguagem e Plataforma Java ........................................................................... 22
3.2. Java 2 Platform, Micro Edition (J2ME) .............................................................. 23
3.2.1. Connected Limited Device Configuration (CLDC) .......................................... 24
3.2.2. Mobile Information Device Profile (MIDP) ...................................................... 25
3.3. Sun Java Wireless Toolkit para CLDC .............................................................. 27
4. MONITORAMENTO CARDÍACO VIA CELULAR ................................................. 28
4.1. Visão geral do aplicativo .................................................................................... 28
4.2. O MIDlet BPM .................................................................................................... 30
4.2.1. Primeiros passos ............................................................................................ 30
4.2.2. A classe Sender ............................................................................................. 31
4.2.3. Modos Médico e Paciente .............................................................................. 31
4.3. Análise ............................................................................................................... 32
5. CONCLUSÃO ....................................................................................................... 34
5.1 Trabalhos futuros ................................................................................................ 34
Referências Bibliográficas ........................................................................................ 36
8
1. Introdução
A Computação Ubíqua, ou Computação Pervasiva, originou-se no final da
década de 1980 como um novo paradigma de computação, prometendo ser o
paradigma do século XXI. A promessa era de facilitar a utilização de computadores,
até então considerada uma atividade complexa que demandava do usuário muita
atenção. Os pesquisadores norte-americanos precursores nas ideologias deste
paradigma se embasaram na alegação de que os computadores pessoais forçavam
as pessoas a entrar em seu mundo, quando na verdade o contrário deveria
acontecer.
Ao invés de o computador se apresentar às pessoas como uma “caixa” em
cima de uma mesa, para a Computação Ubíqua os ambientes deveriam ser
saturados com os mais variados dispositivos com capacidades de computação e
comunicação. Dessa forma, a informação estaria acessível a qualquer tempo e em
todo lugar, ou seja, onipresente. Mas mais importante que isso, a Computação
Ubíqua alteraria o relacionamento das pessoas com os computadores. Ao invés de
os usuários enviarem comandos imperativamente aos computadores, estes é que
deveriam detectar seus anseios e se adaptar às suas atividades.
De acordo com Mark Weiser [6], as maiores tecnologias são aquelas que
desaparecem, ou em outras palavras, a tecnologia deve ser utilizada sem a nítida
sensação de que ela está ajudando na execução de tarefas. Ela deve funcionar
como uma extensão das capacidades cognitivas.
A Computação Ubíqua já é uma realidade. Existem diversas pesquisas na
área e grandes projetos em empresas e universidades. E o mais importante é que
aos poucos ambientes impregnados de dispositivos computacionais são criados em
todo o mundo e as pessoas estão se utilizando de seus benefícios muitas vezes sem
notar. Esta é a exata essência deste paradigma revolucionário.
1.1. Motivação
9
De acordo com a contextualização introdutória apresentada, ter ambientes
saturados de dispositivos captando as necessidades das pessoas pode ser
extremamente poderoso se for direcionado à área médica. Através de sensores
interligados em rede, é possível monitorar diversas características fisiológicas e
comportamentais de pacientes, tais como batimentos cardíacos, pressão arterial,
peso, incontinência urinária, dentre outros.
Neste sentido, a Computação Ubíqua pode representar uma melhoria na
qualidade de vida tanto dos pacientes quanto dos profissionais de saúde. A
tecnologia pode auxiliar na assistência médica em muitos sentidos, como por
exemplo auxiliando para que os atendimentos emergenciais sejam feitos com maior
rapidez em atendimentos emergenciais ou mesmo facilitando a detecção de
sintomas de doenças ou mesmo o seu diagnóstico.
Portanto, inúmeros são os benefícios do uso da Computação Ubíqua aplicada
à Saúde, fugindo aos limites da imaginação o poder que teria uma moderna infraestrutura tecnológica hospitalar integrada com um sistema de sensores de
monitoramento de pacientes.
1.2. Objetivos
Diante do cenário apresentado, fica claro que Computação Ubíqua pode
fornecer grande contribuição para a saúde. Neste cenário, o objetivo deste trabalho
é apresentar um estudo de caso que mostre o potencial desta tecnologia para a
aplicação na área da saúde.
A aplicação desenvolvida neste trabalho ratifica a facilidade de se
desenvolver aplicações ubíquas para as ferramentas já disponíveis hoje. Em
particular, foi desenvolvida uma aplicação que monitora os batimentos cardíacos de
um paciente a ser utilizada em um aparelho de telefone celular, dispositivo este que
já está plenamente difundido no mundo atual e que as pessoas carregam sempre
consigo. Apesar deste aparelho hoje não ter todos os sensores necessários para o
pleno desenvolvimento da aplicação, acredita-se que em um futuro próximo esse
quadro pode mudar, já que este aparelho a cada dia incorpora novas
funcionalidades. Para lidar com a falta de alguns sensores necessários ao
10
desenvolvimento da aplicação, algumas funcionalidades que hoje não estão
presentes nesses aparelhos foram simuladas.
1.3. Organização
Este trabalho está organizado em mais quatro capítulos. O Capítulo 2 é
voltado à apresentação da Computação Ubíqua. O Capítulo 3 apresenta a
ferramenta Sun Java Wireless Toolkit (WTK). O Capítulo 4 apresenta a aplicação
desenvolvida. O Capítulo 5 traz as conclusões e sugestões de trabalhos futuros.
11
2. Computação Ubíqua
O termo Computação Ubíqua (do inglês Ubiquitous Computing) foi cunhado
em 1988 para se referir a presença maciça e transparente de sistemas
computacionais no cotidiano das pessoas. Seu principal objetivo é transformar o
modo como o ser humano se relaciona com artefatos tecnológicos, tornando a
presença destes cada vez mais imperceptível.
O objetivo deste capítulo é apresentar a Computação Ubíqua. A Seção 2.1
traça um breve histórico da área. A Seção 2.2 introduz as principais definições e
convenções de nomenclatura da área. A Seção 2.3 apresenta os problemas e
desafios a serem enfrentados pela Computação Ubíqua. Por fim, a Seção 2.4
relaciona Computação Ubíqua com saúde e apresenta um exemplo de aplicação.
2.1. Histórico
A evolução tecnológica tem sido tão expressiva que a todo momento nos
deparamos com novidades cada vez mais surpreendentes nesta área. E cada vez
mais a presença de artefatos tecnológicos em nossas vidas é maior. Mas talvez o
que realmente importa não é a tecnologia em si, mas sim o seu relacionamento com
as pessoas [1].
2.1.1. As Eras da Computação
Acerca do relacionamento do homem com a tecnologia, mais precisamente do
homem em relação aos computadores, podemos classificá-lo de acordo com eras
relativamente bem definidas [1]. No período referente à segunda metade do século
12
XX, houve duas grandes tendências para esse relacionamento: primeiramente o
relacionamento mainframe, seguido pelo relacionamento Personal Computer, ou PC.
Na era do mainframe, o computador era um recurso escasso, caro e era
compartilhado com outros usuários, sempre especialistas. Era a era do
relacionamento um computador – muitas pessoas. Hoje este tipo de relacionamento
ainda existe: poder-se-ia dizer que qualquer computador, ainda que seja um PC, que
seja compartilhado por várias pessoas é um mainframe.
O computador pessoal sobressaiu-se ao mainframe por volta de 1984,
quando o número usuários de PCs ultrapassou o de usuários de computadores
compartilhados [2]. Entramos então na era do PC, com o relacionamento uma
pessoa – um computador. Essa relação é por muitas vezes íntima e profunda: o
computador guarda arquivos pessoais do usuário, e, por este motivo, o acesso ao
mesmo e/ou aos seus arquivos muitas vezes exige senhas. Este relacionamento,
bem como no caso anterior (mainframe), demanda muita atenção do usuário: ao se
utilizar do computador a pessoa está concentrada, ocupada e desligada do mundo
real. Mark Weiser e John Seely Brown comparam o computador ao automóvel: um
item especial, caro e que requer considerável atenção para operá-lo [1].
Com o advento da Internet, a evolução das redes de computadores e os
sistemas distribuídos, surge uma nova fase, na qual a Internet mescla elementos
das duas eras anteriores. Em uma representação da arquitetura cliente-servidor em
escala massiva, os servidores web podem ser vistos como mainframes sendo
utilizados por vários PCs como clientes web. Mas esta é apenas uma era de
transição, que vai aos poucos delineando uma nova forma de relacionamento para a
terceira era: a era da Computação Ubíqua.
Vislumbra-se que na terceira era cada usuário compartilhará muitos
computadores. Além dos computadores pessoais, também serão utilizados muitos
dispositivos embutidos em paredes, cadeiras, roupas, carros, etc. A Computação
Ubíqua é fundamentalmente caracterizada pela conexão de objetos em um mundo
computacional.
O ponto de cruzamento desta era com a do Computador Pessoal seria entre
2005 e 2020 [2]. De fato, nos encontramos dentro deste ponto de cruzamento. Ainda
não estamos completamente imersos no mundo da Computação Ubíqua, mas
13
estamos caminhando, ou correndo, ao encontro dele. Não é raro um usuário fazer
uso de vários dispositivos eletrônicos ao mesmo tempo, entre computadores, players
de áudio e vídeo, smartphones, PDAs, etc. E mais produtos estão sendo incluídos à
esta lista, como os tablets, por exemplo.
Além disso, já é possível encontrar ambientes providos com diversos
sensores com o intuito de tornar certas atividades mais suaves e naturais. Um
exemplo é o emprego de sensores em banheiros públicos de alguns shoppings e
restaurantes. Eles já não possuem mais interruptores; ao entrar um sensor de
movimento acende as luzes e os exaustores; ao distanciar do vazo sanitário, um
dispositivo aciona a descarga, o que também evita o desperdício de água; e as
torneiras também já não possuem mais abridores, basta posicionar as mãos em
baixo da mesma para ativá-la, assim como os secadores de mão automáticos.
Nas residências contemporâneas, cada indivíduo já está sendo compartilhado
por vários tipos de computadores simultaneamente. Em qualquer casa hoje nós já
encontramos diversos dispositivos eletrônicos, entre relógios, fornos microondas,
controles remotos, aparelhos de som, televisores, aparelhos de DVD, home theaters,
brinquedos, dentre muitos outros. Porém, estas casas modernas, cheias de
tecnologia, não estão qualificadas como ambientes de Computação Ubíqua. Tais
produtos não são em sua essência muito diferentes de tecnologias mais antigas e
tradicionais e são usados quase sempre um por vez, demandando muita atenção do
usuário. Contudo, uma vez conectados em rede, eles estarão tecnologicamente
aptos para a Computação Ubíqua.
Como foi dito anteriormente, o que realmente importa não é a tecnologia em
si ou a sua ampla disseminação, mas sim a forma como ocorre o seu
relacionamento com as pessoas.
2.1.2. A origem
No final do ano de 1987, membros do Laboratório de Eletrônica e Imagem
(EIL - Electronics and Imaging Laboratory) do Centro de Pesquisa Palo Alto da
Xerox (PARC - Palo Alto Research Center Incorporated) propuseram fabricar telas
de computador gigantes, do tamanho de paredes [3]. Essas telas teriam tecnologia
14
avançada e seriam capazes de se conectar com diversos outros dispositivos do
ambiente. Rapidamente, membros de outros departamentos se voluntariaram a
participar da criação de software e hardware para este novo tipo de sistema
computacional.
O ponto principal da proposta desenvolvida no PARC era o anseio de se
introduzir uma facilidade de uso nestas telas. A facilidade imaginada permitiria o uso
das telas como uma lousa tradicional. Adicionalmente, propôs-se a ampliação de
suas funcionalidades ao se permitir que a tela fosse conectada em rede com outros
dispositivos. A partir de então surgiram as primeiras ideias que se opunham ao
então vigente paradigma “uma pessoa – um computador” e criou-se a concepção de
se espalhar computadores por todo o ambiente, contudo de modo imperceptível ao
usuário.
Ao mesmo tempo em que se começava a delinear uma nova visão para o
relacionamento homem-máquina nos laboratórios do PARC, um fato curioso ocorria
paralelamente. Antropólogos da área de Tecnologia e Práticas de Trabalho estavam
observando justamente como as pessoas utilizavam tecnologias em detrimento do
modo que elas apenas diziam utilizá-la. Tais observações levaram alguns
profissionais de tecnologia do PARC a pensar menos nas particularidades técnicas
de um computador e mais no modo como a tecnologia é utilizada. Em particular,
como os computadores foram incluídos nas atividades diárias e como eles interagem
com o resto do ambiente físico.
Como resultado desta nova forma de visualizar a relação homem-máquina,
bem como a inserção da tecnologia no cotidiano, no início do ano de 1988 foi criado
o programa de Computação Ubíqua no Laboratório de Ciência da Computação
(CSL) do PARC [3]. Este projeto resultou em várias patentes e artigos fundamentais,
dentro de uma ampla gama de áreas da Ciência da Computação até então
consideradas independentes. Mas, no fim, criou-se uma nova área do ramo, que
especulava sobre um meio físico impregnado por sensores invisíveis, atores, telas e
elementos computacionais embutidos continuamente nos objetos do cotidiano e
conectados através de uma rede.
Durante este processo de concepção da Computação Ubíqua, Mark Weiser
era o diretor de tecnologia do PARC [4] e teve grande participação com uma visão
15
única do futuro da computação. Tanto que é considerado o pai da Computação
Ubíqua [5]. Em setembro de 1991, Weiser publicou na revista Scientific American o
artigo “The computer for the 21st Century”, a primeira referência oficial ao novo
paradigma de computação.
Para explicar a sua pretensão com a Computação Ubíqua, Weiser faz uma
analogia à escrita [6]. E como ela “desapareceu” entrelaçada às atividades diárias.
Ao olhar uma placa na rua, uma pessoa absorve o seu conhecimento sem realmente
realizar o ato de ler a mesma. Não é necessário parar, se desfocar do mundo ou
daquilo que esteja fazendo e só então ler. Não é assim que acontece. A escrita está
plena e suavemente integrada ao cotidiano social. Diferente do computador.
O computador permanece em um mundo à parte. E para que as pessoas
possam utilizá-lo, precisam se deslocar de um mundo à outro. Mas isso não é
somente um problema de interface de usuário [6]. A ideia de computador como a
dos desktops e laptops são apenas transições para o real potencial da Tecnologia
da Informação (TI). Esses computadores realmente não conseguem fazer
computações de maneira integrante e invisível na maneira como as pessoas vivem.
Portanto, é preciso conceber uma nova maneira sobre computadores no mundo,
uma maneira que leve em conta o ambiente natural do homem e faça os
computadores desaparecerem no segundo plano.
Depois de apresentar a Computação Ubíqua ao mundo, Mark Weiser publicou
o artigo Some Computer Science Issues in Ubiquitous Computing na revista
Communications of ACM em julho de 1993, dando enfoque mais científico ao tema
[7]. Além disso, no artigo são apresentadas algumas tecnologias ubíquas já
implementadas
componentes
nos
de
laboratórios
hardware,
da
PARC.
protocolos
de
Particularidades
rede,
técnicas
aplicações,
de
métodos
computacionais, etc, foram apresentadas [8].
A Computação Ubíqua já era uma realidade, de certo modo. Contudo, o
assunto não foi amplamente debatido e pesquisado também devido à tecnologia
disponível na época. Os anos seguintes foram de grande evolução tecnológica, em
particular de sistemas distribuídos e de tecnologias móveis. Os dispositivos
eletrônicos estavam cada vez menores, com poder computacional maior e melhor
16
capacidade conexão. Tudo isso com um custo cada vez menor, tanto financeiro
quanto energético.
Assim, a partir do final da década de 1990, o assunto naturalmente foi sendo
cada vez mais discutido. Em 2001, Mahadev Satyanarayanan, um dos pioneiros em
pesquisas relacionadas à Computação Móvel e Computação Pervasiva, publicou o
artigo Pervasive Computing: Vision and Challenges [9], no qual ele formaliza e
define a Computação Ubíqua. A partir dessa época, o número de publicações,
pesquisas e o surgimento de projetos relacionados à Computação Ubíqua obtiveram
um crescimento exponencial. Prova de todo esse crescimento é o surgimento de
revistas como a Pervasive Computing Magazine e congressos internacionais como o
UBICOMP. Ambos são mantidos por duas entidades das mais importantes no meio
tecnológico, o IEEE e a ACM, respectivamente.
2.2. Definição
O ramo da computação tratado neste trabalho na maioria das vezes é
chamado de Computação Ubíqua (Ubiquitous Computing) ou Computação Pervasiva
(Pervasive Computing). Em grande parte das publicações, os dois termos são
tratados como sinônimos ou até mesmo duas formas de se referir a um mesmo
tema.
O termo “ubíquo” vem do latim ubiquus, que quer dizer onipresença, ou seja,
estar ao mesmo tempo em toda a parte. Assim, o nome Computação Ubíqua, pode
ser diretamente interpretado como Computação Onipresente, o que já remete à ideia
de ambientes saturados de computadores. Já o termo “pervasivo” é um neologismo
português, que vem do inglês pervasive, que teria como significado algo como
penetrante ou que se infiltra. Então Computação Pervasiva remete a dispositivos
eletrônicos embutidos em objetos pelo ambiente.
De fato, por estes significados crus dos nomes, ambos podem ser encarados
como sinônimos. Porém, em alguns casos, eles são tidos como diferentes. Kalle
Lyytinen publicou um artigo em que distingue e define Computação Móvel,
Computação Pervasiva e Computação Ubíqua [10]. Segundo Lyytinen, Computação
Móvel é fundamentalmente relativa a aumentar a capacidade das pessoas de
17
carregar serviços computacionais consigo mesmas. E Computação Pervasiva
implica que o computador tenha a capacidade de obter informações do ambiente em
que ele está embutido e utilizá-lo para criar modelos computacionais dinamicamente.
Ainda segundo Lyytinen, Computação Ubíqua significa ter algum dispositivo
computacional, sendo carregados por pessoas, que tenha a capacidade de construir
modelos computacionais incrementalmente e então configurar seus serviços
adequadamente para os mais variados ambientes. Ou seja, é a junção em larga
escala dos aspectos da Computação Móvel com a Computação Pervasiva.
Para o pai da Computação Ubíqua, Mark Weiser, ela pode ser definida como
a melhoria do uso de computadores através da disponibilização de diversos
dispositivos computacionais pelo ambiente, tornando-os efetivamente invisíveis para
o usuário [8]. Weiser exprime a ideia de fazer com que os computadores fiquem em
segundo plano no ambiente e que se integrem de maneira harmoniosa ao cotidiano
e às atividades diárias [3][6].
Para melhor definir a Computação Ubíqua, temos que nos voltar para sua
história. O que levou os primeiros pesquisadores a pensar na Computação Ubíqua
foi exatamente o modelo tradicional de uso do computador por eles considerado
inapropriado. O intuito principal era de alterar as interfaces do relacionamento
homem-máquina. Figurativamente, podemos dizer que, nessa relação clássica, a
região física em que o usuário se encontra com o computador é perfeitamente bem
definida. E é exatamente este o problema.
A proposta da Computação Ubíqua é que não haja um delineamento claro
desta região. A interface deve ser suavemente difusa, integrando o computador às
atividades do homem e assim fazendo com que ele se torne uma extensão de suas
capacidades cognitivas. A partir deste pensamente é que vem a definição:
Computação Ubíqua é a criação de ambientes saturados de dispositivos
computacionais com capacidade de comunicação, virtuosamente integrados com os
usuários [9].
Essa é a definição que aqui consideraremos a mais apropriada. Além disso,
atribuiremos equivalência de sentido entre os termos Computação Pervasiva e
Computação Ubíqua, já que tal consideração é aceita pelo IEEE.
18
2.3. Problemas
A Computação Ubíqua foi idealizada para melhorar a forma de interação entre
homens e computadores. Contudo, é comum que ao se solucionar um problema,
outros sejam criados. E no âmbito tecnológico não é diferente. Em seu início, o
programa de Computação Ubíqua do PARC resultou em mais perguntas do que
respostas [3].
Espalhar sensores e dispositivos eletrônicos pelo ambiente e muitas vezes
fazer com que eles estejam invisíveis aos usuários, instantaneamente traz à tona o
problema da privacidade. Quanto maior for o anseio por automatização dos
sistemas, maior será o volume de informações a serem captadas do usuário.
Contudo,
podem
ocorrer
situações
em
que
não
queiramos
compartilhar
determinadas informações. O problema é como filtrar quais programas poderão usar
essas informações e quais não poderão. E mais, como saber se certa informação foi
armazenada?
Também neste sentido, podemos detectar a questão da segurança da
informação. Uma vez armazenada a informação, quem terá acesso à ela? Com
ambientes saturados de dispositivos computacionais com capacidade de conexão,
há a necessidade de prevenir e restringir que dispositivos não autorizados se tornem
parte do sistema ubíquo.
Para Mark Weiser, o problema da Computação Ubíqua é na verdade relativo
ao controle [3]. Se o sistema computacional é invisível bem como extensível, tornase difícil saber o que controla o que. Tendo por base que toda ação é um comando,
inclusive a ausência de ações, isso acarretaria em alguma consequência
inoportuna? E no caso afirmativo, o que controlaria quais ações devem ser levadas
em conta, outro software? Manter a simplicidade e o controle simultaneamente é
ainda uma das maiores questões em aberto nas pesquisas da computação ubíqua.
2.4. Aplicação na Saúde
19
Observa-se nos últimos anos um aumento na expectativa de vida da
população e, por conseguinte, no número de idosos. Em paralelo, o moderno estilo
de vida acelerado de um mundo cada vez mais globalizado acarreta em um aumento
no número de doenças crônicas em indivíduos de todas as idades. Ocorre também
uma diminuição no número de médicos, enfermeiros e profissionais de saúde em
termos proporcionais [11].
Estes fatores aliados a diversos outros, fazem crescer a cada ano os gastos
com saúde de um modo geral. Um estudo feito em 2009 no Canadá, na província de
Ontário, a mais populosa das dez províncias do país, apresentou estimativas para o
exponencial crescimento dos gastos do governo com saúde [12]. A estimativa foi
feita com o intuito de avaliar o quanto deveria ser investido de modo que o sistema
de saúde mantivesse o nível do atendimento. Em 2014, os gastos representariam
metade do total investido pela administração pública e já em torno de 2019 esta
fração chegaria a 75%. Seguindo a projeção feita, em 2030 os gastos deveriam ser
de 100%.
O estudo apresentado é muito específico de certa região de Canadá. Mas
pode servir como um exemplo e pode não ser muito diferente de outras regiões no
mundo. Em pouco tempo, é possível que o modelo vigente de assistência médica
não atenda mais aos desafios iminentes. Este modelo, concentrado em torno de
pessoas altamente especializadas, localizadas em grandes hospitais pode ser
comparado ao modelo de processamento de dados centralizado da primeira era da
Computação, ou seja, à era dos mainframes [11].
Este “Modelo de Assistência Médica mainframe” precisa ser distribuído de
certa forma. Com a ajuda da tecnologia, é possível produzir respostas mais rápidas
e auxiliar profissionais de saúde e pacientes a gerenciar alguns indicadores
específicos. Um modelo assistência médica distribuída, que permeie o cotidiano dos
cidadãos,
é
muito
mais
apropriado
para
enfrentar
os
desafios
citados.
Principalmente no que diz respeito aos profissionais de saúde, que serão cada vez
mais sobrecarregados, em virtude da população crescer em ritmo mais acelerado.
O objetivo da Assistência Médica Pervasiva é habilitar este modelo distribuído
para o gerenciamento da saúde e bem estar, através do uso de Tecnologias de
20
Informação e Comunicação (TIC), a fim de tornar a assistência médica disponível em
qualquer lugar, a qualquer momento e para qualquer pessoa [13].
A Assistência Médica Pervasiva foca explicitamente no uso de novas
tecnologias, ferramentas e serviços que possibilitem ao paciente desempenhar um
papel mais ativo no gerenciamento e tratamento de doenças. Isso inclui suporte para
a realização de autogerenciamento, automonitoramento, autocuidado, esforços
preventivos, cooperação entre paciente e instituições de saúde, cooperação entre lar
e hospital, consulta e monitoramento remotos [11]. Tudo isto com um certo limite de
liberdade ao paciente, devida à importância do conhecimento específico dos
profissionais de saúde.
Particularmente, podemos afirmar que inevitavelmente a computação
pervasiva irá se tornar uma realidade. E levando em consideração o seu poder
intrínseco, pode se tornar uma grande aliada ao ser direcionada ao âmbito da saúde.
Esta pode ser otimizada no que diz respeito ao uso de dispositivos de
monitoramento,
acesso
a
registros
médicos,
velocidade
de
atendimentos
emergenciais, etc. Isto de modo independente dos outros fatores antes mencionados
que estarão em déficit em virtude do aumento populacional.
2.4.1 Cuidados com o Idoso
No estado de Oregon, nos Estados Unidos, existe um asilo de idosos que
utiliza tecnologias pervasivas para melhorar a qualidade de vida de seus residentes.
O ambiente do asilo foi construído de modo que os artefatos tecnológicos fossem
“virtuosamente integrados com os usuários”, ou seja, seguindo o principal preceito
da Computação Ubíqua. Sendo assim, a entidade visa proporcionar aos residentes
tanta autonomia e responsabilidade quanto for possível [14].
O asilo, Elite Care, lembra mais um condomínio do que um hospital
tradicional. No que diz respeito ao modelo de assistência social, não há médicos
fazendo rondas pelos apartamentos, mas sim funcionários que eventualmente
entram em contato com os residentes. Somado a este esquema, os sensores
21
pervasivos monitoram os sinais vitais e demais indicadores fisiológicos dos idosos,
possibilitando-os viver normalmente e recebendo a devida assistência.
O desenvolvimento das tecnologias e métodos de tratamento utilizados na
instituição partiu da iniciativa dos seus fundadores, que utilizaram de sua experiência
com os cuidados de seus próprios pais. No início do projeto os recursos eram
escassos e os dispositivos pervasivos foram desenvolvidos com seus próprios
esforços. Com um orçamento limitado, os artefatos resultantes integraram
tecnologias de baixo custo, discrição e interface amigável para idosos. Mas muito do
sucesso da companhia se deve ao auxílio de um comitê de consultoria integrado por
membros bastante renomados. Dentre outros, podemos destacar a Intel, as
Universidades de Harvard e Michigan e grandes centros de pesquisa médicohospitalares.
Os sensores e a infraestrutura pervasiva ajudam os funcionários do asilo a
identificar quando os idosos precisam de assistência. Cada residente possui um
banco de dados específico que documenta suas atividades diárias e seus sinais
vitais, como variações de peso e pressão sanguínea ao longo do tempo. Estes
dados, acessíveis também aos familiares, permitem os enfermeiros monitorar
tendências ou variações abruptas. Cada um também possui um crachá localizador
que, além de funcionar como chave para o seu respectivo apartamento, também
acionam as luzes dos ambientes quando necessário. O crachá ainda possui um
botão que pode ser usado para chamar algum enfermeiro em caráter emergencial.
Os apartamentos dos residentes são equipados com computadores com telas
touch screen, conectados à Internet, que os permitem conversar com familiares e
amigos. As máquinas são equipadas com aplicações com interface amigável à
idosos, letras grandes para facilitar a leitura e reconhecimento de comandos por voz.
As camas dos apartamentos também possuem sensores embutidos, por meio dos
quais é possível identificar variações bruscas de peso. Estes sensores também
identificam se estão ocorrendo certas situações durante a noite que podem denotar
problemas de saúde. Idas frequentes ao banheiro ou demasiada inquietude recebem
atenção especial dos médicos.
Toda essa infraestrutura pervasiva possibilita que a proporção de médicos e
enfermeiros por residente seja muito menor. As facilidades que ela proporciona
22
também reduz consideravelmente o estresse dos funcionários e aumenta a
qualidade de vida dos idosos. Salvo reclamações ocasionais quanto à privacidade,
são inegáveis os benefícios da Computação Ubíqua no monitoramento de pacientes
que necessitam de constante assistência. Portanto esta clínica deve servir como
exemplo de modelo de assistência médica pervasiva.
3. Sun Java Wireless Toolkit
O Sun Java Wireless Toolkit (WTK) é um conjunto de ferramentas que torna
possível o desenvolvimento de aplicações para celulares e outros dispositivos
móveis sem fio. Embora seja baseado na especificação para o uso da plataforma
Java, o WTK também suporta muitos outros pacotes opcionais, tornando-o muito
poderoso [21].
Para entender melhor o funcionamento do Sun Java Wireless Toolkit e
conhecer o seu potencial, é necessário conhecer algumas particularidades do Java.
23
A Seção 3.1 faz uma breve apresentação da linguagem Java bem como uma
introdução das suas distintas plataformas. Na Seção 3.2 é apresentada a plataforma
Java específica para dispositivos de capacidades limitadas. Por fim, a Seção 3.3
descreve algumas característica da ferramenta a ser utilizada neste trabalho, o Java
Wireless Toolkit (WTK).
3.1. Linguagem e Plataforma Java
Java é uma linguagem de programação que nasceu e cresceu nos anos 1990
desenvolvida pela Sun Microsystems [15]. Tem como principal característica a
independência de plataforma, ou seja, os seus programas podem ser executados
em distintos sistemas computacionais [16]. O que torna a independência de
plataforma possível é a Máquina Virtual Java, do inglês Java Virtual Machine (JVM).
Ao compilar um programa Java, um código intermediário é gerado, chamado de
bytecode. Este bytecode é interpretado e/ou compilado em tempo de execução pela
JVM, podendo gerar código de máquina para a maioria dos sistemas operacionais
nas mais distintas plataformas de hardware.
As aplicações desenvolvidas em Java podem utilizar-se de uma série de
bibliotecas nativas desenvolvidas pela Sun. Estas bibliotecas são disponibilizadas
através da Java Application Programming Interface (API). A JVM juntamente com a
API formam o ambiente de execução Java, conhecido como Plataforma Java.
Com a finalidade de abranger todas as necessidades do mercado, a Sun
projetou a Java 2 em três edições [17]. Cada uma delas define uma tecnologia com
um propósito diferente. Em ordem de lançamento, as edições são as seguintes:

Java 2 Platform, Standard Edition (J2SE), que provê suporte ao
desenvolvimento de aplicações para desktop e estações de trabalho.
Contém a JVM, o compilador Java, a API padrão e outras ferramentas
utilitárias;

Java 2 Platform, Enterprise Edition (J2EE), para aplicações mais
robustas e destinadas a servidores de grande porte. Fornece
funcionalidade para aplicações Java distribuída, tolerante a falhas e
multicamadas;
24

Java 2 Platform, Micro Edition (J2ME), que é a versão compacta da
linguagem, direcionada para dispositivos móveis, como celulares, ou
embutidos, como decodificadores de TV digital.
Desta forma, o mais importante neste estudo é este último, o J2ME, uma vez
que a Computação Ubíqua usa em demasia artefatos móveis e embarcados de
capacidades limitadas.
3.2. Java 2 Platform, Micro Edition (J2ME)
J2ME é um conjunto de especificações que tem por objetivo disponibilizar
alternativas às tradicionais JVM, API e demais ferramentas do J2SE que possam
atender às necessidades de equipamentos portáteis e dispositivos com capacidades
menores que os computadores tradicionais [17].
A máquina virtual do J2ME é a Kilobyte Virtual Machine (KVM) derivada da
JVM. A KVM é extremamente pequena e eficiente, garantindo ótimo desempenho.
Essa máquina virtual executa um programa Java em qualquer processador de 16
bits com a quantidade mínima de 128 Kb de memória disponível [18]. Além disso as
APIs específicas do J2ME são muito simples e leves para economizar espaço,
memória e processamento.
O J2ME possui uma arquitetura modular e escalável definida em um modelo
de três camadas embutidas sobre o Sistema Operacional do dispositivo. As
camadas são a de Perfil, a de Configuração, e a camada do Interpretador (KVM).
Para este estudo, a Configuração e o Perfil importantes são, respectivamente, a
Connected Limited Device Configuration (CLDC) e o Mobile Information Device
Profile (MIDP). Cada um deles será detalhado a seguir. As aplicações Java
desenvolvidas para o J2ME com a Configuração e o Perfil citados são chamadas de
MIDlets e representam a camada mais alta nessa arquitetura. Estas camadas estão
ilustradas na Figura 3.1.
25
Figura 3.1: Camadas da J2ME [17].
3.2.1. Connected Limited Device Configuration (CLDC)
Como dito anteriormente, J2ME foi lançado para que pudesse atender às
necessidades de dispositivos de pequeno porte e capacidades limitadas. Contudo,
mesmo entre estes dispositivos existem diferentes características que podem ser
relativamente discrepantes, no que diz respeito a processamento, memória e
conectividade. Assim, foi necessário definir um mínimo de funcionalidades (JVM e
API) para artefatos com tais características semelhantes [17].
Estas
definições
de
particularidades
correspondem
à
Camada
de
Configuração da arquitetura J2ME. Uma determinada Configuração define o básico
de funcionalidades e serve como base de execução e desenvolvimento. Ela atende
a vários dispositivos em uma faixa de requisitos, mesmo desconhecendo as
particularidades de cada dispositivo.
Atualmente existem duas Configurações apenas:

CDC ou Configuração de Dispositivos Conectados (do inglês
Connected Device Configuration), que possui um conjunto de APIs que
suportam equipamentos fixos com capacidade de conexão de médio
porte, tal como televisores; e

CLDC ou Configurações para Dispositivos com Conexão Limitada (do
inglês Connected Limited Device Configuration) que possui um
26
conjunto
de
APIs
destinadas
a
aparelhos
cujo
poder
de
processamento, display e memória são limitados, tal como celulares.
Como o Sun Java Wireless Toolkit é destinado ao auxilio no desenvolvimento
para CLDC, detalharemos aqui apenas esta Configuração.
O CLDC é destinado a aparelhos com processadores RISC de 16 a 32 bits de
no mínimo 16 MHz; mínimo de 160 KB de memória não-volátil para as bibliotecas e
a máquina virtual; mínimo de 192 KB de memória disponível para a plataforma Java;
baixo consumo de energia, muitas vezes funcionando com bateria; conectividade a
algum tipo de rede, em sua maioria com uma conexão sem fio intermitente e largura
de banda limitada [19].
O J2ME, no âmbito da configuração CLDC, possui algumas limitações em
relação ao J2SE [17] com o intuito de tornar a plataforma mais simples para os
dispositivos a ela direcionados. A primeira limitação é que não há suporte a números
de ponto flutuante, cujas operações requerem mais processamento, o que pode ser
demasiadamente custoso em dispositivos cujo hardware é limitado. O J2ME também
não suporta chamadas para o método destrutor do objeto, método este que em
outras plataformas dá ao programador a possibilidade de descrever que operações
devem ser realizadas quando o objeto deixa de existir (object.finalize()). O suporte a
erros é limitado, de modo que erros de tempo de execução são manipulados
dependentemente da implementação. Pode-se destacar também a falta de suporte à
Java Native Interface (JNI).
3.2.2. Mobile Information Device Profile (MIDP)
Uma vez que a Configuração define as funcionalidades básicas de uma gama
de dispositivos, o Perfil, a camada mais próxima do MIDlet, atende detalhes mais
específicos do dispositivo. Embora existam apenas dois tipos de Configuração,
existem diversos Perfis, como o Mobile Information Device Profile (MIDP), RMI
Profile, Foundation Profile, PDA Profile, PersonalJava, etc [17].
Como utilizaremos o Sun Java Wireless Toolkit para o desenvolvimento de
uma aplicação MIDP, detalharemos aqui apenas este Perfil.
27
Figura 3.2: Hierarquia das camadas da J2ME com representatividade numérica em cada nível, com
destaque no Perfil de interesse.
O Perfil de Dispositivo de Informação Móvel (do inglês Mobile Information
Device Profile – MIDP) é uma peça chave do J2ME [20]. Quando combinado com o
CLDC, fornece um ambiente de execução Java padrão para os mais populares
dispositivos de informação móveis da atualidade, como telefones celulares e os mais
usuais Assistentes Digitais Pessoais (PDAs). A especificação do MIDP foi definida
através do Java Community Process (JCP) por um grupo de peritos de mais de 50
empresas, incluindo fabricantes de dispositivos importantes, operadoras e
fornecedores de software móvel. Ele define uma plataforma para a implantação
dinâmica e segura de aplicações de rede otimizadas.
O CLDC e o MIDP fornecem a funcionalidade central exigida pelas aplicações
móveis, na forma de um ambiente de execução Java padronizado e um poderoso
conjunto de APIs. Usando MIDP, desenvolvedores podem escrever aplicativos
apenas uma vez e, em seguida, implantá-los rapidamente para uma ampla
variedade de dispositivos. Este Perfil tem sido amplamente adotado como a
plataforma de escolha para aplicações móveis. Mundialmente, ele está em milhões
de celulares e PDAs, e é suportado pelos principais Ambientes de Desenvolvimento
Integrado (IDEs) [20].
28
3.3. Sun Java Wireless Toolkit para CLDC
O Sun Java Wireless Toolkit é o novo nome da ferramenta anteriormente
conhecida por J2ME Wireless Toolkit. Ele é um conjunto de ferramentas para o
desenvolvimento de aplicações baseadas na Configuração CLDC e no Perfil MIDP
do J2ME [22].
Sua mais nova versão, a 2.5.1 [21], é disponibilizada gratuitamente para
download para as plataformas Windows e Linux. O WTK é composto por três
componentes principais [23]:

o KToolbar, que automatiza diversas tarefas necessárias à criação de
aplicativos MIDP;

o emulador, que é o simulador de um celular para testar os aplicativos;
e

uma coleção de utilitários diversos.
O WTK suporta uma vasta gama de APIs úteis no desenvolvimento de
aplicações móveis. Possui também diversas funcionalidades que auxiliam o
desenvolvedor a simular um ambiente muito próximo ao desejado. As opções vão
desde a personalização da interface gráfica do emulador e outras personalizações
em geral, até monitoramento de tráfego de rede e processamento [22].
A ferramenta é bastante intuitiva e o usuário tem a seu dispor um guia completo de
uso e um outro apenas voltado para personalização. O próprio WTK pode ser usado
como IDE independente, mas também é possível integrá-lo com algumas IDEs mais
populares, como o NetBeans, por exemplo.
29
4. Monitoramento Cardíaco Através de Um
Celular
Um dos principais sinais vitais do ser humano é a freqüência cardíaca. A
freqüência normal dos batimentos cardíacos de um adulto é de 60 até 100 ciclos, ou
batidas, por minuto (bpm). Em alguns idosos ou outros portadores de disfunções
cardíacas, extrapolar estes limites pode significar um sério risco ao indivíduo,
podendo levar até à morte. O caso em que o coração bate menos de 60 vezes por
minuto é chamado de bradicardia. E o caso em que ele ultrapassa as 100 batidas
por minuto é chamado de taquicardia [24].
Monitorar constantemente os batimentos por minuto do coração de uma
pessoa que corra riscos nestas situações e fornecer auxílio imediato quando
necessário representa segurança ao paciente. Assim, é possível diminuir a
ansiedade e aumentar a qualidade de vida do indivíduo, ainda que este esteja
internado em clínicas ou casas de repouso como a que foi apresentada na Seção
2.4.1.
Aparelhos que monitoram a freqüência cardíaca estão hoje disseminados,
presentes em relógios usados por desportistas. O monitor de freqüência cardíaca
funciona com uma cinta que deve ser usada no peitoral e de um relógio. A cinta
contém um sensor que lê a frequência cardíaca e de uma unidade transmissora que
emite os valores lidos para um receptor localizado no relógio.
Um objeto comum que as pessoas costumam carregar sempre consigo é o
celular. Através dele, conjugado a cinta transmissora que monitora os batimentos
cardíacos e de uma unidade receptora localizada no próprio aparelho celular, seria
possível enviar uma mensagem a um outro celular de um médico, enfermeiro ou
outro responsável, emitindo um alerta em situações que representassem risco ao
paciente.
A aplicação descrita acima foi desenvolvida neste trabalho e será detalhada
neste capítulo. A Seção 4.1 apresenta a visão geral do projeto. A Seção 4.2 detalha
30
algumas particularidades do aplicativo desenvolvido. E a Seção 4.3 finaliza fazendo
a análise da aplicação.
4.1. Visão geral do aplicativo
A aplicação, chamada de BPM, foi desenvolvida para a plataforma J2ME com
o auxílio da ferramenta apresentada no Capítulo 3, o Sun Java Wireless Toolkit
(WTK) para a Configuração CLDC e Perfil MIDP. Foi utilizado como base para o
desenvolvimento o exemplo de rede utilizando datagramas que acompanha o WTK.
O MIDlet possui arquitetura cliente-servidor, de modo que o celular do médico
funciona como servidor e o do paciente como cliente. Um celular de médico pode
estar conectado a vários celulares de clientes. Primeiramente, ao executar a
aplicação, o usuário deve escolher entre executar no modo para celular de médico
ou executar como o celular de um paciente, como mostrado na Figura 4.1.
Figura 4.1: Tela inicial do MIDlet sendo executado no emulador do WTK.
Devido ao padrão de segurança do Perfil MIDP, as aplicações sempre pedem
permissão para acessar a rede [25]. Depois de aceitar a permissão de conexão, o
31
celular então permanece no modo que foi selecionado. As telas do modo médico e a
do modo paciente são muito semelhantes. Ambas possuem um campo no qual é
mostrado o status em que se encontra o celular e um campo para trocar mensagens
livremente. A única diferença entre as telas é que no celular do paciente existe
também o comando “Monitorar” que inicia o monitoramento dos batimentos
cardíacos (ver Figura 4.2).
Ao selecionar a opção monitorar no celular do paciente, o campo status
permanece exibindo o valor correspondente aos batimentos por minutos. Nas
ocorrências de taquicardia ou bradicardia, o celular do paciente envia uma
mensagem automaticamente ao celular do médico, com os dizeres “alerta cardíaco”.
Figura 4.2: Telas do MIDlet no modo médico (à esquerda) e no modo paciente (à direita).
4.2. O MIDlet BPM
4.2.1. Primeiros passos
Os arquivos fontes dos projetos do WTK devem ficar no diretório src
correspondente para serem compilados. Assim, geram o arquivo de extensão .jad
32
(Java Application Descriptor) no diretório bin. Este é o arquivo a ser posteriormente
utilizado para instalar o MIDlet em um celular ou até mesmo no emulador. Apesar de
não ser necessária neste último, também é possível simular a instalação.
A classe principal (neste caso bpmMIDlet) precisa ser uma subclasse de
javax.microedition.midlet.MIDlet da biblioteca do J2ME, da qual é criada uma
instância ao executar o aplicativo no celular. Logo, é nesta classe que são definidas
as ações iniciais do MIDlet, bem como a sua interface gráfica inicial.
No MIDlet BPM, a classe bpmMIDlet é responsável por informar que o usuário
deve escolher entre as opções de execução (médico ou paciente). Esta classe então
cria uma instância da classe correspondente a escolhida pelo usuário e inicia o
modo de execução passando a si mesma como parâmetro.
4.2.2. A classe Sender
A classe Sender é a responsável por fazer os envios de mensagens por meio
de datagramas. Ambas as classes Medico e Paciente (descritas a seguir) possuem
como atributo um objeto Sender que cria entre clientes e servidor uma conexão
(DatagramConnection). Para enviar mensagens através da função send, a instância
do Sender recebe como parâmetros o endereço e o conteúdo da mensagem.
De posse do endereço e da mensagem, o Sender cria o datagrama e envia
através da DatagramConnection. Ao paciente é permitido que envie mensagens
apenas ao servidor, ou seja, ao médico. Sendo assim, não é necessário que os
datagramas dos pacientes possuam campo endereço. Estes datagramas então são
simplesmente enviados ao servidor pela conexão entre eles.
4.2.3. Modos Médico e Paciente
As classes dos dois modos de execução são muito parecidas. Basicamente,
elas criam as interfaces necessárias para enviar e receber mensagens através do
Sender. Como dito anteriormente, a diferença relevante entre elas está no comando
“Monitorar” do celular do paciente. Selecionando esta opção, dá-se inicio à
33
simulação do dispositivo que estaria conjugado ao celular fazendo o monitoramento
cardíaco do paciente.
Os batimentos cardíacos são simulados através da geração de números
pseudoaleatórios com auxilio da biblioteca java.util.Random. Essa biblioteca gera
valores inteiros distribuídos uniformemente [26]. O valor inicial dos bpm (batimentos
por minuto) é um inteiro aleatório entre 60 e 100, visto que esta é a faixa
considerada normal para um adulto. O valor seguinte é gerado com base no valor
atual da simulação de acordo com os seguintes critérios:
1. se o valor atual x está entre 60 e 100 bpm, então o próximo valor
estará no intervalo [x -10; x + 10];
2. se o valor atual x for menor que 60bpm, então o próximo valor estará
no intervalo [x - 5; x + 10]; e
3. se o valor atual x for maior que 100bpm, então o próximo valor estará
no intervalo [x - 10; x + 5].
Esses critérios foram adotados com a finalidade de gerar valores de bpm com
oscilações mais suaves. E particularmente os itens 2 e 3, para que não se
distanciassem muito daqueles valores considerados normais, ainda que dando essa
possibilidade, porém com menor probabilidade. Foi também adotado o limite mínimo
de zero bpm, por não existir bpm negativos, e máximo de 200 bpm, apenas para que
o valor não cresça indiscriminadamente.
Para evitar “alarmes falsos”, como o caso em que haja ocorrência de número
de batimentos por minuto fora dos limites normais, mas que logo em seguida a
freqüência volte ao normal, a aplicação espera para que ocorra por três vezes
seguidas a medição de bpm considerada perigosa. Só então a mensagem de “alerta
cardíaco” é enviada ao celular do médico.
4.3. Análise
A partir dos valores gerados para os batimentos cardíacos em uma execução
qualquer do MIDlet BPM, foi feito o gráfico a seguir:
34
Figura 4.3: Gráfico com os valores de bpm gerados na simulação ao longo do tempo.
Nesta simulação os valores de bpm seguiam dentro dos valores normais até o
instante 35 segundos, quando começou a cair. Entre os instantes de 38 a 40
segundos, houve três ocorrências seguidas de valores abaixo dos 60 bpm, quando
uma mensagem foi enviada ao celular do médico. Logo após, entre os instantes de
42 a 44 segundos a situação se repetiu e outra mensagem foi enviada. A Figura 4.4
exibe as telas dos celulares do médico e do paciente durante uma simulação no
momento em que o alerta é enviado.
35
Figura 4.4: Tela do médico (à esquerda) recebendo alerta e a tela do paciente (à direita) que o
enviou.
Tendo em vista o que foi proposto no início do capítulo, a aplicação
desenvolvida obteve sucesso. Ela monitorara os batimentos ao longo do tempo e
envia um alerta em casos que fujam da normalidade. É uma aplicação bastante
simples, contudo pode ser vista como um primeiro passo para um sistema de
monitoramento a ser utilizado de fato. Deve-se destacar que a simulação foi utilizada
por não ser comum aparelho celular conjugado com aparelho de monitoração
cardíaca. Neste caso, esse módulo seria substituído pela função que lê o valor real
lido do sensor.
36
5. Conclusão
A realização deste trabalho possibilitou vislumbrar o futuro no uso de
dispositivos eletrônicos nas atividades diárias. Através do estudo da história da
Computação Ubíqua, foi possível entender como os pesquisadores que a
idealizaram e a definiram deram o ponto de partida na formalização deste novo
paradigma de computação para o século XXI.
Particularmente, ainda que o termo “Computação Ubíqua” não tivesse sido
formalizado, a evolução das Tecnologias de Informação e Comunicação seguiria
intuitivamente para este caminho. Tal afirmação é feita com base no processo de
evolução do relacionamento do homem com o computador pessoal ao longo das
“eras da computação”. Ademais, ficou claro com este estudo o quão promissor é
este paradigma de computação.
A conclusão principal deste trabalho é que aplicar Computação Ubíqua no
âmbito da Saúde e prover um sistema de assistência médica pervasivo, pode ser
extremamente poderoso. A utilização de tecnologias pervasivas para aumentar a
autonomia de pacientes, fugindo de esquemas tradicionais de clínicas e hospitais,
37
significa um substancial aumento na qualidade de vida tanto de pacientes quanto
profissionais de saúde.
Através da aplicação desenvolvida, foi possível concluir que os celulares ou
mesmo outros dispositivos como relógios podem ser de grande valia para a
assistência médica pervasiva. De acordo com o atual estilo de vida, as pessoas têm
o costume de carregá-los sempre consigo e portanto explorar seu uso para outros
fins representa uma oportunidade que não deve ser desperdiçada.
5.1. Trabalhos Futuros
Como seguimento deste trabalho, no que diz respeito à aplicação
desenvolvida, há muitas possibilidades. O aplicativo pode ser melhorado em muitos
aspectos. Do modo em que foi desenvolvido, os alertas são emitidos quando os
batimentos por minuto fogem à um determinado padrão (neste caso, entre 60 e 100
bpm). Contudo, as zonas de risco podem ser diferentes de uma pessoa para outra.
Dependendo da idade, da disfunção cardíaca específica ou outros fatores diversos
como sedentarismo, por exemplo, o que é um risco para alguns pode não ser para
outros. Dessa forma o aplicativo poderia ser melhorado fornecendo a opção de
definir algumas preferências neste sentido. Mais especificamente, poderia-se
determinar a zona alvo do paciente de modo direto ou mesmo calculá-lo
automaticamente através de seus fatores de risco.
Outra opção que poderia ser agregada seria fornecer ao médico a
possibilidade de monitorar remotamente os batimentos do paciente. Ao invés de ficar
apenas esperando receber um alerta de risco, ele poderia também verificar
informações como a média dos batimentos nos últimos minutos, picos máximo e
mínimo ou também tomar conhecimentos dos valores aferidos em tempo real. Além
disso, aplicação foi construída para monitorar apenas batimentos cardíacos, mas
pode ser incrementada para monitorar também a temperatura corpórea e pressão
arterial, por exemplo.
38
Referências Bibliográficas
[1] WEISER, Mark; BROWN, John Seely; The Coming Age Of Calm Technology;
Xerox PARC, October, 1996.
[2] IDC. “Transition to the Information Highway Era” in 1995-96 Information
Industry and Technology Update”.p. 2.
[3] WEISER, M.; GOLD, R.; BROWN, J. S. The origins of ubiquitous computing
research at parc in the late 1980s. IBM Systems Journal, v. 38, n. 4, p. 693{696,
1999.
[4] SAHA, D; MUKHERJEE, A. Pervasive Computing: A Paradigm for the 21st
Century. IEEE Computer. 2003.
[5] PARC “In memory of Dr. Mark Weiser”. Disponível em
<http://www2.parc.com/csl/members/weiser/>. Acesso em 18 mai. 2011.
[6] WEISER, M. The computer for the twenty-Frst century. Scientific American, p.
94-104, September 1991.
39
[7] CAMPIOLO, R Aspectos de Modelagem de Ambientes de Computação
Ubíqua. 2005. Dissertação (Mestrado em Ciência da Computação)–Universidade
Federal de Santa Catarina, Florianópolis, 2005.
[8] WEISER, M. Some computer science issues in ubiquitous computing.
Communications of the ACM, v. 36, n. 7, p. 75{84, July 1993.
[9] SATYANARAYANAN, M. Pervasive computing: Vision and challenges. IEEE
Personal Communications, v. 8, n. 4, p. 10{17, August 2001.
[10] LYYTINEN, K.; YOO, Y. Issues and challenges in ubiquitous computing.
Communications of the ACM, v. 45, n. 12, p. 62{65, December 2002.
[11] MORAES, C. L. J. ; Prado, A. F. ; Souza, W.L. . Ambiente de Computação
Ubíqua para o Cuidado de Saúde Pervasivo (ACUCSP). Anais do Seminário
Integrado de Software e Hardware (SEMISH), 2009, Bento Gonçalves - RS. SEMISH
- XXXVI Seminário Integrado de Software e Hardware, 2009.
[12] SKINNER, Brett ; ROVERE, Mark. Paying More, Getting Less: Measuring the
Sustainability of Government Health Spending in Canada. Fraser Institute. 2009.
[13] BARDRAM, J.E.; MIHAILIDIS, A.; WAN, D. Pervasive Computing In
Healthcare. CRC Press. 2007. ISBN: 978-0-8493-3621-8.
[14] STANFORD, Vince. “Using Pervasive Computing to Deliver Elder Care”.
IEEE Pervasive Computing, vol. 1, no. 1, pp. 10-13, Jan.-Mar. 2002.
[15] PAMPLONA, Vitor Fernando. Tutorial Java: o que é Java? 2009. Disponível
em <http://javafree.uol.com.br/artigo/871498/Tutorial-Java-O-que-e-Java.html>.
Acesso em: 27 jul. 2011.
[16] SCHAEFER, Carine. Protótipo de aplicativo para transmissão de dados a
partir de dispositivos móveis aplicado a uma empresa de transportes. 2004.
Trabalho de Conclusão de Curso (Graduação em Ciência da Computação)–
Universidade Regional de Blumenau, Blumenau, 2004.
[17] DEPINÉ, Fábio Marcelo. Protótipo de software para dispositivos móveis
utilizando Java ME para cálculo de regularidade em rally. 2002. Trabalho de
Conclusão de Curso (Bacharelado em Ciência da Computação)–Centro de Ciências
Exatas e Naturais, Universidade Regional de Blumenau, Blumenau.
[18] BARR, Michael. "Toward a Smaller Java," Embedded Systems Programming,
June 2002. Disponível em <http://www.netrino.com/Embedded-Systems/HowTo/KVM-J2ME-Java-Virtual-Machine> Acesso em: 28 jul. 2011.
[19] SUN Microsystems, Inc. “Java ME Technology Overview”. Disponível em
<http://www.oracle.com/technetwork/java/javame/java-me-overview-402920.html>
Acesso em: 28 jul. 2011.
40
[20] SUN Microsystems, Inc. “Mobile Information Device Profile (MIDP); JSR 37,
JSR 118 Overview” Disponível em <http://www.oracle.com/technetwork/java/
Overview-140208.html> Acesso em: 28 jul. 2011.
[21] SUN Microsystems, Inc. “Sun Java Wireless Toolkit for CLDC User’s Guide”.
September, 2007.
[22] SUN Microsystems, Inc “Sun Java Wireless Toolkit for CLDC Overview”.
Disponível em <http://www.oracle.com/technetwork/java/overview-138293.html>
Acesso em: 30 jun. 2011.
[23] SUN Microsystems, Inc “Release Notes – Sun Java Wireless Toolkit for CLDC
Version 2.5.1”. Documentation Home. May 2007.
[24] VON EYE, Guenther. “Arritimias”. Disponível em <http://www.abcdasaude.com.
br/artigo.php?32> Acesso em: 07 jul. 2011.
[25] SUN Microsystems, Inc “Frequently Asked Questions – Sun Java Wireless
Toolkit for CLDC Version 2.5.1”. May 2007.
[26] SUN Microsystems, Inc “JavaME Documentation (CLDC 1.1)” Disponível em
<http://download.oracle.com/javame/config/cldc/ref-impl/cldc1.1/jsr139/java/util/
Random.html > Acesso em: 07 jul. 2011.
Anexo I – Código fonte
bpmMIDlet.java
package datagram;
import java.io.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class bpmMIDlet extends MIDlet implements CommandListener {
private static final String MEDICO = "Medico";
private static final String PACIENTE = "Paciente";
private static final String[] names = { MEDICO, PACIENTE };
private static Display display;
private Form f;
ChoiceGroup cg;
private boolean isPaused;
private Command exitCommand = new Command("Sair", Command.EXIT, 1);
41
private Command startCommand = new Command("Iniciar", Command.ITEM, 1);
public bpmMIDlet() {
display = Display.getDisplay(this);
f = new Form("BPM");
cg = new ChoiceGroup("Escolha um modo", Choice.EXCLUSIVE, names,
null);
f.append(cg);
f.addCommand(exitCommand);
f.addCommand(startCommand);
f.setCommandListener(this);
display.setCurrent(f);
}
public static Display getDisplay() {
return display;
}
public boolean isPaused() {
return isPaused;
}
public void startApp() {
isPaused = false;
}
public void pauseApp() {
isPaused = true;
}
public void destroyApp(boolean unconditional) {
}
public void commandAction(Command c, Displayable s) {
if (c == exitCommand) {
destroyApp(true);
notifyDestroyed();
} else if (c == startCommand) {
String name = cg.getString(cg.getSelectedIndex());
if (name.equals(MEDICO)) {
Medico medico = new Medico(this);
medico.start();
} else {
Paciente paciente = new Paciente(this);
paciente.start();
}
}
}
}
Medico.java
package datagram;
42
import java.io.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class Medico implements Runnable, CommandListener {
private bpmMIDlet parent;
private Display display;
private Form f;
private StringItem si;
private TextField tf;
private Command sendCommand = new Command("Enviar", Command.ITEM, 1);
private Command exitCommand = new Command("Sair", Command.EXIT, 1);
Sender sender;
private String address;
public Medico(bpmMIDlet m) {
parent = m;
display = Display.getDisplay(parent);
f = new Form("Medico");
si = new StringItem("Status:", " ");
tf = new TextField("Enviar:", "", 30, TextField.ANY);
f.append(si);
f.append(tf);
f.addCommand(sendCommand);
f.addCommand(exitCommand);
f.setCommandListener(this);
display.setCurrent(f);
}
public void start() {
Thread t = new Thread(this);
t.start();
}
public void run() {
try {
si.setText("Plantão");
DatagramConnection dc =
(DatagramConnection)Connector.open("datagram://:5555");
sender = new Sender(dc);
while (true) {
Datagram dg = dc.newDatagram(100);
dc.receive(dg);
address = dg.getAddress();
si.setText("Mensagem recebida - " + new
String(dg.getData(), 0, dg.getLength()));
}
} catch (IOException ioe) {
Alert a = new Alert("Server", "Porta 5000 em uso.", null,
AlertType.ERROR);
a.setTimeout(Alert.FOREVER);
a.setCommandListener(this);
43
display.setCurrent(a);
} catch (Exception e) {
e.printStackTrace();
}
}
public void commandAction(Command c, Displayable s) {
if ((c == sendCommand) && !parent.isPaused()) {
if (address == null) {
si.setText("Sem destinatario");
} else {
sender.send(address, tf.getString());
}
}
if ((c == Alert.DISMISS_COMMAND) || (c == exitCommand)) {
parent.destroyApp(true);
parent.notifyDestroyed();
}
}
public void stop() {
}
}
Paciente.java
package datagram;
import java.io.*;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class Paciente implements Runnable, CommandListener {
private bpmMIDlet parent;
private Display display;
private Form f;
private StringItem si;
private TextField tf;
private Random rand;
private Timer timer;
private Command sendCommand = new Command("Enviar", Command.ITEM, 1);
private Command exitCommand = new Command("Sair", Command.EXIT, 1);
private Command monitCommand = new Command("Monitorar", Command.ITEM,
1);
private int limInf, limSup, ultimoBPM, znAlerta;
Sender sender;
public Paciente(bpmMIDlet m) {
parent = m;
display = Display.getDisplay(parent);
44
f = new Form("Paciente");
si = new StringItem("Status:", " ");
tf = new TextField("Enviar:", "", 30, TextField.ANY);
f.append(si);
f.append(tf);
f.addCommand(sendCommand);
f.addCommand(exitCommand);
f.addCommand(monitCommand);
f.setCommandListener(this);
display.setCurrent(f);
rand = new Random();
timer = new Timer();
limInf = 60;
limSup = 100;
ultimoBPM = 0;
znAlerta = 0;
}
public void start() {
Thread t = new Thread(this);
t.start();
}
public void run() {
try {
DatagramConnection dc =
(DatagramConnection)Connector.open("datagram://localhost:5555");
si.setText("Conectado ao medico");
sender = new Sender(dc);
while (true) {
Datagram dg = dc.newDatagram(100);
dc.receive(dg);
if (dg.getLength() > 0) {
si.setText("Mensagem recebida - " + new
String(dg.getData(), 0, dg.getLength()));
}
}
} catch (ConnectionNotFoundException cnfe) {
Alert a = new Alert("Paciente", "Primeiro inicie o celular do
medico", null, AlertType.ERROR);
a.setTimeout(Alert.FOREVER);
display.setCurrent(a);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
public void commandAction(Command c, Displayable s) {
if ((c == sendCommand) && !parent.isPaused()) {
sender.send(null, tf.getString());
}
if (c == exitCommand) {
parent.destroyApp(true);
parent.notifyDestroyed();
45
}
if (c == monitCommand) {
timer.schedule(new RemindTask(), 1000, 1000);
f.removeCommand(monitCommand);
}
}
public void stop() {
}
public class RemindTask extends TimerTask {
public void run() {
boolean valido = false;
while (!valido) {
ultimoBPM = (rand.nextInt() % limSup);
if ((ultimoBPM >= limInf) && (ultimoBPM >= 0) &&
(ultimoBPM <= 200)) {
valido = true;
if (ultimoBPM < 60) {
limSup = ultimoBPM + 11;
limInf = ultimoBPM - 5;
if (limInf < 0) {limInf = 0;}
}else{
if (ultimoBPM > 100) {
limSup = ultimoBPM + 6;
limInf = ultimoBPM - 10;
if (limSup > 200) {limSup = 201;}
}else{
limSup = ultimoBPM + 11;
limInf = ultimoBPM - 10;
}
}
}
}
si.setText("BPM: " + Integer.toString(ultimoBPM));
if ((ultimoBPM < 60) || (ultimoBPM > 100)) {znAlerta++;}
else {znAlerta = 0;}
if (znAlerta == 3) {
tf.setString("Alerta cardiaco!");
sender.send(null, tf.getString());
}
}
public void stop() {
}
}
}
Sender.java
package datagram;
import java.io.*;
import javax.microedition.io.*;
46
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class Sender extends Thread {
private DatagramConnection dc;
private String address;
private String message;
public Sender(DatagramConnection dc) {
this.dc = dc;
start();
}
public synchronized void send(String addr, String msg) {
address = addr;
message = msg;
notify();
}
public synchronized void run() {
while (true) {
// If no client to deal, wait until one connects
if (message == null) {
try {
wait();
} catch (InterruptedException e) {
}
}
try {
byte[] bytes = message.getBytes();
Datagram dg = null;
// Are we a sender thread for the client ? If so then
there's
// no address parameter
if (address == null) {
dg = dc.newDatagram(bytes, bytes.length);
} else {
dg = dc.newDatagram(bytes, bytes.length, address);
}
dc.send(dg);
} catch (Exception ioe) {
ioe.printStackTrace();
}
// Completed client handling, return handler to pool and
// mark for wait
message = null;
}
}
}
Download