Skip to Content

HSCDTD008A Magnetómetro com Arduino

HSCDTD008A Magnetómetro com Arduino

Neste tutorial, vais aprender a usar o Magnetómetro de 3 Eixos HSCDTD008A com um Arduino. O HSCDTD008A é essencialmente uma bússola eletrónica ou digital que te permite medir a intensidade do campo magnético da Terra (e outras fontes magnéticas) ao longo de três eixos.

Os magnetómetros podem ser usados em muitas aplicações diferentes. Ajudam sistemas de navegação a encontrar direção e orientação. Na robótica, melhoram a perceção espacial e mantêm os robôs no caminho certo. Os smartphones usam-nos para funcionalidades de bússola e realidade aumentada. Os drones usam-nos para estabilização e navegação. Dispositivos vestíveis como pulseiras fitness e smartwatches também usam magnetómetros para monitorizar atividades e navegação.

Peças Necessárias

Para este projeto vais precisar de um sensor magnético HSCDTD008A e um microcontrolador. Usei um Arduino Uno, mas qualquer outro Arduino ou placa ESP32/ESP8266 também funciona.

Magnetómetro de 3 Eixos HSCDTD008A

Arduino

Arduino Uno

USB Data Sync cable Arduino

Cabo USB para Arduino UNO

Dupont wire set

Conjunto de fios Dupont

Half_breadboard56a

Breadboard

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Características do HSCDTD008A

O HSCDTD008A é um sensor minúsculo (1.6×1.6×0.65mm) que pode medir a intensidade dos campos magnéticos ao longo de três eixos com uma precisão de 0.15μT / LSB (T= Tesla). A imagem abaixo mostra o IC real – apenas um pequeno bloco quadrado.

HSCDTD008A IC
IC HSCDTD008A

Os três eixos do sensor estão orientados conforme mostrado abaixo e o valor de saída de cada eixo é positivo quando apontado para o norte magnético.

Eixos do HSCDTD008A (source)

Dependendo da orientação do IC em relação a um campo magnético (ex. campo magnético da Terra), o valor de saída de cada eixo vai mudar. Isto permite, por exemplo, navegar, pois podes determinar a orientação do sensor no espaço.

Diagrama de Blocos Interno do HSCDTD008A

A imagem seguinte mostra o Diagrama de Blocos Interno do HSCDTD008A. Podes identificar facilmente o Sensor Magnético de 3 eixos, o Multiplexador (MUX) usado para ler os 3 eixos, o conversor Analógico-Digital (AD) para o Sensor de Temperatura e a interface I2C.

Internal Block Diagram of HSCDTD008A
Diagrama de Blocos Interno do HSCDTD008A

O Sensor de Temperatura é necessário porque a tensão de saída de um sensor magnético pode variar significativamente com a temperatura, e o HSCDTD008A tem um sensor de temperatura incorporado para compensar as variações da temperatura ambiente.

Os pinos IO do HSCDTD008A são os seguintes: AVDD é a tensão de alimentação analógica, DVDD é a tensão de alimentação digital, VSS é o terra, SDA e SCL são as linhas da interface I2C, DRDY é um pino de interrupção que sinaliza que os dados estão prontos, e TEST1 e TEST2 são pontos de teste internos durante a produção do chip.

Para mais detalhes, consulta o datasheet do HSCDTD008A que está ligado abaixo:

Placa breakout para o HSCDTD008A

O HSCDTD008A é demasiado pequeno para ligar diretamente a um Arduino e também não funciona com 5V. Por isso, normalmente precisas de uma placa breakout como a mostrada abaixo. O pequeno chip quadrado no centro é o HSCDTD008A. A placa também tem um regulador de tensão, para que possas ligar a placa a microcontroladores de 5V ou 3.3V.

Breakout board for HSCDTD008A
Placa breakout para HSCDTD008A

Além da alimentação, os pinos são essencialmente os mesmos discutidos no diagrama de blocos interno. VCC é a tensão de alimentação, GND é o terra, SDA e SCL são as linhas da interface I2C, DRY é o pino de dados prontos, e T0 e T1 são pontos de teste, que não vais precisar.

O consumo de corrente do módulo é tipicamente 60μA quando ativo e apenas 3μA em modo standby. Como mencionado antes, a tensão de alimentação é de +3.3V a +5V e o nível de comunicação é 3.3V.

Ligação do HSCDTD008A ao Arduino

Graças à interface I2C do HSCDTD008A, ligá-lo a um Arduino é simples. Primeiro, liga os pinos SCL e SDA da placa breakout do HSCDTD008A aos pinos correspondentes no Arduino conforme mostrado abaixo. Depois, liga o terra ao GND e 3.3V (ou 5V) ao VCC do HSCDTD008A e está feito.

Connecting HSCDTD008A to Arduino
Ligação do HSCDTD008A ao Arduino

De seguida, vamos escrever algum código para testar o funcionamento do sensor HSCDTD008A.

Código para medir campo magnético com HSCDTD008A

Antes de poderes medir campos magnéticos com o sensor HSCDTD008A, terás de instalar uma biblioteca. A seguir vamos usar a HSCDTD008A Library de Bob Veringa. Para a instalar, basta procurar por HSCDTD008A no Library Manager, encontrar a de Bob Veringa e carregar em “INSTALL”. A imagem abaixo mostra como é:


Installing HSCDTD008A Library by Bob Veringa via Library Manager
Instalação da Biblioteca HSCDTD008A de Bob Veringa via Library Manager

Com a biblioteca instalada, vamos experimentar o sensor. O código seguinte lê a intensidade do campo magnético ao longo dos três eixos (X, Y e Z) e imprime-os no Monitor Serial a cada meio segundo.

#include "hscdtd008a.h"

HSCDTD008A geomag;

void setup() {
  Serial.begin(9600);
  geomag.begin();
  hscdtd_status_t status = geomag.initialize();
  if (status != HSCDTD_STAT_OK) {
    Serial.println("Can't initialize sensor!");
  }
  geomag.temperatureCompensation();
}

void loop() {
  hscdtd_status_t status = geomag.startMeasurement();
  if (status == HSCDTD_STAT_OK) {
    Serial.print("X:");
    Serial.println(geomag.mag.mag_x);  
    Serial.print("Y:");
    Serial.println(geomag.mag.mag_y);
    Serial.print("Z:");
    Serial.println(geomag.mag.mag_z);
  } 
  delay(500);
}

Vamos decompor o código nas suas partes para uma melhor compreensão.

Inclusão da Biblioteca

A primeira linha inclui a biblioteca necessária para o magnetómetro HSCDTD008A. Esta biblioteca contém as funções e definições necessárias para comunicar com o sensor.

#include "hscdtd008a.h"

Criação de uma Instância

Aqui, criamos uma instância da classe HSCDTD008A chamada geomag. Esta instância permite-nos aceder às funções definidas na biblioteca para interagir com o magnetómetro.

HSCDTD008A geomag;

Função Setup

Na função setup(), inicializamos a comunicação serial a 9600 baud. Isto permite enviar dados para o Monitor Serial para depuração e monitorização.

Serial.begin(9600);

De seguida, chamamos o método begin() na instância geomag para inicializar o magnetómetro. Depois verificamos o estado da inicialização usando o método initialize(). Se o estado não for HSCDTD_STAT_OK, imprimimos uma mensagem de erro no Monitor Serial.

geomag.begin();
hscdtd_status_t status = geomag.initialize();
if (status != HSCDTD_STAT_OK) {
  Serial.println("Can't initialize sensor!");
}

Finalmente, chamamos o método temperatureCompensation() para garantir que as leituras do sensor são ajustadas com base na temperatura ambiente, que pode afetar as medições magnéticas.

geomag.temperatureCompensation();

Função Loop

Na função loop(), iniciamos uma medição chamando o método startMeasurement(). Voltamos a verificar o estado desta operação. Se o estado for HSCDTD_STAT_OK, prosseguimos para ler os valores do campo magnético.

hscdtd_status_t status = geomag.startMeasurement();
if (status == HSCDTD_STAT_OK) {

Depois imprimimos os valores do campo magnético para os eixos X, Y e Z no Monitor Serial. Os valores são acedidos através da propriedade mag da instância geomag e estão em micro Tesla (µT):

Serial.print("X:");
Serial.println(geomag.mag.mag_x);  
Serial.print("Y:");
Serial.println(geomag.mag.mag_y);
Serial.print("Z:");
Serial.println(geomag.mag.mag_z);

Finalmente, introduzimos um atraso de 500 milissegundos antes do próximo ciclo de medição começar, permitindo uma saída legível no Monitor Serial.

 delay(500);

Executar o Código

Se carregares e executares o código, deverás começar a ver medições do campo magnético, semelhantes às abaixo, a aparecer no Monitor Serial:

Output of HSCDTD008A on Serial Monitor
Saída do HSCDTD008A no Monitor Serial

Se agora inclinares e rodares o sensor, podes monitorizar os valores em mudança das medições do campo magnético para os três eixos no Serial Plotter:

Output of HSCDTD008A on Serial Plotter
Saída do HSCDTD008A no Serial Plotter

E é tudo! Este tutorial deve dar-te um bom ponto de partida para as tuas próprias aplicações.

Conclusões

Neste tutorial aprendeste a usar o Magnetómetro de 3 Eixos HSCDTD008A com um Arduino. Aplicações comuns para magnetómetros são como bússola digital e para melhorar a precisão na navegação de robôs ou drones.

Note que, embora os magnetómetros sejam semelhantes aos sensores de efeito Hall, geralmente não são adequados para as mesmas aplicações, como medir corrente ou medições de velocidade sem contacto de objetos em rotação. Vê o nosso tutorial Read Fan Speed Signal with Arduino e ACS712 Current Sensor And Arduino, se quiseres aprender mais sobre isso.

Boas experiências ; )