Sunteți pe pagina 1din 59

Universidade Federal do Rio de Janeiro

Escola Politcnica
Departamento de Eletrnica e de Computao

Android Oscilloscope: Osciloscpio com Tecnologia Android

Autor:
_________________________________________________
Luiz Alberto Santos da Silva
Orientador:
_________________________________________________
Prof. Sergio Barbosa Villas-Boas, Ph. D.
Examinador:
_________________________________________________
Prof. Aloysio de Castro Pinto Pedroza, Dr.
Examinador:
_________________________________________________
Prof. Jorge Lopes de Souza Leo, Dr.

DEL
Janeiro de 2014

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO


Escola Politcnica Departamento de Eletrnica e de Computao
Centro de Tecnologia, bloco H, sala H-217, Cidade Universitria
Rio de Janeiro RJ

CEP 21949-900

Este exemplar de propriedade da Universidade Federal do Rio de Janeiro, que


poder inclu-lo em base de dados, armazenar em computador, microfilmar ou adotar
qualquer forma de arquivamento.
permitida a meno, reproduo parcial ou integral e a transmisso entre
bibliotecas deste trabalho, sem modificao de seu texto, em qualquer meio que esteja
ou venha a ser fixado, para pesquisa acadmica, comentrios e citaes, desde3 que sem
finalidade comercial e que seja feita a referncia bibliogrfica completa.
Os conceitos expressos neste trabalho so de responsabilidade do(s) autor(es) e
do(s) orientador(es).

ii

iii

AGRADECIMENTO
Dedico este trabalho, primeiramente, a Deus, minha famlia, ao meu Orientador
Prof. Sergio Barbosa Villas-Boas e a todos que contriburam de forma significativa
minha formao e estada nesta Universidade. Este projeto uma pequena forma de
retribuir o investimento e confiana em mim depositados.

iv

RESUMO
O presente trabalho visa implementar um osciloscpio em um sistema
operacional Android, que se comunique com um hardware utilizando a tecnologia
Bluetooth. Dessa forma, ser possvel trazer um pouco do instrumento de bancada mais
utilizado em laboratrios de eletrnica para diversos lugares, atravs de um dispositivo
mvel.

Palavras-Chave: osciloscpio, Android, Arduino, Bluetooth.

ABSTRACT
The objective of this project is to implement an oscilloscope on Android
operating system that communicates with a hardware using Bluetooth technology. That
way, itll be possible bring a little more of that bench instrument, heavily used in
electronic laboratories, to different places, through a mobile device.

Key-words: oscilloscope, Android, Arduino, Bluetooth.

vi

SIGLAS
SDK Software Development Kit
iOS iPhone Operational System
OS Operational System
IDE Integrated Development Environment
ADT Android Development Tools
A/D Analgico / Digital
ISR Interrupt Service Routine
UART - Universal asynchronous receiver/transmitter
API Application Programming Interface
ADSC A/D Start Conversion

vii

Sumrio
1 Introduo
1.1 Tema
1.2 Delimitao
1.3 Justificativa
1.4 Objetivos
1.5 Metodologia
1.6 Descrio

1
1
1
1
2
2
2

2 Android
2.1 Sistema Operacional Android
2.2 Recursos do Android
2.3 Verses do Android
2.4 Ferramentas para Desenvolvimento
2.5 Estrutura de um Aplicativo Android
2.5.1 Estrutura do Projeto no IDE Eclipse
2.5.2 Activities e Intents
2.5.2.1 Activity
2.5.2.2 Intent
2.6 API Bluetooth para Android
2.6.1 Tornando o dispositivo descobrvel e procurando por outros
dispositivos
2.6.2 Comunicao Bluetooth
2.7 API aChartEngine 1.0.0

4
4
4
5
5
6
6
7
8
12
14

3 Hardware
3.1 Arduino
3.1.1 Conversor A/D do Arduino
3.1.1.1 Arquitetura
3.1.1.2 Clock e Prescaler
3.1.2 Software Arduino IDE
3.2 Mdulo Bluetooth

21
21
22
23
24
27
30

4 Android Oscilloscope
4.1 Anlise do Cdigo para o Arduino
4.1.1 Definies do Cdigo para o Arduino
4.1.2 Tecnologias Arduino e Mdulo Bluetooth
4.2 Anlise do Aplicativo Android
4.2.1 Activity Inicial
4.2.2 Bluetooth Android
4.2.3 Activity do Osciloscpio
4.2.3.1 Processo de Exibio do Grfico
4.2.3.2 Clculo de Vmx, Vpp e Frequncia
4.2.3.3 Trigger do Osciloscpio

32
32
32
34
35
35
37
38
41
43
46

5 Concluses
Bibliografia

49
50

viii

16
17
18

Lista de Figuras
Figura 2.1 Exemplo AndroidManifest.xml
Figura 2.2 Exemplo Activity
Figura 2.3 Ciclo de Vida da Activity
Figura 2.4 Ciclo de Vida da Activity com Instances
Figura 2.5 Exemplo de Instances
Figura 2.6 Intent no AndroidManifest
Figura 2.7 Mtodos para chamar outra Activity
Figura 2.8 Resultado da Activity
Figura 2.9 Armazenar valor para a prxima Activity
Figura 2.10 Exemplo de onActivityResult
Figura 2.11 Permisso Bluetooth no AndroidManifest
Figura 2.12 Verifica se Bluetooth est Ativo
Figura 2.13 Solicitar Ativao Bluetooth
Figura 2.14 Conexo com Dispositivo Bluetooth
Figura 2.15 Site da API AChartEngine
Figura 3.1 Site da Arduino
Figura 3.2 Diagrama de Blocos do Conversor A/D
Figura 3.3 Configurao padro do Prescaler do Microcontrolador
Figura 3.4 Cdigo Setup do Teste de Prescaler
Figura 3.5 Cdigo Loop do Teste de Prescaler
Figura 3.6 Resultado com Prescaler igual a 64
Figura 3.7 Resultado com Prescaler igual a 4
Figura 3.8 Cdigo Exemplo de Estrutura de Programa para Arduino
Figura 3.9 Mdulo Bluetooth
Figura 4.1 Exemplo de Profundidade de Memria
Figura 4.2 Tela Inicial do Aplicativo
Figura 4.3 Tela About do Aplicativo
Figura 4.4 Solicitando Permisso para ativar Bluetooth
Figura 4.5 Menu do Aplicativo
Figura 4.6 DeviceListActivity
Figura 4.7 Conectando ao dispositivo Bluetooth
Figura 4.8 Exemplo 1 Clculo Vmax e Vpp
Figura 4.9 Exemplo 2 Clculo Vmax e Vpp
Figura 4.10 Exemplo Clculo de Frequncia
Figura 4.11 Exemplo Trigger do Osciloscpio
Figura 4.12 Exemplo dos Botes da Activity Principal

ix

7
8
10
11
12
12
13
13
13
14
14
15
15
18
20
22
23
24
25
25
26
27
29
31
33
36
37
39
40
41
42
44
45
46
47
48

Captulo 1
Introduo
1.1 Tema
O tema do trabalho consiste no estudo e implementao de um aplicativo com
funes de um osciloscpio, armazenado em um dispositivo mvel com sistema
operacional Android. Este dispositivo recebe o sinal amostrado por um Arduino, via
comunicao Bluetooth. Desta forma, o dispositivo com Android vai possibilitar ao
usurio a visualizao do sinal na tela do mobile.

1.2 Delimitao
O desenvolvimento restringe-se ao ambiente Android, plataforma que, junto com
o iOS (Apple), domina o mercado de smartphones. A escolha da plataforma se deve a
facilidade para desenvolver no ambiente Android, podendo-se utilizar computadores
com Windows, Mac OS ou Linux. Alm de ser uma plataforma aberta, qualquer um
pode baixar o cdigo-fonte do Android e o Android SDK para desenvolvimento, sem
custos.

1.3 Justificativa
A escolha da plataforma de desenvolvimento se justifica, conforme citado
anteriormente, ao baixo custo de desenvolvimento e por possuir, atualmente, um grande
nmero de consumidores.
Quanto ao osciloscpio, este um instrumento que nos permite observar e
efetuar medidas de um sinal de tenso eltrica. A inteno do projeto, pelo fato de ser
porttil, alcanar outros usurios.

1.4 Objetivos
O objetivo geral criar uma aplicao para Android que simule as
funcionalidades de um osciloscpio real, logicamente com algumas limitaes que o
hardware impe. O sinal a ser observado na tela do mobile o sinal lido e amostrado
pelo Arduino e transmitido via Bluetooth. O objetivo no desenvolver um aplicativo
que possua exatamente as mesmas especificaes ou algo prximo de um osciloscpio
real, pois para isso seria necessrio o uso de um hardware mais especfico e
consequentemente mais custoso.

1.5 Metodologia
Este projeto foi desenvolvido, em sua maioria, utilizando linguagem de
programao Java e uma biblioteca open source (achartengine) para construir os
grficos e exibi-los na tela. A IDE escolhida para o desenvolvimento do Software
Android foi o Eclipse, tambm open source e possui compatibilidade com as
ferramentas Android: componentes Android SDK e ADT Plugin para Eclipse. O
computador utilizado foi um com sistema operacional Windows 7.
Para o hardware, responsvel por tratar o sinal e depois transmiti-lo para o
dispositivo mvel, foram utilizados: um microcontrolador Arduino, modelo UNO R3,
com um conversor A/D com entrada analgica de no mximo 5 Volts de tenso e capaz
de amostrar sinais analgicos com resoluo de 10 bits e um mdulo de comunicao
serial Bluetooth, modelo HC-05. No software para Arduino foi utilizada a linguagem de
programao C e uma IDE disponibilizada pela prpria fabricante do Arduino que nos
permite desenvolver e fazer o upload do aplicativo para a memria do
microcontrolador.

1.6 Descrio
No captulo 2 falaremos sobre o Android: como est o cenrio atual para os
desenvolvedores e para os usurios, assim como sua arquitetura de sistema operacional,
bibliotecas e recursos disponveis e a estrutura de um aplicativo Android em linguagem
2

de programao Java. Esse captulo foi reservado para explicitar o conhecimento


terico de programao Android absorvido na graduao que foi de grande valia para o
desenvolvimento do projeto.
O captulo 3 abordar o hardware do projeto: caractersticas do Arduino e do
mdulo de comunicao Bluetooth.
Os detalhes de implementao do projeto e a anlise dos resultados sero
apresentados no captulo 4.
Por fim, o captulo 5 com as concluses acerca do projeto: objetivos realizados e
possveis melhorias a serem feitas.

Captulo 2
Android
2.1 Sistema Operacional Android
O Android um sistema operacional para mobile que baseado em uma verso
modificada do Linux. Este foi adquirido, junto com a equipe de desenvolvimento, pela
Google, como parte da estratgia para entrar no mercado de dispositivos mveis.
Quando o iPhone foi lanado, muitos fabricantes tiveram que encontrar novas
formas de revitalizar seus produtos. Para estes fabricantes de hardware, o Android foi
visto como uma soluo, eles continuam a fabricar seu hardware e usam o Android
como o sistema operacional que o potencializa. Existir um sistema operacional para
mobile, open source, como o Android, possibilita-os customizar o sistema para
diferenciar seu produto.
Para os desenvolvedores, a principal vantagem de programar para Android que
ele oferece uma abordagem nica nas aplicaes. Desenvolvedores precisam
desenvolver somente para Android, e, com isso, suas aplicaes devem ser capazes de
rodar em diferentes dispositivos.

2.2 Recursos do Android


Um dos benefcios de desenvolver para o Android o fato da plataforma ser
open source. O sistema operacional aberto e livre, permitindo que o desenvolvedor
veja o cdigo-fonte e veja como seus recursos so implementados. O desenvolvedor
pode tambm contribuir reportando erros ou participando de grupos de discusso.
Existem inmeros aplicativos Android da Google e outros disponveis na internet.
Por ser um sistema livre, no existem hardwares ou softwares fixos, no entanto,
existem recursos que o Android oferece:
Suporta GSM/EDGE, CDMA, Bluetooth, Wi-Fi e 3G;
Sensores de acelermetro e proximidade, cmera e GPS;
4

Suporta telas multi-touch (capaz de reconhecer mais de dois pontos de contato


com a tela);
Suporta aplicaes multitarefa;
Inclui suporte a diversos formatos de mdia: H.264, H.263, MP4, MP3, JPEG,
PNG, GIF;
Usa SQLite para armazenagem de dados.

2.3 Verses do Android


Cada verso do Android nomeada com o nome de um doce, e segue ordem
alfabtica:
Android 1.6 (Donut);
Android 2.0/2.1 (Eclair);
Android 2.2 (Froyo);
Android 2.3 (Gingerbread);
Android 3.0/3.1/3.2 (Honeycomb);
Android 4.0 (Ice Cream Sandwich);
Android 4.1/4.2/4.3 (Jelly Bean).

O aplicativo Android desenvolvido para este projeto pode ser executado em


celulares com a verso 2.3 ou maior.

2.4 Ferramentas para Desenvolvimento


O ambiente de desenvolvimento mais recomendado para programar aplicativos
Android o Eclipse. uma IDE que suporta diversas linguagens, incluindo Java,
linguagem utilizada na maioria dos aplicativos Android. uma IDE que segue o modelo
de open souce no desenvolvimento de Software. A IDE escolhida para este projeto foi o
Eclipse, por se tratar de um ambiente que possui maior compatibilidade com o Android.
O Eclipse, juntamente com o plugin ADT, o nico oficialmente suportado e
recomendado pela Google.
O ADT (Android Development Tools) permite criar, executar e depurar
aplicativos Android, e possvel tambm exportar o aplicativo para arquivo .apk para
futura distribuio, no Android Market, por exemplo. Este plugin tambm inclui uma
5

interface grfica de desenvolvimento (GUI), sendo possvel arrastar e largar


componentes em qualquer lugar da tela, sem uso de cdigo para tal.
Uma outra ferramenta o Android Emulator, inclusa no Android SDK, que
permite executar aplicativos Android em um ambiente simulado. Este emulador
apresenta a tela de um mobile com Android. Antes de executar o aplicativo, necessrio
criar um AVD (Android Virtual Device) que define as caractersticas do dispositivo,
como o hardware, o tamanho da tela, armazenagem dos dados e outros. Para testar o
aplicativo em diferentes dispositivos Android preciso criar diferentes AVDs, cada um
emulando um dispositivo especfico. O Android Emulator no se faz to necessrio se o
desenvolvedor j possuir um dispositivo mvel. Neste projeto no foi preciso usar esta
ferramenta, se fez uso de um dispositivo Android da fabricante Samsung.
possvel encontrar um passo a passo de como instalar e configurar o ambiente
no site: http://developer.Android.com.

2.5 Estrutura de um Aplicativo Android


O prximo passo entender como a estrutura de um aplicativo Android:
estrutura do projeto no IDE Eclipse, o arquivo AndroidManifest.xml, Activities e Intents,
componentes de uma tela Android, trabalhar com orientao da tela.

2.5.1 Estrutura do Projeto no IDE Eclipse


So vrias as pastas e arquivos que compe um projeto Android no Eclipse,
seguem as principais pastas abaixo:
src a pasta que contm todos os arquivos-fonte .java do projeto;
gen o arquivo R.java fica localizado nesta pasta. Um arquivo gerado pelo
compilador que referencia todos os recursos do projeto. Este arquivo no deve
ser alterado pelo desenvolvedor;
Android 2.3.3 contm o arquivo android.jar, possui todas as classes
necessrias para uma aplicao Android;
assets contm arquivos HTML, arquivos texto, banco de dados, etc;
bin onde fica armazenado o arquivo .apk gerado;
res possui algumas subpastas como: layout, menus e values;
6

AndroidManifest.xml o arquivo manifest da aplicao, discutido mais a frente.

O arquivo AndroidManifest.xml contm informaes sobre a aplicao:

Figura 2.1 Exemplo AndroidManifest.xml.


Fonte: Oscilloscope Android.

Define o nome do pacote da aplicao;


Define permisses de uso como, por exemplo, a do Bluetooth;
Na aba application alguns atributos definem o nome da aplicao, string
app_name, e a figura do cone da aplicao e, dentro, as declaraes das
activitys;
A aba action dentro de intent-filter indica a activity ChartDemo como a principal
da aplicao. A aba category define que esta mesma activity a que ser
executada quando o usurio clicar no cone da aplicao;
Mais abaixo o atributo android:minSdkVersion da aba uses-sdk especifica a
menor verso do sistema operacional, na qual a aplicao funcionar.

2.5.2 Activities e Intents


Uma activity uma janela que contm a interface com o usurio da aplicao.
um componente que possui vrios estgios dentro de uma aplicao, conhecido como o
ciclo de vida da activity. Conhecer este ciclo importantssimo para ter certeza que a
aplicao funciona corretamente.
7

Outro componente abstrato importante em um aplicativo Android o intent.


basicamente o que une diferentes activities de diferentes aplicaes, podendo ser usada
para chamar aplicaes nativas do Android como o navegador, telefone, mapas, email, e outras.

2.5.2.1 Activity
Para criar uma Activity basta criar uma classe Java que estende uma classe base
Activity.

Figura 2.2 Exemplo Activity.


Fonte: Oscilloscope Android.

Todos esses mtodos podem ser sobrescritos, j que com o extends pode-se
estender as funcionalidades da classe Activity e herdar todos os mtodos. O mtodo
super inicializa a classe pai antes de inicializar a classe herdeira.
A Activity definida de acordo com o arquivo XML que fica no diretrio
res/layout do projeto. O mtodo setContentView vai indicar o XML especfico da
activity.
Toda activity do projeto deve ser declarada no AndroidManifest.xml.
A classe base segue uma srie de eventos que definem o ciclo de vida de uma
Activity. Os eventos so:
8

onCreate() evento chamado quando a Activity criada pela primeira vez.


Sempre seguido de onStart();
onStart() evento chamado quando ela se torna visvel para o usurio. Seguido
por onResume() se a activity estiver entrando em primeiro plano ou por onStop()
se estiver saindo do primeiro plano;
onResume() chamado quando a Activity comea a interagir com usurio.
Sempre seguido por um onPause();
onPause() acontece quando a activity atual pausada e a anterior comea a
interagir com o usurio. Seguido por onResume(), se a activity estiver voltando
para o primeiro plano ou onStop(), se estiver ficando invisvel para o usurio;
onStop() quando a activity no mais visvel para o usurio. Seguido por
onRestart(), se a activity estiver voltando a interagir com o usurio ou
onDestroy(), se estiver sendo encerrada;
onDestroy() chamada antes da activity ser destruda pelo sistema
(manualmente ou para o sistema conservar memria). Pode acontecer se a
activity est sendo finalizada pela (chamada do mtodo finish()) ou porque o
sistema est tentando liberar recursos;
onRestart() chamada quando a activity for parada e depois reiniciada. Sempre
seguida do onStart().

O ciclo de vida inteiro de uma activity acontece entre o onCreate() e o


onDestroy(). No onCreate() so feitas todas as configuraes globais, como criar as
views, instanciar objetos que sero usados na aplicao e chamar o mtodo
setContentView(), por exemplo, e no onDestroy() so liberados os recursos utilizados.
O ciclo de vida visvel acontece entre o onStart() e o onStop(). Neste intervalo, o
usurio pode ver a activity, mesmo que esta esteja em segundo plano e no esteja
interagindo com o usurio.
O ciclo de vida em primeiro plano acontece entre o onResume() e o onPause().
Entre estes dois mtodos, a activity est em primeiro plano e interagindo com o usurio.
No onResume() podemos iniciar qualquer servio ou cdigo que precisa ser executado
enquanto a activity est em primeiro plano. Enquanto no onPause() podemos parar os
servios ou cdigos que no precisam ser executados quando a activity est em segundo
plano.

Segue abaixo um esquemtico do ciclo de vida da Activity:

Figura 2.3 Ciclo de Vida da Activity.


Fonte: http://developer.Android.com/reference/Android/app/Activity.html.

Outros dois mtodos importantes dentro do ciclo de vida de uma activity so:
onSaveInstanceState() e o onRestoreInstanceState(). Quando uma activity pausada ou
parada, o objeto da classe Activity se mantm na memria, isto , o estado atual do
objeto permanece intacto. Todas as alteraes que o usurio faz so salvas e quando a
activity retorna para o primeiro plano, essas mudanas permanecem. Mas quando o
10

sistema destri e o usurio inicia a activity novamente, o objeto recriado. Para


preservar o estado da activity pode-se sobrescrever o mtodo onSaveInstanceState(). O
sistema passa para esse mtodo um Bundle (contm pares de nomes e valores), onde
podemos guardar as informaes. Assim, quando o sistema destri e recria a activity,
este Bundle passado o onCreate() e o onRestoreInstanceState().

Figura 2.4 Ciclo de Vida da Activity com Instances.


Fonte: http://developer.Android.com/reference/Android/app/Activity.html.

Este dois mtodos so muito teis quando uma mudana no dispositivo ocorre
durante a execuo do aplicativo, por exemplo, na orientao do mobile. Quando
acontece, a activity destruda e criada novamente. Pode-se tratar esta mudana de
orientao usando esses dois mtodos, pois, antes de a activity ser destruda, o
onSaveInstanceState()

chamado

e,

quando

for

reconstruda,

onRestoreInstanceState() chamado. Abaixo temos um exemplo, onde as variveis x e i


foram salvas para, posteriormente, serem recuperadas.

11

Figura 2.5 Exemplo de Instances.


Fonte: Oscilloscope Android.

Tambm

podemos

adicionar

uma

tag,

para

cada

activity,

no

AndroidManifest.xml e definir uma orientao fixa (screenOrientation) ou avisar ao


Android para no chamar o onCreate() a cada mudana de orientao (configChanges).

2.5.2.2 Intent
Quando a aplicao tem mais de uma activity, inevitavelmente ser necessrio
navegar de uma para outra. No Android, essa navegao entre activities conhecida
como intent.
Como visto anteriormente, toda nova activity do projeto deve possuir um
arquivo xml para definir o layout e uma classe que herda de Activity. No
AndroidManifest.xml deve-se declarar a nova activity tambm e, nesse arquivo, pode-se
inserir a tag intent-filter para definir o nome e a categoria do intent filter. Outras
activities que quiserem chamar esta nova devem faz-lo pelo nome do intent filter.

Figura 2.6 Intent no AndroidManifest.


Fonte: Oscilloscope Android.

Utiliza-se o mtodo startActivity() para iniciar outra activity, criando uma


instncia da classe Intent e passando para o construtor dessa classe o nome do intent

12

filter. Desta forma, a activity pode ser chamada por qualquer outra aplicao do
dispositivo mvel. Mas se a activity a ser invocada da mesma aplicao, o mtodo
startActivity() pode ser usado da segunda maneira abaixo.

Figura 2.7 Mtodos para chamar outra Activity.


Fonte: Oscilloscope Android.

O mtodo startActivity() invoca uma outra activity mas no possibilita o retorno


de informao para a activity atual. Para isso, pode-se utilizar o mtodo
startActivityForResult(). Alm de passar um objeto da classe Intent, necessrio passar
um inteiro porque quando uma activity retorna um valor precisamos de uma forma de
identificar qual foi a activity.

Figura 2.8 Resultado da Activity.


Fonte: Oscilloscope Android.

Na activity chamada, para retornar um valor, pode-se usar o mtodo setData()


ou putExtra() da classe Intent. Neste segundo, passamos o par de atributos nome e
valor, conforme visto na figura abaixo.

Figura 2.9 Armazenar valor para a prxima Activity.


Fonte: Oscilloscope Android.

Alm destes mtodos, podemos criar um objeto da classe Bundle e utilizar o


mtodo putExtras().
Para recuperar os dados na activity original, utilizamos o mtodo
onActivityResult(). Este mtodo recebe dois inteiros e um objeto da classe Intent. O

13

requestCode o cdigo original fornecido para o mtodo startActivityForResult(), para


identificar de qual activity veio o resultado. O resultCode o cdigo enviado pela
activity chamada no mtodo setResult(). O objeto da classe Intent o que fornecer os
dados enviados pela activity chamada.
Com o mtodo, da classe Intent, getStringExtra() podemos recuperar os dados
enviados pela activity chamada.

Figura 2.10 Exemplo de onActivityResult.


Fonte: Oscilloscope Android.

2.6 API Bluetooth para Android


Utilizando a API do Bluetooth, pode-se procurar por e conectar-se a outros
dispositivos Bluetooth. Iniciando o link de comunicao, usando os Sockets Bluetooth,
possvel transmitir e receber dados entre dispositivos.
O dispositivo Bluetooth local controlado atravs da classe BluetoothAdapter,
que representa o dispositivo Android em que a aplicao est executando. Para acessar o
adaptador Bluetooth padro pode-se utilizar o mtodo getDefaultAdapter().
Antes de iniciar a busca por dispositivos Bluetooth, deve-se incluir as
permisses do Bluetooth no AndroidManifest.xml. Para modificar as propriedades do
dispositivo local, a permisso de BLUETOOTH_ADMIN deve ser concedida. Abaixo
temos um exemplo das linhas a serem adicionadas no arquivo AndroidManifest.xml.

Figura 2.11 Permisso Bluetooth no AndroidManifest.


Fonte: Oscilloscope Android.

14

O adaptador Bluetooth oferece mtodos para leitura e configurao das


propriedades do hardware Bluetooth. Esse adaptador pode ler ou configurar se estiver
habilitado. Caso no esteja, o mtodo getDefaultAdapter() retorna null. Este teste feito
no onCreate() da activity principal do projeto, conforme cdigo abaixo.

Figura 2.12 Verifica se Bluetooth est Ativo.


Fonte: Oscilloscope Android.

Para conservar a vida da bateria, a maioria dos usurios mantm o Bluetooth


desabilitado at eles planejarem utiliz-lo. Para habilitar o adaptador Bluetooth, pode-se
usar a constante BluetoothAdapter.ACTION_REQUEST_ENABLE com o mtodo
startActivityForResult(). Aparecer uma tela pedindo que o usurio habilite o Bluetooth.
Cdigo utilizado para tal pode ser visto abaixo:

Figura 2.13 Solicitar Ativao Bluetooth.


Fonte: Oscilloscope Android.

Com a permisso do BLUETOOTH_ADMIN inclusa no manifest possvel


habilitar e desabilitar o Bluetooth do dispositivo usando os mtodos enable e disable.
Segue abaixo uma descrio das classes dessa API utilizadas para configurar o
Bluetooth, procurar por dispositivos, conectar-se aos dispositivos pareados e transferir
dados entre os dispositivos.
BluetoothAdapter: representa o adaptador Bluetooth. Com essa classe, possvel
procurar por outros dispositivos e se conectar a eles;
BluetoothDevice: representa o outro dispositivo Bluetooth. Pode-se solicitar ao
dispositivo remoto uma conexo ou informaes do dispositivo;
BluetoothSocket: representa a interface para um soquete Bluetooth;

15

BluetoothServerSocket: representa um servidor aberto para atender requisies


de outros dispositivos. Funciona com um host.

2.6.1 Tornando o dispositivo descobrvel e procurando por outros


dispositivos
Para o dispositivo remoto encontrar o dispositivo local (Adaptador Bluetooth)
necessrio que este esteja configurado como descobrvel. Existe uma maneira de saber
se o dispositivo local est descobrvel ou no atravs do mtodo getScanMode da classe
BluetoothAdapter. Esse mtodo retorna uma das seguintes constantes:
SCAN_MODE_CONNECTABLE_DISCOVERABLE significa que o adaptador
local Bluetooth pode ser descoberto por qualquer outro dispositivo;
SCAN_MODE_CONNECTABLE significa que este no est descobrvel para
novos dispositivos remotos, ou seja, s pode conectar-se a dispositivos que j o
descobriram anteriormente;
SCAN_MODE_NONE nenhum dispositivo remoto pode encontrar o adaptador
Bluetooth local.

Por questes de privacidade, esta ao fica, por padro, desabilitada. possvel


lig-la atravs de uma permisso explcita do usurio, iniciando uma nova Activity
usando ACTION_REQUEST_DISCOVERABLE. Tambm por padro, o dispositivo
local fica descobrvel por dois minutos, porm possvel alterar a durao adicionando
EXTRA_DISCOVERABLE_DURATION na execuo do Intent.
Para saber se o usurio permitiu ou no que o dispositivo fique apto a ser
descoberto por outros dispositivos Bluetooth pode-se sobrescrever o onActivityResult() e
verificar o parmetro resultCode. Caso ele seja positivo, indica o tempo, em segundos,
que o adaptador Bluetooth local ficar numa situao possvel de ser descoberto. Caso
seja negativo, indica que o usurio rejeitou o pedido.
Alguns mtodos teis da classe BluetoothAdapter para encontrar outros
dispositivos seguem abaixo:
isDiscovering() retorna um boolean que indica se o dispositivo est ou no
fazendo uma busca por outros dispositivos remotos;

16

startDiscovery() inicia uma busca por dispositivos que se encontram dentro do


alcance do adaptador Bluetooth local;
cancelDiscovery() cancela a procura por outros dispositivo.

2.6.2 Comunicao Bluetooth


As APIs do Bluetooth para Android se baseiam no protocolo de comunicao
RFCOMM, que so um mecanismo para abrir soquetes de comunicao entre dois
dispositivos Bluetooth pareados.
Antes que a aplicao possa estabelecer a comunicao entre os dispositivos,
estes devem estar pareados, ou seja, ligados. Se o usurio tentar se conectar antes de
parear, os dispositivos vo primeiro parear para em seguida se conectarem.
Para estabelecer uma comunicao Bluetooth RFCOMM bidirecional podemos
usar as classes: BluetoothServerSocket e BluetoothSocket. A primeira designa um
dispositivo que age como um servidor, que atende e pode aceitar pedidos de conexo. J
a segunda, funciona como um cliente. Uma vez que estabelecemos uma conexo entre
os dispositivos, os Bluetooth Sockets so usados para transferir dados.
Um Bluetooth Server Socket usado para esperar e atender pedidos de conexo
de outros dispositivos Bluetooth. Para dois dispositivos Bluetooth se conectarem, um
deles deve agir como servidor e o outro como cliente. Depois de conectados, a
comunicao entre os dois tratada por um Bluetooth Socket.
O mtodo listenUsingRfcommWithServiceRecord usado para deixar o
dispositivo esperando por pedidos de conexo. Os parmetros so o nome que
identifica o servidor e um identificador universalmente nico (UUID). Para que o
cliente possa se conectar ele dever saber esse UUID. O mtodo retorna um objeto
BluetoothServerSocket.
Quando o mtodo accept() chamado, o Server Socket ir bloquear at que um
cliente tente se conectar com o UUID definido pelo servidor. Se a tentativa de conexo
for realizada com um dispositivo remoto no pareado, aparecer uma tela com um
pedido de pareamento.
Se a conexo for concluda com sucesso, o mtodo accept() retornar um
BluetoothSocket e este pode ser usado para transferncia de dados entre os dispositivos.
Abaixo segue cdigo utilizado no projeto:

17

Figura 2.14 Conexo com Dispositivo Bluetooth.


Fonte: Oscilloscope Android.

Depois de conectados, teremos um Bluetooth Socket para o dispositivo cliente e


o servidor. Esse conceito de cliente e servidor s serve para exemplificar como funciona
a comunicao entre os dispositivos at a conexo ser estabelecida. A partir deste
momento no existe distino entre os dispositivos, pode-se enviar e receber dados
atravs do Bluetooth Socket.
A transferncia de dados entre os dispositivos tratado pelas classe Java
OutputStream e InputStream, que pode-se obter do Bluetooth Socket atravs dos
mtodos getOutputStream e getInputStream.

2.7 API aChartEngine 1.0.0


Esta uma API Android open source utilizada para criao de grficos. So
diversos tipos de grficos disponveis e muitas funcionalidades. Pode ser baixada no
Google Code atravs do link: https://code.google.com/p/achartengine/. Pode ser baixada
tambm no site dos desenvolvedores www.achartengine.org. Alguns dos recursos
incluem:
Classe Pan permite que o usurio arraste o grfico e possibilita uma viso
maior deste. Tambm possui uma classe panListener prpria;

18

Classe Zoom obviamente, permite que o usurio efetue um zoom no grfico.


Tambm possvel criar um zoomListener para tratar um evento de zoom;
Os grficos so criados como uma view;
Suporta vrios tipos de grficos;
Suporta mais de uma srie de dados em um mesmo grfico.

Para o projeto, foi utilizado o grfico de linha com algumas modificaes no


renderizador (classe XYSeriesRenderer), que dizem respeito a parte esttica do grfico.
A XYSeries a classe que armazena os valores dos pontos do grfico. possvel
tambm remover um dado ponto e obter o valor mximo e o mnimo com seus mtodos.
A classe XYSeriesRenderer trata da esttica da curva, no caso do grfico de
linha, como o estilo dos pontos do grfico e a largura da linha. A
XYMultipleSeriesRenderer similar a classe anterior mas possui mais ferramentas e
maiores possibilidades de alterar a esttica do grfico. Com esta ltima possvel
alterar a cor da curva e do fundo, alterar a escala dos eixos, habilitar ou desabilitar o
zoom e o arrastar do grfico (pan), colocar rtulo para cada curva do grfico, etc.
uma API de fcil utilizao. O site dos desenvolvedores disponibiliza diversos
exemplos para download, para auxiliar na compreenso e implementao de suas
funcionalidades. Tambm esto disponveis todos os javadocs.

19

Figura 2.15 Site da API AChartEngine.


Fonte: http://www.achartengine.org/.

20

Captulo 3
Hardware
3.1 Arduino
uma plataforma eletrnica open source, com um microcontrolador, que possui
um ambiente de desenvolvimento especfico para programar os componentes que o
fazem parte. Ela pode ser comprada j pr-programada ou, por ser open source, pode ser
construda pelo prprio usurio, ou seja, eles podem adapt-la as suas necessidades e
depois atualizar e distribuir suas prprias verses. Os esquemas, as caractersticas de
cada verso, os datasheets dos seus componentes, alm dos arquivos EAGLE para a
montagem da prpria placa podem ser encontrados no site do Arduino:
www.arduino.cc.
O software pode ser programado utilizando as linguagens C ou C++. No site do
Arduino esto disponveis para download a IDE, que permite o desenvolvimento e o
carregamento do Software para o microcontrolador, e diversos exemplos para auxiliar
todos os tipos de usurio do Arduino, que vo desde aqueles que levam como um
passatempo at aqueles que possuem certa especializao em eletrnica.

21

Figura 3.1 Site da Arduino.


Fonte: http://arduino.cc/.

No projeto do osciloscpio foi utilizada a verso Arduino Uno R3, por se tratar
de uma verso que possui os componentes necessrios e por ser menos custosa. Nesse
tpico iremos tratar da arquitetura deste Arduino, evidenciando o conversor A/D, como
funciona a programao utilizando a IDE e o cdigo do projeto.

3.1.1 Conversor A/D do Arduino


O Arduino Uno R3 baseado em um microcontrolador (ATmega238) que possui
alguns componentes necessrios para que este dispositivo possa se comunicar com o
computador. Seguem abaixo algumas caractersticas dessa verso:
Tenso de entrada: 7-12V;
14 pinos de entrada e sada digitais (6 sadas PWM 8 bits);
6 entradas analgicas;
32 kbytes de memria Flash;
Clock de 16 MHz;
Suporta comunicao TWI;
Conversor A/D de 10 bits de resoluo.
22

Destes, o mais relevante para ser citado o conversor A/D (ou ADC), pois foi
trabalhado muito em cima dele, neste projeto.

3.1.1.1 Arquitetura
O ADC usado para converter um sinal analgico (varia continuamente) em
valores digitais. O valor analgico representa alguma medida real, neste caso uma
medida de tenso eltrica. Como j conhecido, os valores digitais no so contnuos,
eles so amostrados um certo nmero de vezes a cada perodo de tempo.
O conversor A/D do Arduino realiza a converso atravs do mtodo de
aproximaes sucessivas. Abaixo temos um diagrama simples que ilustra o ADC.

Figura 3.2 Diagrama de Blocos do Conversor A/D.


Fonte: Modelo do datasheets do microcontrolador - http://www.atmel.com/Images/doc8161.pdf.

O ADC possui oito entradas analgicas e que so controladas pelo


multiplexador, isto , a operao de converso realizada para uma entrada de cada vez.
Aps a converso valor digital armazenado em dois registradores (ADCH e ADCL),
j que o ATmega328 um microcontrolador de 8 bits e o conversor A/D possui 10 bits
de resoluo.
A tenso de entrada (Vin), do sinal analgico, deve estar entre 0 volts e a tenso
de referncia do ADC (Vref). Normalmente, o Vref igual a tenso de alimentao do
Arduino. O valor convertido o inteiro mais prximo do resultado da operao:

Vin 10
2 1 .
Vref

23

Existem dois modos de operao do conversor: converso simples e o modo


livre. No modo de converso simples necessrio iniciar cada converso, isto , quando
uma converso finalizada, os resultados so guardados nos registradores ADCH e
ADCL. Nenhuma outra converso iniciada. S ser possvel iniciar uma outra
converso quando o bit ADSC for para 1. Para indicar um evento de trmino de
converso, pode ser utilizada uma rotina de interrupo (ISR).
No modo livre, a primeira converso iniciada e as outras subseqentes so
iniciadas automaticamente. S ser necessrio indicar qual canal ser convertido,
atravs do registrador ADMUX.

3.1.1.2 Clock e Prescaler


O ADC deve ter um clock recomendado entre 50 kHz e 200 kHz, quando
desejamos uma resoluo de 10 bits. Isso nos leva a crer que existe um prescaler
(divisor) para configurar o mesmo, j que o clock do microcontrolador de 16 MHz.
Para configurar o divisor, devemos trabalhar com os bits ADPS (2..0). Esses bits
esto armazenados no registrador ADCSRA e podem ser atribudos os valores 2, 4, 8,
16, 32, 64 e 128. Esse registrador configurado por padro no arquivo wiring.c da
biblioteca do Arduino.

Figura 3.3 Configurao padro do Prescaler do Microcontrolador.


Fonte: cdigo de API disponibilizada pelo fabricante

Portanto, o clock do conversor A/D pode ser:


16 MHz / 2 = 8 MHz

24

16 MHz / 4 = 4 MHz
16 MHz / 8 = 2 MHz
16 MHz / 16 = 1 MHz
16 MHz / 32 = 500 kHz
16 MHz / 64 = 250 kHz
16 MHz / 128 = 125 kHz

Para calcular ou chegar prximo de um valor para o tempo de amostragem,


devemos levar em considerao quantos clocks do ADC so necessrios para uma
converso. De acordo com o datasheets do microcontrolador, na primeira converso so
necessrios 25 clocks de ADC e nas subseqentes somente 13 clocks. Logo, se
configurarmos o prescaler para 64, teremos por volta de 19.230 amostras por segundo.
Utilizando o cdigo abaixo, somos capazes de medir o tempo de amostragem
para cada converso. Neste cdigo, que ser explicado mais a frente, configuramos o
prescaler para 64. Mais abaixo, foram feitas cem medidas e, a cada converso, tomamos
o tempo antes e depois. O resultado est ilustrado na figura abaixo.

Figura 3.4 Cdigo Setup do Teste de Prescaler.


Fonte: Oscilloscope Android

Figura 3.5 Cdigo Loop do Teste de Prescaler.


Fonte: Oscilloscope Android

25

Pelo resultado abaixo, podemos calcular uma freqncia de amostragem de


16,667 kHz, ou seja, temos 16.667 amostras por segundo com o prescaler de 64, valor
prximo do calculado anteriormente.

Figura 3.6 Resultado com Prescaler igual a 64.


Fonte: Oscilloscope Android

Por experincia neste projeto, pudemos comprovar que, conforme diminumos o


prescaler (tornando o ADC mais rpido), os valores de freqncia de amostragem
medidos e calculados foram se afastando cada vez mais. Quando o divisor de freqncia
foi configurado para 4, tivemos o resultado abaixo. Com um tempo de amostragem
mdio de 10 us. Essa a configurao inicial utilizada no projeto, pois neste foram
utilizados trs tipos de prescaler, dependendo de qual escala de tempo o usurio
escolher para fazer a anlise do sinal.

26

Figura 3.7 Resultado com Prescaler igual a 4.


Fonte: Oscilloscope Android

No datasheets do microocontrolador consta que quanto maior o clock do


conversor A/D, menos se pode garantir uma resoluo de 10 bits. Por facilitar a
comunicao do Arduino com o dispositivo Android e baseado nesta recomendao a
resoluo utilizada para o conversor, no projeto do osciloscpio, foi de 8 bits.

3.1.2 Software Arduino IDE


Depois de entender como funciona, em parte, o hardware do Arduino, se faz
necessrio implementar esse entendimento via software. Atravs do cdigo em C ou
C++ podemos fazer todo o tratamento dos dados convertidos pelo ADC e transmiti-los
via Bluetooth para o dispositivo Android.
Neste tpico iremos abordar a estrutura de um programa para o
microcontrolador do Arduino.
Antes de adentrarmos a estrutura de um programa do Arduino, precisamos nos
atentar a configurao do ambiente, para nos prevenir de futuros contratempos na etapa
de programao e carregamento do software para o microcontrolador.

27

A plataforma (IDE) de desenvolvimento do software para o microcontrolador


Arduino recomendada a disponibilizada pela prpria faricante: Arduino IDE. Apesar
de possuir poucas funcionalidades, ela se mostra uma IDE simples e de fcil utilizao.
Para inicialmente instalar o ambiente de desenvolvimento devemos seguir
alguns passos de configurao da plataforma, so eles:
A

prpria

instalao

da

IDE

(executvel

no

endereo

www.arduino.cc/en/Main/Software);
Necessrio tambm instalar os drivers referentes verso do hardware (placa)
utilizada;
J na prpria IDE, identificar e configurar a porta serial onde a placa est
conectada.

Essas etapas de configurao so simples e podem ser encontradas no manual


disponibilizado pelo fabricante. Aps concluso, podemos nos dirigir diretamente ao
cdigo em si.
Como j dito anteriormente, podemos programar o software do Arduino
utilizando as linguagens de programao C e C++. A placa utilizada neste projeto
(Arduino Uno R3) nos permite programar com as duas linguagens. J que o cdigo do
projeto no possui uma complexidade alta, a ponto de fazermos uso de orientao a
objetos, foi escolhido como linguagem padro o C.
A figura abaixo ilustra a interface grfica da IDE e como a estrutura de um
programa do Arduino.

28

Figura 3.8 Cdigo Exemplo de Estrutura de Programa para Arduino.


Fonte: Oscilloscope Android

Existem dois blocos principais no programa, o setup e o loop. O setup o bloco


que executado somente uma vez e no incio da execuo. Na maior parte dos cdigos
e exemplos presentes no IDE, no setup se coloca todas as configuraes iniciais do
programa. No exemplo acima, foi inicializada e configurada a velocidade da
comunicao serial.
J no bloco de loop, o usurio aplica a parte do software que precisa ser
executada continuamente. Obviamente, como indica o prprio nome, o loop executado
seguidamente at cessa a alimentao do hardware. Neste bloco, normalmente onde
fica a parte principal do cdigo, seria como o main da programao voltada para
29

computadores. No exemplo acima, feita uma converso analgico-digital do pino A0,


atravs da funo analogRead(). Logo aps calculado o valor da tenso, a partir do
valor digital medido, e depois este transmitido pela porta serial.
O Arduino possui uma biblioteca prpria com diversas funes, abaixo seguem
as mais conhecidas:
pinMode() configurar um pino especfico da placa. Como entrada (INPUT) ou
sada (OUTPUT) no caso de pinos digitais, por exemplo;
digitalWrite() com esta funo possvel ligar ou desligar um pino digital,
estado alto (HIGH) ou estado baixo (LOW). O pino deve ser previamente
configurado como sada;
digitalRead() retorna o estado de um pino digital de entrada;
analogReference() atribui o valor da tenso de referncia de uma entrada
analgica. O padro 5 volts;
analogRead() retorna o valor digital convertido de um dado pino analgico;
tone() gera uma funo quadrada de freqncia e durao desejadas. Foi
utilizada para efeito de testes;
micros() retorna o tempo, em microssegundos, que decorreu desde que o
programa iniciou a execuo.

Ainda existe a biblioteca de comunicao serial, muito utilizada nesse projeto.


Essa API possui diversas funes, entre elas as de iniciar ou finalizar uma comunicao
e de enviar e receber dados pelas vias TX e RX.

3.2 Mdulo Bluetooth


O dispositivo usado no projeto para fazer a comunicao Bluetooth dos dados
convertidos no Arduino para o dispositivo Android foi o modelo HC-05. Este um
mdulo Bluetooth padro no mercado, ou seja, pouco custoso e muito utilizado em
aplicaes simples. Para o propsito do projeto do osciloscpio Android, este
dispositivo possui as caractersticas necessrias e se adqua bem ao placa do Arduino.
Este mdulo quatro pinos: dois de alimentao e dois de transmisso e recepo
dos dados. O VCC e GND foram ligados diretamente nos pinos de 5 volts e de comum
30

do Arduino e os pinos que possibilitam a comunicao foram ligados nos pinos da porta
serial do Arduino.
Segue abaixo uma imagem do dispositivo:

Figura 3.9 Mdulo Bluetooth.


Fonte:Imagem retirada do datasheets do mdulo - http://www.exp-tech.de/service/datasheet/HCSerial-Bluetooth-Products.pdf

31

Captulo 4
Android Oscilloscope
4.1 Anlise do Cdigo para o Arduino
Depois de entender como funciona a programao no Arduino, foi feita uma
anlise do que era preciso ser feito no software do projeto e foram definidos a estrutura
e os requisitos para o programa no Arduino.
Neste tpico sero abordadas as principais definies no software do Arduino,
as tecnologias utilizadas e a comunicao serial via Bluetooth.

4.1.1 Definies do Cdigo para o Arduino


A quantidade de informao enviada pelo Arduino para o Android uma das
definies mais importante do sistema, pois esta afeta diversos aspectos importantes
neste projeto.
Em um osciloscpio, dentre vrias outras caractersticas, devemos nos atentar a
uma em especial: taxa de atualizao de tela ou tambm conhecida como tempo
morto. Este o tempo necessrio para que o osciloscpio possa converter, disparar,
processar os dados e ento exibi-los na tela. Quanto maior essa taxa de atualizao,
maior a probabilidade de capturar um evento no freqente.
Neste projeto, a taxa de atualizao ficou consideravelmente alta, mesmo o
hardware utilizado no sendo de alta performance. Obviamente, nada comparado aos
osciloscpios padres de bancada disponveis no mercado. Estes podem alcanar taxas
de atualizao da ordem de femtossegundos.
Para a quantidade de informao enviada (quantidade de amostras) ficou
definido o envio de 500 amostras com valores convertidos pelo ADC para o dispositivo
Android. Parece uma quantidade exagerada de amostras, mas foi o necessrio para
varrer o grfico em uma tela inteira do programa Android e garantir que teremos
amostras suficientes sem que prejudique o sistema de trigger do Osciloscpio. Isto ,

32

devemos ter uma quantidade de amostras que permita ao software do Android, aps
identificar o ponto de incio do grfico (trigger point), preencher a tela inteira.
A essa quantidade de amostras capturadas pelo osciloscpio dado o nome de
profundidade de memria, que seria igual taxa de amostragem multiplicado pela
configurao do tempo por diviso (escala no tempo) multiplicado ainda pela
quantidade de divises.
No exemplo abaixo do aplicativo Oscilloscope, podemos ver que temos cinco
divises no tempo e que a escala no tempo de 1,0 milissegundos por diviso. Sabendo
que a taxa de amostragem para esta situao de 100 kHz, podemos chegar concluso
que a profundidade de memria mnima de 500 pontos (amostras).

Figura 4.1 Exemplo de Profundidade de Memria.


Fonte: Oscilloscope Android

33

No programa do Arduino foi necessria a criao de um vetor de bytes, esse


array recebe como primeiro valor um byte de start (valor digital 254), logo aps
quinhentas amostras e depois um byte de stop, identificando assim quando se inicia e
termina o array de dados.
Outro ponto a ser destacado a velocidade de converso (clock do ADC) j
discutida anteriormente nesse texto. O programa do Arduino possibilita ao programa do
Android a escolha entre trs taxas de amostragem diferentes, ou seja, dependendo da
mensagem enviada pelo Android solicitando novos dados, eles podem ser convertidos
com velocidades distintas.
O prescaler pode ser igual a 4, 8 ou 16. Essas opes de taxa de amostragem
seriam um incio de melhoria do aplicativo Android para que este possa ter uma ou mais
taxas de amostragem configurveis. Essa possibilidade ser discutida mais adiante.
Conforme dito anteriormente, o conversor A/D do Arduino Uno R3 possui uma
resoluo de 10 bits, porm essa configurao no editvel. Em uma verso mais
recente desse microcontrolador foi adicionada esta funcionalidade em que o usurio
pode, atravs de uma funo da API do Arduino, informar qual a resoluo. a verso
do Arduino Due. Essa placa possui um ADC de at 12 bits, porm o usurio, via
software, pode, por exemplo, configurar para 8 bits e assim os 12 bits previamente
convertido so mapeados para formarem um byte. Caso o usurio coloque 16 bits, por
exemplo, os outros 4 bits que complementar os 12 bits convertidos so preenchidos com
zero. No projeto, para realizar esse mapeamento manualmente foi construda uma
funo para transformar os valores de 0 a 1023 em valores de 0 a 253 (254 e 255 foram
reservados para start e stop byte).
As funes utilizadas para a porta serial do Arduino (UART ou USART)
tambm devem ser ressaltadas. A porta foi configurada para transmitir 9600 bits por
segundo e as funes de read recebe a mensagem enviada pelo Android e write
envia a mensagem/dados para o dispositivo mvel.

4.1.2 Tecnologias Arduino e Mdulo Bluetooth


A tecnologia utilizada tanto para o Arduino (Arduino Uno R3) como para o
mdulo Bluetooth foram inteiramente suficientes para o bom funcionamento do
osciloscpio. Apesar de sempre existirem verses e produtos no mercado que

34

possibilitam uma maior performance, conforme dito anteriormente no caso do Arduino


Due, o hardware deste projeto, incluindo o celular Android, foi o adequado e suportou
bem a todos os testes realizados. Em nenhum momento houve falhas neste hardware.
Uma verso futura do projeto poderia incluir comunicao com mais de um
dispositivo, ou seja, seria necessrio um hardware com mais portas seriais. A concluso
bvia que podemos tirar que um hardware que possui melhor performance ou mais
recursos, isto , maior velocidade e preciso na converso analgico-digital, mais portas
seriais, maior velocidade de processamento, teria facilitado e permitido mais
funcionalidades para o projeto.

4.2 Anlise do Aplicativo Android


Neste tpico ser feita a anlise do programa Oscilloscope desenvolvido na
plataforma Android. Os aspectos do cdigo que sero abordados: as activities do
software e todos os componentes pertencentes a elas (time e voltage scales, trigger,
clculo das propriedades do sinal e o grfico do sinal), dando nfase tela onde o
osciloscpio executado, e a comunicao Bluetooth.

4.2.1 Activity Inicial


Logo quando o aplicativo executado o usurio se depara com a activity inicial
(figura abaixo), esta uma tela que possui dois botes, onde cada um deles direciona
para uma activity diferente.

35

Figura 4.2 Tela Inicial do Aplicativo.


Fonte: Oscilloscope Android

Foi utilizada uma tcnica para inserir os botes, atravs de imagens. Um


onClickListener no prprio LinearLayout, isto , um layout foi criado, mas, ao invs de
adicionar componentes a ele, este foi utilizado como um boto. Assim, caso o usurio
clique na regio de uma das figuras, este ser direcionado para a tela de About, com
as informaes do projeto, ou para a tela do osciloscpio, onde poder inicializar a
aplicao propriamente dita.
Segue abaixo uma figura da tela About do aplicativo, esta activity possui
alguns textViews com as informaes bsicas do projeto.

36

Figura 4.3 Tela About do Aplicativo.


Fonte: Oscilloscope Android

4.2.2 Bluetooth Android


Um dos exemplos disponveis para os desenvolvedores em plataforma Android
o Bluetooth Chat, este que um aplicativo que permite conversa (chat) entre dois
dispositivos Android onde as mensagens so enviadas e recebidas pelo Bluetooth.
Este aplicativo serviu como base na elaborao da comunicao Bluetooth do
aplicativo Oscilloscope Android.
A classe BluetoothChatService foi inteiramente aproveitada para o projeto. a
classe que possui os mtodos para tratar a conexo Bluetooth, como iniciar e finalizar a
comunicao, mudanas do estado da conexo. O construtor dessa classe recebe como
parmetro um Handler, para quando, por exemplo, houver perda de conexo o mtodo
sendMessage acionado e o usurio recebe um Toast com a informao.

37

4.2.3 Activity do Osciloscpio


A tela principal do aplicativo, onde o propsito do projeto se encontra, a
OscilloscopeActivity. Nela existem diversos componentes e funcionalidades que sero
explicitados adiante.
O primeiro ponto que precisa ser destacado na anlise dessa tela a
funcionalidade de WakeLock. dada a esta activity a permisso para alterar o
gerenciamento de energia do celular Android, por isso, enquanto o usurio estiver nesta
tela, o sistema no poder entrar em modo de espera (apagar a tela). Essa funcionalidade
se faz possvel utilizando a classe PowerManager.WakeLock e de fato facilita a medio
do sinal exibido no osciloscpio.
Como j conhecido, o aplicativo s funciona quando o Bluetooth do celular
estiver ativo, por isso a primeira verificao que esta activity faz ao ser iniciada para
saber se o dispositivo Android est com o recurso do Bluetooth habilitado. Caso no
esteja, uma activity central ser inicializada solicitando a ativao do Bluetooth. Essa
solicitao automtica e nativa de dispositivos Android, sempre que o software
requisitar pelo adaptador Bluetooth e este no estiver habilitado. Caso o usurio clique
em No, a aplicao ser encerrada.

38

Figura 4.4 Solicitando Permisso para ativar Bluetooth.


Fonte: Oscilloscope Android

Depois de permitir a ativao do Bluetooth, o usurio precisa conectar o celular


ao mdulo Bluetooth e iniciar o processo de aquisio de dados. Para isto, necessrio
clicar no boto menu do celular Android

(imagem abaixo) e ento Conect a

Device. A aplicao vai exibir a DeviceListActivity que permite fazer um escner por
dispositivos Bluetooth disponveis e selecionar a qual ir conectar-se. O mdulo
Bluetooth est representado como linvor na figura abaixo.

39

Figura 4.5 Menu do Aplicativo.


Fonte: Oscilloscope Android

40

Figura 4.6 DeviceListActivity.


Fonte: Oscilloscope Android

Aps conectar-se a um dispositivo, o usurio deve clicar no menu novamente


e iniciar o processo de converso e exibio do sinal medido clicando em Start.

4.2.3.1 Processo de Exibio do Grfico


Aps entender o comportamento do aplicativo quanto ativao do Bluetooth e
o gerenciamento de energia, podemos seguir com a anlise do processo de aquisio,
tratamento e exibio do grfico.
No captulo anterior foi definido que o perodo em que o osciloscpio faz a
converso, tratamento e processamento dos dados, antes de exibi-los na tela, se chama
tempo morto. Nesta aplicao, este perodo comea quando o usurio clicar no boto
Start.

41

O fluxo dos dados comea quando o boto Start acionado, neste momento o
celular envia para o mdulo Bluetooth uma requisio de dados, esta mensagem
interpretada pelo microcontrolador e inicia-se processo de tratamento dos dados
convertidos, conforme explicitado anteriormente.
Para fazer o controle de transmisso e recepo dos dados, na aplicao
Android, foi utilizado um mtodo da classe Handler chamado handleMessage. Logo,
quando uma mensagem contendo os dados do sinal analgico convertido chega ao
celular, este mtodo de controle acionado. Este mtodo recebe como parmetro um
objeto da classe Message.
So quatro tipos de mensagem:
DEVICE_NAME quando ocorre esta mensagem, o usurio recebe um Toast
indicando que a conexo foi realizada com sucesso e exibe na tela o nome do
dispositivo ao qual se conectou;

Figura 4.7 Conectando ao dispositivo Bluetooth.


Fonte: Oscilloscope Android

42

STATE_CHANGE essa mensagem traz como argumento um dos quatro


possveis estados do dispositivo Bluetooth: CONECTED, CONECTING,
LISTEN e NONE;
WRITE quando uma mensagem foi enviada. Esse o momento de reiniciar as
variveis de controle do cdigo;
READ este acionado quando uma mensagem foi recebida. Neste bloco do
programa feito o tratamento dos dados em sua forma pura, isto , uma
mensagem com vrios bytes recebida e se faz necessrio dividir em blocos de
um byte e identificar o incio da cadeia de dados (start byte) e o trmino (stop
byte). Somente aps a chegada do stop byte que o programa chama a rotina
para desenhar o grfico.

Dentro da rotina de desenhar o grfico (plotData) so chamadas outras trs


rotinas que sero tratadas mais adiante: Trigger do osciloscpio e o clculo de algumas
propriedades do sinal.
A rotina de desenhar o grfico simplesmente exibe todos os dados, comeando
pelo valor definido pelo Trigger, para preencher a tela inteira da View que ilustra a
curva. Aps carregar todos os dados no objeto da classe XYSeries (achartengine), existe
uma linha do cdigo para atualizar a tela, utilizando o mtodo repaint.

4.2.3.2 Clculo de Vmx, Vpp e Frequncia


Essa rotina de clculo acionada dentro da rotina responsvel por desenhar o
grfico. As informaes de tenso mxima, valor pico-a-pico e de freqncia so
atualizados a com base na mesma taxa de atualizao da tela, isto , a cada novo array
de dados, essas informaes so recalculadas.
Os clculos de Vmx e Vpp so feitos utilizando os mtodos da API
achartengine: getMaxY e getMinY, mtodos da classe XYSeries. Abaixo podemos ver
um exemplo de uma onda quadrada gerada por um timer 555, alimentado com 5 volts.

43

Figura 4.8 Exemplo 1 Clculo Vmax e Vpp.


Fonte: Oscilloscope Android

No exemplo acima, podemos conferir que o Vmax e o Vpp esto de acordo com
o esperado, sabendo que o Timer 555 em sua configurao astvel possui tenso
mxima na sada igual a tenso de alimentao.
Na figura abaixo temos um outro exemplo com uma onda triangular:

44

Figura 4.9 Exemplo 2 Clculo Vmax e Vpp.


Fonte: Oscilloscope Android

Para o clculo da freqncia, a frmula utilizada j conhecida. A freqncia de


uma onda peridica igual ao inverso da durao de um perodo dessa curva. Portanto,
tendo como valor inicial o ponto de Trigger, o vetor de dados foi varrido at achar o
prximo ponto com o mesmo valor inicial subindo, ou seja, o valor encontrado
precisa ter um valor anterior menor do que o prprio para identificar que a onda neste
instante est com derivada positiva.
Segue exemplo abaixo de uma onda triangular com freqncia de
aproximadamente 500 Hz.

45

Figura 4.10 Exemplo Clculo de Frequncia.


Fonte: Oscilloscope Android

4.2.3.3 Trigger do Osciloscpio


O sistema de funcionamento do Trigger de um osciloscpio foi de essencial
entendimento para dar prosseguimento no projeto. A importncia desta funcionalidade
mxima por diversos aspectos, podemos destacar o principal. O sistema de Trigger
permite que o usurio do osciloscpio possa ver uma onda peridica como se ela
estivesse parada na tela, possibilitando as medies e o entendimento de como uma
dada tenso varia no tempo.
Esse processo essencial no momento de desenhar o grfico, pois, antes de fazlo, necessrio identificar o ponto de Trigger no vetor de dados recebido. importante
ressaltar que no basta identificar somente o valor, necessrio identificar tambm se
este est em uma regio de derivada positiva ou negativa.

46

Neste projeto, foi tomado como padro a regio do Trigger onde a derivada
positiva e o valor inicial calculado e igual mdia do valor mximo com o valor
mnimo do vetor de dados. Esse valor inicial s alterado quando o usurio alterar o
nvel de Trigger.
Para identificar se o Trigger est ativo e com bom funcionamento necessrio
verificar, em vrias atualizaes de tela, se a onda peridica est fixa, mas para
ilustrar seguem abaixo algumas imagens do osciloscpio, onde o valor do ponto de
Trigger foi alterado pelo usurio.

Figura 4.11 Exemplo Trigger do Osciloscpio.


Fonte: Oscilloscope Android

4.2.3.4 Botes da Activity do Osciloscpio


Alm da view que compe o grfico, existem quatro componentes na
OscilloscopeActivity: os dois seekBar para alterar as escalas de tempo e tenso, os dois
botes para alterar o valor do Trigger e outros dois botes para alterar a posio curva
no eixo das ordenadas.
Tanto o Trigger Level como o Position so botes simples que alteram os
valores discretamente. As barras para mudana de escala possuem cinco posies cada.
Para a escala de tenso os valores por diviso so: 0,1 V, 0.2 V, 0.5V, 1,0 V e 2,0 V.

47

Para a escala de tempo os valores definidos por diviso so: 0,1 ms, 0,2 ms, 0,5 ms, 1.0
ms e 2.0 ms.
Seguem abaixo alguns exemplos de alterao das escalas:

Figura 4.12 Exemplo dos Botes da Activity Principal.


Fonte: Oscilloscope Android

48

Captulo 5
Concluses
Esse projeto teve incio durante o perodo letivo em que cursava a disciplina de
Software para Smartphone. O trabalho evoluiu de apenas um simulador no trabalho final
da disciplina eletiva a um aplicativo que realmente pode ser utilizado para anlises de
sinais de tenso. Obviamente, este trabalho ainda no tem a pretenso de substituir um
osciloscpio de bancada, que vem sendo utilizado h muitos anos em diversos
laboratrios de vrias universidades e escolas, mas pode entregar ao usurio (leigo em
eletrnica ou no) um Software para dispositivo mvel que possibilita anlise de sinais
de tenso em qualquer lugar.
Houveram dificuldades por se tratar de um projeto que lida com dois blocos
separados de hardware e software, foi necessrio um ajuste (sincronismo) entre as duas
camadas. Outra dificuldade seria em relao aos testes, foram necessrias diversas
visitas ao laboratrio para fazer uso do gerador de funes e do osciloscpio de bancada
(questes de comparao). Entre outras, todas foram superadas.
Realmente o trabalho atingiu os objetivos traados na proposta inicial, porm
existem muitas possibilidades e melhorias para este. Seguem abaixo alguns possveis
trabalhos futuros:
Voltage Level Shifting uma tcnica para ajustar de tenso de um circuito. O
conversor A/D utilizado nesse permite apenas entradas de 0 a 5 volts e maioria
dos conversores no mercado funcionam da mesma forma, porm possvel
ajustar o nvel de tenso na entrada do conversor para que o usurio possa medir,
por exemplo, um sinal de -10 a 10 volts, este sinal ser tratado pelo circuito de
voltage level shifting e entrar no conversor como um sinal de 0a 5 volts;
Osciloscpio com mais de um canal esse segundo canal poderia ser
implementado de diversas formas, talvez a mais correta seja a utilizao de um
Arduino com mais de uma porta serial. Dessa forma, o hardware poderia enviar
dois sinais em paralelo.

49

Bibliografia
[1] AGILENT TECHNOLOGIES., Arquiteturas de memria de osciloscpio Por que
toda memria de aquisio no criada igualmente. 2012
[2] DON WILCHER. Learn Electronics with Arduino. 2010.
[3] _________ Datasheets ATmega 328. 2009.
[4] RETO MEIER. Profissional Android 4 application development, 2012.
[5] http://www.exp-tech.de/service/datasheet/HC-Serial-Bluetooth-Products.pdf
[6] http://developer.Android.com/reference/Android/app/Activity.html
[7] http://www.achartengine.org/
[8] http://arduino.cc/
[9] http://www.atmel.com/Images/doc8161.pdf

50

S-ar putea să vă placă și