您的位置:首页 > 产品设计 > UI/UE

Arduino Uno + HMC5883L电子罗盘 实验

2016-12-31 00:42 288 查看
先实现  HMC5883L 电子罗盘 简单的数据读取实验



实验效果

本实验,简单显示从HMC5883L 读取到的数据



BOM表

Arduino Uno  *  1

HMC5883L(gy-273) * 1

跳线若干

接线图

Arduino Uno            <---->   HMC5883L

5v                               <---->             VCC

GND                          <---->             GND

A5(SCL)                    <---->             SCL

A4(SDA)                    <---->             SDA                                               

开源程序

下载库文件   https://github.com/jarzebski/Arduino-HMC5883L

把文件夹保存在libraries 文件夹里

打开Arduino IDE --> 文件  --> 示例 --> Arduino-HMC5883L-master --> HMC5883L_simple   

就会见到如下代码:

/*
HMC5883L Triple Axis Digital Compass. Simple Example.
Read more: http://www.jarzebski.pl/arduino/czujniki-i-sensory/3-osiowy-magnetometr-hmc5883l.html GIT: https://github.com/jarzebski/Arduino-HMC5883L Web: http://www.jarzebski.pl (c) 2014 by Korneliusz Jarzebski
*/

#include <Wire.h>
#include <HMC5883L.h>

HMC5883L compass;

void setup()
{
Serial.begin(9600);

// Initialize HMC5883L
Serial.println("Initialize HMC5883L");
while (!compass.begin())
{
Serial.println("Could not find a valid HMC5883L sensor, check wiring!");
delay(500);
}

// Set measurement range
// +/- 0.88 Ga: HMC5883L_RANGE_0_88GA
// +/- 1.30 Ga: HMC5883L_RANGE_1_3GA (default)
// +/- 1.90 Ga: HMC5883L_RANGE_1_9GA
// +/- 2.50 Ga: HMC5883L_RANGE_2_5GA
// +/- 4.00 Ga: HMC5883L_RANGE_4GA
// +/- 4.70 Ga: HMC5883L_RANGE_4_7GA
// +/- 5.60 Ga: HMC5883L_RANGE_5_6GA
// +/- 8.10 Ga: HMC5883L_RANGE_8_1GA
compass.setRange(HMC5883L_RANGE_1_3GA);

// Set measurement mode
// Idle mode:              HMC5883L_IDLE
// Single-Measurement:     HMC5883L_SINGLE
// Continuous-Measurement: HMC5883L_CONTINOUS (default)
compass.setMeasurementMode(HMC5883L_CONTINOUS);

// Set data rate
//  0.75Hz: HMC5883L_DATARATE_0_75HZ
//  1.50Hz: HMC5883L_DATARATE_1_5HZ
//  3.00Hz: HMC5883L_DATARATE_3HZ
//  7.50Hz: HMC5883L_DATARATE_7_50HZ
// 15.00Hz: HMC5883L_DATARATE_15HZ (default)
// 30.00Hz: HMC5883L_DATARATE_30HZ
// 75.00Hz: HMC5883L_DATARATE_75HZ
compass.setDataRate(HMC5883L_DATARATE_15HZ);

// Set number of samples averaged
// 1 sample:  HMC5883L_SAMPLES_1 (default)
// 2 samples: HMC5883L_SAMPLES_2
// 4 samples: HMC5883L_SAMPLES_4
// 8 samples: HMC5883L_SAMPLES_8
compass.setSamples(HMC5883L_SAMPLES_1);

// Check settings
checkSettings();
}

void checkSettings()
{
Serial.print("Selected range: ");

switch (compass.getRange())
{
case HMC5883L_RANGE_0_88GA: Serial.println("0.88 Ga"); break;
case HMC5883L_RANGE_1_3GA:  Serial.println("1.3 Ga"); break;
case HMC5883L_RANGE_1_9GA:  Serial.println("1.9 Ga"); break;
case HMC5883L_RANGE_2_5GA:  Serial.println("2.5 Ga"); break;
case HMC5883L_RANGE_4GA:    Serial.println("4 Ga"); break;
case HMC5883L_RANGE_4_7GA:  Serial.println("4.7 Ga"); break;
case HMC5883L_RANGE_5_6GA:  Serial.println("5.6 Ga"); break;
case HMC5883L_RANGE_8_1GA:  Serial.println("8.1 Ga"); break;
default: Serial.println("Bad range!");
}

Serial.print("Selected Measurement Mode: ");
switch (compass.getMeasurementMode())
{
case HMC5883L_IDLE: Serial.println("Idle mode"); break;
case HMC5883L_SINGLE:  Serial.println("Single-Measurement"); break;
case HMC5883L_CONTINOUS:  Serial.println("Continuous-Measurement"); break;
default: Serial.println("Bad mode!");
}

Serial.print("Selected Data Rate: ");
switch (compass.getDataRate())
{
case HMC5883L_DATARATE_0_75_HZ: Serial.println("0.75 Hz"); break;
case HMC5883L_DATARATE_1_5HZ:  Serial.println("1.5 Hz"); break;
case HMC5883L_DATARATE_3HZ:  Serial.println("3 Hz"); break;
case HMC5883L_DATARATE_7_5HZ: Serial.println("7.5 Hz"); break;
case HMC5883L_DATARATE_15HZ:  Serial.println("15 Hz"); break;
case HMC5883L_DATARATE_30HZ: Serial.println("30 Hz"); break;
case HMC5883L_DATARATE_75HZ:  Serial.println("75 Hz"); break;
default: Serial.println("Bad data rate!");
}

Serial.print("Selected number of samples: ");
switch (compass.getSamples())
{
case HMC5883L_SAMPLES_1: Serial.println("1"); break;
case HMC5883L_SAMPLES_2: Serial.println("2"); break;
case HMC5883L_SAMPLES_4: Serial.println("4"); break;
case HMC5883L_SAMPLES_8: Serial.println("8"); break;
default: Serial.println("Bad number of samples!");
}

}

void loop()
{
Vector raw = compass.readRaw();
Vector norm = compass.readNormalize();

Serial.print(" Xraw = ");
Serial.print(raw.XAxis);
Serial.print(" Yraw = ");
Serial.print(raw.YAxis);
Serial.print(" Zraw = ");
Serial.print(raw.ZAxis);
Serial.print(" Xnorm = ");
Serial.print(norm.XAxis);
Serial.print(" Ynorm = ");
Serial.print(norm.YAxis);
Serial.print(" ZNorm = ");
Serial.print(norm.ZAxis);
Serial.println();

delay(100);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: