Overview

This program introduces attaching a digital compass (HMC5883L) to the GR-COTTON board in order to determine orientation.

This project and description are still under development! The sample program can read the sensor’s values, but cannot yet calculate orientation.


Preparation

You will need a GR-COTTON board, a USB cable (Micro B type), and an HMC5883L module.

You will need to install a pin socket on GR-COTTON and a pin header on the HMC5883L module.

The pin socket can be purchased from the Akizuki Denshi website.

Connect the HMC5883L module to GR-COTTON as shown in the photo to the right.

Make sure the white jumper on the reverse side of GR-COTTON is moved to the “3V3 USB” side. If it is set to the BATT side, remove and reinsert it into the USB side.


Displaying Digital Compass Reading on Serial Monitor

This sample programs the serial monitor to display readings taken every half-second by the digital compass.


#include <arduino.h>
#include <Wire.h>
 
#define HMC5883L_ADDRESS 0x1E //7bit ADDRESS
 
//*********************************************************
void setup() 
{
  //Initialize Serial and I2C communications
  Serial.begin(9600);
  Wire.begin();
   
  //Put the HMC5883 IC into the correct operating mode
  Wire.beginTransmission(HMC5883L_ADDRESS);
  Wire.write(0x02); //select mode register
  Wire.write(0x00); //continuous measurement mode
  Wire.endTransmission();
 
}
//------------------------------------------------------
void loop() 
{
  int x,y,z; //triple axis data
   
  //set address where to begin reading data
  Wire.beginTransmission(HMC5883L_ADDRESS);
  Wire.write(0x03); //select register 3, X MSB register
  Wire.endTransmission();
  
 //Read data from each axis, 2 registers per axis
  Wire.requestFrom(HMC5883L_ADDRESS, 6);
  if(6  < = Wire.available()){
    x = Wire.read() << 8;  x |= Wire.read();
    z = Wire.read() << 8;  z |= Wire.read();
    y = Wire.read() << 8;  y |= Wire.read();
  }
   
  //Print out values of each axis
  Serial.print("x: ");
  Serial.print(x);
  Serial.print("  y: ");
  Serial.print(y);
  Serial.print("  z: ");
  Serial.println(z);  
    
  delay(500);
 
}