0
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心
发布
  • 发文章

  • 发资料

  • 发帖

  • 提问

  • 发视频

创作活动
SEN-12916

SEN-12916

  • 厂商:

    SPARKFUNELECTRONICS

  • 封装:

    -

  • 描述:

    SPARKFUN HMC6343 BREAKOUT

  • 数据手册
  • 价格&库存
SEN-12916 数据手册
Page 1 of 7   HMC6343 3-axis Compass Hookup Guide Introduction The HMC6343 is a fully-integrated, high-end, digital compass module that can compute and give the user a heading direction that’s accurate within a couple degrees! It is tilt compensated and is calibrated to handle magnetic distortions. The IC combines 3-axis magneto-resistive sensors and 3-axis MEMS accelerometers, analog and digital support circuits, a microprocessor and algorithms in firmware required for heading computation. The breakout board allows for easy use of the HMC6343. All that is required is power (3.3V @ 4.5mA in run mode) and I2C connections to a microcontroller so that the module can receive commands and send data back to the user. Covered in this Tutorial In this tutorial, we will help you learn how to use this electronic compass so you can quickly and painlessly integrate them into your project[s]. Here is what we’ll cover: • Hardware Overview – An overview of the HMC6343 breakout board as well as some details about the IC. • Example Hookup – How to connect the compass to the ubiquitous Arduino so we can start writing code to work with it. • Example Code – We’ve written example sketches and a library that demonstrate how to collect sensor data as well as make sense of it. Page 2 of 7 Required Materials • HMC6343 Breakout Board • Arduino Uno or any Arduino Board– We will use the Uno as the example, however you should be able to use any Arduino board you have handy including the RedBoard, Pro, Mega, etc. • Bi-directional Logic Level Converter You may also need a breadboard, jumper wires, and straight male headers to follow the example setup, if you don’t already have these or another way of connecting the Arduino to the breakout board. Suggested Reading Before continuing on with this tutorial, we recommend you be somewhat familiar with the concepts in these tutorials: • • • • Installing an Arduino Library Inter-IC Communication (I2C) Logic Levels Bi-Directional Level Shifter Hookup Guide Hardware Overview The Breakout Board for the HMC6343 breaks out the all the pins you’ll need to send commands and collect data from the electronic compass. As you can see, the breakout has only four pins broken out. Two are for power, 3.3V and GND. Two are for I2C communication, SCL (clock) and SDA (data). Voltage Supply Requirements The big alert here is that the HMC6343 has an input voltage range of 2.7V - 3.6V – that range applies to both the power supply and the I2C lines. You can use a 5V or 3.3V micro with this sensor as long as you power the board with 3.3V and use a logic level converter for the I2C lines if you’re using a 5V micro like the Arduino Uno. Fortunately, you don’t need a lot of power to make the HMC6343 work. In the normal operating mode, the IC typically draws about 4.5mA. It draws even less current in standby (1mA) or sleep (10µA) modes. Extra Hardware Notes Page 3 of 7 The HMC6343 can measure and compute a heading direction every 200ms (5Hz). Being able to easily acquire a tilt compensated heading direction accurate within a couple degrees without having your microprocessor spend a lot of time on computation is the highlight of this IC. However, you can read raw magnetometer and accelerometer values if needed. The HMC6343 has two mounting holes to allow for a secure physical connection to your project. You certainly don’t want the board moving/twisting around independently of your system if you’re depending on it to give you a sense of direction. Also, there is a solder jumper on the top of the board that is closed by default so that the I2C lines have 10KΩ pull-up resistors. If you want to use a different values for your I2C pull-ups, you can disconnect these default resistors by removing the solder from the jumper. Example Hookup Soldering Before you can plug your compass breakout board into a breadboard and connect it to anything, you’ll need to solder connectors or wires to the breakout pins. What you solder to the board depends on how you’re going to use it. If you’re going to use the breakout board in a breadboard or similar 0.1"-spaced perfboard, we recommend soldering straight male headers into the pins (there are also long headers if you need). If you’re going to mount the breakout into a tight enclosure, you may want to solder wires (stranded or solid-core) directly into the pins. Simple Hookup This example will use an Arduino Uno to collect and interpret the sensor data from the HMC6343. Since the sensor uses I2C communication, all we need are two connections, one for a clock (SCL) and one for data (SDA) in addition to two for power (3.3V and GND). We simply have to supply the accelerometer with power (3.3V and GND), then hookup the I2C connections. The HMC6343 IC has a max rating of 3.6V on any pin so in order to talk to the HMC6343 with the Arduino Uno or any other 5V microcontroller, we will need a bi-directional logic level converter for the I2C lines. The following tables shows the connections made for using the HMC6343 breakout with an Arduino Uno and logic level converter. HMC6343 BreakoutLogic Level ConverterArduino Uno 3.3V LV 3.3V GND GND GND N/A HV 5V SDA SDA(A4) SCL SCL(A5) Set up this way, I2C communication will be 3.3V on the breakout board side and 5V on the Arduino Uno side. If this is your first time using a logic level converter, or the above table seems confusing, check out our tutorial on logic levels and the hookup guide for the logic level converter. That should clear up any confusion with your setup before proceeding to the code examples. Example Code Page 4 of 7 Now that your electronic compass breakout is electrically connected to your Arduino, it’s time to dive into the code. The full library (SFE_HMC6343_Library) and example sketches can be found in the github repository. If you need help with GitUb, visit our tutorial. The same goes for installing an Arduino library. Once the library is installed, open the example labeled HMC6343_basics.ino. This sketch will teach you how to get a heading direction, pitch, and roll angles as well as accelerometer measurements. The first lines of this example sketch include the necessary libraries, one for I2C and the other so we can declare and interact with the compass object. // Libraries for I2C and the HMC6343 sensor #include  #include "SFE_HMC6343.h" SFE_HMC6343 compass; // Declare the sensor object The variable compass will be used for all interactions with the sensor itself. Next we use the setup() function in initialize serial communication and the HMC6343. If the HMC6343 is not detected, an error message will be reported to the Serial Monitor. We also wait half a second before we try to initialize the HMC6343 since it takes that long to be responsive after being powered on. void setup() {  // Start serial communication at 115200 baud   Serial.begin(115200); // Give the HMC6343 a half second to wake up delay(500);  // Initialize the HMC6343 and verify its physical presence if (!compass.init())   {      Serial.println("Sensor Initialization Failed\n\r"); // Rep ort failure, is the sensor wiring correct?   }  }  In the loop() function, we call two functions to read the sensor data and two more to print the data to the Serial Monitor in an easily readable format. compass.readHeading() is a library function that commands the sensor to collect heading direction, pitch angle, and roll angle and then store these values. We will see how to use and print these values in the printHeadingData() function. compass.readAccel() gets a reading from the IC’s 3-axis accelerometer values and these are used and printed in printAccelData() . Here is the loop in full: Page 5 of 7 void loop() {  // Read, calculate, and print the heading, pitch, and roll f rom the sensor   compass.readHeading(); printHeadingData(); // Read, calculate, and print the acceleration on the x, y,  and z axis of the sensor   compass.readAccel(); printAccelData(); // Wait for two seconds delay(2000); // Minimum delay of 200ms (HMC6343 has 5Hz sens or reads/calculations) }  After calling compass.readHeading() , the variables compass.heading , compass.pitch , and compass.roll carry the heading, pitch, and roll values given by the sensor in tenths of degrees. In the printHeadingData() function, we print these raw values and also print the value converted to degrees. Let’s look at how we do this using the heading direction as an example: Serial.print("Heading: "); Serial.print(compass.heading); Serial.print("  "); // Print ra w heading value Serial.print((float) compass.heading/10.0);Serial.write(176);S erial.println(); // Print heading in degrees In the first line, we print the label. In the second line, we print the actual raw value returned by the sensor, compass.heading and a couple spaces. In the third line, we scale the heading direction by dividing it by 10 so that we can print it in degrees. Serial.write(176) draws a degree symbol and then we print a new line. Within printHeadingData() , the same process is followed for pitch and roll. When running the program, the Serial Monitor’s output of this function will look like the following: Heading Data (Raw value, in degrees):  Heading: 3249 324.90° Pitch:   28 2.80° Roll:    24 2.40° If you have the breakout board parallel to the ground, pitch and roll will be about 0 degrees and you will see the heading angle change as you slowly rotate the board. Try angling the board relative to the X and Y axis and see how that affects your pitch and roll angles. Printing accelerometer values is very similar. Under the printAccelData() function, we print the acceleration measured on the x axis as follows: Serial.print("X: "); Serial.print(compass.accelX); Serial.print("  "); // Print ra w acceleration measurement on x axis Serial.print((float) compass.accelX/1024.0);Serial.println ("g"); // Print x axis acceleration measurement in g forces Again, in the first line we print the label. On the second line, we print the raw acceleration measurement felt on the x axis using the variable compass.accelX . Acceleration measurements for y and z are accessed with the variables compass.accelY and compass.accelZ respectively. On Page 6 of 7 the third line above, we scale the raw value by dividing it by 1024 to get the accleration in g forces. We print that scaled value as well as the unit symbol, g. Here an example of what you’ll see in the Serial Monitor after calling the printAccelData() function: Accelerometer Data (Raw value, in g forces): X: ­52 ­0.05g Y: ­44 ­0.04g Z: ­1047 ­1.02g At the end of loop() there is a delay of two seconds before new sensor data is read and printed. The fastest you can consecutively acquire new sensor readings is 5Hz or every 200ms. Advanced Features All the additional features of the HMC6343 device library are covered in the HMC6343_advanced sketch. However, I’ll overview some of the more appealing features here. If you want to save power, you’ll want to be able to use the sleep or standby modes. The IC in standby draws 1.0mA as opposed to 4.5mA under normal run mode operation. Under sleep mode, the IC only uses 10µA however it takes the device longer to wake up after entering that low power state. Here are examples of how the two modes can be entered and exited: // Enter and exit standby mode (4.5mA draw in run mode, 1.0mA in standby) // HMC6343 requires 1 ms before it can receive commands after switching modes compass.enterStandby(); delay(1); compass.exitStandby(); // Exit standby, enter run mode (defaul t) delay(1); // Enter and exit sleep mode (4.5mA draw in run mode, 10uA in sleep) // HMC6343 requires 1ms after entering sleep and 20ms after ex iting before it's able to receive new commmands compass.enterSleep(); delay(1); compass.exitSleep(); delay(20); If you don’t want to mount the HMC6343 breakout board parallel to the ground, then you’ll need to know how to set the new orientation of the board in order to get correct heading, pitch, and roll values. Here is a list of the three possible orientations and the command to configure the HMC6343 to use a new orientation: // Possible orientations: // LEVEL X = forward, +Z = up (default) // SIDEWAYS X = forward, +Y = up // FLATFRONT Z = forward, ­X = up compass.setOrientation(LEVEL); delay(1); // 1 ms before sensor can receive commands after se tting orientation Those are the most important additional features. However, the advanced example covers reading/printing raw 3-axis magnetometer values and raw ‘tilt’ values (pitch, roll, and temperature). It also covers reading the primary Page 7 of 7 status register (OPMode1) as well as reading and writing to the EEPROM registers of the sensor. There is also a command to reset the processor of the HMC6343 as well as a way to enter and exit user calibration mode. While the library provides a convenient way to do all these things (every HMC6343 command in the datasheet is used by the library), if you want to know the details of each EEPROM register or how to properly calibrate the sensor, consulting the datasheet is a must. My hope is that the library allows you to read sensor data and interact with the HMC6343 as easily as possible and allows you to quickly integrate the breakout board into your project. Resources & Going Further Thanks for reading! By now you’ve become familiar with both the hardware and software to use the HMC6343, the high end electronic compass. We’re excited to see what you build with this. The following resources may be helpful for you when building your related projects: • • • • HMC6343 Datasheet HMC6343 Github Repository Using Github You could make a robot like the HUB-ee Buggy or the RedBot, and give it a sense of direction with the HMC6343. • You could make a multitude of autonomous vehicles, and enter it in the SparkFun Autonomous Vehicle Competition (AVC). https://learn.sparkfun.com/tutorials/hmc6343-3-axis-compass-hookup-guide?_ga=1.3888... 11/12/2015
SEN-12916 价格&库存

很抱歉,暂时无法提供与“SEN-12916”相匹配的价格&库存,您可以联系我们找货

免费人工找货