Uživatelské nástroje

Nástroje pro tento web


education:arduino_hmc5883l

HMC5883L

HMC5883L

  • Tříosý magnetometr (kompas)
  • Komunikace přes I2C
  • Napájení 2.16 - 3.6V
  • 12bit AD převodník
  • Samotest

Adafruit_HMC5883_Unified
Data sheet

HMC5883L ARDUINO ESP32
I2C SDA A4 GPIO21
SCL A5 GPIO22
Volitelné1) DRDY LIBOVOLNÝ

2 režimy měření:

  1. Jednotlivé - Po naměření jedné hodnoty automaticky přejde do Idle Mode
  2. Stálé - automatické měření v nastavených intervalech, mezi měřeními přechází senzor do Idle Mode

Funkcí setMagGain(gain); lze nastavit zesílení

HMC5883L.ino
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_HMC5883_U.h> // Kód je psaný pro verzi knihovny 1.2.1
 
/* Přidělení unikátního kódu senzoru (unique ID) [12345] */
Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(12345);
 
sensors_event_t event;
 
void setup(void) {
  Serial.begin(9600);
  Serial.println("\nHMC5883 test");
 
  if (!mag.begin()) {
    Serial.println("Chyba komunikace s BH1750");
    while (1);
  }
 
  displaySensorDetails();  // výpis informací o senzoru
}
 
void loop(void) {
  mag.getEvent(&event);  // načtení dat ze senzoru
 
  //Serial.println("\nX[uT]\tY[uT]\tZ[uT]\tnatoceni[°]");
  Serial.print(event.magnetic.x);          Serial.print("\t");
  Serial.print(event.magnetic.y);          Serial.print("\t");
  Serial.print(event.magnetic.z);          Serial.print("\t");
  Serial.println(uhelNatoceni(0.0849394));
  /*  do funkce "uhelNatoceni()" vložte hodnotu deklinace v radiánech.
      lze zjistit zde http://www.magnetic-declination.com/
      například 4°52' je ~4.87° -> 0.0849394 rad    */
 
  delay(500);
}
 
float uhelNatoceni(float declinationAngle) {
  // Otočte senzor tak, aby osa Z mířila nahoru
  float heading = atan2(event.magnetic.y, event.magnetic.x); //výpočet úhlu natočení z os X a Y
  heading += declinationAngle;
 
  /* korekce výpočtu úhlu natočení */
  if (heading < 0) heading += 2 * PI;
  if (heading > 2 * PI) heading -= 2 * PI;
 
  float headingDegrees = heading * 180 / M_PI; // Přepočet radiánů na stupně
  return headingDegrees; // Vrácení vypočítané hodnoty
}
 
void displaySensorDetails(void) {
  sensor_t sensor;
  mag.getSensor(&sensor);
  Serial.println("------------------------------------");
  Serial.print("Sensor:       ");  Serial.println(sensor.name);
  Serial.print("Driver Ver:   ");  Serial.println(sensor.version);
  Serial.print("Unique ID:    ");  Serial.println(sensor.sensor_id);
  Serial.print("Max Value:    ");  Serial.print(sensor.max_value);   Serial.println(" uT");
  Serial.print("Min Value:    ");  Serial.print(sensor.min_value);   Serial.println(" uT");
  Serial.print("Resolution:   ");  Serial.print(sensor.resolution);  Serial.println(" uT");
  Serial.println("------------------------------------");
  Serial.println("");
  delay(1000);
}
1)
Není nutné zapojovat
education/arduino_hmc5883l.txt · Poslední úprava: 2023/08/18 12:37 autor: 127.0.0.1