Академический Документы
Профессиональный Документы
Культура Документы
Escola Politécnica
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 Leão, Dr.
DEL
Janeiro de 2014
UNIVERSIDADE FEDERAL DO RIO DE JANEIRO
Escola Politécnica – Departamento de Eletrônica e de Computação
Centro de Tecnologia, bloco H, sala H-217, Cidade Universitária
Rio de Janeiro – RJ CEP 21949-900
ii
iii
AGRADECIMENTO
iv
RESUMO
v
ABSTRACT
vi
SIGLAS
vii
Sumário
1 Introdução 1
1.1 – Tema 1
1.2 – Delimitação 1
1.3 – Justificativa 1
1.4 – Objetivos 2
1.5 – Metodologia 2
1.6 – Descrição 2
2 Android 4
2.1 – Sistema Operacional Android 4
2.2 – Recursos do Android 4
2.3 – Versões do Android 5
2.4 – Ferramentas para Desenvolvimento 5
2.5 – Estrutura de um Aplicativo Android 6
2.5.1 – Estrutura do Projeto no IDE Eclipse 6
2.5.2 – Activities e Intents 7
2.5.2.1 – Activity 8
2.5.2.2 – Intent 12
2.6 – API Bluetooth para Android 14
2.6.1 – Tornando o dispositivo descobrível e procurando por outros
16
dispositivos
2.6.2 – Comunicação Bluetooth 17
2.7 – API aChartEngine 1.0.0 18
3 Hardware 21
3.1 – Arduino 21
3.1.1 – Conversor A/D do Arduino 22
3.1.1.1 – Arquitetura 23
3.1.1.2 – Clock e Prescaler 24
3.1.2 – Software Arduino IDE 27
3.2 – Módulo Bluetooth 30
4 Android Oscilloscope 32
4.1 – Análise do Código para o Arduino 32
4.1.1 – Definições do Código para o Arduino 32
4.1.2 – Tecnologias Arduino e Módulo Bluetooth 34
4.2 – Análise do Aplicativo Android 35
4.2.1 – Activity Inicial 35
4.2.2 – Bluetooth Android 37
4.2.3 – Activity do Osciloscópio 38
4.2.3.1 – Processo de Exibição do Gráfico 41
4.2.3.2 – Cálculo de Vmáx, Vpp e Frequência 43
4.2.3.3 – Trigger do Osciloscópio 46
5 Conclusões 49
Bibliografia 50
viii
Lista de Figuras
Figura 2.1 – Exemplo AndroidManifest.xml 7
Figura 2.2 – Exemplo Activity 8
Figura 2.3 – Ciclo de Vida da Activity 10
Figura 2.4 – Ciclo de Vida da Activity com Instances 11
Figura 2.5 – Exemplo de Instances 12
Figura 2.6 – Intent no AndroidManifest 12
Figura 2.7 – Métodos para chamar outra Activity 13
Figura 2.8 – Resultado da Activity 13
Figura 2.9 – Armazenar valor para a próxima Activity 13
Figura 2.10 – Exemplo de onActivityResult 14
Figura 2.11 – Permissão Bluetooth no AndroidManifest 14
Figura 2.12 – Verifica se Bluetooth está Ativo 15
Figura 2.13 – Solicitar Ativação Bluetooth 15
Figura 2.14 – Conexão com Dispositivo Bluetooth 18
Figura 2.15 – Site da API AChartEngine 20
Figura 3.1 – Site da Arduino 22
Figura 3.2 – Diagrama de Blocos do Conversor A/D 23
Figura 3.3 – Configuração padrão do Prescaler do Microcontrolador 24
Figura 3.4 – Código Setup do Teste de Prescaler 25
Figura 3.5 – Código Loop do Teste de Prescaler 25
Figura 3.6 – Resultado com Prescaler igual a 64 26
Figura 3.7 – Resultado com Prescaler igual a 4 27
Figura 3.8 – Código Exemplo de Estrutura de Programa para Arduino 29
Figura 3.9 – Módulo Bluetooth 31
Figura 4.1 – Exemplo de Profundidade de Memória 33
Figura 4.2 – Tela Inicial do Aplicativo 36
Figura 4.3 – Tela About do Aplicativo 37
Figura 4.4 – Solicitando Permissão para ativar Bluetooth 39
Figura 4.5 – Menu do Aplicativo 40
Figura 4.6 – DeviceListActivity 41
Figura 4.7 – Conectando ao dispositivo Bluetooth 42
Figura 4.8 – Exemplo 1 – Cálculo Vmax e Vpp 44
Figura 4.9 – Exemplo 2 – Cálculo Vmax e Vpp 45
Figura 4.10 – Exemplo – Cálculo de Frequência 46
Figura 4.11 – Exemplo – Trigger do Osciloscópio 47
Figura 4.12 – Exemplo dos Botões da Activity Principal 48
ix
Capítulo 1
Introdução
1.1 – Tema
1.2 – Delimitação
1.3 – Justificativa
1
1.4 – Objetivos
1.5 – Metodologia
1.6 – Descrição
2
de programação Java. Esse capítulo foi reservado para explicitar o conhecimento
teórico de programação Android absorvido na graduação que foi de grande valia para o
desenvolvimento do projeto.
O capítulo 3 abordará o hardware do projeto: características do Arduino e do
módulo de comunicação Bluetooth.
Os detalhes de implementação do projeto e a análise dos resultados serão
apresentados no capítulo 4.
Por fim, o capítulo 5 com as conclusões acerca do projeto: objetivos realizados e
possíveis melhorias a serem feitas.
3
Capítulo 2
Android
4
Suporta telas multi-touch (capaz de reconhecer mais de dois pontos de contato
com a tela);
Suporta aplicações multitarefa;
Inclui suporte a diversos formatos de mídia: H.264, H.263, MP4, MP3, JPEG,
PNG, GIF;
Usa SQLite para armazenagem de dados.
5
interface gráfica de desenvolvimento (GUI), sendo possível arrastar e largar
componentes em qualquer lugar da tela, sem uso de código 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, é necessário
criar um AVD (Android Virtual Device) que define as características 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 AVD’s, cada um
emulando um dispositivo específico. O Android Emulator não se faz tão necessário se o
desenvolvedor já possuir um dispositivo móvel. Neste projeto não foi preciso usar esta
ferramenta, se fez uso de um dispositivo Android da fabricante Samsung.
É possível encontrar um passo a passo de como instalar e configurar o ambiente
no site: http://developer.Android.com.
6
AndroidManifest.xml – o arquivo manifest da aplicação, discutido mais a frente.
Uma activity é uma janela que contém a interface com o usuário da aplicação. É
um componente que possui vários estágios dentro de uma aplicação, conhecido como o
ciclo de vida da activity. Conhecer este ciclo é importantíssimo para ter certeza que a
aplicação funciona corretamente.
7
Outro componente abstrato importante em um aplicativo Android é o intent. É
basicamente o que une diferentes activities de diferentes aplicações, podendo ser usada
para “chamar” aplicações nativas do Android como o navegador, telefone, mapas, e-
mail, e outras.
2.5.2.1 – Activity
Para criar uma Activity basta criar uma classe Java que estende uma classe base
Activity.
Todos esses métodos podem ser sobrescritos, já que com o extends pode-se
estender as funcionalidades da classe Activity e herdar todos os métodos. O método
super inicializa a classe pai antes de inicializar a classe herdeira.
A Activity é definida de acordo com o arquivo XML que fica no diretório
res/layout do projeto. O método setContentView vai indicar o XML específico da
activity.
Toda activity do projeto deve ser declarada no AndroidManifest.xml.
A classe base segue uma série de eventos que definem o ciclo de vida de uma
Activity. Os eventos são:
8
onCreate() – evento chamado quando a Activity é criada pela primeira vez.
Sempre seguido de onStart();
onStart() – evento chamado quando ela se torna visível para o usuário. 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 começa a interagir com usuário.
Sempre seguido por um onPause();
onPause() – acontece quando a activity atual é pausada e a anterior começa a
interagir com o usuário. Seguido por onResume(), se a activity estiver voltando
para o primeiro plano ou onStop(), se estiver ficando invisível para o usuário;
onStop() – quando a activity não é mais visível para o usuário. Seguido por
onRestart(), se a activity estiver voltando a interagir com o usuário ou
onDestroy(), se estiver sendo encerrada;
onDestroy() – chamada antes da activity ser destruída pelo sistema
(manualmente ou para o sistema conservar memória). Pode acontecer se a
activity está sendo finalizada pela (chamada do método finish()) ou porque o
sistema está tentando liberar recursos;
onRestart() – chamada quando a activity for parada e depois reiniciada. Sempre
seguida do onStart().
9
Segue abaixo um esquemático do ciclo de vida da Activity:
Outros dois métodos importantes dentro do ciclo de vida de uma activity são:
onSaveInstanceState() e o onRestoreInstanceState(). Quando uma activity é pausada ou
parada, o objeto da classe Activity se mantém na memória, isto é, o estado atual do
objeto permanece intacto. Todas as alterações que o usuário faz são salvas e quando a
activity retorna para o primeiro plano, essas mudanças permanecem. Mas quando o
10
sistema destrói e o usuário inicia a activity novamente, o objeto é recriado. Para
preservar o estado da activity pode-se sobrescrever o método onSaveInstanceState(). O
sistema passa para esse método um Bundle (contém pares de nomes e valores), onde
podemos guardar as informações. Assim, quando o sistema destrói e recria a activity,
este Bundle é passado o onCreate() e o onRestoreInstanceState().
Este dois métodos são muito úteis quando uma mudança no dispositivo ocorre
durante a execução do aplicativo, por exemplo, na orientação do mobile. Quando
acontece, a activity é destruída e criada novamente. Pode-se tratar esta mudança de
orientação usando esses dois métodos, pois, antes de a activity ser destruída, o
onSaveInstanceState() é chamado e, quando for reconstruída, o
onRestoreInstanceState() é chamado. Abaixo temos um exemplo, onde as variáveis x e i
foram salvas para, posteriormente, serem recuperadas.
11
Figura 2.5 – Exemplo de Instances.
Fonte: Oscilloscope Android.
2.5.2.2 – Intent
12
filter. Desta forma, a activity pode ser chamada por qualquer outra aplicação do
dispositivo móvel. Mas se a activity a ser invocada é da mesma aplicação, o método
startActivity() pode ser usado da segunda maneira abaixo.
O método startActivity() invoca uma outra activity mas não possibilita o retorno
de informação para a activity atual. Para isso, pode-se utilizar o método
startActivityForResult(). Além de passar um objeto da classe Intent, é necessário passar
um inteiro porque quando uma activity retorna um valor precisamos de uma forma de
identificar qual foi a activity.
13
requestCode é o código original fornecido para o método startActivityForResult(), para
identificar de qual activity veio o resultado. O resultCode é o código enviado pela
activity chamada no método setResult(). O objeto da classe Intent é o que fornecerá os
dados enviados pela activity chamada.
Com o método, da classe Intent, getStringExtra() podemos recuperar os dados
enviados pela activity chamada.
14
O adaptador Bluetooth oferece métodos para leitura e configuração das
propriedades do hardware Bluetooth. Esse adaptador pode ler ou configurar se estiver
habilitado. Caso não esteja, o método getDefaultAdapter() retorna null. Este teste é feito
no onCreate() da activity principal do projeto, conforme código abaixo.
15
BluetoothServerSocket: representa um servidor aberto para atender requisições
de outros dispositivos. Funciona com um host.
Por questões de privacidade, esta ação fica, por padrão, desabilitada. É possível
ligá-la através de uma permissão explícita do usuário, iniciando uma nova Activity
usando ACTION_REQUEST_DISCOVERABLE. Também por padrão, o dispositivo
local fica descobrível por dois minutos, porém é possível alterar a duração adicionando
EXTRA_DISCOVERABLE_DURATION na execução do Intent.
Para saber se o usuário permitiu ou não que o dispositivo fique apto a ser
descoberto por outros dispositivos Bluetooth pode-se sobrescrever o onActivityResult() e
verificar o parâmetro resultCode. Caso ele seja positivo, indica o tempo, em segundos,
que o adaptador Bluetooth local ficará numa situação possível de ser descoberto. Caso
seja negativo, indica que o usuário rejeitou o pedido.
Alguns métodos úteis da classe BluetoothAdapter para encontrar outros
dispositivos seguem abaixo:
isDiscovering() – retorna um boolean que indica se o dispositivo está ou não
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.
17
Figura 2.14 – Conexão com Dispositivo Bluetooth.
Fonte: Oscilloscope Android.
Esta é uma API Android open source utilizada para criação de gráficos. São
diversos tipos de gráficos disponíveis e muitas funcionalidades. Pode ser baixada no
Google Code através do link: https://code.google.com/p/achartengine/. Pode ser baixada
também no site dos desenvolvedores www.achartengine.org. Alguns dos recursos
incluem:
Classe Pan – permite que o usuário “arraste” o gráfico e possibilita uma visão
maior deste. Também possui uma classe panListener própria;
18
Classe Zoom – obviamente, permite que o usuário efetue um zoom no gráfico.
Também é possível criar um zoomListener para tratar um evento de zoom;
Os gráficos são criados como uma view;
Suporta vários tipos de gráficos;
Suporta mais de uma série de dados em um mesmo gráfico.
19
Figura 2.15 – Site da API AChartEngine.
Fonte: http://www.achartengine.org/.
20
Capítulo 3
Hardware
3.1 – Arduino
21
Figura 3.1 – Site da Arduino.
Fonte: http://arduino.cc/.
No projeto do osciloscópio foi utilizada a versão Arduino Uno R3, por se tratar
de uma versão que possui os componentes necessários e por ser menos custosa. Nesse
tópico iremos tratar da arquitetura deste Arduino, evidenciando o conversor A/D, como
funciona a programação utilizando a IDE e o código do projeto.
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
Vin 10
Vref
2 1 .
23
Existem dois modos de operação do conversor: conversão simples e o modo
livre. No modo de conversão simples é necessário iniciar cada conversão, isto é, quando
uma conversão é finalizada, os resultados são guardados nos registradores ADCH e
ADCL. Nenhuma outra conversão é iniciada. Só será possível iniciar uma outra
conversão quando o bit ADSC for para 1. Para indicar um evento de término de
conversão, pode ser utilizada uma rotina de interrupção (ISR).
No modo livre, a primeira conversão é iniciada e as outras subseqüentes são
iniciadas automaticamente. Só será necessário indicar qual canal será convertido,
através do registrador ADMUX.
O ADC deve ter um clock recomendado entre 50 kHz e 200 kHz, quando
desejamos uma resolução 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
estão armazenados no registrador ADCSRA e podem ser atribuídos os valores 2, 4, 8,
16, 32, 64 e 128. Esse registrador é configurado por padrão no arquivo wiring.c da
biblioteca do Arduino.
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
25
Pelo resultado abaixo, podemos calcular uma freqüência de amostragem de
16,667 kHz, ou seja, temos 16.667 amostras por segundo com o prescaler de 64, valor
próximo do calculado anteriormente.
26
Figura 3.7 – Resultado com Prescaler igual a 4.
Fonte: Oscilloscope Android
27
A plataforma (IDE) de desenvolvimento do software para o microcontrolador
Arduino recomendada é a disponibilizada pela própria faricante: Arduino IDE. Apesar
de possuir poucas funcionalidades, ela se mostra uma IDE simples e de fácil utilização.
Para inicialmente instalar o ambiente de desenvolvimento devemos seguir
alguns passos de configuração da plataforma, são eles:
28
Figura 3.8 – Código Exemplo de Estrutura de Programa para Arduino.
Fonte: Oscilloscope Android
29
computadores. No exemplo acima, é feita uma conversão analógico-digital do pino A0,
através da função analogRead(). Logo após é calculado o valor da tensão, a partir do
valor digital medido, e depois este é transmitido pela porta serial.
O Arduino possui uma biblioteca própria com diversas funções, abaixo seguem
as mais conhecidas:
30
do Arduino e os pinos que possibilitam a comunicação foram ligados nos pinos da porta
serial do Arduino.
Segue abaixo uma imagem do dispositivo:
31
Capítulo 4
Android Oscilloscope
32
devemos ter uma quantidade de amostras que permita ao software do Android, após
identificar o ponto de início do gráfico (trigger point), preencher a tela inteira.
A essa quantidade de amostras capturadas pelo osciloscópio é dado o nome de
profundidade de memória, que seria igual à taxa de amostragem multiplicado pela
configuração do tempo por divisão (escala no tempo) multiplicado ainda pela
quantidade de divisões.
No exemplo abaixo do aplicativo Oscilloscope, podemos ver que temos cinco
divisões no tempo e que a escala no tempo é de 1,0 milissegundos por divisão. Sabendo
que a taxa de amostragem para esta situação é de 100 kHz, podemos chegar à conclusão
que a profundidade de memória mínima é de 500 pontos (amostras).
33
No programa do Arduino foi necessária a criação de um vetor de bytes, esse
array recebe como primeiro valor um byte de start (valor digital 254), logo após
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 conversão (clock do ADC) já
discutida anteriormente nesse texto. O programa do Arduino possibilita ao programa do
Android a escolha entre três 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 opções de taxa de amostragem
seriam um início de melhoria do aplicativo Android para que este possa ter uma ou mais
taxas de amostragem configuráveis. Essa possibilidade será discutida mais adiante.
Conforme dito anteriormente, o conversor A/D do Arduino Uno R3 possui uma
resolução de 10 bits, porém essa configuração é não é editável. Em uma versão mais
recente desse microcontrolador foi adicionada esta funcionalidade em que o usuário
pode, através de uma função da API do Arduino, informar qual a resolução. É a versão
do Arduino Due. Essa placa possui um ADC de até 12 bits, porém o usuário, via
software, pode, por exemplo, configurar para 8 bits e assim os 12 bits previamente
convertido são mapeados para formarem um byte. Caso o usuário coloque 16 bits, por
exemplo, os outros 4 bits que complementar os 12 bits convertidos são preenchidos com
zero. No projeto, para realizar esse mapeamento manualmente foi construída uma
função 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 funções utilizadas para a porta serial do Arduino (UART ou USART)
também devem ser ressaltadas. A porta foi configurada para transmitir 9600 bits por
segundo e as funções de read – recebe a mensagem enviada pelo Android – e write –
envia a mensagem/dados para o dispositivo móvel.
A tecnologia utilizada tanto para o Arduino (Arduino Uno R3) como para o
módulo Bluetooth foram inteiramente suficientes para o bom funcionamento do
osciloscópio. Apesar de sempre existirem versões 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 versão futura do projeto poderia incluir comunicação com mais de um
dispositivo, ou seja, seria necessário um hardware com mais portas seriais. A conclusão
óbvia que podemos tirar é que um hardware que possui melhor performance ou mais
recursos, isto é, maior velocidade e precisão na conversão analógico-digital, mais portas
seriais, maior velocidade de processamento, teria facilitado e permitido mais
funcionalidades para o projeto.
35
Figura 4.2 – Tela Inicial do Aplicativo.
Fonte: Oscilloscope Android
36
Figura 4.3 – Tela About do Aplicativo.
Fonte: Oscilloscope Android
37
4.2.3 – Activity do Osciloscópio
38
Figura 4.4 – Solicitando Permissão para ativar Bluetooth.
Fonte: Oscilloscope Android
39
Figura 4.5 – Menu do Aplicativo.
Fonte: Oscilloscope Android
40
Figura 4.6 – DeviceListActivity.
Fonte: Oscilloscope Android
41
O fluxo dos dados começa quando o botão “Start” é acionado, neste momento o
celular envia para o módulo Bluetooth uma requisição de dados, esta mensagem é
interpretada pelo microcontrolador e inicia-se processo de tratamento dos dados
convertidos, conforme explicitado anteriormente.
Para fazer o controle de transmissão e recepção dos dados, na aplicação
Android, foi utilizado um método da classe Handler chamado handleMessage. Logo,
quando uma mensagem contendo os dados do sinal analógico convertido chega ao
celular, este método de controle é acionado. Este método recebe como parâmetro um
objeto da classe Message.
São quatro tipos de mensagem:
42
STATE_CHANGE – essa mensagem traz como argumento um dos quatro
possíveis estados do dispositivo Bluetooth: CONECTED, CONECTING,
LISTEN e NONE;
WRITE – quando uma mensagem foi enviada. Esse é o momento de reiniciar as
variáveis de controle do código;
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 vários bytes é recebida e se faz necessário dividir em blocos de
um byte e identificar o início da cadeia de dados (start byte) e o término (stop
byte). Somente após a chegada do stop byte é que o programa chama a rotina
para desenhar o gráfico.
43
Figura 4.8 – Exemplo 1 – Cálculo Vmax e Vpp.
Fonte: Oscilloscope Android
No exemplo acima, podemos conferir que o Vmax e o Vpp estão de acordo com
o esperado, sabendo que o Timer 555 em sua configuração astável possui tensão
máxima na saída igual a tensão de alimentação.
Na figura abaixo temos um outro exemplo com uma onda triangular:
44
Figura 4.9 – Exemplo 2 – Cálculo Vmax e Vpp.
Fonte: Oscilloscope Android
45
Figura 4.10 – Exemplo – Cálculo de Frequência.
Fonte: Oscilloscope Android
46
Neste projeto, foi tomado como padrão a região do Trigger onde a derivada é
positiva e o valor inicial é calculado e é igual à média do valor máximo com o valor
mínimo do vetor de dados. Esse valor inicial só é alterado quando o usuário alterar o
nível de Trigger.
Para identificar se o Trigger está ativo e com bom funcionamento é necessário
verificar, em várias atualizações de tela, se a onda periódica está “fixa”, mas para
ilustrar seguem abaixo algumas imagens do osciloscópio, onde o valor do ponto de
Trigger foi alterado pelo usuário.
47
Para a escala de tempo os valores definidos por divisão são: 0,1 ms, 0,2 ms, 0,5 ms, 1.0
ms e 2.0 ms.
Seguem abaixo alguns exemplos de alteração das escalas:
48
Capítulo 5
Conclusões
Esse projeto teve início durante o período 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 análises de
sinais de tensão. Obviamente, este trabalho ainda não tem a pretensão de substituir um
osciloscópio de bancada, que vem sendo utilizado há muitos anos em diversos
laboratórios de várias universidades e escolas, mas pode entregar ao usuário (leigo em
eletrônica ou não) um Software para dispositivo móvel que possibilita análise de sinais
de tensão em qualquer lugar.
Houveram dificuldades por se tratar de um projeto que lida com dois blocos
separados de hardware e software, foi necessário um ajuste (sincronismo) entre as duas
camadas. Outra dificuldade seria em relação aos testes, foram necessárias diversas
visitas ao laboratório para fazer uso do gerador de funções e do osciloscópio de bancada
(questões de comparação). Entre outras, todas foram superadas.
Realmente o trabalho atingiu os objetivos traçados na proposta inicial, porém
existem muitas possibilidades e melhorias para este. Seguem abaixo alguns possíveis
trabalhos futuros:
49
Bibliografia
[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