Adicionar um módulo de bússola ao seu microcontrolador Arduino abre uma série de possibilidades para projetos. Veja como conectar um e usá-lo.
Em projetos DIY modernos, é bastante comum encontrar sensores avançados, como acelerômetros e magnetômetros, sendo interfaceados com microcontroladores. Embora você possa ter usado esses sensores em seu telefone, é difícil imaginar como esses módulos funcionam, mas é surpreendentemente simples.
O sensor de magnetômetro de bússola GY-271 permite detecção de orientação para várias aplicações. Aqui vamos explorar o processo de interface do sensor GY-271 com um microcontrolador Arduino, como calibrá-lo e ver os problemas que você pode enfrentar ao fazer isso.
O que é o módulo de bússola GY-271?
O módulo de bússola GY-271 é um magnetômetro altamente sensível que pode medir campos magnéticos em três dimensões. Ele é usado para detectar o campo magnético da Terra e determinar a direção ou orientação de dispositivos em aplicações como sistemas de navegação, robótica e drones. Pense nisso como uma bússola digital muito precisa. Este sensor está equipado com um design compacto e robusto que o torna fácil de instalar e usar em uma ampla gama de projetos.
Como funciona o módulo de bússola GY-271?
O módulo de bússola GY-271 HCM5883L contém um sensor de magnetômetro de 3 eixos, que é baseado na tecnologia magneto-resistiva anisotrópica (AMR). O sensor mede a força e a direção do campo magnético da Terra detectando as mudanças na resistência de seus elementos AMR internos.
Quando o sensor é exposto a um campo magnético, a resistência dos elementos AMR muda, gerando uma tensão proporcional à intensidade e direção do campo magnético. O processador de sinal digital do sensor converte então essa tensão em um sinal digital, que pode ser lido por um microcontrolador. Ao medir a tensão em todos os três eixos, o sensor pode fornecer leituras altamente precisas da intensidade e direção do campo magnético em três dimensões.
Conectando o GY-271 a um Arduino Uno
Conectar este módulo ao Arduino é bastante simples. Também cobrimos outros Módulos Arduino fáceis de usar que podem ajudar a dimensionar seu projeto no futuro. O módulo GY-271 tem um total de cinco pinos, incluindo VCC, GND, e três pinos de sinal (SDA, SCL, e SECO).
Você vai precisar dos seguintes componentes:
- Módulo de bússola GY-271 HMC5883L
- Arduino Uno (ou outro modelo)
- Fios jumper (macho-macho e macho-fêmea)
- Placa de pão (opcional)
Primeiro, conecte o VCC e GND pinos do módulo GY-271 ao 5V e GND pinos do Arduino Uno, respectivamente.
A seguir, conecte o SDA e SCL pinos do módulo ao A4 e A5 pinos analógicos do Arduino Uno, respectivamente.
Instalando as bibliotecas necessárias
Antes de começar a trabalhar com o módulo de bússola GY-271 e o Arduino, você precisa instalar as bibliotecas necessárias para se comunicar com o sensor.
A primeira biblioteca que você precisa incluir em seu esboço é a biblioteca Wire, que é usada para comunicação I2C entre o Arduino e o sensor. A biblioteca Wire vem pré-instalada com o Arduino IDE, então você não precisa baixá-la separadamente. Para instalar o segundo, o HMC5883L biblioteca, você precisará seguir estas etapas:
Abra o Arduino IDE e vá para Esboço > Incluir Biblioteca > Gerenciar bibliotecas.
No gerenciador de bibliotecas, procure por HMC5883L na barra de pesquisa.
Selecione os HMC5883L biblioteca especificamente da Adafruit. Depois que a biblioteca estiver instalada, você pode incluí-la no esboço do Arduino acessando Esboço > Incluir Biblioteca > HMC5883L.
Entendendo o Código
Você precisa escrever um programa que inicialize o sensor, leia seus dados e calcule a força e a direção do campo magnético da Terra. O código completo pode ser baixado em nosso site oficial Repositório GitHub.
No início do código, você precisa incluir as bibliotecas necessárias que acabou de baixar.
#incluir
#incluir
#incluir
Não se esqueça de atribuir um ID exclusivo ao sensor. Use esta linha para fazer isso:
Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(12345);
No código de configuração, inicie o monitor serial e verifique se o sensor está respondendo. Você pode imprimir mensagens no monitor para atualizar o status do sensor:
vazioconfigurar(vazio)
{
Serial.começar(9600);
Serial.println("Teste de magnetômetro HMC5883"); Serial.println("");
/* Inicializa o sensor */
se(!mag.começar())
{
Serial.println("Opa, nenhum HMC5883 foi detectado... Verifique sua fiação!");
enquanto(1);
}
}
No loop, primeiro, obtenha um novo evento de sensor:
sensores_event_t evento;
mag.getEvent(&evento);
Em seguida, exiba as leituras do sensor no monitor serial. Não se esqueça de definir a taxa de transmissão para 9600.
Serial.imprimir("X:"); Serial.imprimir(evento.magnético.x); Serial.imprimir(" ");
Serial.imprimir("Y:"); Serial.imprimir(evento.magnético.y); Serial.imprimir(" ");
Serial.imprimir("Z:"); Serial.imprimir(evento.magnético.z); Serial.imprimir(" ");Serial.println("uT");
Segure o módulo de modo que Z está apontando "para cima" e meça a direção com x e Y. Ao fazer isso, você pode calcular a direção quando o magnetômetro estiver nivelado. Esta linha de código ajuda com isso:
flutuador título = atan2(evento.magnético.y, evento.magnético.x);
Assim que tiver o seu cabeçalho, você deve então adicionar o seu ângulo de declinação, que é o erro do campo magnético em sua localização.
flutuador ângulodeclinação = 0.663;
título += declinationAngle;
Você pode encontrar convenientemente o ângulo de declinação de sua área local no Site da Declinação Magnética. Se por algum motivo você não conseguir encontrar seu ângulo de declinação, comente as duas linhas do seu código.
Comentar as duas linhas de código pode resultar em leituras incorretas do sensor. Tente o seu melhor para calibrar o sensor antes de usar.
Por fim, imprima o cabeçalho no monitor serial e adicione um atraso para aguardar meio segundo antes de ler novamente.
Serial.imprimir("Título (graus):");
Serial.println(títuloGraus);
atraso(500);
A partir daqui, você pode personalizar o código para atender às necessidades do seu projeto e adicionar recursos adicionais, como registro de dados.
Se você preferir usar a biblioteca Adafruit, recomendamos obtê-la em Repositório GitHub da Adafruit.
Lendo e interpretando dados da bússola
Os dados do sensor exibidos no monitor serial mostram os valores vetoriais do campo magnético medidos pelo magnetômetro em microteslas (μT) para os eixos X, Y e Z, respectivamente. Esses valores podem ser usados para determinar a orientação e a magnitude do campo magnético.
O valor da direção exibido em graus também é importante e representa a direção do polo norte magnético em relação à posição do sensor. Essa leitura pode ser utilizada em projetos onde é necessário determinar a direção de um objeto em movimento, como em sistemas de robótica, navegação e geolocalização.
Calibração do Sensor
Se você já instalou uma biblioteca diferente para o módulo HMC5883L, será necessário desinstalá-la ou excluí-la. Caso contrário, você pode obter erros de compilação ou ver avisos em seu monitor serial durante a calibração. Recomendamos usar biblioteca de Jarzebski disponível no GitHub, pois possui todos os recursos de calibração necessários para esta seção.
Primeiro, baixe o arquivo zip do repositório clicando em Código > Baixar ZIP.
Em seguida, abra o Arduino IDE e clique em Esboço > Incluir Biblioteca > Adicionar biblioteca.
Selecione os Arduino-HMC5883 zip que você acabou de baixar e o Arduino IDE instalará a biblioteca automaticamente para você.
Execute o esboço de calibração disponível no repositório enquanto move o sensor em uma superfície plana após o upload. Os valores obtidos do monitor serial são os valores de offset do seu sensor, que você pode usar para corrigir suas leituras enquanto usa a bússola durante seus projetos.
Problemas que você pode encontrar
Existem vários erros que alguém pode encontrar ao fazer a interface do módulo bússola com o Arduino. Aqui estão alguns exemplos e suas soluções alternativas:
Erros de compilação: podem ocorrer se as bibliotecas necessárias não forem incluídas ou se houver erros de sintaxe no código. Para corrigir isso, certifique-se de ter instalado as bibliotecas corretas e verifique se há erros de sintaxe em seu código. Como vimos muitas vezes, você pode ter instalado acidentalmente várias bibliotecas HCM5883L.
Erro de compilação: 'Adafruit_HMC5883_Unified' faz não nomeie um tipo
erros de comunicação: Se você não conseguir se comunicar com o módulo bússola, certifique-se de conectá-lo aos pinos corretos do Arduino e de que a fiação esteja correta. Você também pode precisar ajustar o endereço I2C do módulo em seu código se for diferente do padrão – que é 0x1E.
Erro usando hmc5883l/testDevice (linha246) Erro de comunicação com o sensor HMC5883L. O valor que ler de ID_A, ID_B e registros ID_C fazernão correspondem aos valores esperados.
interferência magnética: Se as leituras da bússola estiverem instáveis ou flutuantes, pode ser devido à interferência magnética de objetos próximos. Afaste o módulo de quaisquer ímãs ou outras fontes de interferência magnética para obter leituras mais estáveis.
Acelere seus projetos com o módulo de bússola GY-271
Ser capaz de usar o módulo de bússola GY-271 HCM5883L abre uma porta para a construção de projetos DIY mais complexos usando Arduino, como rovers guiados por GPS e drones DIY. As possibilidades são infinitas, especialmente quando você adiciona outros sensores.