sexta-feira, 7 de agosto de 2015

Usando bússola eletrônica com Arduino

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:

#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);
}

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.
 


← Postagem mais recente Postagem mais antiga → Página inicial

0 comentários:

Postar um comentário