Sensör (Algılayıcı) Nedir? Ne Değildir?
Sensörler veya daha Türkçe bir tabirle algılayıcılar sıcaklık, basınç, uzaklık vb. ölçülebilen fiziksel büyüklüklerin dijital ortamda ifade edilebilmesini sağlayan elektronik elemanlardır. Anneanneye anlatılabilir şekilde ifade edersek sensörler bir makinenin duyu organlarıdır. İşin hikaye kısmını bir kenara bırakalım ve sensörler nasıl kullanılır, hangi durumlarda hangi sensörler kullanılmalıdır gibi sorulara yanıt bulmaya çalışalım. Bunun için öncelikle önemli bir kaç kavramı açıklama ihtiyacı hissediyorum.
Bazı Önemli Kavramlar
Bu kavramlar hangi sensörü seçmemiz gerektiği hususunda bize yardımcı olacak kavramlardır. Ayrıca sensörlerin sınıflandırılmasında kullanılırlar.
Analog Sinyal
Analog sinyal sürekli ve kesintisiz sinyaldir denilebilir. Grafik üzerinde sonsuz noktayla ifade edilebilir. Örneğin bir sinüs işaretini düşündüğümüzde zaman eğrisi üzerinde seçeceğimiz noktaların her biri için gerilim eğrisinde bir nokta vardır.
Dijital Sinyal
Sayısallaştırılmış sinyal formatıdır. Sinyal 1
ve 0
lardan oluşur. Bir verinin mikrodenetleyici gibi bir dijital sistem tarafından okunabilmesi için bu şekilde ifade edilmesi gerekir. Kesikli zamanlıdır ve grafik üzerinde iki nokta ile ifade edilebilir. Dijital denilince akla görseldeki gibi bir sinyal gelmelidir.
Çözünürlük
Çözünürlük sensör tarafından okunan verinin hangi hassaslıkta okunabildiğini belirleyen kavramdır.
ADC (Analog to Digital Converter)(Analog Dijital Dönüştürücü)
ADC analog elektrik sinyalini mikrodenetleyicinin kullanabileceği dijital elektrik sinyaline dönüştüren birimdir. Bu birimin çözünürlüğü analog verinin dijital veriye ne kadar hassas dönüştürülebileceği konusunda belirleyicidir.
Dijital Sensör
Dijital sensörler 1 bitlik veri çıkışı sağlarlar. Bir şeyin var ya da yok olduğu bilgisini ölçerler. Örneğin 1-10 cm
ölçüm aralığına sahip dijital bir uzaklık sensörü 1-10 cm
aralığında herhangi bir cisim var ise 1
yok ise 0
verisi döndürür. Cismin hangi uzaklıkta olduğu verisi bu tip bir sensör ile elde edilemez.
Analog Sensör
Analog Sensörler adından da anlaşılacağı üzere analog çıkış sağlarlar. Çıkış verilerileri teorik olarak sonsuz çözünürlüklüdür. Ancak dijital bir sistemde kullanıldıklarında çözünürlükleri analog veriyi dijital veriye dönüştüren ADC'nin çözünürlüğüyle sınırlanmış olur. Örneğin 1-10 cm
ölçüm aralığına sahip analog bir uzaklık sensörü bu aralıkta bir cisim var ise cismin sensöre olan uzaklığını, cisim yok ise maksimum uzaklık değeri olan 10 cm
bilgisini döndürür.
Normally Open / Normally Close (Normalde Açık / Normalde Kapalı)
Normalde açık ve normalde kapalı dijital sensörler için kullanılan kavramlardır. Normalde açık sensörler, sensör herhangi bir veri okumuyor ise 0
,okuyorsa 1
değeri döndürürler. Normalde kapalı sensörler normalde açık sensörlerin tersine, sensör herhangi bir veri okumuyor ise 1
, okuyor ise 0
değeri döndürürler. Aralarındaki en can alıcı fark sensörün bozulma durumunda ortaya çıkar. Sensör arızası durumunda kullanılan sensör eğer normalde açık bir sensör ise sensör arızası ancak sensörden veri gelmesi gereken durumda farkedilebilir. Bu durum can ve mal kayıplarına neden olabilir. Aksine kullanılan sensör normalde kapalı bir sensör ise arıza durumunda 0
değeri döndürmeye başlayacaktır. Bu durumda sensör arızası anında tespit edilip sensörün bağlı olduğu sistem durdurulabilir, can ve mal kayıplarının önüne geçilebilir.
Active Sensor / Passive Sensor (Aktif Sensör / Pasif Sensör)
Aktif sensörler ölçüm yaptıkları ortama bir enerji verirler ve o enerji üzerindeki değişimlerden yararlanarak istenilen ölçümü gerçekleştirirler. Örneğin CNY70 kontrast sensörü ortama düşük dalga boylu bir ışık yayar ve yansıyan ışığın yoğunluğuna göre ölçüm yaptığı yüzeyin kontrastı hakkında bir bilgi verir.
Pasif sensörler ölçüm yaptıkları ortamdan aldıkları enerjiyi kullanarak bir çıkış sinyali üretirler. örneğin LDR'ler bu tip sensörlerdendir. LDR'nin direnci ortamdaki ışık miktarına bağlı olarak değişir ve bu sayede ortamdaki ışık miktarını ölçmede kullanılabilir.
Ham Sensör Verisi
Sensörden okunan herhangi bir fiziksel anlam ifade etmeyen genelde gerilim cinsinden ifade edilen veridir.
İşlenmiş Sensör Verisi
Sensörden okunan ham verinin sensör datasheetinden elde edilen işlemler uygulanarak arzu edilen fiziksel büyüklüğe dönüştürülmüş halidir. Örneğin bir basınç sensörü için okunan ham veriden türetilen bar
veya pascal
cinsinden veri işlenmiş veri olarak adlandırılır.
Sensör Seçimi ve Çözünürlük Hesabı
Sensör Seçimi
Sensör seçerken en önemli parametre sensörün ne amaçla kullanılacağıdır. Eğer sensör basitçe bir anahtarlama elemanı olarak kullanılacaksa (limit switch veya optokuplör örneklerinde olduğu gibi) dijital sensörler tercih edilmelidir. Dijital sensörler seçilirken yukarıda bahsedilen normalde açık, normalde kapalı özellikleri de göz önünde bulundurulmalıdır. Eğer sensör fiziksel bir büyüklük ölçmek için kullanılacak ise (sıcaklık, basınç, ışık sensörü örneklerinde olduğu gibi) analog sensörler tercih edilmelidir.
İkincil olarak sensörün çalışma aralığı göz önüne alınmalıdır. Kullanılacak sensörün besleme ve çıkış voltajları kullanılan sistemin elektroniği ile uyumlu olmalıdır. 5V
giriş ve besleme gerilimine sahip bir sistemde yine 0-5 V
aralığında çıkış sinyali üreten bir sensör tercih edilebilir.
Kullanılacak sensör analog sensör ise ADC seçimi de en az sensör seçimi kadar etkilidir. Yukarıda da belirttiğim üzre kullanılan ADC aslında sensör çözünürlüğünü sınırlayan temel parametredir. Kullanılan ADC ne kadar yüksek çözünürlüğe sahipse sensörden o kadar yüksek hassasiyette veri alınabilir.
Çözünürlük Hesabı
Bu hesabı yaparken bir kullanım senaryosu üzerinden gitmeyi daha yararlı buluyorum. Örnek senaryoda bir taşıma firması için ağırlık ölçüm sistemi tasarımı yaptığımızı düşünelim. Bu sistemin tasarımı için öncelikle sistemden beklenen özellikler bilinmelidir.Bu örnekte firmanın beklentisi 0 - 5 ton
arası en az 1 kg
ölçüm hassasiyeti ile ölçüm yapabilen minimum maliyetli bir sistem olsun. Bu sistem için öncelikle ölçümü yapacak sensör seçilmelidir. Sensör seçimindeki belirleyici etkenler basitçe 5 ton
ya da daha fazlasını ölçebilmesi ve çalışma gerilimidir. Tüm sistemde 10 V
çalışma gerilimini kullandığımızı varsayalım. Bu durumda sensör seçiminde de 0 - 10 V
arası çıkış veren bir sensör tercih etmek uygun olacaktır. Maliyet parametresini de dikkate alarak 0 - 5 ton
arasındaki kütleleri ölçebilen 10 V
çalışma gerilimli en ucuz loadcell (kütle ölçmek için yaygın kullanımlı bir sensör tipi) tercih edilmelidir. Bu şekilde ilk şart sağlanmış olur. İkinci şart yani ölçüm hassasiyetini sağlamak için kullanılacak ADC de büyük önem taşır. 1 kg
ölçüm hassasiyeti yakalamak için 5 ton / 1 kg = 5000
ölçüm kademesine ihtiyaç vardır. Bu da kullanılacak ADC'nin çözünürlüğünün 5000
ya da daha büyük olmasını gerektirir. ADC çözünürlükleri bit cinsinden ifade edilir. Ve 2^n
şeklinde hesaplanır. Örneğin 8 bit
'lik bir ADC'nin çözünürlüğü 2^8 = 256
'dır. Örneğimize dönecek olursak kullanılacak ADC'nin en az 13 bit
çözünürlüğünde olması gerektiğini göreceğiz. 13 bit = 2^13 = 8192
kademe sağlar ve bu değer bize gereken 5000
değerinden yüksek en küçük ADC çözünürlük değeridir. Sistemde bu ADC kullanıldığında 0 - 5 ton
arası ölçümleri 5000 / 8192 = 0.61 kg
ölçüm hassasiyeti ile yapabiliriz. Duruma elektriksel açıdan bakarsak aslında 0 - 10 V
aralığını da 8192
parçaya böldüğümüzü söyleyebiliriz. Bu durumda bu ADC kullanılarak işlemci tarafından algılanabilen birim gerilim farkı da 10 V / 8192 = 0.122 mV
'dur.
Biraz da Pratik :)
Bu bölüme kadar sensörler ve suç ortakları ile ilgili teorik bir takım şeylerden bahsettim. Bunlar ziyadesiyle sıkıcı olmakla birlikte bilinmesi gerektiğini düşündüğüm şeylerdi. Bu bölümde bu bilgilerden de yararlanarak sıkça kullanılan bazı sensörlerden veri toplama ve bu verileri fiziksel büyüklükler cinsinden ifade etme üzerine örnekler yapacağım. Bu örnekleri elektronik kısmını bir külfet haline getirmemek amacıyla Arduino üzerinde yapacağım. Ancak siz küçük değişiklerle her türlü platformda uygulayabilirsiniz.
Bu yazıda sensörlerin bağlantılarından bahsetmeyeceğim. Kullanmak istediğiniz sensörün bağlantılarını bulmak için #sensör ismi# arduino
veya #sensör ismi# wiring
anahtar kelimelerini google aramalarında kullanabilirsiniz.
Sharp GP2Y0D805Z0F Kızılötesi Uzaklık Sensörü
Basit bir uzaklık sensörü ve özellikleri şöyle:
- Tipi : Uzaklık Sensörü, Limit Switch
- Çıkış Tipi : Dijital sensör
- Çözünürlük : 1 bit
- Normally close
- Ölçüm Aralığı : 0.5 - 5 cm
- Çalışma gerilimi : 2.7V - 6.2V (yani 5V sistemlerde kullanılabilir)
Bir dijital sensörden veri elde etmek için mikrodenetleyici üzerindeki I/O
pinleri kullanılabilir. Sensörün data bacağının Arduino üzerinde D8
pinine bağlı olduğunu varsayarsak sensörden veri elde etmek ve bu verileri Arduino seri monitöründe göstermek için şu şekilde bir kod kullanılabilir.
/*
Sharp GP2Y0D805Z0F Infrared Distance Sensor
--------------------------------------------
coded by Yasin Kaya (selengalp)
07.05.2016
*/
// defining Sensor Pin
#DEFINE SENSOR_PIN 8
// SETUP
void setup() {
// begin serial monitor with 9600 boudrate
Serial.begin(9600);
// sensor pin is assigned as input
pinMode(SENSOR_PIN,INPUT);
}
// LOOP
void loop() {
// defining sensor_data variable
// bool variable because GP2Y0D805Z0F is a digital sensor and gives "0" or "1"
bool sensor_data = false;
// reading sensor data
sensor_data = digitalRead(SENSOR_PIN);
// printing sensor data to serial monitor
Serial.println(sensor_data);
}
LM35 Sıcaklık Sensörü
Sıkça kullanılan basit bir sıcaklık sensörü ve özellikleri şöyle:
- Tipi : Sıcaklık sensörü
- Çıkış Tipi : Analog sensör
- Çözünürlük : 10 bit (Arduino Uno ADC)
- Ölçüm Aralığı : (-55°C,150°C)
- Çalışma gerilimi : 4V - 30V (yani 5V sistemlerde kullanılabilir)
Bir analog sensçrden veri elde etmek için mikrodenetleyici üzerindeki analog giriş özelliğine sahip I/O
pinleri kullanılabilir. Sensörün data bacağının Arduino üzerinde A0
pinine bağlı olduğunu varsayarsak sensörden veri elde etmek bu ham veriyi anlamlı bir sıcaklık verisine döndermek ve bu verileri Arduino seri monitöründe göstermek için şu şekilde bir kod kullanılabilir.
/*
LM35 Temperature Sensor
--------------------------------------------
coded by Yasin Kaya (selengalp)
07.05.2016
*/
// defining Sensor Pin
#DEFINE SENSOR_PIN A0
// SETUP
void setup() {
// begin serial monitor with 9600 boudrate
Serial.begin(9600);
// sensor pin is assigned as input
pinMode(SENSOR_PIN,INPUT);
}
// LOOP
void loop() {
// defining sensor_data variable
// int variable because we know that the received value is between `0 - 1024`.
int raw_sensor_data = 0;
// float variable because LM35 is an analog sensor
float sensor_data = 0;
// reading sensor raw data
raw_sensor_data = analogRead(SENSOR_PIN);
// calculating temperature in Degree-Celcius from raw data.
sensor_data = raw_sensor_data * 0.48828125; //(0.48828125 = 500mV/1024 .48828125)
// printing sensor data to serial monitor
Serial.println(sensor_data);
}
Kaynaklar:
http://www.ck12.org/user:sciencepbvusd/book/8th-Integrated-Science/section/8.2/
https://www.instructables.com/id/LM35-Temperature-Sensor/