Facebook RSS Feed
 

.NET Micro Framework: IR Mesafe Sensörü Kullanımı (Analog)

Mesafe sensörleri, bulunduğu nokta ile karşılarındaki engeller arasındaki uzaklığı ölçen cihazlardır. Sıklıkla kullanılan çeşitleri; ultrasonik, lazer ve kızılötesidir. Her türden sensörün kullanım alanı, yapılarına göre farklılık gösterir. Örneğin, ultrasonik sensörler rüzgarlı havalarda hassas ölçüm yapamaz. Diğer yandan, kızılötesi sensörler güneş ışığı altında beklenen performansı sunmayacaktır.  Lazer sensörler ise en hassas ölçümü gerçekleştirir, fakat yüksek maliyerleri nedeniyle hobi projeleri arasında pek yer bulamazlar.

- - -
Ultrasonik Lazer Kızılötesi

Bu sensörlerin çalışma prensiplerini özetleyecek olursak:

 - Ultrasonik sensörler: Çoğunlukla bir ultrasonik alıcı ve vericiden oluşur. 20.000 Hz'in üzerinde yaydıkları frekansın karşılarındaki engele çarparak geri dönüşü arasındaki süreyi hesaplayarak (yarasalar gibi) mesafe ölçümü yaparlar. Alıcı / verici özelliğine göre belirli bir açı dahilinde ölçüm özelliğine sahiptirler. Birbiriyle çakışacak açıda birden fazla sensör yerleştirilmesi durumunda sinyaller birbirine karışacak ve doğru ölçüm yapılamayacaktır.

- Lazer sensörler: Sensör özelliğine göre belirli bir açı aralığını tarayarak her açı aralığı için mesafe ölçümü gerçekleştirirler. Ultrasonik sensörlere benzer olarak, ışığın gönderilme ve yansıdıktan sonra geri dönme süresi hesaplanır. Işık hızı çok yüksek olduğu için, milimetrenin altındaki mesafelerde başarılı olamazlar. Daha hassas ölçümler için, bazı lazer sensörlerinde kızılötesi sensörlerde olduğu gibi alıcı / verici / obje arasındaki açılar hesaplanarak hassas sonuçlar elde edilebilir.

- Kızılötesi sensörler: Kızılötesi verici (IRED - Infrared Emitting Diode) ve pozisyon algılayıcı (PSD - Position Sensitive Detector) bileşenlerini kullanarak ölçüm yaparlar. Kızılötesi vericinin yaydığı gözle görünmeyen ışığın yansıma açısı, pozisyon algılayıcı tarafından algılanır ve ölçüm yapılmış olur.

Mesafe sensörleri, ölçümlerini analog yada dijital (SPI, PWM, Serial...) olarak bağlandıkları cihaza rapor ederler.

Sharp GP2Y0A21YK0F ve GP2D120 Modeli Sensörler

Ele alacağımız sensörlerden GP2Y0A21YK0F modeli 10 ~ 80cm, GP2D120 modeli ise 4 ~ 30cm arasında ölçüm yapar. Her iki sensör de kızılötesi verici ve pozisyon algılayıcı ile nirengi (triangulation) yöntemini kullanarak ölçtükleri mesafeyi analog olarak raporlar.

Sensörün analog çıkışının değeri, mesafeye göre ters orantılı olarak değişir. GP2Y0A21YK0F  modeli, 10 cm mesafede 2.3 Volt, 80 cm mesafede ise 0.4 Volt çıkış verecektir. Ara mesafelerdeki çıkış değeri doğrusal olarak değişiklik göstermez. Bu nedenle, geliştireceğimiz uygulamada Volt / Mesafe eğrisinin gerçek değerini hesaplayan bir işlem yapacağız. GP2Y0A21YK0F sensörünün Uzaklık / Volt ilişkisi aşağıdaki grafikteki gibidir:

-

Sensörün Bağlanışı

-

Sharp'ın her iki modelinde 3 pin bulunur. 1 numaralı pin, 0 ile 3.2 Volt arası değişen analog çıkıştır. 2. pin GND ve 3. pin ise +5 Volt girişidir. Daha stabil bir ölçüm için +5V ile GND pinleri arasına bir kondansatör yerleştirebilirsiniz. GP2Y0A21YK0F modelindeki analog çıkış 3.3 Volt'un altında çıkış verdiği için, hem 5 Volt hem de 3.3 Volt ile çalışan mikrodenetleyicilerde kullanılabilir.

Uygulama Kodları

Örnek uygulamamızda, yukarıda bahsettiğimiz her iki Sharp sensör ile çalışabilen bir mesafe ölçer üzerinde duracağız. Uygulamamız periyodik aralıklarla sensörden aldığı analog değeri cm'e çevirerek Visual Studio'ya gönderecek. Analog giriş özelliği her mikrodenetleyicide değişiklik göstereceğinden, kullandığınız cihaza göre kaynak kodunda değişiklik yapmanız gerekebilir. Örnekte GHI Electronics'in FEZ Rhino kiti kullanılmıştır.

Visual Studio üzerinden bir Console Application oluşturarak işe koyulalım. Solution Explorer'dan proje referansları arasına kullandığınız kitin hardware dll'lerini ekleyin.
(FEZ Rhino kiti için "GHIElectronics.NETMF.Hardware.dll" ve "FEZRhino_GHIElectronics.NETMF.FEZ.dll".)

Bir sonraki aşamada, Program.cs'in içerisine aşağıdaki kodları yazalım:

Program.cs

using System;
using System.Threading;
using Microsoft.SPOT;
using GHIElectronics.NETMF.Hardware;
using GHIElectronics.NETMF.FEZ;
 
namespace MF_Analog_Mesafe_Sensoru
{
    public class Program
    {
        private static AnalogIn sensor1 = new AnalogIn((AnalogIn.Pin)FEZ_Pin.AnalogIn.AD0);
 
        #region Analog - Mesafe Çeviri
        /// <summary>
        /// Sharp GP2Y0A21YK0F mesafe sensörü (10-80 cm)
        /// </summary>
        /// <param name="analogOlcum">Analog okunan değer</param>
        /// <returns>(float) cm mesafe ölçümü.</returns>
        private static float MesafeOlc_GP2Y0A21YK0F(int analogOlcum)
        {
            return 2321.05249F / ((float)analogOlcum + (float).001) - 7.3684206F + 10F;
        }
 
        /// <summary>
        /// Sharp GP2D120 mesafe sensörü (4-30 cm)
        /// </summary>
        /// <param name="analogOlcum">Analog okunan değer</param>
        /// <returns>(float) cm mesafe ölçümü.</returns>
        private static float MesafeOlc_GP2D120(int analogOlcum)
        {
            return 895.263123F / ((float)analogOlcum + (float).001) - 2.84210515F + 3F;
        }
        #endregion
 
        public static void Main()
        {
            // Analog ölçümünü 0 ile 330 arasında ölçeklendir:
            sensor1.SetLinearScale(0, 330);
 
        Basla:
            // Sensöre bağlı analog pin değerini mesafe ölçüm metoduna gönder ve sonucu yazdır:
            Debug.Print(MesafeOlc_GP2Y0A21YK0F(sensor1.Read()).ToString());
 
            // Main thread'i 1/10 saniye uyut:
            Thread.Sleep(100);
 
            goto Basla;
        }
    }
}

F5 ile uygulamayı çalıştırdığımızda, Visual Studio Output yada Immediate Window'da mesafe bilgisini göreceğiz.

Uygulama Özeti

Uygulamamızda önce "sensor1" adında bir analog giriş tanımladık. MesafeOlc_X metodlarını, aldıkları parametreyi cm'e çevirmek üzere ekledik. Uygulamamızın Main metodunda öncelikle SetLinearScale metodu ile mikrodenetleyicimizin analog / dijital çeviricisinin ölçtüğü 0 ile 1023 arası değeri, 0 ile 330 arasına ölçeklendirdik. Bu ölçeklendirme, cm çevirisinin yapılması için gerekliydi. Daha sonra, oluşturduğumuz sonsuz döngü içerisinde her saniyenin 1/10'unda ölçüm yaparak değeri debug mesajı olarak Visual Studio'ya gönderdik.

Uygulama kodlarını buradan indirebilirsiniz.




 
Hoşgeldiniz!
Son güncelleme: 29.06.2014
-
Yeni Teknik Yazılar
Sparkfun Serial 7 Segment...
Visual Studio 2013 için ....
Character LCD Kullanımı
WT41 ile Bluetooth İletiş...
Seri Port İletişimi
-
İlgili Gruplar
.NET MF ve Gadgeteer FB Grubu
İstanbul IoT Meet-up Grubu
-
Dost Bloglar
Türkay Ürkmez (BilgeAdam)
İbrahim Kıvanç (Microsoft)
Özay Akdora (Türkcell)
-
 
 

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.Copyright © 1999 - 2014, Umut Erkal. Bu materyal, "Creative Commons Public Licence" ile sunulmuştur.
Kaynak göstererek ve ücretsiz olarak, aynı şartlar altında paylaşabilir ve kullanabilirsiniz. | Kullanım Sözleşmesi