Seu Curso

  • Full Screen
  • Wide Screen
  • Narrow Screen
  • Increase font size
  • Default font size
  • Decrease font size

Usando bússola eletrônica com Arduino

Imprimir
Avaliação do Usuário: / 5
PiorMelhor 

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.

Comentários  

 
0 #2 Rodou corretamente o CodigoFabio Gazzana Ferrei 28-11-2016 08:59
Olá, Jose Luiz! Eu vi teu comentário e ele me ajudou na compilação do código. No meu caso rodou corretamente. Inclusive eu retirei a # define do código e importei da minha biblioteca . Atenciosamente, Fabio
Citar
 
 
0 #1 Bussola_BY-271 ñ funcionaJosé Luiz 28-06-2014 12:02
Bom dia!
Esta rotina não funcionou com o meu sensor.
Na compilação acusou erro nas linhas 1 e 19.
na linha 1 coloquei a biblioteca que veio com a IDE Arduino "Wire.h"
Na linha 19, torquei o 'address' por 'endereco'.
Fez a compilação, carregou, mas não funcionou!
Com define o endereço do sensor? esta no registrador interno ou pode definir externamente como o esta no programa - 0h1E?
Arduino UNO e IDE Arduino 1.5.6-r2.
Grato.
Citar
 

Adicionar comentário


Código de segurança
Atualizar

You are here: