Avaliação do Usuário

Estrela inativaEstrela inativaEstrela inativaEstrela inativaEstrela inativa
 

Um dos sensores muito usados em robótica é a bússola, afinal é preciso saber a direção em que vai o robô!

 

Neste caso esse é um sensor tri axial, ou seja, faz medições em três eixos (x, y e z) de baixíssimo custo e fácil de encontrar. Para ser mais específico, esse foi comprado na Tato Equipamentos Eletrônicos (www.tato.ind.br). O chipset é o HMC5883 (GY-271).

 

Primeiro vamos montar e programar, depois mostrarei alguns detalhes importantes.

 

O sensor vem com a barra de pinos separada e com duas opções, pinos retos e curvos em 90 graus.

 

 

 

 

 

 

Note que a bússola deve ser utilizada na posição horizontal então use a barra de pinos adequada ao seu projeto, bastando soldá-la, com cuidado para não aquecer demais o sensor.

 

 

 

 

 

 

As identificações dos pinos ficarão embaixo do sensor.

 

 

 

 

 

 

Ao coloca-lo no protoboard lembre-se que estarão invertidos:

 

 

 

 

 

 

Agora vamos às ligações, ligue o pino VCC do sensor ao pino 3,3V do Arduino. Isso mesmo, ele trabalha na faixa de tensão de 2,7V até 5,2. Isso permite total compatibilidade com outros dispositivos I2C.

 

 

 

 

 

 

Ligue o pino GND ao GND do Arduino:

 

 

 

 

 

 

Ligue o pino SCL ao pino analógico 5  e o pino SDA ao analógico 4:

 

 

 

 

 

 

O código:

{code}

#include <wire.h>

 

#define endereco 0x1E

 

void setup(){

Serial.begin(9600);

Wire.begin();

 

Wire.beginTransmission(endereco);

Wire.write(0x02);

Wire.write(0x00);

Wire.endTransmission();

}

 

void loop(){

 

int x,y,z;

 

Wire.beginTransmission(address);

Wire.write(0x03);

Wire.endTransmission();

 

Wire.requestFrom(endereco, 6);

if(6<=Wire.available()){

x = Wire.read()<<8;

x |= Wire.read();

z = Wire.read()<<8;

z |= Wire.read();

y = Wire.read()<<8;

y |= Wire.read();

}

 

Serial.print("x: ");

Serial.print(x);

Serial.print("  y: ");

Serial.print(y);

Serial.print("  z: ");

Serial.println(z);

delay(250);

}

{/code}

 

 

Depois de compilar envie para seu Arduino. Para ver as medições abra o Serial Monitor.

 

Funcionando:

 

 

 

 

 

 

Os resultados são em graus em relação do norte magnético.

 

O que fizemos:

 

Com o #import importamos a biblioteca Wire do Arduino que facilitará as coisas com os comandos para I2C.

O endereço é 0x1E que é definido pelo equipamento, a bússola no caso, em binário 0011110.

 

Com Wire.begin inicia-se o objeto Wire, com Wire.beginTransmission inicia-se o endereço e abre-se canal para transmissão. Com Wire.endTransmission fecha-se comunicação.

 

Com Wire.write escreve-se um valor (hexadecimal) para o endereço especificado. Os valores 0x02 seleciona o modo registrador da bússola.

 

Enviar 0x00 selecionará o modo de transmissão contínua e enviar 0x01 selecionará o modo de transmissão única, ou seja, emitirá uma medição e ficará parado.

 

A configuração dos registradores é a que segue:

 

 

 

 

 

 

Dos aspectos importantes que falei no começo recomendo ainda pesquisar sobre Declinação Magnética, que pode influenciar, e muito, o resultado das medições.