Você está na página 1de 34

RELATRIO FINAL DAS ATIVIDADES DO

BOLSISTA
(Relatrio individual por bolsista por projeto)

1. IDENTIFICAO DO PROJETO

Ttulo do Projeto:

Sistema para medio de campos eletromagnticos debaixa frequncia para monitorao
desubestaes eambientes industriais
Professor responsvel pelo Projeto (identificar o nome do lder do grupo de pesquisa):

Marclio Andr Flix Feitosa


Equipe Executora

Docente Departamento e-mail
Marclio Andr Flix Feitosa Engenharia Eltrica marcilio@poli.br
Gustavo Oliveira Cavalcanti Engenharia Eltrica gustavooc@poli.br



2. IDENTIFICAO DO BOLSISTA

Nome do Aluno Curso Matrcula e-mail
Larissa Maria Figueira
Bacelar
Engenharia
Eletrotcnica
09735080435 larissa_bacelar@hotmail.com

3. PERODO DE REALIZAO

Incio ___01___ / ___08___ / ___12____
Trmino ___31___ / ___07___ / ___13____

























3. Sobre o Projeto

3.1 Resumos do Projeto (Introduo, Objetivos)


Linhas de transmisso e equipamentos eletrnicos, entre outros, so fonte de radiao
eletromagntica de alta ou baixa frequncia. O campo gerado nestas situaes pode ser
prejudicial sade [1] e gerar interferncia em equipamentos eletrnicos [2]. A lei que
regulamenta a intensidade de campo a resoluo normativa N 398 da ANEEL, de 23 de
maro de 2010 [3]. Esta norma prev que, para o pblico em geral, a mxima intensidade de
campo eltrico e magntico devem ser de 4,17 kV/m e 83,33 T (0,83 Gauss),
respectivamente. Para a populao ocupacional as intensidades mximas devem ser de 8,33
kV/m 416,67 T (4,167 Gauss) para campos eltricos e magnticos, respectivamente. Este
projeto se destina ao estudo e desenvolvimento de um sensor de campo magntico e a
construo de um equipamento de medio de campos magnticos de baixas e mdias
frequncias, com capacidade de medio de campos de intensidade vrias vezes maior que os
nveis aceitveis pela resoluo normativa mencionada. O projeto tambm prev atividades de
monitorao em reas residenciais localizadas prximas a torres de transmisso de alta tenso
para determinar se as intensidades dos campos esto dentro dos nveis aceitos por lei.

O objetivo do projeto foi desenvolver um sistema capaz de medir campos magnticos
de baixas e mdias freqncias a um baixo custo, visto que j existem equipamentos capazes
de fazer a mensurao. O sensor escolhido composto por ligas magneto-resistivas,
comercializado na forma de circuitos integrados, capaz de medir as componentes magnticas
dos campos. Um sistema baseado na plataforma Arduino foi desenvolvido para fazer a
aquisio do sinal analgico proveniente dos sensores, realizao de todos os clculos
necessrios e apresentao dos resultados dos campos medidos em um display. O esquema
est indicado na Figura 1. O sistema desenvolvido ser aplicado na medio dos campos
gerados por equipamentos eltricos e linhas de transmisso, para comparao com os nveis
de intensidade de campo permitidos por lei [3].



Figura 1: Diagrama ilustrativo dos circuitos constituintes do projeto.

Inicialmente foi feito um estudo sobre os tipos de sensores de campo magntico
disponveis no mercado e qual tipo a ser selecionado. Existem dois tipos principais de sensores
de campo magntico: os magneto-resistivos e os que se baseiam no efeito Hall.
Sensores magneto-resistivos [5] consistem basicamente de elementos magneto-
resistivos, ou seja, componentes cuja resistncia muda de acordo com o campo magntico que
incide sobre eles. Tal fenmeno ocorre em alguns materiais ferrosos, e para a aplicao em
sensores utilizada uma liga de Ferro e Nquel. Tais componentes so montados numa
configurao chamada ponte de Wheatstone, mostrada na Figura 2, composta por quatro
resistores, formando dois divisores de tenso em paralelo. aplicada uma tenso alimentando
esse circuito e mede-se a diferena da tenso entre os dois divisores de tenso.

Figura 2: Ponte de Wheatstone.

Quando no h nenhum campo magntico incidindo sobre o circuito, a tenso zero,
pois todos os elementos magneto-resistivos apresentam a mesma resistncia. Ou seja,
dizemos que a ponte est balanceada. Porm, ao aplicarmos um campo magntico
perpendicular a esse circuito, a resistncia desses materiais varia e a ponte ficar
desbalanceada, surgindo uma tenso entre os dois pontos centrais dos divisores de tenso.
Essa diferena poder ser negativa ou positiva, dependendo do sentido do campo magntico.


Figura 3: Ponte de Wheatstone ao aplicar campo magntico em sentidos opostos

Assim como um acelermetro, esse sensor mede o campo magntico em determinados
eixos, sendo que para cada eixo h uma ponte de Wheatstone composta por elementos
magneto-resistivos. Esses so basicamente os nicos elementos do sensor, exceto alguns
componentes utilizados para uma possvel regulagem do sensor.
Existem tambm os sensores cujo funcionamento baseado no efeito Hall [5],
baseiam-se no princpio de interao entre campos magnticos e cargas eltricas. Quando
uma corrente passa por um material condutor, ela distribui-se uniformemente ao longo do
material e no h nenhuma diferena de potencial (tenso) entre as laterais do material.
Porm, ao aproximarmos um im, o campo magntico perturbar a distribuio da corrente ao
longo do material. Haver um acmulo de cargas negativas (eltrons) em um dos lados do
condutor, o que gerar uma tenso entre suas laterais. Se invertermos o sentido do campo
magntico, a tenso presente no material tambm ser invertida.
Essa diferena de tenso muito pequena, mas se for amplificada, pode ser
monitorada por um circuito externo. Essa amplificao j feita internamente no sensor. A
sada desse sensor pode ser analgica ou digital. Os sensores analgicos possuem uma sada
correspondente intensidade do campo magntico que incide sobre eles. J nos digitais, sua
sada estar num nvel lgico alto enquanto no houver um campo magntico. Se o campo
magntico ultrapassar certo valor, ento a sua sada se encontrar num nvel lgico baixo.
Desse modo, os sensores de efeito Hall digitais comportam-se como chaves digitais acionadas
por ims.
Sensores de efeito Hall so empregados principalmente em indstrias, como sensores
de posio, pois so durveis e prticos. Basta colocar um im na estrutura que se deseja
controlar o movimento e utilizar um sensor para detectar quanto o im aproxima-se do sensor.
Os dois tipos de sensores possuem certas diferenas em relao ao seu
funcionamento. Em geral, os magneto-resistivos so mais sensveis e podem detectar campos
magnticos a distncias maiores. J os de efeito Hall tm a vantagem de possurem um maior
ngulo de cobertura.
Baseando-se nessas definies escolheu-se o sensor HMC5883L[4] constitudo por
ligas magneto-resistivas, fabricado pela Honeywell. Trata-se de um sensor magntico
construdo para medir a direo e a magnitude de campos magnticos nos trs eixos (x, y, z),
com baixa tenso de operao (2.16 a 3.6 V) e baixo consumo de corrente (127 A), tem como
protocolo de comunicao: I2C digital interface [6], mensura uma faixa bem estreita de campo
magntico:-/+8 Gauss, alm de detectar dados de campo em uma frequncia de 160 Hz. De
acordo com o critrio de Nyquist [7], a frequncia de amostragem de um sinal analgico, para
que possa posteriormente ser reconstitudo com o mnimo de perda de informao, deve ser
igual ou maior a duas vezes a maior frequncia do espectro desse sinal. Portanto, tal sensor
capaz de amostrar adequadamente os sinais de campo magntico de 60 Hz das linhas de
transmisso.
Aps a escolha do sensor, foram desenvolvidos cdigos que continham bibliotecas de
comandos referentes ao barramento I2C e ao HMC5883L, capazes de fazer a aquisio dos
sinais analgicos provenientes do sensor. Os dados referentes aos campos magnticos eram
simultaneamente obtidos pelo sensor e enviados via comunicao serial pelo Arduino para o
computador. Tais dados eram provenientes do campo magntico produzido por um
transformador ligado em vazio. Com os resultados obtidos do Arduino fez-se uma anlise do
sinal, baseada em algoritmos como a Transformada rpida de Fourier (FFT- Fast Fourier
Transform) [8] [9] que calcula a transformada de Fourier discreta (DFT) [10]. A transformada de
Fourier converte tempo (ou espao) em frequncia e vice-versa. Os resultados calculados pelo
Arduino foram devidamente comparados a resultados calculados por softwares matemticos e
as amplitudes confirmaram os resultados do Arduino. Essa anlise do sinal foi essencial para
descobrir a componente fundamental do sinal e garantir que o sensor captava campos na
frequncia de 60 HZ e obter as respectivas amplitudes. Em seguida o cdigo foi implementado
para mostrar esses dados em um display LCD.

3.2 Cronograma proposto






3.3 Material de Estudo

Na primeira etapa do projeto os materiais de estudo foram os datasheets dos possveis
sensores, haja vista que existe uma larga variedade de sensores de campo magntico. Os
principais levantamentos das caractersticas dos sensores consistiam de: garantir que o sensor
era capaz de mensurar o campo magntico e no simplesmente fazer deteco; buscar aquele
mais sensvel, pois a faixa de campo de magntico produzido pelas linhas de transmisso
muito pequena (0,83 Gauss a 4,167 Gauss). Portanto, o sensor procurado deveria ser capaz
de medir uma faixa escolhida de aproximadamente 0.4 Gauss a 10 Gauss, com a finalidade de
constatar uma possvel fuga da Norma mencionada anteriormente; analisar as frequncias de
amostragem dos mesmos bem como suas caractersticas eltricas de operao para que no
ocorresse problema na comunicao com o Arduino.
Quando encerrado o estudo dos datasheets e escolhido o sensor j mencionado, foi
necessrio um aprofundamento em programao no arduino, como linguagem de
programao, funes disponveis, bibliotecas para a comunicao I2C para finalmente
elaborao dos cdigos.
Em seguida, pesquisas sobre anlise de processamento de sinais foram estudadas
para a criao de algoritmos capazes de fazer o devido tratamento do sinal de campo
magntico.


3.4 Delineamento experimental e tratamentos utilizados

A fim de mensurar amplitudes de campos magnticos obtidos pelo sensor HMC5883L
todo o delineamento experimental foi computacional com o auxlio do Arduino e sua linguagem
prpria.
A elaborao dos cdigos foi feita em etapas. Inicialmente o cdigo desenvolvido tinha
como objetivo: o estabelecimento correto de comunicao entre o sensor e o Arduino,
configurao dos registradores do sensor bem como a visualizao dos dados impressa na tela
do computador via USB.

3.4.1 Comunicao entre o sensor e o Arduino:
Como j dito anteriormente a comunicao entre o sensor e o Arduino feita pelo
protocolo I2C que usado para interconexo de diversos circuitos integrados a um nico
barramento de quatro linhas fsicas. O barramento I2C possui uma linha para enviar/receber
dados, chamada linha serial de dados (SDA) e outra linha usada para o clock que sincroniza a
comunicao, denominada linha serial de clock (SCL) e as outras duas linhas so formadas
pelo positivo (VDD) e o terra (GND)

A comunicao entre o HMC5883L e o Arduino foi toda feita atravs da interface I2C
onde o sensor o escravo e o Arduino o mestre da seguinte forma:





Tabela 1: Ligao dos pinos do sensor com o Arduino.
Sensor (HMC5883L) Arduino
GND GND
VCC 3.3 V
SDA Pino A4 (Arduino UNO) / Pino 20 (Arduino Mega)
SCL Pino A5 (Arduino UNO / Pino 21 (Arduino Mega)



Figura 4: Ligao dos pinos do sensor com o Arduino.



3.4.2 Configurao dos registradores do sensor:

Foram feitos alguns ajustes em alguns registradores especficos para que o sensor
operasse na forma desejada para o projeto. Os registradores alterados esto mostrados abaixo
juntamente com os respectivos comandos feitos pelo Arduino. Os outros registradores
mantiveram-se como modelo de fbrica que esto mais detalhados no Datasheet do sensor [4].

Para o registrador B:
O registrador B consiste nas configuraes de ganho do sensor, ou seja, a faixa de
campo detectada pelo sensor. A configurao de fbrica para uma faixa de campo entre 1.3
Gauss, que no serviria para o projeto. Portanto, a alterao feita no registrador B foi para
coloc-lo na configurao de aquisio de campos magnticos de intensidade entre +/-8.1
Gauss, que seria a mxima intensidade de campo detectada pelo sensor, essa intensidade
estaria dentro da faixa escolhida mencionada acima (0.4 Gauss a 10 Gauss).


Comandos enviados pelo Arduino:

Wire.beginTransmission(MAG_ADDRESS);

Wire.write((byte) 0x01); //Grava os dados de endereo do registrador
B.

Wire.write((byte) 0xE0);//Grava os dados de configurao do
registrador B, define o ganho de +/-8.1 Gauss (0xE0-11100000)

Wire.endTransmission();




Tabela 2: Configurao alterada do Registrador B.
CRB7 CRB6 CRB5 CRB4 CRB3 CRB2 CRB1 CRB0
GN2 (1) GN1 (1) GN0 (1) (0) (0) (0) (0) (0)


Tabela 3: Designao dos Bits do Registrador B (retirada do Datasheet).


Tabela 4: Configuraes de Ganho (retirada do Datasheet)



Para o registrador de Modo:
O registrador de modo consiste nas configuraes de modo de medio como, por
exemplo: medio contnua ou medio simples. A configurao de fbrica desse registrador
para que o sensor mea continuamente. Como o intuito foi fazer medies a uma taxa de
amostragem conhecida, foi necessrio alterar este registrador para o modo de medio
simples, alterando o tempo de espera para a prxima aquisio para aproximadamente 8 ms.

Comandos enviados pelo Arduino:

Wire.beginTransmission(MAG_ADDRESS);

Wire.write((byte) 0x02);// Grava os dados de endereo do registrador
de Modo.

Wire.write((byte) 0x01);//Grava os dados de configurao do
registrador de modo e define o modo de medio nica (00000001).

Wire.endTransmission();
Tabela 5: Configurao alterada do Registrador de Modo

MR7 MR6 MR5 MR4 MR3 MR2 MR1 MR0
(0) (0) (0) (0) (0) (0) MD1 (0)* MD0 (1)*







Tabela 6: Designao dos Bits do Registrador de Modo (retirada do Datasheet)








Tabela 7: Modos de operao (retirada do Datasheet)









3.4.3 Cdigo inicial:

//Cdigo que acessa os dados correspondentes as medidas de campo
magntico nas direes X, Y e Z, calcula sua taxa de amostragem e
imprime os resultados obtidos na tela do computador via comunicao
Serial.

//Aquisio dos dados em 8ms em 8ms, o que corresponde a uma
freqncia de 125HZ, atendendo ao critrio de Nyquist.

#include <Wire.h>

#define MAG_ADDRESS ((char) 0x1E)// define o endereo da comunicao
I2C no sensor.

uint8_t mag_buffer[6];//vetor sem sinal, de tamanho 6 com 8 bits cada,
armazenado na memria temporria (SRAM) {(X MSB(8) XLSB(8); YMSB(8)
YLSB(8); ZMSB(8) ZLSB(8)}

int16_t mag_raw[3];// Vetor de tamanho 3 com 16 bits cada {valor bruto
de X(16); Y(16); Z(16)}

long tempo1 = 0, tempo2 = 0;// variveis utilizadas para o clculo do
tempo de amostragem, considerando o tempo de comunicao com o
Arduino.


// Funo configMag


Void configMag()
{
uint8_t mag_name;


//Configurao do registrador B
Wire.beginTransmission(MAG_ADDRESS);

Wire.write((byte) 0x01);//Grava os dados de endereo do registrador B.

Wire.write((byte) 0xE0); //Grava os dados de configurao do
registrador B, define o ganho de +/-8.1 Gauss (0xE0-11100000)

Wire.endTransmission();



// Configurao do registrador de modo
Wire.beginTransmission(MAG_ADDRESS);

Wire.write((byte) 0x02);//Grava os dados de endereo do registrador B.

Wire.write((byte) 0x01);//Grava os dados de configurao do
registrador de modo e define o modo de medio nica (00000001).

Wire.endTransmission();

}


// ler 6 bytes (x,y,z medidos do campo magntico) do sensor



voidreadMag() {

// leitura dos dados dos registradores(de 0x03 a 0x08)

Wire.beginTransmission(MAG_ADDRESS);


Wire.write((byte) 0x03); // o endereo do primeiro byte de dado

Wire.endTransmission();


Wire.beginTransmission(MAG_ADDRESS);
Wire.requestFrom(MAG_ADDRESS, 6); // Requisita 6 bytes

int i = 0;

while(Wire.available()) // Retorna o nmero de bytes disponveis:

{

mag_buffer[i] = Wire.read(); // L o primeiro byte e coloca no vetor
mag_buffer


i++; // incrementa at i ser igual a 6

}

Wire.read();// L todos os bytes requisitados

Wire.endTransmission();


// Combina os dados brutos em nmeros ineiros (O HMC588L envia
primeiro o byte MSB)
// ________ MSB _______ _____ LSB ____


mag_raw[0] = (mag_buffer[0] << 8) | mag_buffer[1];


mag_raw[1] = (mag_buffer[2] << 8) | mag_buffer[3];


mag_raw[2] = (mag_buffer[4] << 8) | mag_buffer[5];


// Coloca o dispositivo de volta no modo de medio nica.


Wire.beginTransmission(MAG_ADDRESS);


Wire.write((byte) 0x02);


Wire.write((byte) 0x01);


Wire.endTransmission();
}
void setup()

{

Serial.begin(115200);//inicia a comunicao serial a 115200 bps.

Serial.println("Inicializando...");//imprime.

Serial.print (" Campo X");

Serial.print(" ");

Serial.print ("Campo Y");

Serial.print(" ");

Serial.print ("Campo Z"); Serial.print(" ");

Serial.println ("Tempo de amostragem");

Wire.begin();//inicia a biblioteca wire referente ao barramento I2C.

configMag();//chama a funo configMag.

tempo1 = millis();//atribui a varivel tempo1 o nmero de
milissegundos contados desde o incio do funcionamento do programa at
este ponto.

}

void loop() {

readMag();// chama a funo readMag

delay(6); // espera 6.5 ms para a prxima aquisio, pois somado ao
tempo que o sensor gasta (aproximadamente 1.5 ms)obtm-se um tempo de
amostragem igual a 8ms.

tempo2 = (millis() - tempo1);//atribui a varivel tempo2 o nmero de
microssegundos contados referente ao lao de leitura e converte em
milissegundos.



Serial.print(" ");Serial.print(mag_raw[0]); Serial.print("
");//imprime valores brutos do eixo X;
Serial.print(mag_raw[1]); Serial.print(" ");//imprime valores
brutos do eixo Y;
Serial.print(mag_raw[2]); Serial.print(" ");//imprime valores
brutos eixo Z;

Serial.println(tempo2);
}










Resultados:

Na execuo desse cdigo no havia presena de campo magntico induzido.
Observa-se que o tempo de amostragem aproximadamente 8ms.


Figura 5: Amostras obtidas do cdigo, sem campo induzido.


Em seguida utilizou-se o mesmo cdigo com o sensor prximo a um transformador
110/220V, e obteve-se o seguinte resultado:



Figura 6: Amostras obtidas do cdigo, com campo induzido.

3.5 Variveis analisadas e resultados parciais obtidos

A principal varivel analisada foi o campo magntico obtido nos resultados
apresentados acima. Os sinais nas trs direes foram decompostos para descobrir as
componentes fundamentais e verificar se eram as componentes de 60 Hz, em seguida foram
analisadas as amplitudes das mesmas. Para isso calculou-se a transformada de Fourier dos
dados, no software grfico Origin. Os grficos so mostrados abaixo:

Grficos dos sinais utilizando o transformador:
0 10 20 30 40 50 60
-50
0
50
100
150
200
250
300
350


A
m
p
l
i
t
u
d
e

d
o

C
a
m
p
o

n
a

d
i
r
e

o

X
(
m
G
)
Frequncia (Hz)

Figura 7: Grfico da Amplitude do Campo na direo X, utilizando o transformador.

0 10 20 30 40 50 60
0
200
400
600
800
1000
1200


A
m
p
l
i
t
u
d
e

d
o

C
a
m
p
o

n
a

d
i
r
e

o

Y

(
m
G
)
Frequncia (Hz)

Figura 8: Grfico da Amplitude do Campo na direo Y, utilizando o transformador.
0 10 20 30 40 50 60
0
50
100
150
200
250


A
m
p
l
i
t
u
d
e

d
o

C
a
m
p
o

n
a

d
i
r
e

o

Z

(
m
G
)
Frequncia (Hz)

Figura 9: Grfico da Amplitude do Campo na direo Z, utilizando o transformador


Grficos dos sinais sem campo induzido:
0 10 20 30 40 50 60
-1
0
1
2
3
4
5
6
7


A
m
p
l
i
t
u
d
e

d
o

C
a
m
p
o

n
a

d
i
r
e

o

X

(
m
G
)
Frequncia (Hz)

Figura 10: Grfico da Amplitude do Campo na direo X, sem o transformador
0 10 20 30 40 50 60
-1
0
1
2
3
4
5
6
7
8


A
m
p
l
i
t
u
d
e

d
o

C
a
m
p
o

n
a

d
i
r
e

o

Y
(
m
G
)
Frequncia (Hz)

Figura 11: Grfico da Amplitude do Campo na direo Y, sem o transformador

0 10 20 30 40 50 60
0
2
4
6
8
10
12


A
m
p
l
i
t
u
d
e

d
o

C
a
m
p
o

n
a

d
i
r
e

o

Z
Frequncia (Hz)
Figura 12: Grfico da Amplitude do Campo na direo Z, sem o transformador


Portanto, ao analisar os grficos pde-se concluir que o sensor foi capaz de detectar os
campos de 60 Hz.
Em seguida, o projeto se focou em fazer os clculos da Transformada de Fourier no
Arduino para mostrar como resultado final apenas a componente de 60 Hz no display LCD.
Para o clculo da DFT: considerando-se N amostras do sinal no domnio do tempo,
denotadas f(t), t=0,1,2,...,N-1, a DFT dada por um conjunto de N amostras do sinal no
domnio da freqncia , denotadas por F(u), u= 0,1,2,...,N-1 e definidas por

()

()

()





Diz-se ento que f(k) F(n) formam um par transformada e a reobteno do sinal no
domnio do temporal pode ser feita usando a transformada inversa discreta de Fourier:
() ()

()
Quando se deseja trabalhar com os valores de freqncia e tempo, usa-se:

(

) (

), onde (

) (

()

ao invs da notao simplificada f(k) F(n).

Desenvolvendo a equao (1):

()


()( ) ()


()


()( )

()

()

(())

(())

()





Essas equaes foram desenvolvidas no Arduino em diferentes testes. O primeiro teste
consistia em utilizar o cdigo para calcular a DFT das amostras de uma senide de amplitude
10 V e freqncia 60 Hz, gerada pelo Excel. Essas amostras esto mostradas a seguir:

0.00, 1.25, -2.49, 3.68, -4.82, 5.88, -6.85, 7.71, -8.44, 9.05, -9.51, 9.82, -9.98, 9.98, -9.82, 9.51,
-9.05, 8.44, -7.71, 6.85, -5.88, 4.82, -3.68, 2.49, -1.25, 0.00, 1.25, -2.49, 3.68, -4.82, 5.88, -6.85,
7.71, -8.44, 9.05, -9.51, 9.82, -9.98, 9.98, -9.82, 9.51, -9.05, 8.44, -7.71, 6.85, -5.88, 4.82, -3.68,
2.49, -1.25, 0.00, 1.25, -2.49, 3.68, -4.82, 5.88, -6.85, 7.71, -8.44, 9.05, -9.51, 9.82, -9.98, 9.98,
-9.82, 9.51, -9.05, 8.44, -7.71, 6.85, -5.88, 4.82, -3.68, 2.49, -1.25, 0.00, 1.25, -2.49, 3.68, -4.82,
5.88, -6.85, 7.71, -8.44, 9.05, -9.51, 9.82, -9.98, 9.98, -9.82, 9.51, -9.05, 8.44, -7.71, 6.85, -5.88,
4.82, -3.68, 2.49, -1.25, 0.00, 1.25, -2.49, 3.68, -4.82, 5.88, -6.85, 7.71, -8.44, 9.05, -9.51, 9.82,
-9.98, 9.98, -9.82, 9.51, -9.05, 8.44, -7.71, 6.85, -5.88, 4.82, -3.68, 2.49, -1.25, 0.00, 1.25, -2.49,
3.68, -4.82, 5.88, -6.85, 7.71, -8.44, 9.05, -9.51, 9.82, -9.98, 9.98, -9.82, 9.51, -9.05, 8.44, -7.71,
6.85, -5.88, 4.82, -3.68, 2.49, -1.25, 0.00, 1.25, -2.49, 3.68, -4.82, 5.88, -6.85, 7.71, -8.44, 9.05,
-9.51, 9.82, -9.98, 9.98, -9.82, 9.51, -9.05, 8.44, -7.71, 6.85, -5.88, 4.82, -3.68, 2.49, -1.25, 0.00,
1.25, -2.49, 3.68, -4.82, 5.88, -6.85, 7.71, -8.44, 9.05, -9.51, 9.82, -9.98, 9.98, -9.82, 9.51, -9.05,
8.44, -7.71, 6.85, -5.88, 4.82, -3.68, 2.49, -1.25, 0.00, 1.25, -2.49, 3.68, -4.82, 5.88, -6.85, 7.71,
-8.44, 9.05, -9.51, 9.82, -9.98, 9.98, -9.82, 9.51, -9.05, 8.44, -7.71, 6.85, -5.88, 4.82, -3.68, 2.49,
-1.25, 0.00, 1.25, -2.49, 3.68, -4.82, 5.88, -6.85, 7.71, -8.44, 9.05, -9.51, 9.82, -9.98, 9.98, -9.82,
9.51, -9.05, 8.44, -7.71, 6.85, -5.88, 4.82, -3.68, 2.49, -1.25, 0.00, 1.25, -2.49, 3.68, -4.82, 5.88
Um aumento na quantidade N de amostras consideradas (e uma escolha do tempo de
amostragem Ts) implica em uma melhor representao do espectro.
O tempo de amostragem escolhido como j dito anteriormente foi de 8ms para atender
ao critrio de Nyquist. Pois para um tempo de amostragem de 8ms a freqncia 125Hz,
maior que duas vezes a freqncia do sinal do campo: 60Hz. Para o nmero de amostras,
nesse teste, escolheu-se 256 amostras, pois esse seria o tamanho mximo permitido pela
memria do Arduino para o desenvolvimento dos clculos da DFT. O cdigo e os resultados
obtidos esto mostrados abaixo.

1 Teste:

Cdigo da DFT para uma senide:

// Calculo da DFT de uma senide de 256 pontos, amplitude 10 V e
freqncia 60Hz.


#include<math.h>


int n=256; // Quantidade das amostras

float Ts= 0.008;// Tempo de amostragem (8ms)


// Vetor dos valores de entrada


double Amostras [256] = {0.00, 1.25, -2.49, 3.68, -4.82, 5.88, -6.85,
7.71, -8.44, 9.05, -9.51, 9.82, -9.98, 9.98, -9.82, 9.51, -9.05, 8.44,
-7.71, 6.85, -5.88, 4.82, -3.68, 2.49, -1.25, 0.00, 1.25, -2.49, 3.68,
-4.82, 5.88, -6.85, 7.71, -8.44, 9.05, -9.51, 9.82, -9.98, 9.98, -
9.82, 9.51, -9.05, 8.44, -7.71, 6.85, -5.88, 4.82, -3.68, 2.49, -1.25,
0.00, 1.25, -2.49, 3.68, -4.82, 5.88, -6.85, 7.71, -8.44, 9.05, -9.51,
9.82, -9.98, 9.98, -9.82, 9.51, -9.05, 8.44, -7.71, 6.85, -5.88, 4.82,
-3.68, 2.49, -1.25, 0.00, 1.25, -2.49, 3.68, -4.82, 5.88, -6.85, 7.71,
-8.44, 9.05, -9.51, 9.82, -9.98, 9.98, -9.82, 9.51, -9.05, 8.44, -
7.71, 6.85, -5.88, 4.82, -3.68, 2.49, -1.25, 0.00, 1.25, -2.49, 3.68,
-4.82, 5.88, -6.85, 7.71, -8.44, 9.05, -9.51, 9.82, -9.98, 9.98, -
9.82, 9.51, -9.05, 8.44, -7.71, 6.85, -5.88, 4.82, -3.68, 2.49, -1.25,
0.00, 1.25, -2.49, 3.68, -4.82, 5.88, -6.85, 7.71, -8.44, 9.05, -9.51,
9.82, -9.98, 9.98, -9.82, 9.51, -9.05, 8.44, -7.71, 6.85, -5.88, 4.82,
-3.68, 2.49, -1.25, 0.00, 1.25, -2.49, 3.68, -4.82, 5.88, -6.85, 7.71,
-8.44, 9.05, -9.51, 9.82, -9.98, 9.98, -9.82, 9.51, -9.05, 8.44, -
7.71, 6.85, -5.88, 4.82, -3.68, 2.49, -1.25, 0.00, 1.25, -2.49, 3.68,
-4.82, 5.88, -6.85, 7.71, -8.44, 9.05, -9.51, 9.82, -9.98, 9.98, -
9.82, 9.51, -9.05, 8.44, -7.71, 6.85, -5.88, 4.82, -3.68, 2.49, -1.25,
0.00, 1.25, -2.49, 3.68, -4.82, 5.88, -6.85, 7.71, -8.44, 9.05, -9.51,
9.82, -9.98, 9.98, -9.82, 9.51, -9.05, 8.44, -7.71, 6.85, -5.88, 4.82,
-3.68, 2.49, -1.25, 0.00, 1.25, -2.49, 3.68, -4.82, 5.88, -6.85, 7.71,
-8.44, 9.05, -9.51, 9.82, -9.98, 9.98, -9.82, 9.51, -9.05, 8.44, -
7.71, 6.85, -5.88, 4.82, -3.68, 2.49, -1.25, 0.00, 1.25, -2.49, 3.68,
-4.82, 5.88};


double tfr[256]; // Vetor transformada de Fourier Real

double tfi[256]; // Vetor transformada de Fourier Imaginrio

double raiz [256]; //Vetor mdulo da transformada de Fourier

void setup ()
{

Serial.begin ( 9600 ); // Inicializao da porta serial
}

void loop ()

{

for(int u=0;u<(n/2)+1;u++)
{

tfr[u]=0;

tfi[u]=0;

for(int x=0;x<n;x++)
{



// Calculo da parte real da DFT


tfr[u]+=Amostras[x]*19ou(2*M_PI*u*(double)x/(double)n);


// Calculo da parte imaginria da DFT


tfi[u]-=Amostras[x]*sin(2*M_PI*u*(double)x/(double)n);
}

raiz[u]= sqrt ((19ou[u]*19ou[u])+(tfi[u]*tfi[u]));

raiz[u]/=(double)(n/2);


Serial.print ( \t Frequncia: );

Serial.print (u/(n*Ts));


//Corresponde ao Delta de Frequncia F(u/(n*tempo de amostragem))

Serial.print( Hz);

Serial.print( Amplitude: );

Serial.print ( V);

Serial.println (raiz[u]);


}
}







Resultado:
Na figura abaixo, pode-se observar que o cdigo foi capaz de identificar a maior
amplitude (aproximadamente 10 V) na freqncia do sinal (aproximadamente 60 Hz).


Figura 13: Resultado do clculo da DFT.


O Segundo teste consistia em utilizar o mesmo cdigo, porm adaptado para um sinal
de um gerador de ondas chegando a uma porta analgica do Arduino. Para impresso dos
resultados na tela do computador seria mostrada apenas a maior amplitude do sinal na faixa
entre 45 Hz e 60Hz.

2 Teste:

Cdigo da DFT para um sinal analgico:

#include<math.h>

int n=256; // Quantidade das amostras
floatTs= 0.008;// Tempo de amostragem (8ms)

// Vetor dos valores de entrada
double Amostras [256];
double Frequencia[256];
double tfr[256]; // Vetor transformada de Fourier Real
doublet fi[256]; // Vetor transformada de Fourier Imaginrio
double raiz [256]; //Vetor modulo da transformada de Fourier

void setup ()
{
Serial.begin ( 9600 ); // Inicializao da porta serial
}
void loop() {
Captura();
FFT();
Output();
}
voidCaptura()
{
for(inti=0;i<n;i++)
{
Amostras[i] = analogRead ( 3 ); // Chegada do sinal
Amostras[i]=Amostras[i]*5/1024;//Converso AD 10 bits
delay (8);
}
}
void FFT ()
{
for(int u=0;u<(n/2)+1;u++)
{
tfr[u]=0;
tfi[u]=0;
for(int x=0;x<n;x++)
{
// Calculo da parte real da DFT:
tfr[u]+=Amostras[x]*cos(2*M_PI*u*(double)x/(double)n);

// Calculo da parte imaginaria da DFT
tfi[u]-=Amostras[x]*sin(2*M_PI*u*(double)x/(double)n);
}
raiz[u]= sqrt ((tfr[u]*tfr[u])+(tfi[u]*tfi[u]));
raiz[u]/=(double)(n/2);
Frequencia [u] =(u/(n*Ts)););
}
}
void Output()
{
float maior = raiz [100];
int x = 100;
for(int u=101;u<(n/2)+1;u++)
{
if (raiz [u] > maior)
{
maior= raiz[u];
x = u;
}
}
Serial.print (" \t Frequencia: ");
Serial.print (Frequencia [x]);
Serial.print("Hz");
Serial.print (" \t Amplitude: ");
Serial.print (maior);
Serial.println ("V");

}

Resultado:
Colocar aqui Fotos do laboratorio

No terceiro teste, o cdigo da DFT foi implementado ao cdigo inicial de aquisio de
dados do sensor. Dessa forma os dados seriam primeiramente capturados, armazenados em
um vetor, a DFT calcularia os dados do vetor e os resultados referentes as maiores amplitudes
nas trs direes de campo entre a faixa de 45Hz a 60 Hz seriam por fim impressos no Display.
Como o cdigo se tornou maior e o nmero de vetores tambm aumentou, visto que a DFT
seria calculada em trs vetores diferentes, correspondentes s trs direes de campo, o
nmero de amostras teve que ser novamente reduzido para 128 amostras devido capacidade
de memria do Arduino.O cdigo e o resultado impresso na tela pode ser visto abaixo:

3 Teste:

Cdigo da DFT para o sinal de campo magntico vindo do sensor:

// Cdigo que calcula a DFT dos dados obtidos do HMC5883L

#include <Wire.h>

#include <math.h>

#define MAG_ADDRESS ((char) 0x1E)// define o endereo da comunicao
I2C no sensor

uint8_t mag_buffer[6];//vetor sem sinal, de tamanho 6 com 8 bits cada,
armazenado na memria temporria (SRAM) {(X MSB(8) XLSB(8); YMSB(8)
YLSB(8); ZMSB(8) ZLSB(8)}

int16_t mag_raw[3];// Vetor de tamanho 3 com 16 bits cada {valor bruto
de X(16); Y(16); Z(16)}


// Definio de variveis
int l;//varivel contador at 128

int n=128; // Quantidade das amostras

float Ts=0.007;// Tempo de amostragem

// Vetor dos valores de entrada
int16_t CampoX [128];

int16_t CampoY [128];

int16_t CampoZ [128];

double Frequencia[128];// Veto valores de frequencia.

double tfrCamp_X[128];// Vetor transformada de Fourier Real Campo X
double tfiCamp_X [128];// Vetor transformada de Fourier Imaginrio
Campo X

double tfrCamp_Y[128];// Vetor transformada de Fourier Real Campo Y
double tfiCamp_Y[128];// Vetor transformada de Fourier Imaginrio
Campo Y

double tfrCamp_Z[128];// Vetor transformada de Fourier Real Campo Z
double tfiCamp_Z[128];// Vetor transformada de Fourier Imaginrio
Campo Z

double raizCamp_X[128];// Vetor Mdulo da transformada de Fourier do
Campo X
double raizCamp_Y[128];// Vetor Mdulo da transformada de Fourier do
Campo Y
double raizCamp_Z[128];// Vetor Mdulo da transformada de Fourier do
Campo Y


// Funo configMag



void configMag()
{
uint8_t mag_name;


//Configurao do registrador B

Wire.beginTransmission(MAG_ADDRESS);

Wire.write((byte) 0x01);//Grava os dados de endereo do registrador B.

Wire.write((byte) 0xE0); //Grava os dados de configurao do
registrador B, define o ganho de +/-8.1 Gauss (0xE0-11100000)

Wire.endTransmission();



// Configurao do registrador de modo
Wire.beginTransmission(MAG_ADDRESS);

Wire.write((byte) 0x02);//Grava os dados de endereo do registrador B.

Wire.write((byte) 0x01);//Grava os dados de configurao do
registrador de modo e define o modo de medio nica (00000001).

Wire.endTransmission();

}


// ler 6 bytes (x,y,z medidos do campo magntico) do sensor

void readMag()
{
for(l=0;l<n;l++)

{

// leitura dos dados dos registradores(de 0x03 a 0x08)

Wire.beginTransmission(MAG_ADDRESS);

Wire.write((byte) 0x03); // o endereo do primeiro byte de dado

Wire.endTransmission();



Wire.beginTransmission(MAG_ADDRESS);

Wire.requestFrom(MAG_ADDRESS, 6); // Requisita 6 bytes

int i = 0;

while(Wire.available()) // Retorna o nmero de bytes disponveis:


{

mag_buffer[i] = Wire.read(); // L o primeiro byte e coloca no vetor
mag_buffer

i++; // incrementa at i for igual a 6

}

Wire.read();// L todos os bytes requisitados

Wire.endTransmission();


// Combina os dados brutos em nmeros inteiros (O HMC588L envia
primeiro o byte MSB)

// ________ MSB _______ _____ LSB ____

mag_raw[0] = (mag_buffer[0] << 8) | mag_buffer[1];

mag_raw[1] = (mag_buffer[2] << 8) | mag_buffer[3];

mag_raw[2] = (mag_buffer[4] << 8) | mag_buffer[5];


CampoX [l] = mag_raw[0];// Atribui ao vetor CampoX os dados referentes
ao eixo X

CampoY [l] = mag_raw[1];// Atribui ao vetor CampoY os dados referentes
ao eixo Y

CampoZ [l] = mag_raw[2] ;// Atribui ao vetor CampoZ os dados
referentes ao eixo Z


delay (6);




// Coloca o dispositivo de volta no modo de medio nica.

Wire.beginTransmission(MAG_ADDRESS);

Wire.write((byte) 0x02);

Wire.write((byte) 0x01);

Wire.endTransmission();

}

}

// Funo DFT

void dft ()
{

for(int u=0;u<(n/2)+1;u++)
{
tfrCamp_X[u]=0;
tfrCamp_Y[u]=0;
tfrCamp_Z[u]=0;

tfiCamp_X[u]=0;
tfiCamp_Y[u]=0;
tfiCamp_Z[u]=0;

for(int x=0;x<n;x++)
{
tfrCamp_X[u]+=CampoX [x]*cos(2*M_PI*u*(double)x/(double)n); // Calculo
da parte real da DFT do Campo X

tfiCamp_X[u]-=CampoX [x]*sin(2*M_PI*u*(double)x/(double)n); // Calculo
da parte imaginaria da DFT do Campo X

tfrCamp_Y[u]+=CampoY [x]*cos(2*M_PI*u*(double)x/(double)n);// Calculo
da parte real da DFT do Campo Y

tfiCamp_Y[u]-=CampoY [x]*sin(2*M_PI*u*(double)x/(double)n);// Calculo
da parte imaginaria da DFT do Campo Y

tfrCamp_Z[u]+=CampoZ [x]*cos(2*M_PI*u*(double)x/(double)n);// Calculo
da parte real da DFT do Campo Z

tfiCamp_Z[u]-=CampoZ [x]*sin(2*M_PI*u*(double)x/(double)n);// Calculo
da parte imaginaria da DFT do Campo Z
}

raizCamp_X[u]=sqrt
((tfrCamp_X[u]*tfrCamp_X[u])+(tfiCamp_X[u]*tfiCamp_X[u]));// Calculo
do modulo da DFT do Campo X

raizCamp_Y[u]= sqrt
((tfrCamp_Y[u]*tfrCamp_Y[u])+(tfiCamp_Y[u]*tfiCamp_Y[u]));// Calculo
do modulo da DFT do Campo Y

raizCamp_Z[u]= sqrt
((tfrCamp_Z[u]*tfrCamp_Z[u])+(tfiCamp_Z[u]*tfiCamp_Z[u]));// Calculo
do modulo da DFT do Campo Z


raizCamp_X [u]/=(double)(n/2);
raizCamp_Y [u]/=(double)(n/2);
raizCamp_Z [u]/=(double)(n/2);

Frequencia [u] = (u /(n*Ts)); //Corresponde ao Delta de Frequencia
F(u /(n*tempo de amostragem))

}

}

//Funo Output: Procura a maior amplitude em uma faixa de frequencia
proximo a 60 HZ.

void Output()

{

float maior_X = raizCamp_X [0];
float maior_Y = raizCamp_Y [0];
float maior_Z = raizCamp_Z [0];
int x = 0;

for(int u=0;u<(n/2)+1;u++)

{
if (raizCamp_X [u] > maior_X && raizCamp_Y [u] > maior_Y &&
raizCamp_Z [u] > maior_Z)

{
maior_X= raizCamp_X [u];
maior_Y = raizCamp_Y [u];
maior_Z = raizCamp_Z [u];
x = u;
}
}

Serial.print (maior_X);
Serial.print (" mG ");
Serial.print (maior_Y);
Serial.print (" mG ");
Serial.print (maior_Z);
Serial.print(" mG ");
Serial.print (" Frequencia: ");
Serial.print (Frequencia [x]);
Serial.println("Hz");
}

void setup()
{

Serial.begin(115200);//inicia a comunicao serial a 115200 bps.

Serial.println("Campo X Campo Y Campo Z");

Wire.begin();//inicia a biblioteca wire referente ao barramento I2C.

configMag();//chama a funo configMag que configura os registradores
do sensor.

}

void loop()

{

readMag();// chama a funo readMag

dft();// chama a funo dft

Output();// chama a funo Output

}

Resultado:

Figura 14: DFT calculada com os dados obtidos do sensor.

E finalmente no quarto teste, o cdigo foi adaptado para enviar os valores de campo
das trs direes para o display LCD. O cdigo e as fotos do prottipo podem ser vistos abaixo:

4 Teste:

Cdigo da DFT para o sinal de campo magntico vindo do sensor e resultado impresso
no display:

// Cdigo que calcula a DFT dos dados obtidos do HMC5883L

#include <Wire.h>
#include <math.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#define MAG_ADDRESS ((char) 0x1E)// define o endereo da comunicao
I2C no sensor

uint8_t mag_buffer[6];//vetor sem sinal, de tamanho 6 com 8 bits cada,
armazenado na memria temporria (SRAM) {(X MSB(8) XLSB(8); YMSB(8)
YLSB(8); ZMSB(8) ZLSB(8)}
int16_t mag_raw[3];// Vetor de tamanho 3 com 16 bits cada {valor bruto
de X(16); Y(16); Z(16)}


// Definio de variveis
int l;// Varivel contador at 128
int n=128; // Quantidade das amostras
float Ts=0.007;// Tempo de amostragem

// Vetor dos valores de entrada
int16_t CampoX [128];
int16_t CampoY [128];
int16_t CampoZ [128];

double Frequencia[128];// Veto valores de frequencia.

double tfrCamp_X[128];// Vetor transformada de Fourier Real Campo X
Double tfiCamp_X[128];// Vetor transformada de Fourier Imaginrio
Campo X

double tfrCamp_Y[128];//Vetor transformada de Fourier Real Campo Y
double tfiCamp_Y[128];//Vetor transformada de Fourier Imaginrio Campo
Y

double tfrCamp_Z[128];// Vetor transformada de Fourier Real Campo Z
double tfiCamp_Z[128];// Vetor transformada de Fourier Imaginrio
Campo Z

double raizCamp_X[128];// Vetor Mdulo da transformada de Fourier do
Campo X
double raizCamp_Y[128];// Vetor Mdulo da transformada de Fourier do
Campo Y
double raizCamp_Z[128];// Vetor Mdulo da transformada de Fourier do
Campo Y







// Funo configMag



void configMag()
{
uint8_t mag_name;


//Configurao do registrador B
Wire.beginTransmission(MAG_ADDRESS);

Wire.write((byte) 0x01);//Grava os dados de endereo do registrador B.

Wire.write((byte) 0xE0); //Grava os dados de configurao do
registrador B, define o ganho de +/-8.1 Gauss (0xE0-11100000)

Wire.endTransmission();



// Configurao do registrador de modo
Wire.beginTransmission(MAG_ADDRESS);

Wire.write((byte) 0x02);//Grava os dados de endereo do registrador B.

Wire.write((byte) 0x01);//Grava os dados de configurao do
registrador de modo e define o modo de medio nica (00000001).

Wire.endTransmission();

}


// ler 6 bytes (x,y,z medidos do campo magntico) do sensor

void readMag() {
for(l=0;l<n;l++)

{

// leitura dos dados dos registradores(de 0x03 a 0x08)

Wire.beginTransmission(MAG_ADDRESS);

Wire.write((byte) 0x03); // o endereo do primeiro byte de dado

Wire.endTransmission();



Wire.beginTransmission(MAG_ADDRESS);

Wire.requestFrom(MAG_ADDRESS, 6); // Requisita 6 bytes

int i = 0;

while(Wire.available()) // Retorna o nmero de bytes disponveis:


{

mag_buffer[i] = Wire.read(); // L o primeiro byte e coloca no vetor
mag_buffer

i++; // incrementa at i for igual a 6

}

Wire.read();// L todos os bytes requisitados

Wire.endTransmission();
// Combina os dados brutos em nmeros inteiros (O HMC588L envia
primeiro o byte MSB)

// ________ MSB _______ _____ LSB ____

mag_raw[0] = (mag_buffer[0] << 8) | mag_buffer[1];

mag_raw[1] = (mag_buffer[2] << 8) | mag_buffer[3];

mag_raw[2] = (mag_buffer[4] << 8) | mag_buffer[5];


CampoX [l] = mag_raw[0];// Atribui ao vetor CampoX os dados referentes
ao eixo X

CampoY [l] = mag_raw[1];// Atribui ao vetor CampoY os dados referentes
ao eixo Y

CampoZ [l] = mag_raw[2] ;// Atribui ao vetor CampoZ os dados
referentes ao eixo Z


delay (6);


// Coloca o dispositivo de volta no modo de medio nica.

Wire.beginTransmission(MAG_ADDRESS);

Wire.write((byte) 0x02);

Wire.write((byte) 0x01);

Wire.endTransmission();


}


}

// Funo DFT
void dft ()
{

for(int u=0;u<(n/2)+1;u++)
{

tfrCamp_X[u]=0;
tfrCamp_Y[u]=0;
tfrCamp_Z[u]=0;

tfiCamp_X[u]=0;
tfiCamp_Y[u]=0;
tfiCamp_Z[u]=0;

for(int x=0;x<n;x++)
{

tfrCamp_X[u]+=CampoX [x]*cos(2*M_PI*u*(double)x/(double)n); // Calculo
da parte real da DFT do Campo X
tfiCamp_X[u]-=CampoX [x]*sin(2*M_PI*u*(double)x/(double)n); // Calculo
da parte imaginaria da DFT do Campo X

tfrCamp_Y[u]+=CampoY [x]*cos(2*M_PI*u*(double)x/(double)n);// Calculo
da parte real da DFT do Campo Y

tfiCamp_Y[u]-=CampoY [x]*sin(2*M_PI*u*(double)x/(double)n);// Calculo
da parte imaginaria da DFT do Campo Y

tfrCamp_Z[u]+=CampoZ [x]*cos(2*M_PI*u*(double)x/(double)n);// Calculo
da parte real da DFT do Campo Z

tfiCamp_Z[u]-=CampoZ [x]*sin(2*M_PI*u*(double)x/(double)n);// Calculo
da parte imaginaria da DFT do Campo Z

}

raizCamp_X[u]=sqrt
((tfrCamp_X[u]*tfrCamp_X[u])+(tfiCamp_X[u]*tfiCamp_X[u]));// Calculo
do modulo da DFT do Campo X

raizCamp_Y[u]=sqrt
((tfrCamp_Y[u]*tfrCamp_Y[u])+(tfiCamp_Y[u]*tfiCamp_Y[u]));// Calculo
do modulo da DFT do Campo Y

raizCamp_Z[u]=sqrt
((tfrCamp_Z[u]*tfrCamp_Z[u])+(tfiCamp_Z[u]*tfiCamp_Z[u]));// Calculo
do modulo da DFT do Campo Z

raizCamp_X [u]/=(double)(n/2);
raizCamp_Y [u]/=(double)(n/2);
raizCamp_Z [u]/=(double)(n/2);

Frequencia [u] = (u /(n*Ts)); //Corresponde ao Delta de Frequencia
F(u /(n*tempo de amostragem))


}

}

//Funo Output: Procura a maior amplitude em uma faixa de frequencia
proximo a 60 HZ.

void Output()

{

float maior_X = raizCamp_X [0];
float maior_Y = raizCamp_Y [0];
float maior_Z = raizCamp_Z [0];
int x = 0;
for(int u=0;u<(n/2)+1;u++)

{

if (raizCamp_X [u] > maior_X && raizCamp_Y [u] > maior_Y &&
raizCamp_Z [u] > maior_Z)
{
maior_X= raizCamp_X [u];
maior_Y = raizCamp_Y [u];
maior_Z = raizCamp_Z [u];
x = u;

}

}


// Imprime no LCD.

lcd.setCursor(0,0);
lcd.print("X:");
lcd.setCursor(2,0);
lcd.print (maior_X);
lcd.setCursor(7,0);
lcd.print("mG");
lcd.setCursor(10,0);
lcd.print("Y:");
lcd.setCursor(12,0);
lcd.print(maior_Y);
lcd.setCursor(18,0);
lcd.print("mG");
lcd.setCursor(0,1);
lcd.print("Z:");
lcd.setCursor(2,1);
lcd.print(maior_Z);
lcd.setCursor(8,1);
lcd.print("mG");

}

void setup()
{

Serial.begin(115200);//inicia a comunicao serial a 115200 bps.

Wire.begin();//inicia a biblioteca wire referente ao barramento I2C.

configMag();//chama a funo configMag que configura os registradores
do sensor.

lcd.begin(20, 2); //Configurao do LCD

lcd.clear();
}

void loop()

{
readMag();// chama a funo readMag

dft();// chama a funo dft

Output();// chama a funo Output

}

Figura 15: Foto final do prottipo.


3.6 Concluses

Com a anlise dos dados e dos grficos obtidos durante o projeto conclumos que o
sensor foi realmente adequado ao nosso propsito, e os cdigos criados foram eficazes para o
tratamento do sinal.
Devido ao tempo gasto na resoluo das dificuldades encontradas no desenvolvimento
do trabalho no houve tempo para a utilizao do prottipo na medio de campo magntico
nas regies prximas s linhas de transmisso, como proposto no objetivo deste trabalho. A
nica fonte de campo magntico foi o transformador, utilizado com o principal objetivo de
conferir os resultados obtidos do algoritmo da DFT do que de analisar precisamente os valores
das amplitudes, j que no foi estipulado nenhum parmetro para designao do campo
magntico gerado pelo transformador. O prottipo tambm no foi comparado a nenhum
magnetmetro devidamente calibrado. Entretanto, ainda pretendemos concluir o projeto em
trabalhos futuros.


3.7 Dificuldades encontradas

Ao longo do percurso que nossa pesquisa tomou, vrias dificuldades foram
encontradas. A primeira foi a escolha do sensor. No foi rpido encontrar o sensor adequado
para o projeto, tive dificuldades em entender claramente as especificaes dos possveis
sensores a serem estudados para o projeto, pois os Datasheets encontrados no eram
bastante claros e me deixava dvidas sobre alguns aspectos, tais como taxa de amostragem,
faixa de campo magntico detectado pelo sensor, entre outros.
Outro grande empecilho encontrado foi na linguagem e elaborao dos algoritmos, pois
eu, que sou do curso de Eletrotcnica no tinha muita experincia em programao,
principalmente no Arduino que tem uma linguagem prpria, bem como um bom entendimento
sobre a comunicao feita entre o micro controlador e o sensor. Os mais diversos erros
apareciam durante a fase de testes com os algoritmos e a falta de experincia no assunto
decorria em dificuldades para solucion-los. Inicialmente, optei por pesquisar cdigos j
prontos para a comunicao entre o sensor e o Arduino, mas esses cdigos incluam
bibliotecas que eram difceis de fazer alteraes necessrias ao projeto. Foi bastante difcil
elaborar os cdigos do incio, apesar de ter ajudas dos professores orientadores e de algumas
pessoas que j trabalham com o Arduino.
Outros erros ocorreram durante a fase de desenvolvimento do Algoritmo para a DFT,devido
limitao de memria do Arduino,. Boa parte do tempo da pesquisa foi dedicada apurao e
identificao de tais erros.



3.8 Referncias Bibliogrficas

[1].Roy C. Haupt and James R. Nolfi The Effects of High Voltage Transmission Lineson the
Health of Adjacent Public Health, January 1984, Vol. 74, No. 1.

[2].Christof Kolb, Bernhard Zrenner and Claus Schmitt Incidence of Electromagnetic
Interference in Implantable Cardioverter Defibrillators Journal of Pacing and Clinical
Electrophysiology, Volume 24, No. 4, Part 1, April 2001.

[3].Resoluo Normativa ANEEL N 398, de 23 de maro de 2010, disponvel em
www.aneel.gov.br/cedoc/ren2010398.pdf. Acesso em: 26 de Agosto de 2013.

[4] Datasheet do sensor HMC5883L, disponvel em http://zip.net/bfkLrL. Acesso em 26 de
Agosto de 2013.

[5] Patsko, L. F. Tutorial Aplicao, funcionamento e utilizao de sensores, disponvel em
http://zip.net/bfkLsj. Acesso em: 26 de Agosto de 2013.

[6] Protocolo I2C no Arduino disponvel em http://zip.net/bjkLfv. Acesso em 26 de Agosto de
2013.

[7] Critrio de Nyquist disponvel em http://zip.net/bpkLTz. Acesso em 26 de Agosto de 2013.

[8] FFT- Fast Fourier Transform disponvel em http://zip.net/btkLCT. Acesso em 26 de Agosto
de 2013.

[9] Macdo Fechine, J. Grupo PET Computao, A Transformada de Fourier e suas
aplicaes disponvel em http://zip.net/bjkLhq. Acesso em 26 de Agosto de 2013.

[10] FFT e DFT disponvel em http://zip.net/bpkLVT. Acesso em 26 de Agosto de 2013.

[11] Tutorial online da plataforma de desenvolvimento Arduino disponvel em
http://www.arduino.cc/. Acesso em 26 de Agosto de 2013

[12] Arduino Character LCD Tutorial disponvel em http://zip.net/bpkNk2. Acesso em 29 de
Agosto de 2013.

[13] Datasheet do display disponevel em http://zip.net/brkMHZ. Acesso em 29 de Agosto de
2013.

Você também pode gostar