Застосування апаратно-обчислювальної платформи «Arduino» щодо програмування автомобільних комп’ютерних систем, страница 2

Вывод SDA чипа подключаем к выводу SDA платы Arduino (обычно Analog IN 4), а вывод SCL чипа соответственно к выводу SCL платы Arduino (обычно Analog IN 5). На Arduino Mega это 20 и 21 пины. И не забываем питание 3.3В и общий GND

1.2. Код работы с датчиком:

#include "Wire.h"

#include "HMC5883L.h"

HMC5883L compass;

void setup(){

Serial.begin(9600);

Wire.begin();

compass = HMC5883L();  // создаем экземпляр HMC5883L библиотеки

setupHMC5883L();  // инициализация HMC5883L

}

void loop(){

float heading = getHeading();

Serial.println(heading);

delay(250);

}

void setupHMC5883L(){

// инициализация HMC5883L, и проверка наличия ошибок

int error;

error = compass.SetScale(0.88); // чувствительность датчика из диапазона: 0.88, 1.3, 1.9, 2.5, 4.0, 4.7, 5.6, 8.1

if(error != 0) Serial.println(compass.GetErrorText(error)); // если ошибка, то выводим ее

error = compass.SetMeasurementMode(Measurement_Continuous); // установка режима измерений как Continuous (продолжительный)

if(error != 0) Serial.println(compass.GetErrorText(error)); // если ошибка, то выводим ее

}

float getHeading(){

// считываем данные с HMC5883L и рассчитываем  направление

MagnetometerScaled scaled = compass.ReadScaledAxis(); // получаем масштабированные элементы с датчика

float heading = atan2(scaled.YAxis, scaled.XAxis);  // высчитываем направление

// корректируем значения с учетом знаков

if(heading < 0) heading += 2*PI;

if(heading > 2*PI) heading -= 2*PI;

return heading * RAD_TO_DEG; // переводим радианы в градусы

}

Чувствительность датчика задается функцией SetScale() и может быть выбрана только из следующих значений: 0.88, 1.3, 1.9, 2.5, 4.0, 4.7, 5.6, 8.1.

После загрузки скетча в контроллер Arduino и запуске утилиты мониторинга порта, следует увидеть поступающие данные с датчика, представленные на (Рис.3):

Данные от датчика HMC5883L

Рис.3 Поступающие данные с датчика

Вращая датчик вокруг своей оси, будет изменяться градус поворота. 0° - это будет север, а 180° - юг. Следует  помнить, что датчик очень чувствителен к любым намагниченным предметам, а также к сотовым телефонам и другим подобным устройствам излучающих магнитные поля. Также датчик необходимо располагать строго в горизонтальной плоскости, стоит его наклонить и тогда данные будут неверные. При применении цифровых компасов в робототехнике это необходимо учитывать и обычно, такие цифровые компасы применяют в паре с цифровым акселерометром, для компенсации наклона.

2.Работа с магнитометром HMC5883L