Arduino İle Dijital Pusula Kullanımı

Pusula yüzyıllardır yön bulmak için kullanılan bir alettir. Dünyanın manyetik alanına bağlı olarak çalışırlar. Güney kutbundan kuzey kutbuna doğru olan bu manyetik alan, pusula içerisinde bulunan sürtünmesi en aza indirilmiş manyetik özelliği olan kadranın içinden geçerek kadranı yönlendirmektedir.

Dünyanın bu manyetik akımı prensibinden hareketle çalışan pek çok manyetik sensör (manyetometre) üretilmiştir. Üretilen bu sensörler çeşitli tekniklerle yön tespit etmeye çalışmaktadır. Yön tespit etme konusu birçok değişken kullanılarak bir hayli hesaplama gerektirir. Pusula sensörü olarak en yaygın kullanılanı şüphesiz  Honeywell firmasının ürettiği HMC5883L‘dir.

HMC5883L sensörü I2C seri haberleşme protokolünü kullanmaktadır. Bu sensör dünyanın manyetik alanının yönünü ve büyüklüğünü 8 gauss’a kadar ölçmektedir. Gauss, manyetik alan şiddetinin birimidir. 1 G, 10 üzeri -4 Tesla’ya eşittir.

Manyetometre Nasıl Çalışır?

Dünyanın çekirdeğinde bulunan sıvı demir içerinde oluşan akımın neden olduğu manyetik alan oluşturmaktadır.  HCM5883L manyetometre sensörü, malzemelerin yapısındaki değişime ve manyetorezistans mantığına göre çalışır. Lorentz yasasına göre demirli bir malzeme içerisinden geçen elektrik akımı ile etkileşime girer. Manyetik akı yönü ile orantılı olarak etkileşim boyutu uzayıp kısalmaktadır. Bu durum da direnç değişimi gibi düşünülebilir.

 Kaynak:http://bluelemonlabs.blogspot.com.tr

Sensör içerisinde bu etkileşim ölçülür ve I2C ile okuma sağlayabileceğimiz şekilde tasarlanmıştır.

GY-85 (Manyetometre, Gyro, Acceleration) Sensörü

Biz uygulamamızda GY-85 9 eksenli sensörünü kullanacağız. Manyetometreler tek başına stabil bir sonuç vermek için yeterli değildir. İvme ve gyro sensörleri ile bir takım hesaplamalar yapılarak doğru sonuç elde edilebilmektedir. Bu işlemler bir hayli karışıktır. Bu işlemleri arka planda uygun forma dönüştüren gayet iyi sonuçlar veren kütüphaneler hazırlanmıştır. Bu kütüphanelerden birini sizler için denedik ve en pratik olanını seçtik. Bu linki tıklayarak indirebilirsiniz.

Kütüphane dosyasını indirdikten sonra “C:\Program Files (x86)\Arduino\libraries” bu dosya konumuna taşıyın.

GY-85 Manyetometre Sensörü

Arduino İle Dijital Pusula Bağlantı Şeması

Arduino ile Dijital Pusula Programı

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

HMC5883L compass;

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

//HMC5883L Başlatılır…
Serial.println(“Baslatiliyor HMC5883L”);
while (!compass.begin())
{
Serial.println(“Ölçüm yapılamıyor! Kablo bağlantılarını kontrol edin”);
delay(500);
}

// Ölçüm menzili kurulur
compass.setRange(HMC5883L_RANGE_1_3GA);

// Ölçüm modu kurulur
compass.setMeasurementMode(HMC5883L_CONTINOUS);

// Data oranı
compass.setDataRate(HMC5883L_DATARATE_30HZ);

// Örnekleme sayısı ayarlanır
compass.setSamples(HMC5883L_SAMPLES_8);

// Kalibrasyon offset ayarı yapılır. HMC5883L_calibration.ino dosyasına bakın.(Kütüphane dosyasında bulunmaktadır)
compass.setOffset(0, 0);
}

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

// Başlık hesaplanır
float heading = atan2(norm.YAxis, norm.XAxis);
///////////////////AŞAĞIDAKİ NOTU OKUYUNUZ.
float declinationAngle = (5.0 + (24.0 / 60.0)) / (180 / M_PI);
heading += declinationAngle;
//////////////////
// 0 dereceden küçükse ve 360 dereceden büyükse
if (heading < 0)
{
heading += 2 * PI;
}

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

// Açı değerine dönüşüm yapılır.
float headingDegrees = heading * 180/M_PI;

// Çıktı
Serial.print(” Heading = “);
Serial.print(heading);
Serial.print(” Degress = “);
Serial.print(headingDegrees);
Serial.println();

delay(100);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


Dünya üzerinde manyetik alan değerleri farklılık arz etmektedir. Bunun için bulunduğunuz konumun değerini bu linkten öğrenerek ekleme yapınız.Daha isabetli sonuçlar elde edebilirsiniz:

İstanbul/Büyükçekmece için bu değer: +5’24E (positive)
Formül: (deg + (min / 60.0)) / (180 / M_PI);

 

 

 

 

 

 

Bir Cevap Yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d blogcu bunu beğendi: