elektrik port üyelik servisleri elektrik port üyelik servisleri

Windows Phone Sensör Ve Servislerin Yararları Nelerdir?

Accelerometer (ivme ölçer); cihazınızın X, Y, Z koordinatlarındaki bilgisini ve hareketin o anki hızını alır. Cihaza hangi yönden ivme verirseniz, o kısmın hızı ölçülür. Bu yazımızda telefonlar için çok önemli olan sensörlerden ivme ölçeri inceleyeceğiz. Ayrıntılar yazımızda...



A- A+
10.10.2014 tarihli yazı 9529 kez okunmuştur.

Windows Phone Sensör Ve Servislerin Yararları Nelerdir?

 
Windows Phone üzerinde bir çok fiziksel sensör bulunmaktadır ve bu sensörler sayesinde uygulamalarımızın daha fonksiyonel olmasını sağlayabiliyoruz. Windows Phone geliştiricileri de bu sensörlerden gelen verileri okuyabilmek için API’ler sunmaktadır. Kullandığımız bütün sensörler SensorBase<TSensorReading>[1] sınıfından türemektedir. Bu sensör API’lerinin neler olduğunu, SensorBase sınıfımızın elemanlarını örneklerle birlikte irdelemeye başlayalım.
 
·        SensorBase sınıfı
·        Accelerometer (ivme ölçer)
·        Compass (pusula)
·        Gyroscope (jiroskop)
·        Motion (hareket)

 
► İlginizi Çekebilir: Silverlight Nedir?
 


Accelerometer(İvme Ölçer)

 
Accelerometer sensörü geliştiricilere cihazın X, Y ve Z eksenindeki durumunu vermektedir. Cihazımızın tam ortası başlangıç noktası (0,0,0) olmaktadır. Soldaki resmi incelediğimizde hangi yönün hangi eksen olduğunu daha rahat anlayabilirsiniz.

Örneğin; cihazınız dikey pozisyondayken X koordinatından yukarı doğru ivme kazandırırsak, X koordinatı negatif değer alacaktır ki, cihazın üzerinde bir top olduğunu hayal edersek, top hangi koordinata ivme kazandırılıyorsa, aksi yönde hareket edecektir.

Application bar içerisinde bulunan On/Off düğmesiyle Accelerometer özelliğini açıp kapatılabilir. On/Off düğmesinin bağlı olduğu ApplicationBarIconButton_Click event handler'ı içerisinde bu işlemin nasıl gerçekleştirildiğini görebilirsiniz.

On/Off düğmesini kullanarak Accelerometer'ı aktifleştirdiğimizde, ivmede değişiklik olma anında tetiklenecek accelerometer_CurrentValueChanged aksiyonunu da hazırlamış oluyoruz.
Kullanıcıya geri bildirimde bulunacak kısım ise timer_Tick event'idir. Bu event sayfanın çalışma anında (Constructor içinde tanımlaması yapılmıştır) Timer nesnesi ile devreye alınır. Belli periyotlarda (tanımlandığı yerde 30 milisaniye olarak belirtilmiştir.) Accelerometer'dan aldığı bilgiyi ekrana yazdırır.

Bir örnekle bunu gösterelim. Yeni bir Windows Phone projesi açın ve aşağıda verilen kodları uygun yerlere yerleştirin.

Uygulamada bir Timer (Zamanlayıcı) kontrolü ile, sürekli olarak Compass (pusula) sensöründen gelen yön bilgisi alınır.

 
► İlginizi Çekebilir: Expression Blend Nedir?



► Şekil 1: Accelerometer Örneği
 

C# örneği
using System;
using Microsoft.Phone.Controls;
using Microsoft.Devices.Sensors;
using System.Windows.Threading;
 
namespace sdkRawSensorDataCS
{
    public partial class AccelerometerPage : PhoneApplicationPage
    {
        Accelerometer accelerometer;
        DispatcherTimer timer;
        Microsoft.Xna.Framework.Vector3 acceleration;
        bool isDataValid;
        public AccelerometerPage()
        {
            InitializeComponent();
            if (!Accelerometer.IsSupported)
            {
                // Öncelikle cihazımız accelerometer destekliyor mu bunu kontrol ediyoruz.
 
                statusTextBlock.Text = "desteklenmiyor";
                ApplicationBar.IsVisible = false;
            }
            else
            {
                // destekliyorsa bir timer oluşturuyoruz.
 
                timer = newDispatcherTimer();
                timer.Interval = TimeSpan.FromMilliseconds(30);
                timer.Tick += newEventHandler(timer_Tick);
            }
        }
 
    private void ApplicationBarIconButton_Click(object sender, EventArgs e)
    {
        if (accelerometer != null&& accelerometer.IsDataValid)
        {
            // Durdurmak için bastığımız düğme eğer accelerometer doluysa ve üzerindeki veri onaylanırsa accelerometer'ı durduruyor.
 
            accelerometer.Stop();
            timer.Stop();
            statusTextBlock.Text = "accelerometer durduruldu.";
        }
        else
        {
            if (accelerometer == null)
            {
                // accelerometer boş ise önce instance alıyoruz
               accelerometer = newAccelerometer();
 
                // 20 milisaniyede update olacağını söylüyoruz
               accelerometer.TimeBetweenUpdates = TimeSpan.FromMilliseconds(20);
 
                // biz istediğimiz değeri atasak da accelerometer bunu desteklemiyor olabilir, bu durumda accelerometer en yakın süreyi üzerine alacaktır. Biz de gerçek zaman aralığını bir textblock'a yazdırıyoruz
              
  timeBetweenUpdatesTextBlock.Text = accelerometer.TimeBetweenUpdates.TotalMilliseconds + " ms";
 
                //değer değiştikçe çalışacak event'i belirtiyoruz.
                accelerometer.CurrentValueChanged += newEventHandler<SensorReadingEventArgs<AccelerometerReading>>(accelerometer_CurrentValueChanged);
            }
            try
            {
                //accelerometer ı başlatıyoruz ve aynı zamanda timer'ı da çalıştırıyoruz.
 
                statusTextBlock.Text = "Accelerometer başlatıldı";
                accelerometer.Start();
                timer.Start();
            }
            catch (InvalidOperationException ex)
            {
                statusTextBlock.Text = "hata oluştu, ne yazık ki accelerometer başlayamadı. Hata:" + ex.Message;
            }
        }
    }
 
    void accelerometer_CurrentValueChanged(object sender, SensorReadingEventArgs<AccelerometerReading> e)
    {
        //sensör datalarının doğruluğu onaylanıyor. Normal koşullarda burada bir sıkıntı olmasa da yine de okuma anında bir sıkıntı olursa isdatavalid false dönmektedir.
        isDataValid = accelerometer.IsDataValid;
 
        //acceleration üzerinde çizim yapacağımız vektör nesnesi
        acceleration = e.SensorReading.Acceleration;
    }
 
    void timer_Tick(object sender, EventArgs e)
    {
        if (isDataValid)
        {
            statusTextBlock.Text = "accelerometer çalışıyor.";
 
            // textblocklara accelerator den gelen bilgi yazılıyor
            xTextBlock.Text = "X: " + acceleration.X.ToString("0.00");
            yTextBlock.Text = "Y: " + acceleration.Y.ToString("0.00");
            zTextBlock.Text = "Z: " + acceleration.Z.ToString("0.00");
 
            // Line nesnesi ile gelen uzaklığı ekrana bastırıyoruz.
            xLine.X2 = xLine.X1 + acceleration.X * 100;
            yLine.Y2 = yLine.Y1 - acceleration.Y * 100;
            zLine.X2 = zLine.X1 - acceleration.Z * 50;
            zLine.Y2 = zLine.Y1 + acceleration.Z * 50;
        }
    }
}
 
Tabi bu kadar kodu gördüğümüzde korkabilirsiniz, Windows Phone geliştiricileri bunu düşünerek kendi mağazalarında ivme ölçer sensörünü yapmışlar oradan Windows Phone’ muza kurup rahatça ölçümler yapabiliriz. 
 

Kaynak: 

► İstanbul Kemerburgaz Üniversitesi Elektrik Elektronik  Mühendisliği Bölümü
 
Safa BİLGİNER Safa BİLGİNER Yazar Hakkında Tüm yazıları Mesaj gönder Yazdır



Aktif etkinlik bulunmamaktadır.
ANKET
Endüstri 4.0 için En Hazır Sektör Hangisidir

Sonuçlar