Senzor magnetometric HMC5883

In acest articol vom folosi un senzor magnetometric HMC5883.

Acest senzor se poate alimenta atat cu +3.3V cat si cu +5V. Conexiunea la Arduino se face pe magistrala I2C.

Datele obtinute de catre senzor le vom afisa pe un display LCD 2004 cu adaptor I2C, acesta va fi conectat conform indicatiilor din acest articol.

Pentru  putea citi facil datele returnate de catre senzor vom folosi o librarie externa numita Adafruit HMC5883 Unified. De asemenea este nevoie si de libraria Adafruit Sensor (in cazul in care nu o avem deja instalata).

O poza cu modulul poate fi vazuta mai jos:

 

Sketchul folosit pentru acest montaj este urmatorul:

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_HMC5883_U.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 20, 4);
Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(12345);
byte celsius[] = {
  B00110,
  B01001,
  B01001,
  B00110,
  B00000,
  B00000,
  B00000,
  B00000
};

void setup(void) 
{
   lcd.begin();
  lcd.setCursor(0, 0);
  lcd.print("Testare magnetometru");
  lcd.setCursor(0, 1);
  lcd.print("HMC5883");
  lcd.setCursor(1, 3);
  lcd.print("electronicstore.ro");
  delay(3000);
  lcd.clear();ssssss  
  sensor_t sensor;
  mag.getSensor(&sensor);
  lcd.setCursor(0, 0);
  lcd.print("Senzor: ");
  lcd.print(sensor.name);
  lcd.setCursor(0, 1);
  lcd.print("Driver ver. ");
  lcd.print(sensor.version);
  lcd.setCursor(0, 2);
  lcd.print("ID unic: ");
  lcd.print(sensor.sensor_id);
  lcd.setCursor(1, 3);
  lcd.print("electronicstore.ro");
  delay(3000);
  lcd.clear();  
  lcd.setCursor(0, 0);
  lcd.print("Val. Max. ");
  lcd.print(sensor.max_value);
  lcd.print("uT");
  lcd.setCursor(0, 1);
  lcd.print("Val. Min. ");
  lcd.print(sensor.min_value);
  lcd.print("uT");
  lcd.setCursor(0, 2);
  lcd.print("Rezolutie: ");
  lcd.print(sensor.resolution);
  lcd.print("uT");
  lcd.setCursor(1, 3);
  lcd.print("electronicstore.ro");
  delay(3000);
  lcd.clear();
  lcd.createChar(0, celsius); 
  mag.begin();
}

void loop(void) 
{
  sensors_event_t event; 
  mag.getEvent(&event);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("X: ");
  lcd.print(event.magnetic.x);
  lcd.print("uT");
  lcd.setCursor(0, 1);
  lcd.print("Y: ");
  lcd.print(event.magnetic.y);
  lcd.print("uT");
  lcd.setCursor(0, 2);
  lcd.print("Z: ");
  lcd.print(event.magnetic.z);
  lcd.print("uT");
  float heading = atan2(event.magnetic.y, event.magnetic.x);
  float declinationAngle = 0.22;
  heading += declinationAngle;  
  if(heading < 0)
    heading += 2*PI;
  if(heading > 2*PI)
    heading -= 2*PI;
  float headingDegrees = heading * 180/M_PI; 
  lcd.setCursor(0, 3);
  lcd.print("Cap compas: ");
  lcd.print(headingDegrees);
  lcd.write(byte(0));
  delay(500);
}

Un filmulet cu montajul in functiune este mai jos:

Autentificare