Projeto 42 - Bússola com o sensor HMC5883L

  • Junho 04, 2015
  • Comentários

Olá pessoal, como prometido, hoje iremos aprender como fazer uma simples bússola mas que pode ajudar e muito a tirar a curiodade de quem quer se posicionar no globo terrestre. A comunicação com o HMC5883L é simples e é feita por I2C como podemos perceber após concluirmos este projeto. Mãos aos componentes !!!

Componentes necessários

1 Protoboard

1 Sensor magnetômetro HMC5883L

Fios jumper

Fazendo o download e importando as bibliotecas do magnetômetro

1) Acesse o link https://onedrive.live.com/?cid=F877FDED1DE63FAA&id=F877FDED1DE63FAA%21122;

2) Faça o download do arquivo Arquivos magnetometro;

3) Após o download descompacte o arquivo;

4) Agora entre no diretório (C:) e na pasta Arquivos de Programas, Arduino, libraries, copie os arquivos descompactados nesta pasta;

5) Pronto para utilizar;

Conectando os componentes

Código do projeto

// Projeto 42 - Bússola com o sensor HMC5883L

// Adicionando as bibliotecas necessárias
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_HMC5883_U.h>

// Atribuindo um ID para o sensor
Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(199851);

void displaySensorDetails(void)
{
  sensor_t sensor;
  mag.getSensor(&sensor);
  Serial.println("------------------------------------");
  Serial.print  ("Sensor:           "); Serial.println(sensor.name);
  Serial.print  ("Versao do driver: "); Serial.println(sensor.version);
  Serial.print  ("ID do sensor:     "); Serial.println(sensor.sensor_id);
  Serial.print  ("Valor maximo:     "); Serial.print(sensor.max_value); 
  Serial.print  ("Valor Minimo:     "); Serial.print(sensor.min_value); 
  Serial.print  ("Resolucao:        "); Serial.print(sensor.resolution);
  Serial.println("------------------------------------");
  Serial.println("");
  delay(500);
}

void setup(void) 
{
  Serial.begin(9600);
  
  // Inicializando o sensor
  if(!mag.begin())
  {
    // Checando se não houve nenhum problema de conexão com o... 
	//sensor HMC5883
    Serial.println("Ooops, sensor nao detectado ... Verifique as conexoes!");
    while(1);
  }
  
  // Mostra algumas informações básicas do sensor
  displaySensorDetails();
}

void loop(void) 
{
  // Obtem um novo evento do sensor 
  sensors_event_t event; 
  mag.getEvent(&event);

  // Calculando a posição do eixo x e y 
  float heading = atan2(event.magnetic.y, event.magnetic.x);
  
  // Depois de ter sua posição, você deve em seguida, adicionar o seu... 
  //'angulo de declincação', que é o 'erro' do campo magnético em... 
  //sua localização.
  // Localizar o seu aqui: http://www.magnetic-declination.com/
  // O meu é: -20, que é ~ 20 graus, ou (o que nós precisamos) 0,34 radianos
  // Se você não conseguiu encontrar a sua declinação, comente estas... 
  //duas linhas, a bussola ficará um pouco defasada.
   
  float declinationAngle = 0.34;
  heading += declinationAngle;
  
  // Faz a correção quandos os sinais estão invertidos
  if(heading < 0)
    heading += 2*PI;
    
  // Verifica a adição de declinação
  if(heading > 2*PI)
    heading -= 2*PI;
   
  // Converter radianos em graus para facilitar a leitura
  float headingDegrees = heading * 180/M_PI; 
  
  Serial.print("Posicao em graus: "); Serial.println(headingDegrees);
  
  if (headingDegrees > 0 && headingDegrees <= 44.9)
	{
	   Serial.println ("Norte");
	}
	else if (headingDegrees > 45 && headingDegrees <= 89.9)
	{
           Serial.println ("Nordeste");
	}
	else if (headingDegrees > 90 && headingDegrees <= 134.9)
	{
            Serial.println ("Leste");
	}
	else if (headingDegrees > 135 && headingDegrees <= 179.9)
	{
            Serial.println ("Sudeste");
	}
	else if (headingDegrees > 180 && headingDegrees <= 224.9)
	{
	    Serial.println ("Sul");
	}
	else if (headingDegrees > 225 && headingDegrees <= 269.9)
	{
	    Serial.println ("Suldoeste");
	}
	else if (headingDegrees > 270 && headingDegrees <= 314.9)
	{
	    Serial.println ("Oeste");
	}
	else if (headingDegrees > 315 && headingDegrees <= 359.9)
	{
	    Serial.println ("Noroeste");
	}
  
  delay(500);
}

Após ter passado o código para o arduino abra o Serial Monitor pressionando simultaneamente as teclas Crtl + Shift + M. Movimente o sensor e você verá os pontos cardeais sendo mostrados na tela do serial monitor bem como seus respectivos ângulos.

Vídeo do projeto pronto

- Se você gostou do post, por favor comente! Nos dê um feedback, isto nos incentiva a continuar! :)



Deixe seu comentário abaixo