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 moduluje 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.

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      */
/* techsupport@e-radionica.com                                               */
/*                                                                           */
/*                                                                           */
/* Kompas modul HMC5883L - KKM tutorial                                      */
///////////////////////////////////////////////////////////////////////////////


#include       //uvodimo potrebne library-e
#include   //potrebne za izvodjenje ovog koda

HMC5883L kompas;  //definiramo nas kompas
int greska = 0;   //definiramo eventualne pogreske

void setup()
{

  Serial.begin(9600);  //zapocinjemo serijsku komunikaciju

  Serial.println("Pokrecem I2C sucelje.");
  Wire.begin(); //zapocinjemo I2C sucelje

  Serial.println("Postavljam novi HMC5883L");
  kompas = HMC5883L(); //definiranje naseg kompasa kao HCM5883L.
                       //izvrsenje HCM5883L varijable nalazi se library-u
  
  //postavljamo kompas kako bi ispravno radio
  Serial.println("Postavljam skalu na +/- 1.3 Ga");
  greska = kompas.SetScale(1.3); //postavlja skalu kompasa na 1.3Ga
  if(greska != 0){               //ako postoji neka greska kod ju ispisuje 
    Serial.println(kompas.GetErrorText(greska));
    greska = 0;
  }

  Serial.println("Postavljam na neprekidno mjerenje");
  greska = kompas.SetMeasurementMode(Measurement_Continuous); //postavljamo na neprekidno mjerenje
  if(greska != 0) {                              //ako postoji neka greska kod ju ispisuje 
    Serial.println(kompas.GetErrorText(greska)); //kod se poziva na library, TODO
    greska = 0;                                  //kako bi definirao gresku
  }
  
  Serial.print("\n\n"); //pravi razmak od dva reda
  
}

void loop()
{
  
  MagnetometerRaw grubo = kompas.ReadRawAxis();           //povlazi grube parametre s magnetometra
  MagnetometerScaled skalirano = kompas.ReadScaledAxis(); //povlaci skalirane parametre 
                                                          //onako kako je skaliranje zadano

  int MilliGauss_OnThe_XAxis = skalirano.XAxis; //ili Y os ili Z os

  // Atan2() automatski koristi formulu ovisnu o kojoj ravnini se radi
  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/ */
                                                               
  float kutDeklinacije = 0.06923; //ako ne mozete odrediti kut deklinacije za mjesto koristenja
  nagibOsi += kutDeklinacije;     //senzora upisite nula, ili stavite ove dvije formule pod komentare

  if(nagibOsi < 0)     //postavljamo kut nagiba osi
    nagibOsi += 2*PI;  //u domenu od 0 do 2*PI
    
  if(nagibOsi > 2*PI)
    nagibOsi -= 2*PI; 

  float nagibOsi_stupnjevi = nagibOsi * 180/M_PI;  //konvertiramo radijane u stupnjeve
  
  //ispisujemo proracunat nagib osi u Serial monitoru
  Serial.print("Otklon od geografskog smjera sjevera:\t");
  Serial.print(nagibOsi_stupnjevi); 
  Serial.println("\t");

}

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.

Ako koristite puno USB-to-serial uređaja, u ovom tutorijalu možete vidjeti kako resetirati već dodjeljene portove i/ili onemogućiti Windowsima dodjeljivanje novog COM port broja svaki put kada spojite novi uređaj.