Arduino UNO урок 14 - цифровий компас HMC5883L

  • Час 10-09-2015, 17:10
  • Автор admin
  • Коментарів 0 Комент.
  • Силка url

Arduino UNO урок 14 - цифровий компас HMC5883L

Мікросхема HMC5883L являє собою 3-х осьовий цифровий компас, який працює по шині I2C. В якості сенсорів використовується три магниторезистивных датчика. Розробник: компанія Honeywell. Даташит PDF. Напруга живлення становить 2.2-3.6 Ст. Чутливість датчика становить 5 миллигаусс.

Датчик може використовуватися в мобільних телефонах, планшетах, навігаційному обладнанні і іншої споживчої електроніки, але для радіоаматорів він може бути цікавий тим, що цифровий компас може дуже стане в нагоді при конструюванні роботів і радіокерованих моделей. У даному уроці ми розглянемо підключення HMC5883L до Arduino. Т. к. датчик працює по шині I2C, то схема підключення гранично проста:

Arduino UNO урок 14 - цифровий компас HMC5883L

Т. к. сам чіп компаса дуже маленький 3x3 мм (16-ти вивідний LPCC корпус), то деякі фірми випускають плати з зручними висновками для підключення і розпаяними підтягуючими резисторами. Саме таку плату ми і будемо використовувати в якості прикладу.

Висновок SDA чіпа підключаємо до висновку SDA плати Arduino (зазвичай Analog IN 4), а висновок SCL чіпа відповідно до висновку SCL плати Arduino (зазвичай Analog IN 5). На Arduino Mega це 20 і 21 піни. І не забуваємо живлення 3.3 В і загальний GND.

На сайті bildr існує готова бібліотека для роботи з датчиком. Нею ми і скористаємося (трохи підправивши помилку при перевірці діапазону scale). Папку HMC5883L помістіть в ваш каталог Libraries. Код роботи з датчиком:

#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 lt; 0) heading += 2*PI; if(heading gt; 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 і запуску утиліти моніторингу порту, що ви повинні побачити надходять дані з датчика:

Arduino UNO урок 14 - цифровий компас HMC5883L

Обертаючи датчик навколо своєї осі, буде змінюватися градус повороту. 0° - це буде північ, а 180° - південь. Пам'ятайте, що датчик дуже чутливий до будь-яких намагніченим предметів, а також до стільникових телефонах і інших подібних пристроїв випромінювальних магнітні поля. Також датчик необхідно розташовувати строго горизонтальній площині, варто його нахилити і тоді дані будуть неправильні. При застосуванні цифрових компасів в робототехніці це необхідно враховувати і зазвичай, такі цифрові компаси застосовують в парі з цифровим акселерометром, для компенсації нахилу.

Прикріплені файли:
  • HMC5883L.rar (6 Кб)
Tags

Коментарі до новини

Календарчик

  • «    Квітень 2018    »
    ПнВтСрЧтПтСбНд
     1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30 

Опитування

Оцените работу движка

Лучший из новостных
Неплохой движок
Устраивает ... но ...
Встречал и получше
Совсем не понравился