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