KKM: Kompas modul HMC2553L

Početnik si s Croduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM! Kako Koristiti Module (KKM) je serija blog tutorijala e-radionice na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Croduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.

Uvod

 
Ako želiš napraviti robot ili imaš projekt koji treba znati smjer, ovo je modul koji ti treba. Najjednostavnije, GY-273 kompas modulu je troosni magnetometar, a više detalja u nastavku tutoriala. Prilikom izrade projekta, ne zaboravite na magnetsku deklinaciju - odstupanje izmedju magnetskog i pravog pola.
 
KARAKTERISTIKE:
Rezolucija mjerenja: 5 miliGaus
Napon: 3-5V
Dimenzije: 14 x 19mm
Težina: 5g
Komunikacija: I2C

Princip rada modula

 
Elektricni magnetometar, kao što je HMC5883L, je baziran na fenomenu anizotropnog magnetskog otpora. To je karakteristika materijala da mijenja svoj električni otpor kada na njega djeluje vanjsko magnetno polje. Kome je potrebno više informacija neka proući Loretnzov zakon.
Magneto_web
 
U kompasu, magnetno polje koje se mjeri je Zemljino. Tangencionalno je površini planeta i struji od sjevera prema jugu. HCL5883L proračunava tri različite osi: X, Y i Z. Iz dobivenih parametara možemo izračunati nagib kompasa u X-Y ravnini, uključeno u kodu. Proračunavamo ga pomoću jednostavnih matematičkih operacija vektorskog zbroja te trigonometrije. Kod pretpostavlja da se kompas nalazi vodoravno na ravnom stolu, stoga bi bilo dobro brilikom pokretenja kod kompas staviti u vodoravni položaj na ravnu podlogu. Navedeni nedostatak možete ispraviti koristeći ovaj modul s žiroskop i acelerometar modulom.

Kako povezati modul s Croduinom?

 
Untitled Sketch_bb
 
Ovaj, GY273, magnetski modul koristi HCM5883L koji je I2C uredaj. Što znači da samo moramo spojiti SDA (Data) i SCL (Clock) pinove na Croduino komunikaciju. Na Croduinu SDA nalazi se na analognom pinu 4 i SCL na analognom pinu 5. Osim toga, potrebno je spojiti ground i Vcc na 3.3V.
 
Vcc - +5V
GND - gnd
SCL - analogni PIN5
SDA - analogni pin4
DRDY - ostaviti prazno

Arduino kod

 
Koristit ćemo HMC5883L library s kodom ispod. Ovo je link za direktno preuzimanje library-a. Ne znate što je library ili imate proglema s korištenjem, možda vam posluži naš tutorial o Arduino bibliotekama.

///////////////////////////////////////////////////////////////////////////////
/*                                                                           */
/*                                                                           */
/* (c) e-radionica.com 2015 - http://e-radionica.com/hr/faq/#privatnost      */
/* [email protected]                                               */
/*                                                                           */
/*                                                                           */
/* Kompas modul HMC5883L - KKM tutorial                                      */
///////////////////////////////////////////////////////////////////////////////

#include "Wire.h"
#include "HMC5883L.h"

HMC5883L kompas;

void setup()
{
  Serial.begin(9600);
  
  Serial.println("Pokrecem I2C sucelje.");
  Wire.begin(); //zapocinjemo I2C sucelje

  Serial.println("Postavljam novi HMC5883L");
  
  while (!kompas.begin())
  {
    Serial.println("Ne mogu pronaci ispravni HMC5883L, provjeri spajanje!");
    delay(500);
  }

  //postavljamo kompas kako bi ispravno radio
  Serial.println("Postavljam skalu na +/- 1.3 Ga");
  kompas.setRange(HMC5883L_RANGE_1_3GA);

  Serial.println("Postavljam na neprekidno mjerenje");
  kompas.setMeasurementMode(HMC5883L_CONTINOUS);

  Serial.println("Postavljam datarate na 30Hz");
  kompas.setDataRate(HMC5883L_DATARATE_30HZ);

  Serial.println("Postavljam broj uzoraka");
  kompas.setSamples(HMC5883L_SAMPLES_8);

  Serial.println("Postavljam postavke kalibriranja");
  kompas.setOffset(0, 0);
}

void loop()
{
  Vector skalirano = kompas.readNormalize();

  // racunam nagibOsi
  // atan2 racuna arc tan
  float nagibOsi = atan2(skalirano.YAxis, skalirano.XAxis);

  /* sada je potrebno unijeti kut deklinacije, tj. odstupanje pravog od magnetskog pola
     za djakovo ono iznosi 3° 58', odnosno 0.06923 
     pronadji svoj na: http://www.magnetic-declination.com/ */
     
  // Formula: (stupanj + (minuta / 60.0)) / (180 / M_PI);
  float kutDeklinacije = (3 + (58.0 / 60.0)) / (180 / M_PI);
  nagibOsi += kutDeklinacije;

  // Correct for nagibOsi < 0deg and nagibOsi > 360deg
  if (nagibOsi < 0)
  {
    nagibOsi += 2 * PI;
  }

  if (nagibOsi > 2 * PI)
  {
    nagibOsi -= 2 * PI;
  }

  // Convert to degrees
  float nagibOsiStupnjevi = nagibOsi * 180/M_PI; 

  // Output
  Serial.print(" nagibOsi = ");
  Serial.print(nagibOsi);
  Serial.print(" Degress = ");
  Serial.print(nagibOsiStupnjevi);
  Serial.println();

  delay(100);
}

Leave a Reply