Como descobrir o endereço do Módulo Bússola Digital / Magnetômetro Três Eixos – GY-273
Neste tutorial descobriremos como achar o endereço de do módulo bússola digital com arduino, mais especificamente do módulo Bússola Digital / Magnetômetro Três Eixos – GY-273.
O que é o módulo Bússola Digital / Magnetômetro Três Eixos – GY-273?
O Módulo Bússola Eletrônica 3 Eixos Campo Magnético HMC5883L é um dispositivo de Bússola e Magnetômetro equipado com o chip HMC5883L.
– Funcionamento
Precipuamente o Magnetômetro consegue detectar onde fica o norte geográfico magnético da Terra através de um sensor magnético de 3 eixos, fornecendo na saída informações sobre os eixos X, Y e Z. Não obstante, utiliza o protocolo de comunicação I2C. Ademais, para mais informações sobre o chip HMC5883L e o sensor acesse o (datasheet) e visualize a sua composição.
– Circuito integrado
O chip HMC5883L é um circuito integrado é por isso é responsável por realizar tarefa complexas que não poderiam ser executadas por apenas um componente.
Circuitos Integrados
– Campo magnético
O sensor Magnetômetro utiliza do campo magnético da terra para o seu funcionamento com o fim de identificar a sua posição em relação aos eixos X, Y e Z e em relação ao norte da terra onde a bússola como já sabemos sempre aponta. Além disso, o campo magnético faz com que à terra funcione como um ímã gigante já que possui um norte e um sul e as linhas do campo vão de um para o outro. Aliás, o Polo norte é na verdade o sul magnético e o polo sul o norte magnético.
– Os terminais deste sensor são:
- VCC(+) – Tensão de entrada, entre 3,3 a 5 volts
- GND(-) – O pino de O V do módulo, conectado ao GND do Arduino ou fonte
- Pino SCL – I2C Serial Clock
- Pino SDA – I2C Serial Data
Módulo Bússola Digital / Magnetômetro
Mãos à obra — Configurando uma Bússola Digital
Componentes Necessários
– Montando o projeto:
Primeiramente conecte o VCC do módulo no 3.3V do arduino e logo após conecte o GND do módulo no GND do arduino. Depois disso conecte o SCL do módulo no pino A5 e o SDA no pino A4 do arduino desta forma temos como mostra o diagrama abaixo:
Diagrama de montagem do Módulo Bússola Digital / Magnetômetro
– Biblioteca <wire.h>:
A biblioteca que utilizaremos será a Wire.h. Após o download do arquivo zip, abra a IDE e adicione a biblioteca em forma zip ao seu programa. Não obstante, caso não entenda nada de biblioteca ou como prosseguir, veja o tutorial “COMO INSTALAR UMA BIBLIOTECA NO ARDUINO IDE” no portal vida de silício.
– Programando o Arduino:
Antes de mais nada vamos conectar o arduino no computador e abrir a IDE arduino. Escreva o programa abaixo na IDE e compile o programa para o seu arduino.
Antes de carregar o programa, você precisa selecionar qual porta você deseja usar para fazer o carregamento do seu programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.
#include <Wire.h> void setup() { Wire.begin();//Inicie a biblioteca Wire Serial.begin(9600);//Inicie a Comunicação Serial while (!Serial); //Espera pelo serial monitor Serial.println("\nI2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { // The i2c_scanner uses the return value of // the Write.endTransmisstion to see if // a device did acknowledge to the address. Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address<16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknow error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); // wait 5 seconds for next scan }
Se as conexões estiverem corretas, ao abrir o serial monitor você terá a seguinte tela, mostrando o endereço do dispositivo detectado.
Imagem do serial monitor
O I2C Scanner é um programa que serve não apenas para este módulo, mas também para qualquer outro dispositivo I2C conectado ao barramento. Tenha este programa sempre à mão para descobrir o endereço do dispositivo ou simplesmente para verificar se ele está se comunicando com o Arduino, podemos ver isto no tutorial do Sensor de Movimento de cabeça, onde é utilizamos o mesmo programa.
Imagem do circuito da Bússola Digital
Entendendo a fundo:
Software
– Definições e variáveis utilizadas no projeto do módulo bússola digital com arduino
A instrução #include<> serve para incluir bibliotecas no algoritmo.
#include <Wire.h>
– Função Setup – Definindo pinos do módulo bússola digital com arduino
A função setup é aquela que ira rodar apenas uma vez quando nosso programa for iniciado. Ela é do tipo void, ou seja, não tem retorno e também não tem parâmetros de entrada. A função “Wire.begin()” Inicializa a biblioteca Wire. Semelhantemente a função Serial.begin inicia a comunicação serial e define uma velocidade para ela. A função “while (!Serial)” Espera pelo serial monitor e a função “Serial.println” imprime no serial monitor o texto “I2C Scanner”.
void setup() { Wire.begin();//Inicie a biblioteca Wire Serial.begin(9600);//Inicie a Comunicação Serial while (!Serial); //Espera pelo serial monitor Serial.println("\nI2C Scanner"); }
– Função Loop – Leitura do nossa módulo bússola digital com arduino e Estruturas de decisão
Em primeira instância a função loop ao contrário da setup roda tudo que estiver dentro dela varias vezes em um loop constante até que seja reiniciado ou parado o programa. Temos primeiro a declaração das variáveis do tipo byte “error” e “address” e a variável do tipo int “nDevices”. Logo depois imprime no serial monitor o texto “Scanning…” e atribui a variável nDevices o valor 0.
void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0;
Posteriormente temos a estrutura de repetição for onde atribui a variável “address” o valor 1, depois coloca a condição”address < 127″ de que enquanto a variável “address” for menor que 127 tudo que estiver entre os colchetes será executado e a seguir a cada ciclo irá ser adicionado +1 a variável “address” no comando “address++”. Lodo depois, dentro do for temos de incio por assim dizer o comando” Wire.beginTransmission(address)” que inicia a comunicação com START e referência o dispositivo escravo address. Já o comando “error = Wire.endTransmission()” atribua a variável error um valor recebido pela função.
for(address = 1; address < 127; address++ ) { Wire.beginTransmission(address); error = Wire.endTransmission();
– IF’s e Else’s do nossa módulo bússola digital com arduino
Similarmente dentro do for temos a estrutura de decisão if que será executada caso a condição de a variável error for igual a 0 ser verdadeira. Assim sendo, temos a função Serial.print que executará dentro do if e imprimirá o texto “I2C device found at address 0x” no serial monitor. Logo após temos outra estrutura de decisão dentro da anterior, onde caso a condição da variável address ser menor que 16 for verdadeira será executada e em seguida imprimira no serial monitor o texto “0”, depois o endereço hexadecimal da bússola e depois o texto ” !” e adicionará a variável nDevice +1.
if (error == 0) { Serial.print("I2C device found at address 0x"); if (address<16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; }
Se a variável error for igual a 4 a estrutura else if será executada e não a if anterior, assim sendo a variável nDevices não receberá +1 e será escrito no monitor serial o texto “Unknow error at address 0x”. Em contrapartida, semelhantemente ao if anterior caso a variável address for menor que 16 será impresso no serial monitor o texto “0” e logo depois o endereço hexadecimal do módulo.
else if (error==4) { Serial.print("Unknow error at address 0x"); if (address<16){ Serial.print("0"); Serial.println(address,HEX); } }
Na estrutura if abaixo se a variável nDevices for igual a 0 será impresso no monitor serial o texto “No I2C devices found”. Entretando, caso o nDevices não for igual a 0 o else será executado, então será impresso no serial monitor o texto “done” e esperará 5000 milissegundos para executar a próxima linha.
if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); // wait 5 seconds for next scan }
Considerações finais:
Neste tutorial mostramos como funciona e como ver o endereço do Módulo Bússola Eletrônica 3 Eixos Campo Magnético HMC5883L. Esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.
Estudante de Engenharia Elétrica – IFES, Técnico em Eletrotécnica. Interesse por IoT, Robótica e Sistemas embarcados. Aprecia e deseja desenvolver-se nas tecnologias e suas composições.