raphael a. m. de paula -...
TRANSCRIPT
UNIVERSIDADE SÃO FRANCISCO
Engenharia de Computação
RAPHAEL A. M. DE PAULA
DETECTOR DE CAMPOS ELETROMAGNÉTICOS DE
FREQUÊNCIAS ULTRA BAIXAS UTILIZANDO A
PLATAFORMA ARDUINO DUEMILANOVE
Itatiba
2011
RAPHAEL AUGUSTO MALHEIROS DE PAULA
RA 002200500027
DETECTOR DE CAMPOS ELETROMAGNÉTICOS DE
FREQUÊNCIAS ULTRA BAIXAS UTILIZANDO A
PLATAFORMA ARDUINO DUEMILANOVE
Monografia apresentada ao Curso de
Engenharia de Computação da
Universidade São Francisco, como
requisito parcial para obtenção do título
de Bacharel em Engenharia de
Computação.
Orientador: Prof. Dr. Cláudio K. Umezu
Itatiba
2011
Agradecimentos
Inicialmente agradeço a Deus por conceder sua iluminação e perseverança, e, embora
com participação sutil, foi determinante para bom andamento desta longa caminhada.
Valorizo o apoio irrestrito e multidisciplinar de minha mãe Mércia e meu pai Murilo,
sempre me orientando para o caminho correto.
Demonstro meu apreço por Mestres que felizmente cruzaram esta jornada, tais como
Eduardo Sartori, Edval de Matos, Percival de Lucena e Raimundo Vasconcelos, que não tem por
objetivos apenas a formação acadêmica do aluno, área na qual atuam com excelência, mas
também se preocupam em preparar seus pupilos para a vida de uma maneira geral, e também a
meu orientador Claudio Umezu.
As felicidades nas belíssimas amizades conquistadas, que espero levar pelos meus dias
nesta dimensão, principalmente nos nomes de Felipe “Tossi” Rossi, Franco “Francis” Altieri,
Natacha “Jaime” Feliciani, Rafael “Palminha” Gonçalves, Raquel “Esquilo Quik” Dalcin, Renato
“Lady Lacraia” Miraglia, que animaram e confortaram de maneira inestimável o fluxo corrente
de todos esses anos, bem como outras formas de contribuição provenientes do falecido Toninho,
aos poderes Shazam, à Constante de King, a mesa da diretoria e ao pessoal do Tigre Faminto.
Por fim agradeço enormemente à minha amada Carolina, que sempre me ajudou em
todos esses anos de diversos modos e por todos os motivos.
Vocês todos foram essenciais.
RESUMO
As redes de computadores tem desempenhado cada vez mais um papel vital em todas as
atividades comerciais e industriais, onde quaisquer falhas na comunicação de informações podem
adquirir proporções gigantescas. Com adaptações não profissionais às novas tecnologias de
comunicação, muitos ambientes de trabalho apresentam redes Ethernet com grande
suscetibilidade a interferências e falhas. Uma causa muito comum é a utilização de conduítes
elétricos para a instalação de cabos ethernet, normalmente cabo de pares trançados, categoria
cinco. Mesmo com a instalação de cabos blindados, estão expostos à severa interferência
eletromagnética de frequência ultra baixa, emanada por cabos de energia comuns, bem como
outros equipamentos eletrônicos em seu caminho, que também geram interferências em outras
faixas de frequência, e que podem comprometer o desempenho geral. Neste contexto, projeto
visou o desenvolvimento de um detector de interferência eletromagnética, utilizando a plataforma
opensource Arduino, cuja informação será exibida de maneira visual, e não métrica, a fim de
facilitar sua compreensão, permitindo uma instalação otimizada do cabeamento, com chances
reduzidas de exposição a interferências de frequências ultra baixas, beneficiando o desempenho
coletivo da infraestrutura de rede ethernet.
Palavras-chave: Arduino, Campo elétrico, Campo eletromagnético, Campo magnético,
Detecção, Interferência eletromagnética, Micro controlador, Ruído.
ABSTRACT
Computer networks have played an increasingly vital role in all commercial and
industrial activities, where any gaps or failures in communication may acquire gigantic
proportions. With barely professional adaptations to new communication technologies, many
workplaces have Ethernet networks highly susceptible to interference and failures. A very
common cause is the use of electrical conduit for the installation of Ethernet cables, usually
twisted pair cables, category five. Even with the installation of shielded cables, they are exposed
to severe ultra-low frequency electromagnetic interference, emanating from common power
cables and other electronic equipment on it's way, which also emanate interference in other
frequency bands, and can compromise the network's overall performance. This project aims to
develop a detector of electromagnetic interference, using the open source Arduino platform, with
visually displayed readings, not metric, in order to facilitate the understanding, allowing an
optimized installation of cabling, with reduced chances of exposure to ultra-low frequency
interference, benefiting the collective performance of the Ethernet network infrastructure.
Keywords: Arduino, Detection, Electric field, Electromagnetic field, Electromagnetic
Interference, Magnetic field, Microcontroller, Noise.
SUMÁRIO
LISTA DE FIGURAS . …………………………………………………………………….9
LISTA DE SIGLAS……………………………………………………………………….10
1 INTRODUÇÃO …………………………………………………………..……………..11
1.1 Objetivo………………………………………………………………….………..……12
2 METODOLOGIA………………………………………………………………………13
3 ESTUDOS DOS FENÔMENOS FÍSICOS................................................................. 14
3.1 Corrente elétrica ......................................................................................................... 14
3.2 Campo elétrico..................................................................................................................15
3.3 Condutores........................................................................................................................15
3.4 Campo Magnético ...................................................................................................... 16
3.5 Linhas de campo magnético ....................................................................................... 17
3.6 Teorema da amostragem...................................................................................................17
3.7 Filtros eletrônicos.............................................................................................................19
4 ARDUINO DUEMILANOVE .................................................................................... 22
4.1 Atrativos...........................................................................................................................25
5 PROGRAMAÇÃO ...................................................................................................... 26
5.1 Estrutura .................................................................................................................... 26
5.2 Funções ...................................................................................................................... 27
5.3 Chaves ....................................................................................................................... 27
5.4 Ponto e vírgula ........................................................................................................... 28
5.5 Comentários ............................................................................................................... 28
5.5.1 Comentários de linha ..................................................................................................... 28
5.5.2 Comentários em bloco ................................................................................................... 28
5.6 Variáveis .................................................................................................................... 29
5.6.1 Declaração de variáveis ................................................................................................. 29
5.6.2 Escopo de variáveis ....................................................................................................... 29
5.6.3 Tipos de variável ........................................................................................................... 30
5.6.3.1 Byte ........................................................................................................................ 30
5.6.3.2 Inteiro ..................................................................................................................... 30
5.6.3.3 Long ....................................................................................................................... 31
5.6.3.4 Float ....................................................................................................................... 31
5.6.3.5 Vetores ................................................................................................................... 32
5.7 Operadores ................................................................................................................. 32
5.7.1 Operadores aritméticos .................................................................................................. 33
5.7.2 Operadores compostos ................................................................................................... 33
5.7.3 Operadores de comparação ............................................................................................ 34
5.7.4 Operadores lógicos ........................................................................................................ 34
5.8 Constantes .................................................................................................................. 35
5.8.1 Verdadeiro/falso ............................................................................................................ 34
5.8.2 Alto/Baixo ..................................................................................................................... 35
5.8.3 Entrada/Saída ................................................................................................................ 36
5.9 Fluxo de controle ....................................................................................................... 36
5.9.1 Se .................................................................................................................................. 36
5.9.2 Se - Então ...................................................................................................................... 37
5.9.2 Para ............................................................................................................................... 38
5.9.3 Enquanto ....................................................................................................................... 39
5.9.4 Faça - enquanto ............................................................................................................. 39
5.10 Entradas e saídas digitais .......................................................................................... 40
5.10.1 Tipo do pino ................................................................................................................ 40
5.10.2 Leitura digital .............................................................................................................. 41
5.10.3 Escrita digital .............................................................................................................. 41
5.11 Entradas e saídas analógicas ..................................................................................... 42
5.11.1 Leitura analógica ......................................................................................................... 42
5.11.2 Escrita analógica.......................................................................................................... 43
5.12 Comandos temporais ................................................................................................ 43
5.12.1 Atraso .......................................................................................................................... 43
5.13 Comunicação ........................................................................................................... 44
5.13.1 Iniciar porta serial ........................................................................................................ 44
6 PROJETO………………………………………………………………………………45
6.1 Visualização……………………………………………………………………………45
6.1.1 LCD………………………………………………………….……………………….….45
6.1.2 Bargraph…………………………………………………………………………………48
6.2 Implementação de filtro……………………………………………….………………48
6.3 Codificação…………………………………………………………………………....51
6.3.1 Definição……………………………………………………………………..….………51
6.3.2 POST…………………………………………………………………………………….51
6.3.4 Tratamento……………………………………………………………………………....51
6.3.5 Visualização……………………………………………………………………………..51
6.4 Componentes…………………………………………………………………………..51
6.5 Testes…………………………………………………………………………………..52
7 CONCLUSÃO………………………………………………………………………….55
REFERÊNCIAS BIBLIOGRAFICAS………………………………………………….57
9
LISTA DE FIGURAS
Figura 1-1: Exemplo de instalação errada em conduíte..........................................11
Figura 2-1: Diagrama de metodologias...................................................................13
Figura 3-1: Exemplo de fio condutor......................................................................16
Figura 3-2: Campo eletromagnético ao redor de condutor retilíneo.......................17
Figura 3-3: Circuito LPF ativo básico, com fonte não simétrica............................20
Figura 3-4: Diferentes slopes de um filtro Butterworth..........................................21
Figura 4-1: Arduino Duemilanove..........................................................................22
Figura 4-2: Arduino Duemilanove, vista superior e inferior...................................23
Figura 4-3: Esquema elétrico do Arduino Duemilanove........................................24
Figura 6-1: LCD 16x2.............................................................................................45
Figura 6-2: Esquema de ligação de LCD 16x2..….................................................46
Figura 6-3. LED Bargraph......................................................................................48
Figura 6-4: Resposta simulada de filtro Butterworth..............................................49
Figura 6-5: Esquema elétrico do filtro....................................................................49
Figura 6-6: Simulação de filtro...............................................................................50
Figura 6-7: Diagrama de blocos..............................................................................50
Figura 6-8: Protótipo...............................................................................................50
10
LISTA DE SIGLAS
DC (Direct Current) Corrente direta;
DSP Digital Signal Processing;
EEPROM Electrically-Erasable Programmable Read-Only Memory;
E/S Entrada/Saída;
GND (Ground) Terra;
HPF (High Pass Filter) Filtro passa-alta;
IC (Integrated Circuit) Circuito integrado;
KB Kilobyte (1024 bytes ou 8192 bits);
LED (Light Emitting Diode) Diodo emissor de luz;
LPF (Low Pass Filter) Filtro passa-baixa.
mA Mili Amperes (0,001A);
POST Power on self-test;
PWM (Pulse Width Modulation) Modulação de largura de pulso;
SI Sistema internacional de unidades;
SMD (Surface Mount Devices) Dispositivo de montagem em superfície;
SRAM Static Random Access Memory;
USB Universal Serial Bus;
VIN Entrada de tensão.
11
1 INTRODUÇÃO
O desenvolvimento deste projeto visou a escolha de rotas otimizadas para instalação de
cabeamento de rede, de forma a diminuir problemas por causa de ruídos provenientes da rede
elétrica, em instalações erradas (Figura 1-1), detectando in loco, com um dispositivo portátil, a
presença de campos eletromagnéticos, e exibindo, de maneira visual, a intensidade dos mesmos.
Figura 1-1: Exemplo de instalação errada em conduíte.
Portanto, para sua realização são necessários sólidos conhecimentos sobre os fenômenos
físicos envolvidos, tais como campos eletromagnéticos e a teoria geral do eletromagnetismo,
efeitos e características de blindagens, teorias das pontas e efeito de pele (skin effect), apontados
de maneira primária como mais pertinentes ao tema, além do estudo e teste de antenas.
Pode-se também citar o estudo da linguagem de programação utilizado na plataforma
Arduino, semelhante à linguagem C, porém com suas particularidades de construção.
Dessa maneira, estabeleceu-se uma ordem de prioridades para a realização do projeto.
Porém, ao invés de focar-se em um objetivo de estudo por vez, decidiu-se optar por um estudo
concorrente entre a física teórica e desenvolvimento computacional, a fim de permitir a
prevenção de incompatibilidades entre as propostas e soluções adotadas, bem como a
programação de um código sólido, funcional e com menor complexidade.
12
Este trabalho tem por objetivo o desenvolvimento de um detector capaz de auxiliar na
instalação otimizada de cabeamento de rede ethernet, evitando o contato de possíveis
interferências prejudiciais em seu desempenho, consistindo no estudo dos fenômenos envolvidos,
das possíveis necessidades para a solução do problema, e do desenvolvimento de protótipo que
englobe essas necessidades e permita cumprir o objetivo.
13
2 METODOLOGIA
Para o desenvolvimento deste trabalho foi utilizada a combinação de diferentes
metodologias de pesquisa, resultando numa metodologia híbrida (Figura 2-1) concorrente,
consistindo primeiramente em uma pesquisa teórica inicial sofre os fenômenos físicos, evoluindo
para uma breve pesquisa histórica, permitindo selecionar os tópicos mais importantes, e de uma
reforçada pesquisa empírica, para conhecer a relevância dos fenômenos mencionados.
E em um segundo momento, a utilização de uma metodologia experimental, com teste
em ambiente parcialmente controlado (onde embora não se possa quantificar os fenômenos, é
possível a certificação de sua ocorrência) e de testes de campo, em ambiente profissional, nesse
caso uma coordenadoria especial de tecnologia de informação.
Figura 2-1: Diagrama de metodologias utilizadas.
TEÓRICA
EXPERIMENTAL
METODOLOGIA HÍBRIDA
EMPÍRICA
HISTÓRICA
14
3 ESTUDOS DOS FENÔMENOS FÍSICOS
De acordo com numerosas fontes, os primórdios do descobrimento do eletromagnetismo
remetem a Grécia antiga, onde notaram que ao atritar um pedaço de âmbar com pele de carneiro
podia-se atrair pequenos pedaços de palha, além do conhecimento sobre pedras capazes de atrair
o ferro (magnetita). Essas raízes históricas originam a palavra eletricidade, derivada de eléktron,
que é o grego para âmbar.
As ciências da eletricidade e do magnetismo desenvolveram-se de maneira independente
até 1820, quando H. C. Oersted notou, acidentalmente, a relação entre ambas, ao visualizar a
atração de uma agulha imantada de uma bússola próxima a um fio condutor de corrente elétrica.
Este novo ramo científico foi então desenvolvido por numerosos cientistas, dos quais
podemos destacar Michael Faraday, James Maxwell, entre outros.
Para simplificar o entendimento, os fenômenos físicos foram divididos em assuntos
delimitados, para abranger as diversas facetas do tema.
3.1 Corrente elétrica
A corrente elétrica é um conjunto de cargas elétricas em movimento, podendo ou não
estar em função do tempo. A corrente, denominada i, e cuja grandeza é medida em Ampères [A],
e seu comportamento, devido a carga negativa dos elétrons, é atraído pelo polo positivo e repelida
pelo polo negativo.
3.2 Campo elétrico
A força elétrica é uma força que age à distância, de maneira que não haja interação física
entre as partes. A noção de campo elétrico [2] é atribuída ao inglês Michael Faraday, que define
um campo elétrico se estendendo de cada carga e permeia todo o espaço. Se uma segunda carga é
aplicada próxima a primeira carga, ela sentirá a força exercida pelo campo elétrico presente.
Para cargas em repouso, o campo elétrico no condutor é zero com as cargas em repouso
[2]. Outra propriedade importante é que um campo elétrico é sempre perpendicular a superfície
fora de um condutor.
15
3.3 Condutores
Nesta parte foram apresentadas algumas propriedades e características de fios condutores
(Figura 3-1). Condutores normalmente são compostos de algum material com afinidade para
cargas elétricas, isto é, que oferece menor resistência para o fluxo de elétrons, e revestido por
algum material dielétrico, que age como uma barreira isolante. Além das diferentes bitolas
(comumente especificadas em mm² ou AWG), dependendo de sua aplicação podem ocorrer
diversas variações.
Materiais:
- Cobre (Cu) puro;
- Ligas de Cobre (Cu) e Alumínio (Al);
- Cobre (Cu) revestido de Prata (Ag);
- Prata pura (Ag);
- Prata (Ag) e Ouro (Au);
- Ouro (Au) puro.
Além da adição de outros materiais incomuns, como Tungstênio ou Zinco, também
possuem diferentes graus de pureza, bem como métodos de processamento, presença de oxigênio,
resíduos.
Alguns fios condutores possuem uma camada de blindagem, cuja função é eliminar ou
atenuar interferências. Dependendo do formato aplicado, as blindagens podem ser classificadas
em:
- malha;
- folha.
Diferentes geometrias visam alterar o comportamento dos campos eletromagnéticos
internamente gerados num condutor, resultando em uma maior resistência a interferências, por
exemplo. As geometrias mais comuns são:
- Litz (normalmente utilizada em cabos UTP e STP);
- Kimber;
16
- Oval.
Figura 3-1: Exemplo de fio condutor.
Convém adiantar que condutores também apresentam a influência de campos magnéticos
além de campos elétricos.
3.4 Campo Magnético
Análogo aos campos elétricos, um campo magnético é um campo vetorial ao entorno de
um objeto de estudo. Porém, manifesta-se apenas quando a carga elétrica está em movimento, e
não por cargas estáticas.
Diversos exemplos de campos magnéticos podem ser encontrados na natureza, e também
podem ser artificialmente criados. Envolvendo-se um núcleo ferroso com um fio condutor e
aplicando uma corrente elétrica obtêm-se um campo magnético B, cuja grandeza é medida em
Tesla [T] pelo SI, e sua intensidade é intimamente ligada e grandeza da corrente elétrica presente.
17
3.5 Linhas de campo magnético
Um campo magnético pode ser representado por linhas vetoriais. Citando diretamente
Halliday, têm-se duas regras básicas:
“(1) a direção da tangente a uma linha de campo magnético, em qualquer ponto, nos dá a direção de B naquele ponto, e (2) o espaçamento das linhas é uma
medida do módulo de B, portanto o campo é forte onde as linhas estão mais próximas
umas das outras e inversamente”. [1]
Dado este comportamento, pode-se observar a orientação do fluxo de um campo
magnético baseando-se no sentido da corrente elétrica presente. Este é um ponto chave deste
projeto, pois permite denotar a presença de um campo magnético circular ao redor de um
condutor retilíneo.
Na Figura 3-2 pode-se notar a orientação de um campo magnético em relação a corrente i
ao redor de um condutor retilíneo isolado por material dielétrico.
Figura 3-2: Campo magnético ao redor de condutor retilíneo.
3.6 Teorema da amostragem
Nesta sessão abordou-se o teorema da amostragem. Originalmente desenvolvido por
Harry Nyquist, também é conhecido por Teorema da amostragem de Shannon, ou Nyquist-
Shannon-Kotelnikov, Whittaker-Shannon-Kotelnikov, Whittaker-Nyquist-Kotelnikov-Shannon,
WKS, ou simplesmente, Teorema da Amostragem.
É de suma importância na área de telecomunicações e processamento de sinais (DSP),
pois trata da conversão de sinais analógicos para domínios digitais. O teorema pode ser descrito
da seguinte maneira:
18
"Seja um sinal, limitado em banda, e seu intervalo de tempo dividido em
partes iguais, de forma que se obtenham intervalos tais que, cada subdivisão
compreenda um intervalo com período T segundos, onde T é menor do que 1/2*FM, e se uma amostra instantânea é tomada arbitrariamente de cada subintervalo, então o
conhecimento da amplitude instantânea de cada amostra somado ao conhecimento dos
instantes em que é tomada a amostra de cada subintervalo contém toda a informação
do sinal original." [5]
Ou seja, um sinal analógico amostrado, de banda limitada, pode ser corretamente
recuperado se a taxa de amostragem for igual ou superior a 2 * FMAX amostras por segundo, onde
FMAX é a maior frequência, em Hertz, do sinal original. Embora existam algumas particularidades
em relação ao Teorema, esta definição é abrangente e atende a maioria dos processos de
amostragem.
Em termos práticos, pode-se dizer que:
- Caso a maior frequência (B) do sinal seja conhecida, o teorema fornece o limite
inferior da frequência de amostragem para garantir uma reconstrução perfeita. A taxa
de Nyquist é definida por 2 * B;
- Caso a frequência de amostragem seja conhecida, o teorema fornece um limite
superior para os componentes de frequência para a reconstrução perfeita, B < FS / 2.
Este limite superior para é a frequência de Nyquist, denominada FN.
Se a frequência de amostragem for conhecida, o teorema fornece um limite superior para
os componentes de freqüência, B <fs / 2, do sinal para permitir a reconstrução perfeita. Este
limite superior é a freqüência de Nyquist, denotado fN.
3.7 Filtros eletrônicos
Filtros eletrônicos são circuitos que visam executar funções de processamento de sinais,
a fim de remover componentes de frequências indesejadas do sinal. Os filtros podem ser
categorizados de diversas maneiras.
Dependendo da construção, pode-se utilizar diferentes tecnologias:
19
- Filtros passivos (RLC): combinação de resistores, capacitores e indutores, onde
podem ainda existir apenas filtros RC e RL, dependendo do efeito desejado;
- Filtros ativos: combinam componentes passivos com componentes ativos, ou seja,
utiliza um componente amplificador, normalmente um circuito integrado, e utiliza
alimentação externa;
- Filtros digitais: efetuam operações matemáticas em um sinal previamente
amostrado.
Além destes, existe filtros mecânicos, filtros atômicos, filtros Garnet, entre outros.
Existem diversas topologias que norteiam o projeto de um filtro:
- Topologia de Cauer – Indutores e capacitores (passivo);
- Topologia Sallen-Key – Resistores e capacitores (ativo);
- Topologia Realimentação (feedback) múltipla - Resistores e capacitores (ativo);
- Topologia Biquadrática - Resistores e capacitores (ativo) ;
- Entre outras topologias.
Dependendo do grau polinomial da derivação matemática do filtro, podem ser
classificados por classes:
- Butterworth: sem ganho de ondulação na banda passante e na banda rejeita, corte
lento;
- Chebyshev (Tipo I): sem ganho de ondulação na banda passante, corte moderado;
- Chebyshev (Tipo II): sem ganho de ondulação na banda rejeita, corte moderado;
- Bessel: sem ondulação no atraso, sem ganho de ondulação em ambas as bandas,
corte lento;
- Filtro Elíptico - ganho de ondulação em ambas as bandas, corte rápido.
- Entre outras classes.
20
Conforme o efeito do filtro, podem ser classificados de acordo com sua terminologia:
- Filtro passa alta (HPF): é um filtro que permite a passagem de frequências acima da
frequência de corte;
- Filtro passa baixa (LPF): é um filtro (Figura 3-3) que permite a passagem de
frequências abaixo da frequência de corte;
- Filtro passa banda: permite a passagem da uma banda intermediária de frequências,
como uma combinação entre filtros HPF e LPF;
- Filtro rejeita banda: rejeita a passagem de uma banda intermediária de frequências,
realizando o inverso do filtro passa banda;
- Filtro Notch: é um filtro que rejeita a banda ao extremo, reduzindo a um valor muito
baixo uma frequência específica;
- Filtro All-pass: é um filtro que permite a passagem de todas as frequências do sinal,
porém altera a fase do mesmo. Embora todos os filtros alterem a fase de um sinal, este filtro é
focado exclusivamente neste objetivo.
Figura 3-3: Circuito LPF ativo básico, com fonte não simétrica. [7]
Os filtros também variam conforme a intensidade de atenuação, caracterizado por seu
slope, que indica qual a atenuação em decibéis (dB) por agrupamentos de frequências,
normalmente oitavas (cada oitava representa o dobro da frequência) ou décadas. Dessa forma, os
filtros recebem a atribuição de ordem, sendo os mais comuns de 1ª ordem até 4ª ordem:
- Primeira ordem: 6 dB/8ª ou 20 dB/Década;
21
- Segunda ordem: 12 dB/8ª ou 40 dB/Década;
- Terceira ordem: 18 dB/8ª ou 60 dB/Década;
- Quarta ordem: 24 dB/8ª ou 80 dB/Década.
A Figura 3.4 ilustra a diferença na resposta de frequência de um filtro passa-baixa
Butterworth conforme a variação de sua ordem.
Figura 3-4: Diferentes slopes de um filtro Butterworth.
Embora existam diversos tipos de filtros, métodos de desenvolvimento, esta visão,
embora simplificada, é suficiente para auxiliar na implementação de um filtro útil ao projeto
deste trabalho.
22
4 ARDUINO DUEMILANOVE
Figura 4-1: Arduino Duemilanove [4]
O modelo Arduino Duemilanove (2009, em Italiano) é um modelo intermediário da
família Arduino. Consiste em uma plataforma baseada no controlador ATmega168 ou
Atmega328. Neste projeto foi utilizado o modelo ATMEL Atmega328.
Esta plataforma possui 14 (catorze) pinos digitais que podem ser usados como entradas
ou saídas, dos quais 6 (seis) podem ser usadas como saídas PWM (Pulse Width Modulation), 6
(seis) entradas analógicas, um oscilador de cristal de 16MHz, conexão USB (modelo B), entrada
para alimentação, LEDs SMD de estado e operação e botão de reset.
As especificações técnicas do modelo em questão são:
- Micro controlador: Atmega328;
- Tensão de operação: 5V ;
- Tensão de entrada (recomendada): 7-12V;
- Tensão de entrada (limite): 6-20V;
- E/S Digitais: 14 (6 saídas PWM);
- Entradas analógicas: 6;
23
- Corrente DC por pin: 40 mA;
- Memória Flash: 32 KB;
- SRAM: 2 KB;
- EEPROM: 1 KB;
- Velocidade de clock: 16MHz;
- Comunicação serial.
A alimentação, que pode ser feita pela própria porta USB ou por fonte externa, é dotada
de um seletor automático. Tensões abaixo de 7Volts podem causar instabilidades na placa e
tensão insuficiente nos pinos 5V. Já uma tensão superior a 12Volts pode causar
superaquecimentos no regulador de tensão e danificar a placa.
Figura 4-2: Arduino Duemilanove, vista superior e inferior. [4]
O Arduino Duemilanove utiliza os seguintes pinos para o gerenciamento de energia:
- VIN: Responsável pela entrada quando utilizando fonte externa;
- 5V: Utilizado pelo microcontrolador e outros ICs na placa, pode ser obtido
pela entrada USB ou pelo VIN;
- 3V3: Tensão de 3,3Volts gerada na placa;
- GND: Pinos de aterramentos.
24
Os métodos utilizados para E/S e comunicação serão abordados na sessão sobre a
linguagem de programação. Como informação complementar, a Figura 3 apresenta o esquema
elétrico do Arduino Duemilanove.
Figura 4-3: Esquema elétrico (Arduino Duemilanove) [4]
25
4.1 Atrativos
Os principais atrativos para utilização da plataforma Arduino em relação a outras (Ex:
PIC), de maneira sucinta, são:
- Maior acessibilidade para usuários sem conhecimentos sólidos em tecnologias
correlatas;
- Grande comunidade de desenvolvimento e compartilhamento orientada ao Open
Source;
- Prototipagem simples e rápida;
- Diversas bibliotecas para facilitar o desenvolvimento;
- Comunicação serial e alimentação via USB;
- Compilação rápida, sem necessidade de aplicativos de terceiros.
26
5 PROGRAMAÇÃO
A plataforma Arduino utiliza uma linguagem de programação semelhante à linguagem
computacional C, porém com respectivas particularidades na sintaxe e construção.
Neste estágio foram abordadas as diretivas básicas [3] para montagem de código na
linguagem.
5.1 Estrutura
A estrutura utiliza dois componentes fechados, um Void Setup(), executada apenas uma
vez e responsável pela preparação (declaração de variáveis, pinos, comunicação serial) e um Void
Loop(), responsável pela execução (leitura de entradas, execução de saídas, lógicas de
programação). Ambos são requeridos para execução.
Exemplo de Void Setup():
void setup()
{
pinMode(pin, OUTPUT); // ativa o pino como saída
}
Exemplo de Void Loop():
void loop()
{
digitalWrite(pin, HIGH); // liga o pino
27
delay(1000); // pausa por um segundo
digitalWrite(pin, LOW); // desliga o pino
delay(1000); // pausa por um segundo
}
5.2 Funções
As funções são blocos de códigos com variáveis e comandos específicos, ativados
quando a função é chamada. Para declarar uma função, primeiro especifica-se o tipo, sendo que
se não houver tipo (int, por exemplo) deve ser declarado como void. A seguir o nome da função,
e entre parênteses os parâmetros a serem utilizados.
Genericamente, a declaração de uma função é feita da seguinte forma:
tipo Nomedafuncao(parametros)
{
código;
}
5.3 Chaves
São utilizadas para definir o início e o fim de blocos de função, tais como o Void loop()
e Void setup(). Toda chave aberta deve ser balanceada, isto é, fechada, para evitar erros de
compilador. O ambiente de programação fornecido disponibiliza a iluminação dos pares de
chaves, para facilitar a localização de possíveis erros.
28
5.4 Ponto e vírgula
Utiliza-se o ponto e vírgula para finalizar uma linha do programa e para separar
elementos de um laço. A ausência do ponto e vírgula irá resultar em erro de compilador.
5.5 Comentários
A linguagem pode ser documentada por duas maneiras diferentes, comentários de linha
ou comentários em bloco.
5.5.1 Comentários de linha
Utiliza-se apenas uma linha para realiza um comentário. Exemplo:
//Comentário de uma linha
5.5.2 Comentários em bloco
O comentário se entende por algumas linhas, formando um bloco. Iniciados por ‘ /* ’ e
finalizados por ‘ */ ’. Conforme outras funções, devem ser balanceados. Exemplo:
/*
Bloco de comentário
Bloco de comentário
Bloco de comentário
*/
29
5.6 Variáveis
Uma variável precisa ser declarada e opcionalmente assinalada com o valor a ser
guardado. Exemplo:
int inputVariable = 0; // declara a variável e
// assinala o valor 0
inputVariable = analogRead(2); // set a variável para o
// valor do pino analógico 2
O comando inputVariable é a própria variável, neste caso declarando um int. A segunda
linha seta a variável para o valor do pino analógico 2. Isso permite o valor do pino 2 ser acessado
em outras partes do código. Embora qualquer nome possa ser usado para descrever uma variável,
uma boa prática é adotar nomes que remetem facilmente ao seu uso.
5.6.1 Declaração de variáveis
Todas as variáveis devem ser declaradas antes do uso. A declaração nada mais é que
definir o tipo de seu valor (int, long, float et al), um nome específico e opcionalmente um valor
inicial. Uma variável pode ser declarada em diversas partes do programa, o que determina seu
escopo.
5.6.2 Escopo de variáveis
O escopo de uma variável determina quais partes do programa podem fazer seu uso.
Uma variável global é declarada no início do programa, antes da função void setup().
30
Uma variável local é definida dentro de uma função ou como parte de um laço. Só é
visível e utilizável dentro da função na qual foi declarada. Dessa forma é possível ter variáveis
completamente diferentes como o mesmo nome, em diferentes partes do código. Exemplificando:
int value; // 'value' é visível
// para qualquer função
void setup()
{
// sem necessidade de setup
}
void loop()
{
for (int i=0; i<20;) // 'i' é visível apenas
{ // dentro do laço for
i++;
}
float f; // 'f' é visível apenas
// dentro de loop
}
5.6.3 Tipos de variável
A seguir serão apresentados os tipos de dados mais utilizados na plataforma Arduino.
5.6.3.1 Byte
Byte arquiva um valor numérico sem pontos decimais de 8 bit, de 0 a 255.
31
byte VariavelByte = 17;7 //declara variavelByte como tipo byte
5.6.3.2 Inteiro
Inteiros são a forma básica para o arquivamento de números de ponto decimal. Varia de
32.767 até -32.768 (16 bit).
int variavelInt = 1999; //declara variavelInt como tipo inteiro
Caso forçada além de seus limites uma variável irá para seu outro valor extremo.
Considerando x - 32676, caso x seja incrementado seu novo valor será x = -32768.
5.6.3.3 Long
Semelhante aos inteiros, porém com 32 bit, variando de 2.147.647 até
-2.147.483.648.
long variavelLong = 90000;// declara variavelLong com o tipo long
5.6.3.4 Float
Um tipo de dados para ponto flutuante, ou números com pontos decimais. Arquivados
em 32 bit variando de 3.4028235E+38 até -3.4028235E+38.
32
float variavelFloat = 3.14; // declara variavelFloat com o tipo float
Operações com ponto flutuante não são exatas e podem apresentar resultados estranhos
em comparações, além de tornar as operações matemáticas mais lentas.
5.6.3.5 Vetores
Um vetor é um conjunto de valores, acessados com um número indexador, partindo do
zero. Pode-se chamar qualquer valor de um vetor através de seu nome e seu índice.
int Vetor[] = {valor0, valor1, valor2...}
int Vetor[5]; // declara vetor de inteiros com 6 posições
Vetor[3]= 10; // atribuí ao 4º índice o valor 10
x = Vetor[3]; // x é igual a 10
5.7 Operadores
São utilizados para executar diversas operações na execução do código.
5.7.1 Operadores aritméticos
As operações aritméticas incluem adição, subtração, multiplicação e divisão,
retornando, respectivamente, a soma, diferença, produto ou quociente de dois operandos.
33
a = 3 + 4;
b = 9 - a;
c = 2 * b;
d = c / 2;
Dependendo dos tipos de variável dos operandos, o resultado pode ser alterado. No caso
de um inteiro, a divisão 9 / 4 resulta 2 ao invés de 2.25.
5.7.2 Operadores compostos
Combinam operações aritméticas com uma variável. Os mais comuns são:
x ++ // semelhante a x = x + 1, ou incrementa x por +1
x -- // semelhante a x = x - 1, ou decrementa x por -1
x += y // semelhante a x = x + y, ou incrementa x por +y
x -= y // semelhante a = x - y, ou decrementa x por -y
x *= y // semelhante a x = x * y, ou multiplica x por y
x /= y // semelhante a x = x / y, ou divide x por y
5.7.3 Operadores de comparação
São utilizados para comparação entre variáveis, normalmente para atestar a veracidade
de uma condição.
34
x == y // x é igual a y
x != y // x não é igual a y
x < y // x é menor que y
x > y // x é maior que y
x <= y // x é menor ou igual que y
x >= y // x é maior ou igual que y
5.7.4 Operadores lógicos
Utilizados para comparação de duas expressões, retornando TRUE ou FALSE,
dependendo do operador. Existem três operadores lógicos: AND, OR e NOT.
AND Lógico:
if (x > 3 && x < 7) //verdadeiro apenas se ambas expressões forem verdadeiras
OR Lógico:
if (x > 2 || y > 4) //verdade se alguma das expressões for verdadeira
NOT Lógico:
if (!x > 0) //verdadeiro apenas se a expressão for falsa
35
5.8 Constantes
São particularidades pré-definidas na linguagem utilizada no Arduino, separadas em
grupos e utilizadas para simplificar a leitura do código.
5.8.1 Verdadeiro/falso
São constantes booleanas para definir níveis lógicos. FALSE é definido por 0 (zero) e,
embora TRUE normalmente seja definido como 1(um), ele pode qualquer valor exceto zero.
if (bool == FALSE);
{
Execução;
}
5.8.2 Alto/Baixo
Essas constantes atribuem níveis HIGH e LOW para leitura ou escrita de pinos digitais.
Por definição HIGH é nível lógico 1, Ligado, ou tensão de 5Volts e LOW é nível lógico 0,
Desligado, ou tensão de 0Volts.
digitalWrite(13, HIGH);
5.8.3 Entrada/Saída
Constantes usadas com o comando pinMode(), para definição de um pino digital como
INPUT ou OUTPUT.
36
pinMode(13, INPUT);
pinMode(5, OUTPUT);
5.9 Fluxo de controle
Determinam o sequenciamento de instruções, execuções e chamadas de função dentro
da linguagem computacional.
5.9.1 Se
A condicional If (se) testa a veracidade de certa condição, e então executa ações dentro
das chaves. Caso negativo o código não executa as ações. Sua construção básica possui a seguinte
forma:
if (Variável ?? Valor){
Ação;
}
O programador deve observar o uso de operadores comparadores "==" (é igual a) ao
invés de apenas "=" (igual).
5.9.2 Se - Então
O conjunto If - Else permite ações diferentes dependendo do resultado. Por exemplo:
37
if (inputPin == HIGH)
{
ExecuçãoA;
}
else
{
ExecuçãoB;
}
É possível utilizar diversos Else para a realização de testes mutuamente exclusivos:
if (inputPin <500)
ExecuçãoA;
else if (inputPin >= 1000)
{
ExecuçãoB;
}
else
{
ExecuçãoC;
}
5.9.2 Para
O comando For é utilizado como laço de repetição, normalmente acompanhado de um
contador incremental para finalizar o loop. É dividido em três partes, separadas por ponto e
virgula.
38
for (inicialização; condição; expressão)
{
Execução;
}
O exemplo a seguir inicia um inteiro em 0, compara até seu valor ser menor que 20, e
caso afirmativo, incrementa i em 1 e executa os comandos:
for (int i=0; i<20; i++) // declara i, testa até menor que 20,
{ // incrementa i por 1
digitalWrite(13, HIGH); // liga o pino 13
delay(250); // pausa por 1/4 de segundo
digitalWrite(13,LOW); // desliga o pino 13
delay(250); // pausa por 1/4 de segundo
}
5.9.3 Enquanto
O comando While executa um loop continuamente e indefinidamente, até que a
expressão entre parênteses seja falsa. Algo deve alterar a variável testar ou o loop não terminará.
Normalmente utilizada com uma variável incremental ou alguma condição externa, como um
sensor de teste.
39
while (variável ?? valor){
Execução;
}
5.9.4 Faça - enquanto
A combinação de comandos do - while funciona da mesma maneira que o loop
enquanto, porém a condicional é testada apenas ao final do loop, de maneira a garantir sua
execução pelo menos uma vez.
do {
fazerAlgo;
}
enquanto (variável ?? valor);
O exemplo a seguir assinala lerSensor() para a variável 'x', pausa por 50ms, e repete o
loop indefinidamente até que 'x' não seja menor que 100:
do
{
x = lerSensor(); // assinala o valor de
// lerSensor() para x
delay(50); // pausa por 50 ms
}
while (x < 100); // repete se x é menor que 100
40
5.10 Entradas e saídas digitais
Comandos utilizados para especificação e utilização de E/S Digitais.
5.10.1 Tipo do pino
Usado no void setup() para configurar o comportamento de um pino específico como
ENTRADA ou SAÍDA.
pinMode(pin, OUTPUT); // especifica o pino como saída
A pinos digitais do Arduino por default recebem atribuição de entrada, não sendo
necessária a declaração com o pinMode(). Pinos de entrada são ditos em estado de alta
impedância.
O CI Atmega possui resistores de 20K Ohms de fábrica, que podem ser acessados via
software da seguinte maneira:
pinMode(pin, INPUT); // especifica o pino como entrada
digitalWrite(pin, HIGH); // ativa os resistores
Esses resistores são normalmente utilizados para conectar interruptores. Pinos
configurados como saída são ditos num estado de baixa impedância, e provê até 40 mA para
outros dispositivos/circuitos.
Curtos-circuitos causados por sobre corrente podem danificar ou mesmo destruir o pino,
o danificar o CI Atmega. Recomenda-se o uso de resistores de 470 Ohms ou 1K Ohms em série
com o dispositivo externo.
41
5.10.2 Leitura digital
Lê o valor de um pino digital único, cujo resultado é HIGH ou LOW.
value = digitalRead(Pin); // especifica 'valor' igual o pino de entrada
5.10.3 Escrita digital
Atribui a um pino específico o nível lógico HIGH ou LOW (liga ou desliga).
digitalWire(pin, HIGH)
O código a seguir lê um botão conectado a uma entrada digital e aciona um LED
conectado uma saída digital.
int led = 13; // Conecta o LED ao pino 13
int pin = 7; // conecta o botão ao pin 7
int value = 0; // variável auxiliar
void setup(){
pinMode(led, OUTPUT); // Especifica o pino 13 como saída
pinMode(pin, INPUT); // Especifica o pino 7 como entrada
}
42
void loop()
{
value = digitalRead(pin); // Especifica 'valor' igual ao pino de entrada
digitalWrite(led, value); // Escreve no 'led' o valor do botão
}
5.11 Entradas e saídas analógicas
Comandos utilizados para especificação e utilização de E/S Analógicas.
5.11.1 Leitura analógica
Lê o valor de um pino específico, com resolução de 10 bit. Esta função funciona apenas
com os pinos analógicos (0-5). O inteiro resultante varia de 0 até 1023.
value = analogRead(pin); // Especifica 'valor' igual a 'pino'
Ao contrário dos pinos digitais, pinos analógicos não necessitam ser declarados como
INPUT ou OUTPUT.
5.11.2 Escrita analógica
Escreve um valor pseudo-analógico utilizando a modulação de largura de pulso nos
pinos de saída PWM.
43
analogWrite(pin, value); // Atribui 'valor' ao 'pino'
Um valor de 0 gera 0Volts fixos na saída de um pino específico, um valor de 255 gera
5Volts fixos na saída de um pino específico.
5.12 Comandos temporais
Embora a plataforma Arduino possua variados comandos para trabalhar com
informações temporais, citaremos apenas a o comando Delay devido a sua pertinência ao tema.
5.12.1 Atraso
Pausa o programa pela quantidade de tempo especificada em milisegundos, sendo que
1000ms = 1s.
delay(1000); // espera por um segundo
5.13 Comunicação
Comandos que regem a utilização das ferramentas de comunicação universais da
plataforma Arduino.
5.13.1 Iniciar porta serial
44
Proporciona a abertura da porta serial, e ajusta a taxa de Bauds para transmissão de
dados serial. Embora outras velocidades sejam suportadas,
a taxa típica é de 9600 bps (bauds per second).
void setup()
{
Serial.begin(9600); // abre a porta serial
} // ajusta velocidade para 9600 bps
Enquanto a comunicação serial estiver em uso, os pinos digitais 0 (RX) e 1 (TX) não
podem ser usados.
45
6 PROJETO
Nesta sessão foram abordadas questões relevantes ao desenvolvimento do protótipo
deste projeto de conclusão de curso.
6.1 Visualização
A seguir foram discutidas formas para a apresentação de dados.
6.1.1 LCD
Este projeto utilizou um LCD de 16 caracteres por 2 linhas, dotado de luz de fundo de
cor azulada, com controle de contraste.
Figura 6-1: LCD 16x2.
O LCD possui uma interface paralela, o que significa que o microcontrolador tem que
manipular pinos interface de várias ao mesmo tempo para controlar a exibição. A interface
consiste dos seguintes pinos:
Um pino register select (RS), que controla onde na memória do LCD a escrita será
efetuada. Pode-se selecionar o registro de dados, que detém o que se passa na tela, ou um
46
registrador de instrução, que é onde o controlador de LCD de procura por instruções sobre o que
fazer em seguida.
Um pino de Leitura / Escrita (R / W) que seleciona a leitura ou o modo de escrita, e um
pino Enable que ativa escrita nos registradores.
Oito pinos de dados (D0-D7). Os estados desses pinos (alto ou baixo) são os bits
escritos em um registrador quando a operação é escrita, ou os valores lidos, quando a operação é
leitura.
Há também um pino de contraste do display (Vo), pinos de alimentação (+5 V e GND)
e luz de fundo (backlight) LED, BKLT + e BKLT, pinos pode-se usar para ligar o LCD, controlar
o contraste do display, e ligar e desligar o LED backlight, respectivamente.
Figura 6-2: Esquema de ligação de LCD 16x2.
47
Trecho de código para inicialização do LCD:
/ inclui biblioteca de código:
#include <LiquidCrystal.h>
// inicializa a biblioteca com os valores dos pinos de interface.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
// seta o número de linhas e posições do LCD.
lcd.begin(16, 2);
// Imprime uma mensagem no LCD..
lcd.print("hello, world!");
}
void loop() {
// seta o cursor para coluna 0, linha 1.
// (note: linha 1 é a 2ª posição, já que a contagem começa em 0):
lcd.setCursor(0, 1);
// Imprime o numero de segundos desde o reset.
lcd.print(millis()/1000);
}
Infelizmente no final do desenvolvimento do projeto o display LCD apresentou
problemas. E embora o backlight ainda funcionasse, o display estava incapacitado, não exibindo
caracteres corretamente, independente do nível de contraste. Após buscas, foi constatado que este
48
é um defeito crônico em algumas linhas de LCD 16X2, e a única solução é a troca. Não havendo
tempo hábil nem recurso financeiro para tal, optou-se pelo uso de um bargraph.
6.1.2 Bargraph
Um bargraph (Figura 6-4) nada mais é que um segmento de diodos emissores de luz, de
variadas cores e tamanhos.
Figura 6-3: Exemplo de bargraph LED.
Devido a quantidade de pinos disponível para conexão do Arduino Duimilanove, a
melhor escolha foi usar um bargraph de 10 LEDs.
6.2 Implementação de Filtro
A plataforma a ser utilizada, o Arduino Duemilanove, apresenta uma taxa máxima de
amostragem de 10.000Hz, ou seja, atende um frequência de Nyquist de até 5.000 Hz, ou 5kHz.
Considerando que os sinais elétricos alvo oscilam numa frequência de 60 Hz, o Arduino
Duemilanove atende os critérios necessários. Porém, conforme o teorema informa, é necessário
limitar a banda do sinal, o que nos leva ao desenvolvimentos de um filtro eletrônico.
Devido as características do projeto, optou-se pela implementação de um Filtro passa
baixa (LPF), RC Ativo, Butterworth, e utilizando a topologia Sallen-Key, de primeira ordem.
49
Conforme a Figura 6-4, a implementação de um filtro Butterworth visa resposta em
frequência plana (sem picos ou ondulações) na banda passante, e se aproxima do zero na banda
rejeitada.
Figura 6-4: Resposta simulada de filtro Butterworth.
A Figura 6-5 ilustra o esquema elétrico para um filtro passa-baixa Butterworth
de topologia Sallen-Key.
Figura 6-5: Esquema elétrico do filtro.
50
Nota-se na Figura 6-4 existe uma atenuação de aproximadamente 3dB na frequência de
corte. Para evitar atenuações na faixa de 60Hz, optou-se por um corte de 80Hz, que também
atende aos critérios do Teorema de Nyquist.
Utilizando o software FILTER PRO, produzido pela Texas Instruments, em licença
freeware, pode-se simular os valores para o desenvolvimento do filtro desejado.
Figura 6-6: Simulação de filtro.
Utilizando as informações colhidas, possibilitou-se o desenvolvimento de um filtro,
atendendo as necessidades especificadas, utilizando o circuito integrado TL071 e os componentes
descritos, utilizando a fonte de tensão provida pelo Arduino Duemilanove.
51
6.3 Codificação
O código utilizado no Arduino Duemilanove para o funcionamento desde dispositivo é
dividido em quatro blocos principais: definição, POST, tratamento e exibição. Embora o código
não seja divulgado, podemos comentar sobre as características de cada bloco.
6.3.1 Definição
O bloco de definição atribui às funções dos respectivos pinos, entrada, saídas, valores
iniciais, bibliotecas necessárias, entre outras particularidades.
6.3.2 POST
A sessão de POST (Power on self test) é responsável pelo teste elétrico do dispositivo,
checando o funcionamento dos LEDs, por exemplo.
6.3.3 Tratamento
O bloco de tratamento recebe os dados provenientes da detecção e os converte em
valores relativos aceitáveis para o dispositivo.
6.3.4 Visualização
Realiza o controle do bargraph, recebendo dados do bloco de tratamento e os
convertem para a exibição visual.
6.4 Componentes
Nesta sessão ilustra-se o diagrama de blocos (Figura 6-7) dos diferentes grupos de
componentes deste projeto. Cada bloco é composto pelos seguintes componentes:
- Detecção: antena, resistor 3M3;
- Filtro: CI TL071, resistores 18KΩ e 1K5Ω, capacitores 1 μF e 150nF;
- Micro controlador: Arduino Duemilanove;
- Exibição: Bargraph, resistores 470Ω.
52
Figura 6-7: Diagrama de blocos.
Além dos componentes mencionados neste projeto também foram utilizados os
seguintes recursos:
- Fiação de interconexão;
- LED diversos;
- Baterias (9V);
- Conector de bateria;
- Ferramentas diversas.
Devido à necessidade de alimentação do filtro requisitar uma fonte simétrica, foi
realizada uma associação de baterias 9V para obter as tensões positivas e negativas necessárias.
6.5 Testes
Utilizando um protótipo (Figura 6-8), realizaram-se testes para aferir o funcionamento e
as características do projeto.
Inicialmente utilizou-se uma antena (fio 24 AWG) de aproximadamente 0,10 metros,
porém a sensibilidade resultante provou ser insatisfatória, necessitando de uma grande
proximidade para efetuar uma detecção.
Num teste subsequente, utilizou-se uma antena, das mesmas características, porém com
comprimento de aproximadamente 0,20 metros. Neste caso a sensibilidade foi satisfatória,
permitindo a detecção há alguns centímetros de distância.
DETECÇÃO
FILTRO
MICRO
CONTROLADOR
EXIBIÇÃO
53
Figura 6-8: Protótipo.
Utilizando-se um fio 2x1.5mm, aplicando uma tensão elétrica de 127V em 60Hz, foram
efetuadas as medições exibidas na Tabela 6-1:
DISTÂNCIA DETECÇÃO
0,02 m 7 níveis
0, 04 m 5 níveis
0, 06 m 3 níveis
0,08 m 0 níveis
0,10 m 0 níveis
Tabela 6-1: Níveis detectados conforme distância.
54
Com o comportamento apresentado. o projeto possibilitou a detecção a uma distância
relativamente aceitável, exibindo equipamentos que podem influenciar negativamente, e inclusive
permitindo seguir o caminho de conduítes instalados em paredes.
55
7 CONCLUSÃO
Neste capítulo foram apresentadas e debatidas ideias acerca das realizações deste
projeto, a começar por uma breve menção ao tema deste trabalho.
Normalmente, quando opta-se por uma expansão da infraestrutura de rede ethernet, na
maioria dos casos, os objetivos principais são custo mínimo e tempo mínimo, descartando
estudos prévios e a possibilidade de problemas. Com a parcela de mão de obra desqualificada
para efetuar tais instalações, é neste momento que um serviço mal executado acaba criando um
risco maior.
A metodologia híbrida atendeu as expectativas, permitindo que o projeto crescesse em
conjunto, sem a necessidade de revisar ou modificar áreas finalizadas devido a novos
desdobramentos, permitindo um efetivo desenvolvimento concorrente das áreas teóricas e
práticas.
Durante o desenvolvimento deste projeto, as maiores dificuldades encontradas foram
acerca do Teorema de Nyquist e o processamento digital de sinais, que são áreas ausentes no
curso de Engenharia de Computação e também o desenvolvimento do filtro passa-baixa. Embora
na grade curricular existam algumas disciplinas relacionadas ao tema, não há embasamento
teórico e prático suficiente, exigindo estudos complementares.
Devido à presença de entradas analógicas no Arduino Duemilanove, foi possível a
detecção de níveis de tensão (oriunda de campos eletromagnéticos), e sua conversão em valores
digitais, de 0 a 1023, níveis que são adaptados para corresponder ao resultado exibido. Reitera-se
que ao atender ao os critérios de Nyquist, o projeto apresenta uma correta capacidade de amostrar
e reconstruir corretamente os sinais necessários. onde procurou-se um ponto de equilíbrio, para
não tornar a detecção uma tarefa extremamente minuciosa, e nem permitir um comportamento de
detecção omnidirecional, que em ambientes com maior incidência de interferências.
De maneira geral, o conjunto destas etapas permitiu o desenvolvimento de um detector
que atende, com sucesso, a ideia original, e, verificando os resultados obtidos, pode-se afirmar
que o projeto auxilia no descobrimento de pontos a serem evitados na instalação de uma rede
ethernet.
56
Caso houvesse mais tempo e recursos, as principais melhorias e mudanças deste projeto
seriam na troca de outro display LCD e no aprofundamento do estudo dos fenômenos físicos.
Embora a documentação seja suficiente para o desenvolvimento e compreensão, talvez fosse
interessante o desenvolvimento de alguns outros temas, permitindo uma explicação mais
abrangente. E, embora tenham sido realizados, uma maior quantidade de testes, melhor
documentação, em outros tipos de ambientes e com a verificação do comportamento de diversos
equipamentos normalmente encontrados em ambientes residenciais, comerciais, e industriais,
bem como, se possível, alguns equipamentos específicos.
Na parte de codificação, para um resultado diferenciado, a implementação de uma
função média de visualização, podendo compensar por eventuais picos e vales na resposta.
Como implementações futuras, talvez utilizando outra plataforma controladora, ou
mesmo com o desenvolvimento de um circuito próprio, de um detector que possa trabalhar com
frequências mais elevadas, podendo detectar e amostrar outros tipos de sinais de interferências.
E, num exercício mental, a concepção de um detector deste porte acoplado a um
dispositivo de mapeamento, que permitir criar um mapa tridimensional de fontes ruidosas em um
ambiente, criando um mapa tridimensional de suas localizações e intensidades.
57
REFERÊNCIAS BIBLIOGRAFICAS
[1] HALLIDAY, David; RESNICK, Robert, et al: Fundamentos de Física 3:
Eletromagnetismo;
[2] GIANCOLI, Douglas C.: Physics for Scientists and Engineers with Modern Physics, 4ª Ed;
[3] EVANS, Brian: Arduino Programming Notebook, ed6, e-book;
[4] ARDUINO, disponível online em http://www.arduino.cc;
[5] SHANNON, Claude E.: Communication in the presence of noise, Institute of Radio
Engineers, vol.37;
[6] SELF, Douglas. The Design of Active Crossovers, Focal Press, 2011;
[7] CARTER, Bruce. Filter Design in Thirty Seconds, Texas Instruments, relatório de aplicação,
SLOA093 – December 2001;
[8] DRAKA, disponível online em http://communications.draka.com/, SuperCat 5 24 Cat.5e,
2009;