ホーム > Arduino センサ > Grove3軸コンパス_SeeedStudio
Grove3軸コンパス_SeeedStudio
2,860円(税260円)
Grove3軸コンパス(Grove 3-axis Compass)は、Honeywell製HMC5883Lチップを搭載したI2C通信で使用するデジタルコンパスモジュールです。 このモジュールには、高解像度の磁気抵抗センサであるHMC118Xと12ビットのADCが搭載されており、1〜2度という高精度の方位計測が可能です。信号増幅や自動消磁ドライバ、オフセットキャンセルといった、計測の精度を向上させる機能も内蔵されております。モジュール上には電源チップとしてMIC5205-3.3が搭載されておりますので、電源として3.3V〜6.0Vの任意の電圧が接続可能です。 <Grove3軸コンパスの主な特徴> 3軸磁気抵抗センサ I2Cシリアルインターフェース 2cm x 2cm のGroveモジュール 1から2度の検出精度 最大116Hzの出力レート 自己テスト機能を内蔵 <Grove3軸コンパスの使用用途> 低コストの方位検出 磁気測定用途 歩行者用ナビゲーション ホビー用途のナビゲーション Bluetooth接続やUART接続で連携させ、スマートフォンなどのポータブル機器での方位データ利用 本製品についての追加情報・詳細情報は下記ページ(英語)をご覧ください。 http://www.seeedstudio.com/wiki/Grove_-_3-Axis_Digital_Compass_V1.0 3軸コンパス用のライブラリはここよりダウンロードが可能です。サンプルコードも含まれます。 <Grove3軸コンパスのサンプルプログラム> //3軸コンパスをI2Cポートに接続します。 // Reference the I2C Library #include <Wire.h> // Reference the HMC5883L Compass Library #include <HMC5883L.h> // Store our compass as a variable. HMC5883L compass; // Record any errors that may occur in the compass. int error = 0; // Out setup routine, here we will configure the microcontroller and compass. void setup() { // Initialize the serial port. Serial.begin(9600); Serial.println("Starting the I2C interface."); Wire.begin(); // Start the I2C interface. Serial.println("Constructing new HMC5883L"); Serial.println("Setting scale to +/- 1.3 Ga"); error = compass.setScale(1.3); // Set the scale of the compass. if(error != 0) // If there is an error, print it out. Serial.println(compass.getErrorText(error)); Serial.println("Setting measurement mode to continous."); error = compass.setMeasurementMode(MEASUREMENT_CONTINUOUS); // Set the measurement mode to Continuous if(error != 0) // If there is an error, print it out. Serial.println(compass.getErrorText(error)); } // Our main program loop. void loop() { // Retrive the raw values from the compass (not scaled). MagnetometerRaw raw = compass.readRawAxis(); // Retrived the scaled values from the compass (scaled to the configured scale). MagnetometerScaled scaled = compass.readScaledAxis(); // Values are accessed like so: int MilliGauss_OnThe_XAxis = scaled.XAxis;// (or YAxis, or ZAxis) // Calculate heading when the magnetometer is level, then correct for signs of axis. float heading = atan2(scaled.YAxis, scaled.XAxis); // Once you have your heading, you must then add your 'Declination Angle', which is the 'Error' of the magnetic field in your location. // Find yours here: http://www.magnetic-declination.com/ // Mine is: -2。・7' which is -2.617 Degrees, or (which we need) -0.0456752665 radians, I will use -0.0457 // If you cannot find your Declination, comment out these two lines, your compass will be slightly off. float declinationAngle = -0.0457; heading += declinationAngle; // Correct for when signs are reversed. if(heading < 0) heading += 2*PI; // Check for wrap due to addition of declination. if(heading > 2*PI) heading -= 2*PI; // Convert radians to degrees for readability. float headingDegrees = heading * 180/M_PI; // Output the data via the serial port. Output(raw, scaled, heading, headingDegrees); // Normally we would delay the application by 66ms to allow the loop // to run at 15Hz (default bandwidth for the HMC5883L). // However since we have a long serial out (104ms at 9600) we will let // it run at its natural speed. delay(66);//of course it can be delayed longer. } // Output the data down the serial port. void Output(MagnetometerRaw raw, MagnetometerScaled scaled, float heading, float headingDegrees) { Serial.print("Raw:\t"); Serial.print(raw.XAxis); Serial.print(" "); Serial.print(raw.YAxis); Serial.print(" "); Serial.print(raw.ZAxis); Serial.print(" \tScaled:\t"); Serial.print(scaled.XAxis); Serial.print(" "); Serial.print(scaled.YAxis); Serial.print(" "); Serial.print(scaled.ZAxis); Serial.print(" \tHeading:\t"); Serial.print(heading); Serial.print(" Radians \t"); Serial.print(headingDegrees); Serial.println(" Degrees \t"); }