Calib.ino 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /*
  2. Calibrate HMC5883L + MPU6050 (GY-86 / GY-87). Output for HMC5883L_calibrate_processing.pde
  3. Read more: http://www.jarzebski.pl/arduino/czujniki-i-sensory/3-osiowy-magnetometr-hmc5883l.html
  4. GIT: https://github.com/jarzebski/Arduino-HMC5883L
  5. Web: http://www.jarzebski.pl
  6. (c) 2014 by Korneliusz Jarzebski
  7. */
  8. #include <Wire.h>
  9. #include <HMC5883L.h>
  10. #include <MPU6050.h>
  11. HMC5883L compass;
  12. MPU6050 mpu;
  13. int minX = 0;
  14. int maxX = 0;
  15. int minY = 0;
  16. int maxY = 0;
  17. int offX = 0;
  18. int offY = 0;
  19. void setup()
  20. {
  21. Serial.begin(9600);
  22. // Initialize MPU6050
  23. while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
  24. {
  25. delay(500);
  26. }
  27. // Enable bypass mode
  28. mpu.setI2CMasterModeEnabled(false);
  29. mpu.setI2CBypassEnabled(true);
  30. mpu.setSleepEnabled(false);
  31. // Initialize Initialize HMC5883L
  32. while (!compass.begin())
  33. {
  34. delay(500);
  35. }
  36. // Set measurement range
  37. compass.setRange(HMC5883L_RANGE_1_3GA);
  38. // Set measurement mode
  39. compass.setMeasurementMode(HMC5883L_CONTINOUS);
  40. // Set data rate
  41. compass.setDataRate(HMC5883L_DATARATE_30HZ);
  42. // Set number of samples averaged
  43. compass.setSamples(HMC5883L_SAMPLES_8);
  44. }
  45. void loop()
  46. {
  47. Vector mag = compass.readRaw();
  48. // Determine Min / Max values
  49. if (mag.XAxis < minX) minX = mag.XAxis;
  50. if (mag.XAxis > maxX) maxX = mag.XAxis;
  51. if (mag.YAxis < minY) minY = mag.YAxis;
  52. if (mag.YAxis > maxY) maxY = mag.YAxis;
  53. // Calculate offsets
  54. offX = (maxX + minX)/2;
  55. offY = (maxY + minY)/2;
  56. Serial.print(mag.XAxis);
  57. Serial.print(":");
  58. Serial.print(mag.YAxis);
  59. Serial.print(":");
  60. Serial.print(minX);
  61. Serial.print(":");
  62. Serial.print(maxX);
  63. Serial.print(":");
  64. Serial.print(minY);
  65. Serial.print(":");
  66. Serial.print(maxY);
  67. Serial.print(":");
  68. Serial.print(offX);
  69. Serial.print(":");
  70. Serial.print(offY);
  71. Serial.print("\n");
  72. }