terça-feira, 12 de outubro de 2010

Demo: HMC6352

O HMC6352 é uma bússola digital que fornece uma solução simples e de baixo custo para aplicações como robôs e sensores remotos. Com a comunicação feita por I2C, a utilização é bem simples, com os dados de orientação já prontos para uso e resolução de 0.5 grau.

Para este demo usei a placa do Sparkfun.com ligada diretamente ao Arduino Duemilanove com os pinos de SCL e SDA conectados ao analog 5 e 4 respectivamente, sem resistores de pull-up.

O endereço i2c do HMC6352 é 0x42, mas como a lib Wire do Arduino  usa endereços de 7 bits ele é ajustado para 0x21.

Apesar de ter várias instruções para calibrar, salvar e recuperar valores da memória, a única instrução usada para obter os dados é o byte 'A'.


#include <wire.h> 

// endereço do HMC6352 já ajustado para 7 bits
#define ADDRESS 0x42 >> 1

int heading;


void setup()
{
Serial.begin(9600);

// inicializa o i2c
Wire.begin();
}


void loop()
{
  // i2c master inicia a transmissão
  Wire.beginTransmission(ADDRESS);
  // envia o comando 'A', "get data"
  Wire.send("A");
  // encerra a transmissão
  Wire.endTransmission();
  // para responder o comando "get data" ele
  // pode demorar até 6 ms
  delay(6);

  // solicita 2 bytes
  Wire.requestFrom(ADDRESS, 2);
  if (2 <= Wire.available()){
    // ajusta o byte mais significante e soma
    heading = Wire.receive();
    heading = heading << 8;
    heading += Wire.receive();
  }   
  
  // exibe o resultado final em graus
  Serial.println(heading/10.0);

  
  delay(500);
} 


Datasheet: http://www.sparkfun.com/datasheets/Components/HMC6352.pdf

Um comentário:

  1. MUITO LEGAL SEU POST, ESTOU INICIANDO COM ARDUINO, ENGATINHANDO, POIS MEU OBJETIVO E INCREMENTAR UMA BUSULA EM UM ROTOR DE ANTENAS QUE EU MESMO MONTEI,UMA ANTENA YAGI PARA FREQUENCIA DE 28 MHZ, ISSO PARA MIM SERA DE GRANDE UTILIDADE. GRATO PELA ATENÇÃO E BOA SORTE.

    ResponderExcluir