Bussola HMC5883L
L’HMC5883L è una bussola digitale a 3 assi dotata di interfaccia di comunicazione I2C. Non è incluso il regolatore di tensione per cui è necessario alimentare il sensore con una tensione continua tra 2.16 e 3.6V. E’ incluso un condensatore di filtraggio sulla linea di alimentazione. Non è necessario usare resistenze di pull-up sul bus I2C perché sono già incluse nella scheda.
Componenti
- Bussola HMC5883L
- Arduino
Schema elettrico
Clicca sull’immagine per ingrandirla
Codice di esempio
#include <Wire.h> #include <HMC58X3.h> HMC58X3 magn; void setup(void) { Serial.begin(9600); Wire.begin(); // no delay needed as we have already a delay(5) in HMC5843::init() magn.init(false); // Dont set mode yet, we'll do that later on. // Calibrate HMC using self test, not recommended to change the gain after calibration. magn.calibrate(1, 32); // Use gain 1=default, valid 0-7, 7 not recommended. // Single mode conversion was used in calibration, now set continuous mode magn.setMode(0); } void loop() { int ix,iy,iz; float fx,fy,fz; delay(10); // Get values, as ints and floats. magn.getValues(&ix,&iy,&iz); magn.getValues(&fx,&fy,&fz); // also available HMC5843::getValues(float *xyz) you can pass to it an array of 3 floats // Print int values Serial.print("Ints x:"); Serial.print(ix); Serial.print(","); Serial.print(iy); Serial.print(","); Serial.print(iz); Serial.print(","); // Print float values Serial.print(" Floats x:"); Serial.print(fx); Serial.print(" y:"); Serial.print(fy); Serial.print(" z:"); Serial.print(fz); Serial.print(" Heading: "); float heading = atan2(fy, fx); if(heading < 0) { heading += 2 * M_PI; } Serial.println(heading * 180/M_PI); // x and y axis are swapped above with respect to the above paper as our Z axis points to the sky while in the paper it points to the bottom }
Link utili
Libreria HMC5883L.h: https://github.com/landis/arduino_raw/tree/master/libraries/HMC58X3
Datasheet HMC5883L: http://www.adafruit.com/datasheets/HMC5883L_3-Axis_Digital_Compass_IC.pdf
Guida HMC5883L: http://bildr.org/2012/02/hmc5883l_arduino/