Sparkfun hmc 6343


post reply
 
1 post • page 1 of 1
hmc 6343
postby victorbreen » tue apr 14, 2015 1:26 pm

hello,

testing sparkfun magnetometer sparkfun redboard (ie uno). wired directed in hook guide , used basic sketch provided. data heading seems vary 5-10 degrees. better more isolated keep chip other electronics. tried implement filter out values , not seem different. got filter code advanced sketch.

does see mistakes in code below, or have other suggestions?

thanks
victor


// libraries i2c , hmc6343 sensor
#include <wire.h>
#include "sfe_hmc6343.h"

sfe_hmc6343 compass; // declare sensor object

void setup()
{
// start serial communication @ 115200 baud
serial.begin(115200);

// give hmc6343 half second wake up
delay(500);

// initialize hmc6343 , verify physical presence
if (!compass.init())
{
serial.println("sensor initialization failed\n\r"); // report failure, sensor wiring correct?
}
}

void loop()
{
// read, calculate, , print heading, pitch, , roll sensor
compass.readheading();
printheadingdata();

// read, calculate, , print acceleration on x, y, , z axis of sensor
compass.readaccel();
printacceldata();

// write filter value (used weighted averages of sensor reads) eeprom of hmc6343
// filter_lsb register can set between 0x00 , 0x0f
// averages last x sensor readings (filter register value) latest reading
// example: if set 4 (instead of default 0), average last 4 readings latest reading
// sensor values such heading last 4 total of second average (5hz)
compass.writeeeprom(filter_lsb, 4); // 0x00-0x0f, default 0x00
delay(10); // 10ms before sensor can accept commands after writing eeprom
// enable filter, filter bit must set in opmode1 register: 0bxx1xxxxx
compass.writeeeprom(op_mode1, 0x31); // enable filter (default opmode1 + filter enable bit set)
//compass.writeeeprom(op_mode1, 0x11); // default, filter disabled (0bxx010001)
delay(10);

// wait 2 seconds
delay(2000); // minimum delay of 200ms (hmc6343 has 5hz sensor reads/calculations)
}

// print both raw values of compass heading, pitch, , roll
// calculate , print compass values in degrees
// sample output:
// heading data (raw value, in degrees):
// heading: 3249 324.90°
// pitch: 28 2.80°
// roll: 24 2.40°
void printheadingdata()
{
serial.println("heading data (raw value, in degrees):");
serial.print("heading: ");
serial.print(compass.heading); serial.print(" "); // print raw heading value
serial.print((float) compass.heading/10.0);serial.write(176);serial.println(); // print heading in degrees
serial.print("pitch: ");
serial.print(compass.pitch); serial.print(" ");
serial.print((float) compass.pitch/10.0);serial.write(176);serial.println();
serial.print("roll: ");
serial.print(compass.roll); serial.print(" ");
serial.print((float) compass.roll/10.0);serial.write(176);serial.println();
serial.println();
}

// print both raw values of compass acceleration measured on each axis
// calculate , print accelerations in g forces
// sample output:
// accelerometer data (raw value, in g forces):
// x: -52 -0.05g
// y: -44 -0.04g
// z: -1047 -1.02g
void printacceldata()
{
serial.println("accelerometer data (raw value, in g forces):");
serial.print("x: ");
serial.print(compass.accelx); serial.print(" "); // print raw acceleration measurement on x axis
serial.print((float) compass.accelx/1024.0);serial.println("g"); // print x axis acceleration measurement in g forces
serial.print("y: ");
serial.print(compass.accely); serial.print(" ");
serial.print((float) compass.accely/1024.0);serial.println("g");
serial.print("z: ");
serial.print(compass.accelz); serial.print(" ");
serial.print((float) compass.accelz/1024.0);serial.println("g");
serial.println();
}

indoor environment : kinds of ac-devices creating magnetic fields..
i thing you've got can expect sensor.
see datasheet accuracy,resolution,repeatability,hysteresis ++
if magnet has been near, read de-gaussing.


Arduino Forum > Using Arduino > Sensors > Sparkfun hmc 6343


arduino

Comments