education:arduino_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í:
- Jednotlivé - Po naměření jedné hodnoty automaticky přejde do Idle Mode
- 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