You are on page 1of 216

Sensörler ile Arduıno

dikeyeksen ® 43
ISBN 978-605-4898-13-8
Yayıncılık Sertifika No 19703
1. Baskı: Nisan 2015

Yayın Yönetmeni: Suat Özdemirci


Yayın Koordinatörü: Fatma Zehra Altınor
Editör: Rahmi Dalıcı
Sayfa Düzeni: Bahri Emre
Baskı: Mutlu Basım

Bu kitabın bütün yayın hakları Dikeyeksen Yayın Dağıtım, Yazılım


ve Eğitim Hizmetleri San. ve Tic. Ltd. Şti. ‘ne aittir. Yayınevimizin
yazılı izni olmaksızın kısmen veya tamamen alıntı yapılamaz,
kopya çekilemez, çoğaltılamaz ve yayınlanamaz.

dikeyeksen ® Yayın Dağıtım, Yazılım ve Eğitim Hizmetleri San. ve Tic. Ltd. Şti.
Elalmış Cd. Tarık Buğra Sk. No:23/A Ümraniye/İSTANBUL
Tel: 0 216 420 19 80 Fax: 0 216 415 19 80
e-posta: merkez@dikeyeksen.com
web: www.dikeyeksen.com
Sensörler ile Arduıno
Volkan Kanat
Canım kardeşim, küçük prensesim Dilara’ya...
Volkan Kanat
Mühendislik uygulamaları ile çocuk yaşlarda tanışan yazar üniversite yıllarında
gömülü sistemler ve gömülü kontrol alanına yönelmiştir. Karabük Üniversitesi
Mekatronik Mühendisliği bölümünden yeni mezun olmuştur. Lisans eğitimi
boyunca gömülü sistemler, insansız hava araçları ve mekatronik tasarım
konularında çalışmalar yapmıştır. Arduino başta olmak üzere farklı platformlar
üzerinde eğitimler vermektedir. Ülkemizin gömülü sistemler ve insansız hava
araçları alanlarında daha fazla yatırım yapması gerektiğine inanan yazar bu
konuda elinden gelen desteği vermeye çalışmaktadır. Yazarın, Arduino üzerine
yayınladığı ikinci kitabıdır.
Teşekkür
Öncelikle benim ikinci kitabım olan bu eserde tüm süreç boyunca bana
güvenen, beni sürekli destekleyen, karşılaştığımız problemlere çözüm üreten
ve beni sürekli motive eden Dikeyeksen Yayıncılık Genel Yayın Yönetmeni Suat
Özdemirci ve Dikeyeksen Yayıncılık ekibine sonsuz teşekkürlerimi sunarım.
Daha iyi bir mühendis olmamı sağlayan ve beni gömülü sistemler gibi eşsiz bir
alana yönlendiren değerli mühendis hocalarıma şükranlarımı sunarım.
Hayatımda dönüm noktası oluşturan, aldığım her kararın arkasında olan ve
yaşamımı her saniye daha da güzelleştiren sevgili hayat yoldaşım Hazal Merve
Özpek’e teşekkürlerimi sunarım.
Çalışmalarım ve kitap yazım süresince birçok fedakarlıklar göstererek beni des-
tekleyen aileme ve özellikle de yaramazlıklarıyla ve tatlı gülücükleriyle ailemize
neşe katan en küçük kardeşim Dilara’ya en derin duygularımla teşekkür ederim.
Önsöz
Mühendisler için Arduino kitabım yayımlandıktan sonra oldukça olumlu
tepkiler aldım. Ülkemizde Arduino konusunda oldukça istekli bir kitlenin
olduğunu görmek beni çok mutlu etti. Kitaptaki örneklerle yetinmeyip daha
iyisini yapmak isteyen, uygulamaları genişletmek ve özgünleştirmek isteyen bir
çok insan e-posta aracılığıyla benimle iletişime geçerek destek istedi. Her ne
kadar kitabın kitlesi olarak mühendisleri hedeflesem de üniversite öğrencileri,
teknik öğretmenler, akademisyenler, elektroniğe ilgi duyan fakat bu konuda
yüksekokul eğitimi görmemiş insanlar gibi çok farklı kesimden insanlar ilgi
gösterdiler. Bu yüzden hepsine teşekkür ederim.
Genel Yayın Yönetmenimiz Suat Özdemirci ile bu ilgi karşısında faydalı bir
Arduino kitabı daha hazırlamaya karar verdik. Bu kitabın herkesin başvuracağı
bir kitap olmasını hedefledik. Neredeyse her mühendislik uygulamasında sensör
hatta sensörler oldukça sık kullanılıyor. Algılanması istenen parametre ne olursa
olsun uygulamamız, projemiz için sensörleri kullanıyoruz. İster sıcaklık, nem,
rüzgar gibi çevresel parametreleri ister mesafe, uzaklık gibi parametreleri ister
herhangi bir kimyasal yapıdaki duman ve gaz parametrelerini ister ışık ve renk
parametrelerini isterse de elektrik ve manyetizma gibi elektriksel parametreleri
ölçmek istediğimizde uygulamamıza uygun sensörleri kullanmamız gerekiyor.
Tam da burada akıllara şu soru geliyor: Piyasada bu kadar farklı sensör çeşidi
varken acaba hangi sensör uygulamamız için uygun? İşte ben de tam bu
sorunun cevabını vermek için bu kitabı hazırladım. Gerçekleştirmek istediğimiz
uygulama hangi parametreleri algılamak isterse istesin piyasada bulunan
sensörlerden en uygun olanını projemiz için kullanmayı bu kitapta öğreneceğiz.
Kitabın ilk bölümünde sensör ve transdüser kavramına değindim. Sensör ve
Transdüser kavramını detaylarıyla açıklayarak sensör çeşitlerini sıraladım. Ayrıca
sensörlerin karakteristiklerini belirten ölçüm aralığı, çözünürlük, hassasiyet,
hata, gürültü ve kuantalama özellikleri açıklayarak önemlerine değindim. Ayrıca
önemli kablosuz sensör ağları olan Wirelles Interface for Sensors and Actuators,
Wirelless Hart, ISA100 ve ZigBee teknolojilerini açıkladım.
Kitabın ikinci bölümünde ise Arduino ile sıcaklık ve nem algılaması için sıcaklık
ve nem sensörlerinden bahsettim. Günümüzde bir çok önemli mühendislik
uygulamalarında sıcaklık ve nem sensörlerini görmek mümkün. Özellikle
kullanımı kolay sıcaklık sensörü ve bu sensörün C#. NET üzerinde hazırlanan
arayüz ile kontrolü konusuna değindim. Bu bölümde en çok kullanılan sıcaklık
ve nem sensörleri ile Arduino uygulamaları gerçekleştirerek hangi sensörün
uygulamamız için uygun olduğuna karar vereceğiz.
Kitabın üçüncü bölümünde ise Arduino ile mesafe algılaması için mesafe
sensörlerinden bahsettim. Günümüzde bir çok önemli mühendislik
uygulamalarında mesafe sensörlerini görmek mümkün. Özellikle ultrasonic
mesafe sensörü ve bu sensörün C#. NET üzerinde hazırlanan arayüz ile kontrolü
konusuna değindim. Bu bölümde en çok kullanılan mesafe sensörleri ile
Arduino uygulamaları gerçekleştirerek hangi sensörün uygulamamız için
uygun olduğuna karar vereceğiz.
Kitabın dördüncü bölümünde ise Arduino ile duman ve gaz algılaması için
duman ve gaz sensörlerinden bahsettim. Günümüzde bazı mühendislik
uygulamalarında duman ve gaz sensörlerini görmek mümkün. Özellikle
Metan ve CNG gazı, LPG / İzobütan / Propan gazı, Oksijen gazı, Alkol gazı
ve Karbonmonoksit gazı ölçme konularına değindim. Bu bölümde en çok
kullanılan duman ve gaz sensörleri ile Arduino uygulamaları gerçekleştirerek
hangi sensörün uygulamamız için uygun olduğuna karar vereceğiz.
Kitabın beşinci bölümünde ise Arduino ile ışık ve renk algılaması için ışık ve renk
sensörlerinden bahsettim. Günümüzde bazı mühendislik uygulamalarında
ışık ve renk sensörlerini görmek mümkün. Uygulamaları gerçekleştirmeden
önce foto direnç, foto diyot, LED diyot, foto pil, optokuplör, fototransistör, PIR
sensörü ve encoder konularını açıkladım. Bu bölümde en çok kullanılan ışık
ve renk sensörleri ile Arduino uygulamaları gerçekleştirerek hangi sensörün
uygulamamız için uygun olduğuna karar vereceğiz.
Kitabın altıncı bölümünde ise Arduino ile elektrik ve manyetizma sensörlerinden
bahsettim. Günümüzde bazı mühendislik uygulamalarında elektrik ve
manyetizma sensörlerini görmek mümkün. Özellikle ACS715 ile akım ölçme,
INA169 ile akım ölçme, MAG3130 ile 3 eksen magnetometre ölçme konularına
değindim. Bu bölümde en çok kullanılan elektrik ve manyetizma sensörleri
ile Arduino uygulamaları gerçekleştirerek hangi sensörün uygulamamız için
uygun olduğuna karar vereceğiz.
Kitabın yedinci ve son bölümünde ise Arduino ile ivmeölçerlerden bahsettim.
Günümüzde çok önemli mühendislik uygulamalarında ivmeölçer sensörlerini
görmek mümkün. Özellikle ADXL337 ile ivme ölçme, MMA8452Q ile ivme
ölçme, Memsic 2125 ile ivme ölçme konularına değindim. Bu bölümde en
çok kullanılan ivmeölçerler ile Arduino uygulamaları gerçekleştirerek hangi
sensörün uygulamamız için uygun olduğuna karar vereceğiz.
Kitabımla alakalı her türlü yorum, öneri ve görüşlerinizi benimle paylaşabilirsi-
niz. Arduino konusundaki sorularınızı da sorabilirsiniz. Ancak sorularınızı Ardu-
ino Türkiye formunda paylaşmanız size daha fazla insanın yardım edebileceği
anlamına gelir. Arduino Türkiye web sitemize de desteklerinizi bekliyoruz. Ger-
çekleştirdiğiniz önemli uygulamaları ve Arduino konusundaki yazılarınızı her-
kesle paylaşabilirsiniz.
Arduino Türkiye Web Sitesi: http://www.arduinoturkiye.com
Arduino Türkiye Forum: http://forum.arduinoturkiye.com
Volkan Kanat
Nisan 2015, İstanbul
www.volkankanat.com
İçindekiler
Bölüm 1: Sensörler 1
Giriş 2
Sensör ve Transdüser Kavramı 2
Sensör Çeşitleri 3
Termik Sensör ve Transdüserler 4
Termistör 5
LM35 7
DHT22 Isı ve Nem Sensörü 7
Termokupl 8
Manyetik Sensör ve Transdüserler 9
REED - Temassız Algılayıcılar 10
İndüktif - Manyetik Temassız Algılayıcılar 10
Hall Temassız Algılayıcılar 11
Basınç Sensörleri 11
Kapasitif Basınç Sensörleri 11
Load Cell Sensörleri 12
Strain Gauge Sensörleri 12
Piezoelektrik Basınç Sensörleri 13
Optik Sensörler 13
Foto Direnç (LDR) 14
Led Diyot 15
Foto Pil (Işık Pili, Güneş Pili) 15
Optokuplar 16
Fototransistörler 17
Pir Sensörler 17
xii Sensörler ile Arduıno - İçindekiler

Ses Sensörleri (Ultrasonik) 18


Encoderler 18
Mikrofon 19
Dinamik (Bobinli - Manyetik) Mikrofonlar 20
Kapasitif (Kondansör) Mikrofonlar 20
Şeritli (Bantlı) Mikrofonlar 21
Kristal Mikrofonlar 21
Karbon Tozlu Mikrofonlar 22
Hoparlör 22
Dinamik (Hareketli Bobinli) Hoparlörler 23
Piezoelektrik (Kristal) Hoparlörler 23
Kablosuz Sensör Ağı Teknolojisi 24
Wirelles Interface For Sensor And Actuators (Wisa) 25
Wirelless Hart 25
ISA100 26
ZigBee 26
Sensör Karakteristikleri 27
Ölçüm Aralığı 27
Çözünürlük 27
Hassasiyet 28
Hata 28
Gürültü 29
Kuantalama 29
Neler Öğrendik? 29
xiii Sensörler ile Arduıno - İçindekiler

Bölüm 2: Sıcaklık ve Nem Sensörleri 31


Giriş 32
Arduino ve Sıcaklık ve Nem Sensörleri 33
LM35 İle Sıcaklık Ölçme Uygulaması 33
DHT11 ile Sıcaklık ve Nem Ölçme Uygulaması 41
DHT22 ile Sıcaklık ve Nem Ölçme Uygulaması 44
DS18B20 ile Sıcaklık Ölçme Uygulaması 48
SHT15 ile Sıcaklık ve Nem Ölçme Uygulaması 51
Neler Öğrendik? 55

Bölüm 3: Mesafe Sensörleri 57


Giriş 58
Arduino ve Mesafe Sensörleri 59
HC-SR04 ile Mesafe Ölçme Uygulaması 59
Parallax Ping ile Mesafe Ölçme Uygulaması 71
Sharp GP2Y0A02YK0F ile Mesafe Ölçme Uygulaması 74
VCNL4000 ile Mesafe Ölçme Uygulaması 78
Neler Öğrendik? 81

Bölüm 4: Duman ve Gaz Sensörleri 83


Giriş 84
Arduino ve Duman & Gaz Sensörleri 85
MQ-4 ile Metan ve CNG Gazı Ölçme Uygulaması 85
MQ-6 ile LPG/İzobütan/Propan Gazı Ölçme Uygulaması 88
Oksijen Gazı Ölçme Uygulaması 92
MQ-3 ile Alkol Gazı Ölçme Uygulaması 95
MQ-7 ile Karbonmonoksit Gazı Ölçme Uygulaması 99
Neler Öğrendik? 102
xiv Sensörler ile Arduıno - İçindekiler

Bölüm 5: Işık ve Renk Sensörleri 103


Giriş 104
Foto Direnç (LDR) 104
Foto Diyot 105
Led Diyot 105
Foto Pil (Işık Pili, Güneş Pili) 106
Optokuplör 106
Fototransistörler 107
PIR Sensörler 107
Arduino ile Işık ve Renk Sensörleri 108
DR ile Işık Ölçme Uygulaması 109
Temt6000 ile Işık Ölçme Uygulaması 112
Ml8511 ile Işık Ölçme Uygulaması 115
Tsl2561 ile Işık Ölçme Uygulaması 118
Adjd-S311 ile Renk Ölçme Uygulaması 124
Arduino Lılypad Işık Sensörü Uygulaması 131
Neler Öğrendik? 133

Bölüm 6: Elektrik ve Manyetizma Sensörleri 135


Giriş 136
Reed/Temassız Algılayıcılar 136
İndüktif/Manyetik Temassız Algılayıcılar 137
Hall Temassız Algılayıcılar 137
Arduino ile Elektrik ve Manyetizma Sensörleri 138
ACS715 ile Akım Ölçme Uygulaması 138
INA169 ile Akım Ölçme Uygulaması 142
MAG3130 ile 3 Eksen Magnetometre Uygulaması 147
Neler Öğrendik? 152
xv Sensörler ile Arduıno - İçindekiler

Bölüm 7: İvmeölçerler 153


Giriş 154
Arduino ve İvmeölçerler 157
ADXL337 ile İvme Ölçme Uygulaması 157
MMA8452Q ile İvme Ölçme Uygulaması 162
MEMSIC 2125 ile İvme Ölçme Uygulaması 166
ADXL345 İle İvme Ölçme Uygulaması 171
Neler Öğrendik? 186

Ek1: Standart ASCII Tablosu 187


Kaynaklar 192
Kısaltmalar 192

Ek2: Kitapta Kullanılan Komponentlerin Listesi ve Indeks 193


Bölüm 1 | Sensörler 194
Bölüm 2 | Sıcaklık ve Nem Sensörleri 194
Bölüm 3 | Mesafe Sensörleri 194
Bölüm 4 | Duman ve Gaz Sensörleri 194
Bölüm 5 | Işık ve Renk Sensörleri 195
Bölüm 6 | Elektrik ve Manyetizma Sensörleri 195
Bölüm 7 | İvmeölçerler 196

Indeks 197
1
Sensörler

Bu Bölümde
Giriş 2 Sensörler, kontrol sistemlerinin sıcaklık, nem, basınç
Sensör ve Transdüser Kavramı 2 gibi değerleri algılamasını sağlayan elemanıdır.
Sensör Çeşitleri 3 İnsanların çevrelerinde olup bitenleri duyu
Termik Sensör ve Transdüserler 4 organlarıyla algılamasına benzer biçimde çalışan
Manyetik Sensör ve Transdüserler 9 sensörler hemen hemen her projede yer almakta.
Basınç Sensörleri 11 Arduino ile sensörleri kullanarak kolayca dış
Optik Sensörler 13 dünyadaki fiziksel değerleri algılayabilirsiniz.
Ses Sensörleri (Ultrasonik) 18
Bu bölümde, sensör kavramına, sensör çeşitlerinin
Mikrofon 19
sınıflandırılmasına ve sensör seçiminde dikkat
Hoparlör 22
edilmesi gereken özelliklere değineceğiz.
Kablosuz Sensör Ağı Teknolojisi 24
Sensör Karakteristikleri 27
Neler Öğrendik? 29
2 Bölüm 1 Sensörler

Giriş
Günümüzde fabrikalarda üretim, otomatik çalışan makinelerle yapılıyor.
Bu makinelerin kontrolü ise elektronik ve bilgisayarlı sistemler tarafından
gerçekleştiriliyor. Makinelerde oluşan mekaniksel ve fiziksel değişimleri
bilgisayar sistemine aktarıp bilgisayar sisteminde işlenerek tekrar aynı
makinenin ya da başka makinelerin kontrolünü sağlamak mümkün. İşte
sensörler bu noktada devreye giriyor. Ortamda bulunan fiziksel bir değişikliği
elektrik sinyallerine çevirecek elektronik sistemlere aktarmak için sensörleri
kullanıyoruz. Örneğin; ortamdaki sıcaklığın, nemin ya da ışığın belirli bir değer
aralığında tutulmasında sensörleri kullanıyoruz.

Sensörler sadece endüstriyel firmalarda kullanılan cihazlar değildir. Günlük


yaşantımızda da bizi farklı ortamlarda gözetleyen gözler gibidir. Bizim
programladığımız gibi işlerini aksatmadan yapan işçilerdir. Örneğin; ayarladığımız
sıcaklığı algılayarak çalışan oda ısıtıcıları, televizyon kumandasından sürekli
emir bekleyen televizyonun kumanda algılayıcısı, bizi gördüğünde otomatik
açılan kapılar sensörlere en güzel örnektir.

Sensör ve Transduser Kavramı


İnsanlar çevrelerindeki değişiklikleri duyu organları ile algılar ve buna bağlı
olarak da hareket eder. Buna örnek verecek olursak üşüdüğümüzde ısıtıcıyı
açarız veya ortam karanlık olduğunda ışığı açarız. Bu işleri bizim yerimize
yapacak cihazlar olsa ne güzel olurdu diye hepimiz düşünmüşüzdür. Günlük
hayatımızda ısı, ışık, basınç, ses gibi büyüklükler var olup bunların etkilerini duyu
organlarımızla algılar, varlıklarından haberdar oluruz. Bu fiziksel büyüklükleri
insanlar gibi algılayan ve bu algılama sonucunda gerekli ekipmanları devreye
sokan ve çıkartan elemanlar sensörler ile transdüserlerdir. Fiziksel ortam
Sensör Çeşitleri 3

değişikliklerini (ısı, ışık, basınç, ses vb.) algılayan elemanlara sensör, algıladığı
bilgiyi elektrik enerjisine çeviren elemanlara ise transdüser denir.
Sensörlerden alınan veriler elektrik sinyaline dönüştürüldükten sonra elektronik
devreler tarafından yorumlanarak mekanik aletlere kumanda edilebilir. Bu
sayede hem günlük hayatımızı hem de endüstriyel üretim süreçlerini çok daha
kolaylaştırmış oluruz.

Piyasadaki sensörler tek bir yapı şeklinde bulunmuyor. İhtiyaca, kullanım


alanına ve hassasiyete göre sensörlerin boyutları ve şekilleri değişebiliyor.
Bundan dolayı ihtiyacımız olan sensörü firmaların kataloglarını detaylı bir
şekilde inceleyerek seçiyoruz. Sensörlerin diğer elektronik malzemeler gibi
standart bir yapıları ve şekilleri bulunmuyor.

Sensör Çeşitleri
Fiziksel ortamlardaki değişikliklerden dolayı mekanik bir makineyi veya
elektronik bir devreyi çalıştırmamız gerektiğinde sensörler ve transdüserleri
kullanıyoruz. Amacımıza uygun sensör ve transdüseri seçmek sonuca daha erken
ulaşmamızı sağlayacaktır. Sensörleri genel olarak şu şekilde çeşitlendirebiliriz;
» Mekanik Sensörler: Uzunluk, alan, kütlesel akış, kuvvet, moment, basınç, hız,
ivme, pozisyon, ses dalga boyu ve yoğunluğu gibi mekaniksel değişiklikleri al-
gılayan sensör sınıfıdır.
» Termal Sensörler: Sıcaklık, ısı akışı gibi termal değişiklikleri algılayan sensör sınıfıdır.
» Elektriksel Sensörler: Voltaj, akım, direnç, endüktans, kapasitans, dielektrik katsayı-
sı, polarizasyon, elektrik alanı gibi elektriksel değişiklikleri algılayan sensör sınıfıdır.
» Manyetik Sensörler: Alan yoğunluğu, akım yoğunluğu, manyetik moment gibi
manyetik değişiklikleri algılayan sensör sınıfıdır.
» Işıma Sensörleri: Yoğunluk, dalga boyu, polarizasyon, faz, yansıtma ve
gönderme gibi değişiklikleri algılayan sensör sınıfıdır.
4 Bölüm 1 Sensörler

Bunun yanı sıra sensörleri çıkış büyüklüklerine göre sınıflandırabiliriz. Bazı


sensörler çıkış olarak analog sinyal üretirken bazı sensörler de dijital sinyal
üretir. Analog çıkış sinyali üreten sensörlere alternatif olan dijital sinyal çıkışlı
sensörler, bilgisayarla doğrudan iletişim kurabilir. Bu iletişim sağlanırken
bazı protokoller kullanılır. RS232C, RS485, RS422A kullanılan seri iletişim
protokolleridir.

Sensörler ile bilgisayarlar arasında kurulan iletişimin anlaşılabilmesi için seri


NOT haberleşme protokolleri konusunda bilgi edinmeliyiz.

Sensörler aynı zamanda enerji ihtiyaçlarına göre de sınıflandırılabilir. Pasif


sensörler, dışarıdan harici enerji almadan yani besleme gerilimine ihtiyaç
duymadan fiziksel ya da kimyasal değerleri farklı bir büyüklüğe çeviriyor. Pasif
algılayıcılara örnek olarak Termocouple (T/C) ya da anahtarı örnek gösterebiliriz.
Aktif sensörler ise çalışmaları için harici bir enerji beslenmesine ihtiyaç duyuyor.
Genelde zayıf sinyalleri ölçmek için kullanılır. Aktif sensörlerde dikkat edilmesi
gereken nokta giriş ve çıkışlardır. Bu sınıflandırmadaki sensörler dijital ya
da analog elektriksel çıkış sinyali üretiyor. Analog çıkış sinyaline sahip olan
sensörlerde çıkış büyüklüğü gerilim ya da akımdır. Gerilim çıkışı genellikle 0 - 5V
aralığında bulunuyor. Bazı durumlarda 0 - 20 mA akım çevrimi kullanılabiliyor.
Ancak endüstride çoğu zaman hatlarda meydana gelen bozulma, kopma gibi
durumlarda sistemin bu durumu kolay algılaması ve veri iletişiminin sağlıklı
yapılabilmesi için 4 - 20 mA daha yaygın kullanıyor. Çok eski aktif sensörler ise
10 - 50 mA akım çıkışlarına sahip. Endüstride en yaygın kullanılan 4 - 20 mA
çevrim tipinin kullanımı bazı özel durumları gerektiriyor. Bunlar;
» Sensörlerin yerleştirildiği uzak noktalarda elektrik besleme gerilimi olmamalı.
» Sensörler, gerilim sinyalinin sınırlı olabileceği durumlarda tehlikeli uygulama-
larda kullanılmalı.
» Sensörlere giden kablo sayısı iki ile sınırlandırılmalı.
» Sensörler, elektriksel gürültüden etkilenmemesi amacıyla ölçüm sisteminden
elektriksel olarak izole edilmeli.

Termik Sensör ve Transduserler


Ortamdaki ısı değişimini algılamamıza yarayan cihazlara ısı veya sıcaklık
sensörleri denir. Bu bölümde sıklıkla kullanılan termik sensörleri inceleyeceğiz.
Termik Sensör ve Transduserler 5

Termistör
Birçok maddenin elektriksek direnci sıcaklıkla değişmektedir. Sıcaklığa
karşı hassas olan maddeler kullanılarak sıcaklık kontrolü ve sıcaklık ölçümü
yapabiliyoruz. Eğer bir sensörün ısı etkisiyle iç direnci değişiyorsa bu sensöre
termistör denir. Sıcaklık ile direnci değişen elektronik malzemelere; term
(sıcaklık), rezistör (direnç) kelimelerinin birleşimi olan termistör denir.
Termistörler genellikle yarı iletken malzemelerden imal edilmektedir. Termistör
yapımında çoğunlukla oksitlenmiş manganez, nikel, bakır veya kobaltın
karışımı kullanılır. Termistörler ikiye ayrılır; sıcaklıkla direnci artan termistörlere
PTC, sıcaklıkla direnci azalan termistörlere ise NTC denir.
Bulunduğu ortamın veya temas ettiği yüzeyin sıcaklığı arttıkça elektriksel
direnci artan devre elemanıdır. PTC’ler -60 0C ile +150 0C arasındaki sıcaklıklarda
kararlı bir şekilde çalışıyor. 0.1 0C’ye kadar duyarlılığa sahip çeşitleri bulunuyor.
Genellikle elektrik motorlarını fazla ısınmaya karşı korumak için tasarlanan
devrelerde kullanılıyor. Ayrıca ısı seviyesinin belirli bir değer aralığında tutulması
gereken tüm işlemlerde kullanılabiliyor.

PTC’yi ölçü aletine bağladığımızda ilk olarak oda sıcaklığında sensörümüzün


üzerinde yazılı değeri okumamız gerekiyor. Daha sonra mum veya benzeri bir
sıcaklık aracı ile ısıttığımızda direnci yükseliyor ise PTC sensörümüz sağlamdır.
Bu durumun dışında bir durum gözlemliyorsak PTC sensörümüz arızalıdır.
6 Bölüm 1 Sensörler

Bulunduğu ortamın veya temas ettiği yüzeyin sıcaklığı arttıkça elektriksel


direnci azalan devre elemanıdır. NTC’ler -300 0C ile +50 0C arasındaki sıcaklıklarda
kararlı bir şekilde çalışıyor. 0.1 0C’ye kadar duyarlılığa sahip çeşitleri bulunuyor.
Genellikle elektronik termometrelerde, arabaların radyatörlerinde ve ısı
denetim havyalarında kullanılıyor. PTC’lere göre kullanım alanları daha fazladır.

NTC’yi ölçü aletine bağladığımızda ilk olarak oda sıcaklığında sensörümüzün


üzerinde yazılı değeri okumamız gerekiyor. Daha sonra mum veya benzeri bir
sıcaklık aracı ile ısıttığımızda direnci azalıyor ise NTC sensörümüz sağlamdır. Bu
durumun dışında bir durum gözlemliyorsak NTC sensörümüz arızalıdır.

Aşağıdaki örnekte NTC ile röle sürülerek gerçekleştirilen örnek lamba yakma
uygulaması gösterilmiştir. Rölenin kapalı kontağı üzerinden çalışan motorun
ısısı zamanla yükselince NTC’nin direnci azalır ve transistör iletken olur. Bu
durumda röle enerjilenir ve motoru durdurup ikaz lambasını yakar. Motor
soğuduktan sonra buton ile devre normal çalışma modula döndürülebiliyor.
Termik Sensör ve Transduserler 7

LM35
LM35; çevre sıcaklığını algılayıp analog olarak çıkış veren bir sensördür. Arduino
ile kullanımı kolay olduğundan özellikle yüksek hassasiyet gerektirmeyen
uygulamalarınızda kullanabilirsiniz.
LM35 sensörü, -55 0C ve +150 0C arasında ölçüm yapabiliyor. Bu da çok
yüksek sıcaklıklara çıkmayan uygulamalarınız dışında sensöre geniş bir ölçüm
aralığı sunuyor. Önemli avantajlarından bir tanesi ise temin edilmesi kolay ve
maliyetinin uygun olması.

LM35 ile ilgili ayrıntılı bilgileri ve veri dökümanlarını (datasheet) aşağıdaki ad-
reste Texas Instruments firmasının web sitesinde bulabilirsiniz:
http://www.ti.com/lit/ds/symlink/lm35.pdf
Aşağıda LM35 sensörü ile Arduino arasındaki bağlantılar gösterilmektedir.

DHT22 Isı ve Nem Sensörü


DHT22, dijital sinyal çıkışı veren gelişmiş bir sıcaklık ve nem sensör birimidir.
Yüksek güvenilirliktedir ve uzun dönem çalışmalarda dengelidir. İçerisinde 8 bit
mikroişlemci bulunuyor ve hızlı ve kaliteli tepki verme yeteneğine sahiptir.
-40 0C ve +80 0C arasında 1 0C hata payı ile sıcaklık ölçen sensör, 0-100 % RH
arasında 5 % RH hata payı ile de nem ölçümü yapabiliyor. Sensör 2 saniye
periyodik aralıklarla veri topluyor, dolayısıyla sıcaklık ve nem ölçüm sonuçlarını
2 saniyelik periyotlarla elde edebiliyoruz.
8 Bölüm 1 Sensörler

DHT22 ile ilgili ayrıntılı bilgileri ve veri dökümanlarınıv(datasheet) aşağıdaki


adreste Sparkfun Electronics firmasının web sitesinde bulabilirsiniz:
https://www.sparkfun.com/datasheets/Sensors/Temperature/DHT22.pdf

VCC ile çıkış pini arasında pull-up direnci kullanmalıyız. Bu sebeple 4.7 K ile
10 K arasında bir direnç ile beraber kullanmamız gerekiyor. DHT11 modeli de
NOT benzer özelliklerde olduğu için bir model ile yapılmış uygulama diğer modele
de uygulanabiliyor.

Aşağıda DHT22 sensörü ile Arduino arasındaki bağlantılar gösterilmektedir.

Termokupl
Yüksek sıcaklıkların ölçülmesinde termometreler kullanılamıyor. Termokupllar,
-200 0C ve +2320 0C arasında sıcaklık ölçümü yapabilmekte. Termokupllar,
demir konstantan ve bakır konstantan gibi iki farklı metalin birleşme noktası
ısıtıldığında bu iki metal uçları arasında potansiyel bir farkın meydana gelmesi
prensibine göre çalışır. Oluşan potansiyel farkın değeri, iki ayrı metalin ısınma
sonucundaki sıcaklık ve soğukluk farkına bağlıdır. Oluşan bu potansiyel fark
kullanılarak istenilen sıcaklık değerleri ölçülebiliyor.
Manyetik Sensör ve Transduserler 9

Termokupllar geniş ölçüm aralığında sahip olduklarından endüstride en çok


tercih edilen sıcaklık elemanlarından biridir. Yüksek sıcaklıkların ölçülmesinin
istendiği yerlerde, endüstri tesislerindeki yüksek sıcaklıkta çalışan kazanların ısı
kontrolünde kullanılıyor.

Manyetik Sensör ve Transduserler


Bir tel, bobin haline getirilip içinden akım geçirilirse, bu bobinin içinde ve
çevresinde manyetik alan oluşur. Bu manyetik alan gözle görülmez. Ancak
bobinin içerisindeki nüvenin hareketi ve bobinin çevresinden yaklaştırılan
metaller bobinin indüktansını değiştirir. Bu prensipten hareketle manyetik
sensörler geliştirilmiştir.

Manyetik sensör ve transdüserler, günlük hayatta daha çok güvenlik gerektiren


yerlerde metallerin (silah, bıçak gibi) aranmasında, hazine arama dedektörlerinde
kullanılıyor. Sanayide ise kumanda ve kontrol sistemlerinde, tıp elektroniğinde,
otomatik kumanda kontrol uygulamalarında, yer değişimlerinin hassas olarak
ölçülmesinde kullanılıyor.
10 Bölüm 1 Sensörler

REED - Temassız Algılayıcılar


Manyetik temassız algılayıcılar, kalıcı mıknatısların ve elektromıknatısların
oluşturdukları manyetik alana etkiyorlar. Reed anahtarlarında ferromanyetik
malzemeden yapılan kontak dilleri eritilerek cam bir pistona bağlanıyor.
Pistonun içinde reaksiyona girmeyen ve yanmayan bir gaz bulunuyor.

Reed-temassız algılayıcının yakınına bir manyetik alan yaklaştığı zaman kontak


dilleri manyetiklenir. Manyetiklenen kontak dilleri birbirlerini çekiyor ve kontak
böylece kapanıyor.

İndüktif - Manyetik Temassız Algılayıcılar


Endüktif sensör, kendisine yaklaşan cismi temas etmeden algılamak için
kullanılıyor. Sensör kendi algılama sahası içerisinde bir manyetik alan
oluşturuyor. Algılama sahasına giren bir metal cisim bu manyetik alanı etkiliyor.
Bu değişim sensör içerisindeki elektronik devrelerde işleniyor ve sensörün
çıkış değerini değiştiriyor. Endüktif sensörler genellikle 50 mm’ye kadar ölçüm
yapabiliyorlar.
Basınç Sensörleri 11

Hall Temassız Algılayıcılar


Bir yarı iletkenden elektronlar akarken akım yönüne dik bir manyetik alan
uygulanınca elektronlar belli bir bölgede yoğunlaşır. Bu durum da yarı iletkenin
diğer uçlarında gerilim oluşmasına neden oluyor. Bu duruma hall etkisi denir. Bu
gerilimin değeri, manyetik alana levhanın yakınlığı ile değişir. Aynı prensipten
alan etkili transdüserler yapılır. Alan etkili transdüserler hassas mesafe, pozisyon
ve dönüş algılayıcıları olarak kullanılıyor.

Basınç Sensörleri
Üzerlerine düşen basınçla orantılı olarak fiziki yapılarında meydana gelen
değişimden dolayı basınç seviyesini ya da basınç değişimi seviyesini elektriksel
işarete dönüştüren devre elemanlarına basınç sensörleri denir. Basınç sensörleri
çalışma prensibine göre dört grupta incelenebilir:
» Kapasitif Basınç Ölçme Sensörleri,
» Strain Gage (Şekil Değişikliği) Sensörleri,
» Load Cell (Yük Hücresi) Basınç Sensörleri,
» Piezoelektrik Özellikli Basınç Ölçme Sensörleri,
Kapasitif Basınç Sensörleri
Kondansatörler yapıları gereği elektrik yükü depolayabiliyor. Kondansatörlerin
yük depolayabilme kapasiteleri ise;
» Kondansatör plakalarının boyutlarına,
» Plakalar arasındaki mesafenin uzaklığına,
» İki plaka arasındaki yalıtkan (dielektrik) malzemenin özelliğine bağlıdır.
Kondansatör plakaları birbirinden uzaklaştırılırsa ya da esnetilirse veya iki plaka
arasındaki dielektrik malzeme hareket ettirilirse, kondansatörün kapasitesi
değişir. Kondansatörün kapasitesi ile beraber alternatif akıma gösterdiği direnç
de değişir. Bu prensipten hareketle kapasitif basınç sensörleri üretilmiştir.
12 Bölüm 1 Sensörler

Straın Gauge Sensörleri


Temel olarak strain gauge sensörleri esneyebilen bir tabaka üzerine ince bir
telin veya şeridin çok kuvvetli bir yapıştırıcı ile yapıştırılmasından oluşuyor.

Üzerindeki basıncın etkisinden dolayı tabakanın esnemesi, iletken şeridin de


gerilerek uzamasına sebep oluyor. Bu uzama esnasında telin boyu uzayarak
kesiti azalacaktır. Bilindiği gibi iletkenin kesiti azaldıkça dirençleri artacağından
uygulanan kuvvete bağlı olarak iletkenin direncinde de değişme olacaktır. Bu
direnç değişimine bağlı olarak uygulanan kuvvetin miktarını tespit edebiliyoruz.

Load Cell Sensörleri


Yük hücresi (load cell) daha çok elektronik terazilerin yapımında kullanılan
basınç sensörü. Asıl çalışma prensibi strain gauge gibidir. Bir sonraki sayfada
4 noktadan ölçme yapan bir yük hücresi görülüyor. Tek noktadan ya da iki
noktadan ölçüm yapan çeşitleri de mevcut. A, B, C, D noktalarındaki strain
gaugelerin dirençleri basınca bağlı olarak değişiyor. Bu değişim ile orantılı
olarak da basınç miktarını tespit edebiliyoruz.
Optik Sensörler 13

Pıezoelektrik Basınç Sensörleri


Piezoelektrik özellikli algılayıcılarda kuartz, rosel tuzu, baryum, turmalin gibi
kristal yapılı maddeler kullanılıyor. Bu elemanlar üzerlerine gelen basınca göre
küçük değerli bir elektrik gerilimi ve akımı üretiyor. Bu elektrik akımının değeri
basıncın değeri ile doğru orantılıdır. Piezoelektrik özellikli elemanlar hızlı tepki
verdiklerinden ani basınç değişikliklerini ölçmede yaygın olarak kullanılıyor.

Optik Sensörler
Üzerine düşen ışığa bağlı olarak üstünden geçen akımı değiştiren elemanlara
optik eleman denir. Optik transdüserler ışık miktarındaki değişmeleri elektriksel
işaretlere dönüştürüyor. Bu elemanlar genellikle küçük akımlı elemanlardır.
Optik transdüserler genellikle alıcının akımlarını taşımazlar sadece alıcıyı
çalıştıran elemanları kumanda ederler.
Bu tip sensörler metal olmayan parçaların algılanmasında, uzun mesafelerde
algılama istenen yerlerde, yüksek sıcaklıklara dayanım gereken yerlerde
kullanılıyor. Günümüzde kullanım alanları otomasyon sistemlerine paralel
olarak yaygınlaşmaktadır.
14 Bölüm 1 Sensörler

Optik sensörler özellikle tozlu ortamlarda çalışırken sensörün önündeki optik


kısım kirlenir ve algılama mesafesi kirliliğin durumuna göre orantılı olarak azalır.
Bu tip ortamlar için gerekenden daha fazla algılama mesafesine sahip sensörler
kullanılmalıdır.
» Karşılıklı Optik Sensörler,
» Reflektörlü Optik Sensörler,
» Cisimden Yansımalı Optik Sensörler,
» Fiber-Optik Kablolu Optik Sensörler,
» Renk Algılayıcılı Optik Sensörler,
Foto Direnç (LDR)
Üzerine ışık düştüğünde direnci azalan, karanlıkta ise direnci artan elemana
foto direnç denir. Foto dirençler LDR (Light Dependent Resistance) olarak
adlandırılıyor. Kalsiyum sülfat ve kadmiyum selenid gibi bazı maddeler
üzerlerine düşen ışık ile ters orantılı olarak direnç değişimi gösterir. Üzerine
herhangi bir ışık almadığı sürece LDR’nin direnci çok yüksektir (10 Mohm).
Uygulanan ışık şiddeti arttıkça bu direnç değeri de düşer (75 - 300 Ohm).

LDR’lerin üretildikleri madde algılayıcının hassasiyetini ve algılama süresini


belirliyor. LDR’lerin üst kısmı LDR’ye gelen ışığın odaklanmasını sağlamak
için cam veya şeffaf plastik ile yapılır. LDR’lerin gövde boyutları büyüdükçe
taşıyabilecekleri akım ve buna bağlı olarak güç değerleri artar.
Optik Sensörler 15

Foto Diyot
Foto diyotlar ışık etkisi ile ters yönde iletken olan diyotlardır. Devreye ters olarak
bağlanıyor. Anod kısmına negatif, katod kısmına ise pozitif gerilim uygulanır.

Led Diyot
LED’e doğru polarma uygulandığında P maddesindeki oyuklarla N
maddesindeki elektronlar birleşim yüzeyinde nötrleşir. Bu birleşme anında
ortaya çıkan enerji ışık enerjisidir. Bu ışığın gözle görülebilmesi için ise P ve N
maddelerinin birleşim yüzeyine galyum arsenid maddesi katılmıştır. LED’lerin,
yeşil, kırmızı, sarı ve mavi olmak üzere 4 çeşit renk seçeneği bulunuyor. Piyasada
çok değişik şekil, ebad, renk ve fiyatta bulunmakta.

Foto Pil (Işık Pili, Güneş Pili)


Güneş pilleri (fotovoltaik piller), yüzeylerine gelen güneş ışığını elektrik
enerjisine dönüştüren yarı iletken maddelerdir. Yüzeyleri kare, dikdörtgen, daire
şeklinde biçimlendirilen güneş pillerinin alanları genellikle 100 cm2 civarında,
kalınlıkları ise 0.2 - 0.4 mm arasındadır.
16 Bölüm 1 Sensörler

Güneş pilleri yarı iletken maddelerden yapılıyor. Yarı iletken özellik gösteren
silisyum, galyum kadmiyum tellür gibi maddeler kullanılır. Bu maddeler
güneş pilleri için özel olarak hazırlandıktan sonra PN eklemine güneş enerjisi
geldiğinde fotonlardaki elektron yükü PN maddeleri arasında bir potansiyel
fark yeni gerilim oluşturuyor. Bu gerilim 0.15 - 0.5 Volt civarındadır.
Işık pilleri seri bağlanarak daha büyük gerilim, paralel bağlanarak daha büyük
akım elde edilebiliyor. Güneş enerjisiyle çalışan hesap makinelerinde kullanılan
eleman ışık pilidir.

Optokuplar
Optokuplör kelime anlamı olarak optik kuplai anlamına geliyor. Kuplai bir
sistem içindeki iki katın birbirindn ayrılması ama aralarındaki sinyal iletişiminin
devam etmesi olayıdır. Ayrılma fiziksel olarak gerçekleşir ama iletişim manyetik
veya optik olarak devam eder. Bu durumun faydası, katlardan birinde olan
fazla akım, yüksek gerilim gibi olumsuz, sisteme zarar verecek etkilerden diğer
katları korumaktır.
Optik Sensörler 17

Işık yayan eleman ile ışık algılayan elemanın aynı gövde içinde birleştirilmesiyle
elde edilen elemanlara optokuplör denir. Optokuplörler daha çok, iki ayrı
özellikli devre arasında elektriksel bağlantı olmadan, ışık yoluyla irtibat
kurulmasını sağlayan devrelerde kullanılıyor. Şöyle ki; düşük gerilimle çalışan bir
devreyle yüksek gerilimli bir güç devresine optoküplör aracılığıyla kumanda
edilebiliyor.

Fototransistörler
Fototransistörler diğer transistörlerden farklı olarak base bacağı yerine base
ile kollektörün birleşim yüzeyine düşen ışıkla tetikleniyor. Genellikle LED ile
birlikte yansıma sensörü olarak kullanılıyorlar.

Pır Sensörler
PIR (Passive Infra Red ) sensörler görüş alanlarındaki insanların ve sıcak kanlı
canlıların yaydıkları IR ışıkları algılayabilen sensörlerdir. Genellikle hareket
sensörü olarak kullanılırlar.

PIR sensörlerindeki algılama mesafesinin arttırılması ortamdan gelen ışığın


mercek filtre ile IR ışınlarının kırılma açılarının tam sensör üzerine düşürülüp
odaklanmasıyla sağlanıyor. Canlı hareket ettiğinde sensörün çokgen yapısından
dolayı algıladığı ışığın anlık olarak kesilip yeniden sensör üzerine düşmesi ile
PIR sensör hareketi algılıyor.
18 Bölüm 1 Sensörler

Encoderler
Encoderler robot ve otomasyon projelerinde açısal dönme hızını ve düzeneğin
açısal pozisyonunu belirlemek amacıyla kullanılıyor.

Encoder diskinin üzerinde belirli aralıkla delikler vardır. Encoder diski dönerken
IR LED’in yaydığı ışık deliklerden geçer ve karşı taraftaki fototransistörü
tetikler. Delik olmayan kısımlarında ise IR ışık fototransistörü tetikleyemez. Bu
şekilde alınan sinyaller sayılabiliyor ve mikrodenetleyiciye gönderilebiliyor.
Mikrodenetleyicide yazılı program ile sinyaller işlenerek gerekli işlemlerin
gerçekleştirilmesi sağlanıyor.
Bir diğer encoder diski de üzerinde delikler yerine siyah ve beyaz renkte dilimler
olan encoder diksleridir. Bu tip encoder disklerinde sensör olarak yansımalı
sensörler kullanılıyor. Beyaz ve siyah renklerin algılanması sayesinde açısal
dönem hızı ve pozisyon belirleniyor.

Ses Sensörleri (Ultrasonik)


Ultrasonik sensörler genellikle robotlarda engellerden kaçmak, navigasyon ve
bulunan yerin haritasını çıkarmak amacıyla kullanılıyor.
Mikrofon 19

Ultrasonik ses dalgaları 20.000 Hz ile 500.000 Hz arasında frekanslara sahip


ses dalgalarıdır. Bizim duyabildiğimiz 300 Hz - 14.000 Hz bandının üzerindedir.
Ultrasonik sensörler ultrasonik ses dalgaları yayan ve bunların engellere çarpıp
geri dönmesine kadar geçen süreyi hesaplayarak aradaki uzaklığı belirleyebilen
sensörlerdir.
Bu sensörlerde bu kadar yüksek frekanslarda ses dalgalarının yayılmasının
nedeni, bu frekanslardaki dalgaların düzgün doğrusal şekilde ilerlemesi,
enerjilerinin yüksek olması ve sert yüzeylerden kolayca yansımasıdır.
Ultrasonik sensörlerin algılama menzili uygun koşullarda 30 metreye
varabiliyor. Ultrasonik sensörlerde iki adet transducer bulunuyor. Bunlardan
biri ultrasonik hoparlör diğeri ise ultrasonik mikrofondur. Elektronik devre ile
ultrasonik speaker’dan ses dalgasının yayılma anı ile bu ses dalgasının engele
çarpıp yansıyarak ultrasonik mikrofon tarafından algılanması arasındaki zamanı
ölçülüyor ve bu zamanın ikiye bölünüp ses hızı ile çarpılması sonucuda da engel
ile ultrasonik sensör arasındaki mesafe hesaplanıyor. Robotlarda genellikle 40
KHz’lik ultrasonik sensörler kullanılıyor.

Mikrofon
Konuştuğumuzda havayı titreştirerek havada bir basınç değişikliği
oluşturuyoruz. Duyma işleminde ise bu basınç değişikliğini kulaklarımızdaki
zar ile algılıyoruz. Mikrofonlar da tıpkı kulaklarımız gibi havadaki basınç
değişikliğinin yarattığı etkiden yararlanarak sesi algılıyor ve elektrik sinyaline
çeviriyor. Sesi elektrik sinyallerine çeviren cihazlara mikrofon denir.
20 Bölüm 1 Sensörler

Bütün mikrofonların yapısı, ses dalgalarının bir diyaframı titreştirmesi esasına


dayanıyor. Her sesin belirli bir şiddeti mevcut. Bu ses şiddetin havada yarattığı
basınç ses şiddeti ile doğru orantılıdır. Gelen hava basıncının büyüklük ve
küçüklüğüne göre ileri geri titreşen diyaframın bu titreşimini, elektrik enerjisine
çevirmek için değişik yöntemler kullanılıyor. Kullanılan bu yöntemlere uygun
olarak mikrofonlar isimlendiriliyor.

Mikrofon çeşitleri şunlardır:


» Dinamik Mikrofonlar,
» Kapasitif Mikrofonlar,
» Şeritli Mikrofonlar,
» Kristal Mikrofonlar,
» Karbon Tozlu Mikrofonlar,
» Elektret Mikrofonlar.
Dinamik (Bobinli - Manyetik) Mikrofonlar
Dinamik mikrofonlar ses dalgaları ile hareket eden diyaframa bağlı bobinin
sabit bir mıknatıs içinde hareket etmesinden dolayı bobin uçlarında oluşan
gerilim değişimine bağlı olarak çalışıyor.

Kapasitif (Kondansör) Mikrofonlar


Kapasitif mikrofonlar statik elektriklenme esasına göre çalışan mikrofonlardır.
Kapasitif mikrofonların diyaframı gelen ses dalgalarıyla titreşir ve bu titreşim
mikrofonun kapasitesinin değişimine neden oluyor. Kapasitedeki bu değişim
sesin özelliğine uygun olarak mikrofonun çıkışında elektrik sinyallerini
oluşturuyor.
Mikrofon 21

Şeritli (Bantlı) Mikrofonlar


Şerit mikrofonlar çok hassas yapılıdır, sarsıntıdan, hava akımından etkileniyorlar
ve gürültülü çıkış veriyorlar. Bu nedenle, kullanırken fazla sarsmamaya dikkat
etmek gerekiyor. Rüzgarlı havalarda da, açık havada kullanılmamalıdır. Hassas
olması nedeniyle, düşük frekanslı sesleri rahat alır ve frekans karakteristiği geniştir.

Çalışmaları dinamik mikrofonlar gibi manyetik alan esasına dayalı


mikrofonlardır. Manyetik alan içine yerleştirilmiş ince bir alüminyum ya da kalay
levhaya ses sinyalleri çarpınca, manyetik alan içinde hareket eden levhada ses
frekanslı akım oluşuyor. Şeritli mikrofonların empedansı çok düşük, kaliteleri
yüksektir. Sarsıntıdan, rüzgardan olumsuz etkilendiklerinden kapalı ortamlarda
kullanılıyor.

Kristal Mikrofonlar
Kristal mikrofonlar, piezoelektrik olayından yararlanılarak yapılan mikrofonlardır.
Quartz ve Rosel tuz kristallerine basınç uygulandığında iki tarafına tutturulan
elektrotlar arasında bir gerilim oluşmaktadır.
22 Bölüm 1 Sensörler

Karbon Tozlu Mikrofonlar


Karbon tozlu mikrofonlar bir hazne içinde doldurulan karbon tozu zerrecikleri
ve esnek diyaframdan oluşuyor. Ses dalgaları alüminyum diyaframa çarpınca
titreşerek karbon zerreciklerinin sıkışıp gevşemesine yol açıyor. Tozlar sıkışınca
akımın yolu uzayacağından direnç yükseliyor.

Hoparlör
Elektriksel sinyalleri ses sinyallerine çeviren elemanlara hoparlör denir. Genel
olarak hoparlörler mıknatıs ve mıknatıs etrafına yerleştirilen bir bobin ve
hareketli diyaframdan oluşuyor. Farklı çeşitlilikte hoparlörler mevcut. Hoparlör
çeşitleri şunlardır:
» Dinamik Hoparlörler,
» Piezoelektrik Hoparlörler,
Hoparlör 23

Dinamik (Hareketli Bobinli) Hoparlörler


Dinamik hoparlörler, bobin, mıknatıs, diyafram gibi elemanların birleşiminden
oluşuyor. Bu elemanlarda demirden yapılmış bir silindirin ortasına doğal
mıknatıs yerleştirilmiştir. Mıknatısla yumuşak demir arasındaki hava aralığına
ise hoparlör diyaframının uzantısı üzerine sarılmış bobin konmuştur.

Bobinin sarıldığı diyaframın alt kısmı bir süspansiyon (esnek taşıyıcı) ile gövdeye
tutturulmuştur. Bobin, süspansiyonlar sayesinde hava aralığında rahatça
hareket edebiliyor. Hoparlörlerde kon iki tanedir. Geniş çaplı olan kon dışarıda,
küçük çaplı olan ise ortadadır. Büyük kon kalın (bas) sesleri, küçük kon ise ince
(tiz) sesleri oluşturuyor.

Pıezoelektrik (Kristal) Hoparlörler


Piezoelektrik hoparlörler, çizgi biçiminde, birbirine karşı polarize edilmiş,
bükülgen piezooksit (kurşun, elmas, titan karışımı) maddeden yapılmıştır.
Şeritlere akım uygulandığında, boyut uzayıp kısalıyor ve karşısındakini
itip çekiyor. Bu titreşim ise esnek membranı hareket ettirerek ses oluşuyor.
Piezoelektrik hoparlörler daha çok yüksek frekanslı seslerin elde edilmesinde ve
kulaklıklarda kullanılıyor. Aynı zamanda dijital saatlerde kullanılan hoparlörlerde
buzzer piezoelektrik esasına göre çalışıyor.
24 Bölüm 1 Sensörler

Kablosuz Sensör Ağı Teknolojisi


Son dönemde özellikle ilgi çeken konuların başında kablosuz sensör ağı
teknolojisi geliyor. Kablosuz sensör ağı, edinme maliyetindeki azalmalar
nedeniyle sıklıkla tercih ediliyor. Önemli avantajlardan bir tanesi ise sensör
boyutlarının giderek daha da küçülmesidir. Bu duruma özellikle radyo frekans
teknolojisi ve dijital devrelerdeki başarılı gelişmeler neden olmaktadır. Kablosuz
sensör ağının dezavantajları olarak ise veri bitlerinde oluşan hatalar, düşük bant
genişliği ve veri iletimindeki gecikmeler gösterilebilir.

Endüstriyel otomasyonda kablosuz haberleşme, IEEE (Elektrik ve Elektronik


Mühendisleri Enstitüsü) 802.11 ve 802.15 kodlarıyla standardize edilerek
WPAN (Kablosuz Kişisel Alan Ağı) ve WWAN (Kablosuz Geniş Alan Ağı) ağları ile
yapılandırılmıştır. 802.11 (Wi-Fi) tabanlı standartlar, 802.15 tabanlı standartlara
oranla yüksek veri iletim hızlarına imkan veriyor. Ancak 802.11 teknolojisi
yüksek oranda güç tüketimi nedeniyle kablosuz haberleşmenin limitlerini
sınırlandırıyor. Güç tüketiminin önemli olduğu kablosuz sensör ağlarında
802.15.1 (Bluetooth) ve 802.15.4 tabanlı teknolojiler kullanılıyor.
Kablosuz Sensör Ağı Teknolojisi 25

Wırelles Interface For Sensor And Actuators (Wısa)


WISA, 2003 yılında ABB firması tarafından IEEE 802.15.1 standartı içerisinde Blu-
etooth olarak bilinen teknolojiyi kullanan bir kablosuz sensör ağıdır. 2.4 GHz çalış-
ma frekansına ve 1 Mbps veri iletim hızına sahiptir. Maksimum 32 hücre ve her bir
hücre içerisi maksimum 120 adet sensör ve hareketlendirici özelliklerine sahiptir.

Wırelless Hart
Wireless HART, 2007 yılında HART İletişim Vakfı tarafından süreç ölçüm ve
kontrol uygulamaları için tasarlanmış olan 802.15.4 tabanlı bir kablosuz sensör
ağıdır. 2.4 GHz çalışma frekansına ve 250 Kbps veri iletim hızına sahiptir. Basınç,
sıcaklık, akış ve seviye sensörleri Wireless HART özellikli sensörlerdir.
26 Bölüm 1 Sensörler

ISA100
ISA100, Uluslararası Otomasyon Derneği’nin bir parçası olan ISA100 standart
komitesi tarafından 2009 yılında endüstriyel otomasyon uygulamaları için
geliştirdiği 802.15.4 tabanlı bir sensör ağı teknolojisidir. 2.4 GHz çalışma
frekansına ve 250 Kbps veri iletim hızına sahiptir. Wireless HART ile benzer
özellikleri taşımasına rağmen en önemli avantajı otomasyon uygulamalarında
kullanılan tüm protokolleri desteklemesidir.

ZıgBee
ZigBee, 2007 yılında ZigBee Alliance tarafından geliştirilen endüstriyel
otomasyon amaçlı, düşük maliyetli ve düşük güç tüketimine sahip 802.15.4
tabanlı bir kablosuz sensör ağı teknolojisidir. 2.4 GHz çalışma frekansına ve 250
Kbps veri iletim hızına sahiptir. Toplamda 65536 ağ düğümünü adresleyebiliyor.
Her ağ düğümü için ise 240 sensör içerebiliyor. ZigBee teknolojisi içerisinde
bilinmesi gereken bazı terimler vardır. Bunlar:
Yönetici (Coordinator): Belirlenen frekansta ve uygun kanalda iletişimi başlatan
ve ağı yöneten cihaz olarak tanımlanır ve ZigBee ağından gelen verileri başka
platformlara aktarmak için kullanılır.
Yönlendirici (Router): Belirlenen frekansta ve uygun kanalda yayın yapan
yönetici cihazlara doğrudan bağlanabiliyor. Ağ üzerindeki cihazlardan gelen
veya kendi oluşturdukları veri paketlerini otomatik olarak hedefe iletmekle
görevlidirler.
Uç Cihazlar (End Device): Sensör cihazları veya ihtiyaca bağlı ayarlanmış özel
donanımlardır.
Sensör Karakteristikleri 27

Sensör Karakteristikleri
Ölçüm Aralığı
Bir sensörün ölçüm aralığı, çıkış değerini veren minimum ve maksimum giriş
değerleri arasındaki farktır. Sensörlerin ölçüm aralığı genellikle üretici firma
tarafından belirleniyor. Uygulamalarımızda kullanacağımız sensörlerin ölçüm
aralığı bizim için çok önemli. İstenilen ölçüm aralığında çalışmayan bir sensör
istenilen görevi yerine getiremez.

Örnek olarak, yaygın bir sıcaklık algılayıcısı olan K tipi termocouple -50 ila
+750 0C arasında bir ölçüm aralığına sahip. Dolayısıyla gerçekleştireceğimiz
uygulamanın da bu şartlara uyumlu olmasına dikkat ediyoruz.

Çözünürlük
Bir sensörün çözünürlüğü, güvenilir bir şekilde algıladığı en küçük girişin
artımıdır. Çözünürlük, genellikle sensörün en küçük okuduğu değer olarak da
biliniyor. Sayısal sensörlerin çözünürlüğü kolayca belirlenebiliyor. Örneğin; 1024
P/R (devir başına darbe) artımsal enkoderinin çözünürlüğünü hesaplayalım:
28 Bölüm 1 Sensörler

Analog sensörlerin çözünürlüğü genellikle düşük seviyeli elektrik gürültüsü


ile sınırlandırılır ve genellikle denk bir sayısal sensörden çok daha iyi bir
çözünürlüğe sahiptir.

Hassasiyet
Sensörlerin hassasiyeti, giriş değişimi başına çıkış değişimi olarak tanımlanıyor.
Sayısal sensörlerin hassasiyeti, çözünürlüğü ile yakından ilgilidir. Analog
sensörlerin hassasiyeti ise girişie karşılık çıkış doğrusunun eğimi şeklindedir.
Bir sensör, bütün giriş aralığında tamamen sabit bir hassasiyete sahip davranış
gösterebilir. Diğer sensörlerde giriş değiştiğinde ya artan ya da azalan doğrusal
olmayan hassasiyet gösterirler.

Hata
Hata, ölçülen değer ile giriş değeri arasındaki farktır. Hatalar, sistematik hatalar
ve rastgele hatalar olarak sınıflandırılır. Sistematik hatalar; verilen bir sensör ile
yapılan tüm ölçümlerde gözlemlenir ve istatistiki yöntemlerle saptanamaz ve
kaldırılamaz. Sistematik hatalar da; kendi içerisinde alt gruplara ayrılabilir:
Kalibrasyon Hataları: Sıfır veya boş nokta hatası olan ve sıfır girişe karşılık
sıfırdan farklı bir çıkış veren en yaygın hata türüdür.
Yükleme Hataları: Sisteme sistem değişimlerini ölçmek amacıyla sensör
eklemekten kaynaklanan hata türüdür.
Gürültü Hataları: İstenenin dışındaki değişkenlerin sensör hassasiyetinden
ötürü oluşan hata türüdür. Örneğin; strain gauge sensörü üzerinde sıcaklık
üzerinde oluşan hatalar.
Neler Öğrendik? 29

Gürültü
Gürültü; sisteme rastgele ve istem dışı dahil olan ve asıl sinyaller üzerinde
olumsuz etki yapan enerjidir. Bir iletkenin sıcaklığı arttıkça serbest elektronların
enerji seviyeleri artacağından iletken içindeki rastgele hareketi artar
elektronların bu hareketi ısıl gürültü olarak tanımlanıyor. Transistör ve diyot
gibi yarı öğelerin p-n eklemlerinde elektronların rastgele yayınımları, eklemden
nüfuz etmeleri ya da tekrar birleşmeleri sonucunda oluşan rastgele elektriksel
değişimlere atış gürültüsü denir.

SNR: Sinyal-gürültü oranı.

Kuantalama
Bir analog sinyali alarak bu sinyali dijital sinyale dönüştürme işlemine
kuantalama denir. Bir işaretin kuantalanması demek işaretin alabileceği en
küçük genlik ile en büyük genlik arasını basamaklara ayırmak ve bu işaretin bu
basamaklarla yaklaşığını elde etmektir.

Neler Öğrendik?
Bu bölümde, mühendislik uygulamalarında önemli bir yere sahip olan
sensör kavramına, sensör çeşitlerine ve sensör karakteristiklerine değindik.
Gördüğümüz teorik bilgiler, sensörler ile uygulama geliştirmeden önce bilmemiz
gereken bilgiler. Bu bölümde öğrendikleriniz ile içerisinde sensörler barındıran
oldukça farklı ve önemli mühendislik uygulamaları gerçekleştirebilirsiniz.
2
Sıcaklık ve Nem
Sensörleri

Bu Bölümde
Giriş 32 Günümüzde bir çok önemli mühendislik
Arduino ve Sıcaklık ve Nem Sensörleri 33 uygulamalarında sıcaklık ve nem sensörleri
Neler Öğrendik? 55 kullanılıyor. Sıcaklık ve nem bilgilerinin algılanıp
yorumlanmasıyla donanımların kontrolü
gerçekleştiriliyor. Piyasada ise bu ihtiyacı karşılamaya
yönelik bir çok sıcaklık ve nem sensörü mevcut.
Peki biz bu sensölerden hangisini kullanacağız?
Sistemimiz için hangi sensör daha uygun?
Bu bölümde, en çok kullanılan sıcaklık ve nem
sensörleri ile Arduino uygulamaları gerçekleştirerek
hangi sensörün uygulamamız için uygun olduğuna
karar vereceğiz.
32 Bölüm 2 Sıcaklık ve Nem Sensörleri

Giriş
Sıcaklık ve nem sensörleri uygulamalarda en çok kullanılan sensörlerden
biridir. Piyasada bir çok farklı çeşitte sensör bulunuyor. Seçim yaparken de
uygulamamız için gereken en uygun sensörü seçmemizin bazı ipuçları var.
Öncelikle gerçekleştireceğimiz uygulamanın koşullarını belirliyoruz.
Ölçüm yapacağımız sıcaklık ve nem aralığına uygun bir sensör seçmek
gerçekleştireceğimiz ilk adım olacak. Farklı ölçüm aralıklarına sahip bir sensör
seçimi uygulamamızda istediğimiz sonuçları elde etmemize engel olur.
İlk bölümde anlattığımız gibi sensörler analog veya sayısal çıkış verebiliyor. Bu
duruma dikkat etmeliyiz. Sensörlerin istenilen hassaslıkta ölçüm yapması da
çok önemli. Hassasiyeti düşük olan sensörler ile ölçüm yaptığımızda istediğimiz
değerden uzak bir değer elde edebiliriz. Bunun aksine yüksek hassasiyetli
sensörler ile çalışmak her zaman daha avantajlı bir durum.

Sensör seçerken istediğimiz uygulamanın şartlarının sağlanıp sağlanmadığını


NOT öğrenebilmek için kesinlikle sensör veri sayfalarına (datasheet) bakmalıyız.

Sensörler için önemli bir başka konu ise çalışma gerilimidir. Sensörün hangi
gerilim türünde ve gerilim aralıklarında çalışacağı önemli bir husus. Arduino ile
çalışma gerilimi uygun olan sensörler seçmeliyiz.
Piyasada bir çok sıcaklık ve nem sensörü bulunuyor. Bu bölümde Arduino ile
sıcaklık ve nem bilgilerinin ölçümünü gerçekleştireceğiz. Bu bilgiler ile birlikte
hem uygulamamızdaki donanımları kontrol edebileceğiz hem de verileri anlık
olarak gözlemleyebileceğiz Böylelikle, Arduino ile kullanılan sıcaklık ve nem
sensörleri ile oldukça önemli projeler yapma olanağına kavuşacağız.
Arduıno ve Sıcaklık ve Nem Sensörleri 33

Arduıno ve Sıcaklık ve Nem Sensörleri


Buraya kadar sıcaklık ve nem sensörleri ile temel olarak tanışmış olduk.
Artık Arduino ile beraber projeler yapmaya hazırız. İlk olarak kolay bir örnek
üzerinden Arduino ile Sıcaklık ve Nem sensörlerinin kullanımını görelim. Bu
örnekte sıklıkla kullanılan LM35 ile sıcaklık ölçümünü gözlemleyeceğiz. Tabi
buradaki analog veri okuma mekanizması farklı sensörlerden veri almak için de
rahatlıkla kullanılabilir.

Lm35 İle Sıcaklık Ölçme Uygulaması


LM35, çevre sıcaklığını algılayıp analog olarak çıkış veren bir sensördür. Arduino
ile kullanımı kolay olduğundan özellikle yüksek hassasiyet gerektirmeyen
uygulamalarınızda kullanabilirsiniz.
LM35 sensörü, -55 ve +150 derece arasında ölçüm yapabiliyor. Bu da çok
yüksek sıcaklıklara çıkmayan uygulamalarınız dışında sensöre geniş bir ölçüm
aralığı sunuyor. Önemli avantajlarından bir tanesi ise temin edilmesi kolay ve
maliyetinin uygun olması.

LM35 ile ilgili ayrıntılı bilgileri ve veri dökümanlarını (datasheet) aşağıdaki


adreste Texas Instruments firmasının web sitesinde bulabilirsiniz:
http://www.ti.com/lit/ds/symlink/lm35.pdf
Sensörün veri dökümanlarını incelendiğinizde hassasiyetin 10 mV/ C0 olduğu-
nu göreceksiniz. Bu da sensörün ölçtüğü her 1 C0 sıcaklık için 10 mV ürettiği
anlamına geliyor. Örneğin; sensörün çıkış gerilimi 300 mV ise 300 / 10 = 30 C0
sıcaklık ölçülmektedir.

Piyasada LM35 sıcaklık sensörünün pek çok tipi bulunuyor. Her bir modelin
sıcaklık ölçüm aralığı ve doğruluğu farklıdır. Örneğin; LM35DZ sensörü 0 ve 100
DİKKAT derece arasında ölçüm yapıyor ve son derece doğrusal bir karakteristiğe sahip.
Bu yüzden satın alınan LM35 sensörünün hangi tipte olduğuna dikkat etmeliyiz.
34 Bölüm 2 Sıcaklık ve Nem Sensörleri

Bunun için kullanılan Arduino kodları aşağıda:

Arduino Kodu
/*
LM35 ile Sıcaklık Ölçme Uygulaması
LM35 Sıcaklık Sensörü ile
Sıcaklık Ölçümü

LM35 sensörünün ürettiği gerilim milivolt


cinsine dönüştürülür ve 10 ile bölünerek
karşılık geldiği sıcaklık değerine ulaşılır.

*/

// Analog değeri okuyarak dönüştüreceğimiz sıcaklık değişkenini tanımlıyoruz.


float sicaklik;

// Okuduğumuz analog değeri tanımlıyoruz.


float deger;

// LM35 sıcaklık sensörünün bağlı olduğu analog giriş pinini tanımlıyoruz.


int analogPin = A0;

void setup ()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
}

void loop ()
{

// Analog giriş pininden değer okuyoruz.


deger = analogRead(analogPin);
// Okuduğumuz değeri milivolt cinsinden gerilime dönüştürüyoruz.
deger = (deger/1023)*5000;
// Gerilim değerine karşılık gelen sıcaklık değerini buluyoruz.
sicaklik = deger /10,0;

Serial.print(“Sicaklik : “);
Serial.print (sicaklik);
Serial.println (“ derece”);
// Her 1 saniyede yeni ölçüm gerçekleştiriyoruz.
delay (1000);

}
Arduıno ve Sıcaklık ve Nem Sensörleri 35

Uygulamayı çalıştırdığımızda görmeniz gereken Serial Monitor ekranı


aşağıda gösteriliyor. Arduino ortamındaki Serial Monitor üzerinden 1 saniyelik
periyotlarla çevreden alınan sıcaklık değerlerini görebiliyoruz.

LM35 ile C#. NET Arayüzü Üzerinden Ölçülen Sıcaklıkların Gözlemlenmesi ve Kaydedilmesi
Bu uygulamamızda C# .NET üzerinde tasarladığımız arayüzle belirttiğimiz port
numarasına bağlantı gerçekleştirerek sıcaklık sensörünün ölçtüğü değeri göz-
lemleyeceğiz. Değerler aynı zamanda kaydedilerek istenildiğinde daha önceki
ölçümlere ulaşabileceğiz. Bunun için kullanacağımız C#. NET arayüzü aşağıda:

Tasarlanan arayüzde Bağlantı Yapılacak COM Port, Ölçülen Sıcaklık(derece)


ve Yapılan Tüm Ölçümler adında üç adet label nesnesi, değerler için iki adet
textbox ve bir adet combobox nesnesi, Bağlantıyı Kur ve Bağlantıyı Durdur
adında iki adet buton nesnesi, bir adet SerialPort nesnesi ve bir adet Timer
nesnesi kullanılıyor.
36 Bölüm 2 Sıcaklık ve Nem Sensörleri

Arayüzü tasarladıktan sonra C#. NET kodlarını yazacağız. Bunun için kullanılan
C#. NET kodları aşağıda:

C#. NET Kodu


/*
C#. NET Arayüzü Üzerinden
LM35 ile Sıcaklık Ölçümü

C#. NET üzerinde hazırlanan arayüz ile


bağlantı gerçekleştirilecek port numarası
belirtilerek LM35 sıcaklık sensörü ile
ölçülen sıcaklık bilgisi görüntüleniyor.

İstenildiğinde ölçülen tüm sıcaklık bilgileri


gözlemlenebiliyor.

*/

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace WindowsFormsApplication10
{
public partial class Form1 : Form
{
// seriPort isminde bir SerialPort nesnesi oluşturuluyor
SerialPort seriPort;
public Form1()
{
InitializeComponent();
seriPort = new SerialPort();
// seriPort nesnesinin hızı 9600 bps olarak ayarlanıyor
seriPort.BaudRate = 9600;
}
Arduıno ve Sıcaklık ve Nem Sensörleri 37

private void Form1_Load(object sender, EventArgs e)


{

// Bağlantıyı Kur butonunun kodlarını yazıyoruz


private void button1_Click(object sender, EventArgs e)
{
// timer nesnesinin çalışmasını başlatıyoruz
timer1.Start();

try
{
// seriPort nesnesinin ismini textbox ile okuyoruz
seriPort.PortName = textBox1.Text;
// seriportu açıyoruz
if (!seriPort.IsOpen)
seriPort.Open();
// “Bağlantı Kuruldu...” mesajını ekrana veriyoruz
MessageBox.Show(“Bağlantı Kuruldu...”);
}

catch
{
// “Bağlantı Kurulamadı!” mesajını ekrana veriyoruz
MessageBox.Show(“Bağlantı Kurulamadı!”);

}
}

// Timer nesnesinin kodlarını yazıyoruz


private void timer1_Tick(object sender, EventArgs e)
{
try
{
seriPort.Write(“a”);
int veri = Convert.ToInt16(seriPort.ReadExisting());
// Ölçülen analog gerilim değerini dereceye çeviriyoruz
veri = ((veri * 5000) / 1023) / 10;
// Sıcaklık değerini textbox nesnesine aktarıyoruz
textBox2.Text = veri.ToString();
// Ölçülen her bir sıcaklık değeri comboBox nesnesine kaydediliyor
comboBox1.Items.Add(textBox2.Text);
38 Bölüm 2 Sıcaklık ve Nem Sensörleri

System.Threading.Thread.Sleep(100);
}
catch (Exception ex) { }
}

// Bağlantıyı Durdur butonunun kodlarını yazıyoruz


private void button2_Click(object sender, EventArgs e)
{
// timer nesnesinin çalışmasını durduruyoruz
timer1.Stop();
// seriportu kapatıyoruz
seriPort.Close();
}
}
}

COM adresini yazdıktan sonra Bağlantıyı Kur butonuna tıklayarak ölçülen sıcaklık
bilgisini textbox üzerinden gözlemliyoruz. Eğer yanlış bir COM adresi yazdıysak
Bağlantı Kurulamadı! mesajını alırız. Ölçülen her bir sıcaklık değerinin aynı
zamanda comboBox nesnesine kaydedildiğine dikkat ediyoruz.
C#. NET kodlarını yazdıktan sonra Arduino kodlarını yazacağız. C#. NET ile
tasarladığımız arayüzde sıcaklık değerini gözlemleyebildiğimiz gibi Arduino ile
Serial Monitor üzerinde de gözlemliyoruz. Serial Monitor üzerinden gönderilen
a karakteri sonucu ölçülen mesafeyi gözlemliyoruz. Bunun için kullanılan
Arduino kodları aşağıda:

Arduino Kodu
/*
LM35 ile Sıcaklık Ölçme Uygulaması
LM35 Sıcaklık Sensörü ile
Sıcaklık Ölçümü

LM35 sensörünün ürettiği gerilim milivolt


cinsine dönüştürülür ve 10 ile bölünerek
karşılık geldiği sıcaklık değerine ulaşılır.
*/

int sicaklikPini=A0; // LM35’in Arduino analog giriş pini


int val=0;
Arduıno ve Sıcaklık ve Nem Sensörleri 39

char x;

void setup(){
Serial.begin(9600); // Seri haberleşmeyi başlatıyoruz
}

void loop(){
if(Serial.available()>0)
x=Serial.read();
if(x==’a’)
{
val = analogRead(sicaklikPini);
Serial.println(val);
delay(100);
}
}

Uygulamayı gerçekleştirebilmek için önce Arduino kodlarını yazıp modelimize


NOT yüklüyoruz. Ardından C#. NET kodlarını çalıştırıyoruz.

Uygulamayı çalıştırdığımızda görmeniz gereken C#. NET arayüzü aşağıda


gösteriliyor. Arduino ortamındaki Serial Monitor üzerinden a karakterini
göndererek de sıcaklık değerini görebiliyoruz.

LM35 ile MATLAB & Simulink Üzerinden Sıcaklık Ölçümü


Bu uygulamamızda, MATLAB & Simulink üzerinde oluşturduğumuz kod
bloklarını Arduino kartımıza gömerek sıcaklık sensörünün ölçtüğü değeri
gözlemleyeceğiz.
40 Bölüm 2 Sıcaklık ve Nem Sensörleri

Uygulamayı gerçekleştirebilmek için önce MATLAB programının Arduino


NOT Destek Paketi yüklenemlidir.

Sıcaklık sensöründen analog okuma yapabilmek için Simulink Support


Package for Arduino paketinin içerisinde yer alan Analog Input bloğunu
kullanıyoruz. Adından da anlaşabileceği gibi analog okuma işlemlerini bu
blok ile gerçekleştiriyoruz. Bloğun üzerine çift tıklayarak istediğimiz pin
numarasından okuma yapabiliriz.

Okuduğumuz analog verilerle işlem yapabilmemiz için bu verileri sayısal verilere


dönüştürmemiz gerekir. Bunun için ADC denilen Analog Dijital Dönüştürücü
birimini kullanacağız. Arduino Uno ve Mega modellerinin üzerinde 10 bitlik
ADC birimleri var. Bu sayede okuduğumuz analog bilgiyi 0 - 1023 arasında
sayısal verilere dönüştürüyoruz.
Simulink üzerinde analog verileri sayısal verilere dönüştürmek için kazanç
adındaki Simulink paketinin içerisinde yer alan Gain bloğunu kullanıyoruz.
Uygulamamızda kullanılan ilk gain bloğu ile analog bilgiyi 1024 sayısına
bölerek sayısal karşılığını elde ediyoruz. 5000 ile çarparak da bu sayısal verinin
gerilim karşılığı elde ediyoruz. LM35 sensörü 10mV / C0 hassasiyetindedir. Bu
da sensörün 1 C0 başına 10 mV gerilim ürettiği anlamına gelir. İkinci gain ile
ölçülen gerilim değerini 10’a bölüyoruz. Böylece sensörün ölçmüş olduğu
sıcaklık değerini elde etmiş oluyoruz.
Arduıno ve Sıcaklık ve Nem Sensörleri 41

Sıcaklık değerini Simulink üzerinden gözlemleyebilmek için Simulink paketinin


içerisinde yer alan Display bloğunu kullanıyoruz. Ölçülen veri tipinin Display
üzerinde gözlemlenebilmesi için veri tipi dönüşümü gerekmektedir. Bu
dönüşümü gerçekleştirmek amacıyla Simulink paketinin içerisinde yer alan
Data Type Conversion bloğunu kullanıyoruz. Data Type Conversion bloğunun
üzerine çift tıklayarak Output data type kısmını double olarak ayarlıyoruz.

Hazırladığımız kod bloğunu Arduino modelimize gömdüğümüzde devre


şemasındaki sıcaklık sensörünün algıladığı sıcaklık değerini ekranımızda
görmüş oluyoruz.

DHT11 ile Sıcaklık ve Nem Ölçme Uygulaması


DHT11, dijital sinyal çıkışı veren bir sıcaklık ve nem sensörüdür. Uzun dönem
çalışmalarında dengelidir ve yüksek güvenilirliğe sahiptir. İçerisinde 8 bit
mikroişlemci yer alıyor. Böylece hızlı ve kaliteli teki verebilmektedir.
DHT11 sensörü, 0 0C ile 50 0C arasında sıcaklık ölçümü yapabiliyor. Hassasiyeti
ise 2 0C. Aynı zamanda 20 - 90 % RH arasında da nem ölçümü yapabiliyor. Has-
sasiyeti ise 5 % RH hata payı.

DHT11 ile ilgili ayrıntılı bilgileri ve veri dökümanlarını(datasheet) aşağıdaki ad-


reste bulabilirsiniz:
http://www.micropik.com/PDF/dht11.pdf
42 Bölüm 2 Sıcaklık ve Nem Sensörleri

DHT11 sensörünün genel bağlantı şeması şu şekildedir:

DHT11 sensörü ile Arduino kartımız arasındaki bağlantı kablosu 20 metreden


kısa ise, bir adet 5K değerinde dirence ihtiyaç duyuyoruz.
DHT11 sensörünü kullanmak için yazacağımız kodlarda öncelikle DHT11
kütüphanemizi kod geliştirme ortamına dahil edeceğiz. Öncelikle
kütüphanemizi indiriyoruz:
http://volkankanat.com/wp-content/uploads/2014/12/dht11.rar
Arduino yazılımındaki Sketch>Import Library>Add Library... menüsünden, in-
dirdiğimiz ZIP dosyasını seçerek kütüphaneleri Arduino ortamına ekleyebiliyoruz.
Bunun için kullanılan Arduino kodları aşağıda:

Arduino Kodu
/*
DHT11 ile Sıcaklık ve Nem Ölçme Uygulaması

Kod yazmadan önce ilk olarak DHT11 sensör


kütüphanesini kod geliştirme ortamımıza ekliyoruz.
Daha sonra sensörden nem ve sıcaklık bilgilerini okuyoruz.
İstenildiğinde çiğ oluşma noktası (dewPoint) bilgisi de
elde edilebilir.
*/

// DHT11 sensör kütüphanesini dahil ediyoruz.


#include <dht11.h>
// DHT11 pini olarak 4 nolu dijital pini belirliyoruz.
#define DHT11PIN 4

// DHT11 nesnesini oluşturuyoruz.


dht11 DHT11;

void setup()
{
Arduıno ve Sıcaklık ve Nem Sensörleri 43

// Seri iletişimi başlatıyoruz.


Serial.begin(9600);
}

void loop()
{
// Okuma kolaylığı için bir satır boşluk bırakıyoruz.
Serial.println();
// Sensörün okunup okunmadığını konrol ediyoruz.
// Kontrol değerinin içeriği 0 olduğunda sorunsuz okuma gerçekleşiyor demektir.
int kontrol = DHT11.read(DHT11PIN);

// Sensörden nem bilgisini okuyoruz.


Serial.print(“Nem (%): “);
Serial.println((float)DHT11.humidity, 2);

// Sensörden sıcaklık (Celcius) bilgisini okuyoruz.


Serial.print(“Sicaklik (Celcius): “);
Serial.println((float)DHT11.temperature, 2);

// Sensörden sıcaklık (Fahrenheit) bilgisini okuyoruz.


Serial.print(“Sicaklik (Fahrenheit): “);
Serial.println(DHT11.fahrenheit(), 2);

// Sensörden sıcaklık (Kelvin) bilgisini okuyoruz.


Serial.print(“Sicaklik (Kelvin): “);
Serial.println(DHT11.kelvin(), 2);

// 3 saniye periyodik aralıklarla sensörden verileri okuyoruz.


delay(3000);

}
44 Bölüm 2 Sıcaklık ve Nem Sensörleri

Uygulamayı çalıştırdığımızda görmeniz gereken Serial Monitor ekranı


aşağıda gösteriliyor. Arduino ortamındaki Serial Monitor üzerinden 3 saniyelik
periyotlarla çevreden alınan sıcaklık ve nem değerlerini görebiliyoruz.

DHT22 ile Sıcaklık ve Nem Ölçme Uygulaması


DHT22, dijital sinyal çıkışı veren bir sıcaklık ve nem sensörüdür. Uzun dönem
çalışmalarında dengelidir ve yüksek güvenilirliğe sahiptir. İçerisinde 8 bit
mikroişlemci yer alıyor. Böylece hızlı ve kaliteli teki verebilmektedir.
DHT22 sensörü, -40 0C ile 80 0C arasında sıcaklık ölçümü yapabiliyor. Hassasiyeti
ise 1 0C. Aynı zamanda 0 - 100 % RH arasında da nem ölçümü yapabiliyor.
Hassasiyeti ise 5 % RH hata payı. Sensörün veri toplama periyodundan kaynaklı
olarak 2 saniyelik periyotlarla ölçüm sonuçları alınabiliyor.

DHT22 ile ilgili ayrıntılı bilgileri ve veri dökümanlarını(datasheet) aşağıdaki


adreste bulabilirsiniz:
https://www.sparkfun.com/datasheets/Sensors/Temperature/DHT22.pdf
Arduıno ve Sıcaklık ve Nem Sensörleri 45

Sensörün önemli özelliklerini aşağıdaki tabloda bulabilirsiniz:

Çalışma Voltajı DC 3.3 - 5 V


Ölçüm Aralığı (Nem) 0 - 100 % RH
Ölçüm Aralığı (Sıcaklık) -40 ile +80 0C
Hassasiyet (Nem) + / - % 3 RH (Max % 5)
Hassasiyet (Sıcaklık) < + / - 1 0C
Ölçüm Periyodu 2 saniye
Boyutları 22 mm x 28 mm x 5 mm

Arduino DHT sensörleri hakkında detaylı bilgileri aşağıdaki adreste bulabilirsiniz:


http://playground.arduino.cc/Main/DHTLib

VCC ile çıkış pini arasında pull-up direncine ihtiyaç duyuluyor. Bu sebeple
4.7 K ile 10 K arasında bir direnç ile beraber kullanmamız gerekiyor. DHT11
NOT modeli de benzer özelliklerde olduğu için bir model ile yapılmış uygulama
diğer modele de uygulanabiliyor.

DHT22 sensörünü kullanmak için yazacağımız kodlarda öncelikle DHT22


kütüphanemizi kod geliştirme ortamına dahil edeceğiz. Öncelikle
kütüphanemizi indiriyoruz:
http://volkankanat.com/wp-content/uploads/2014/12/DHT.rar
Arduino yazılımındaki Sketch>Import Library>Add Library... menüsünden,
indirdiğimiz ZIP dosyasını seçerek kütüphaneleri Arduino ortamına
ekleyebiliyoruz.
Bunun için kullanılan Arduino kodları aşağıda:

Arduino Kodu
/*
DHT22 ile Sıcaklık ve Nem Ölçme Uygulaması

Kod yazmadan önce ilk olarak DHT22 sensör


kütüphanesini kod geliştirme ortamımıza ekliyoruz.
Daha sonra sensörden nem ve sıcaklık bilgilerini okuyoruz.
İstenildiğinde ısı indeksi (heat index) bilgisi de
elde edilebilir.
*/
46 Bölüm 2 Sıcaklık ve Nem Sensörleri

// DHT sensör kütüphanesini dahil ediyoruz.


#include “DHT.h”
// DHT11 pini olarak 2 nolu dijital pini belirliyoruz.
#define DHTPIN 2
// DHT sensör çeşidi olarak DHT22 çeşidini kullanacağımızı belirtiyoruz.
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);

void setup()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
dht.begin();
}

void loop()
{
// Ölçüm için 2 saniye bekliyoruz.
delay(2000);
// Nem bilgisini okuyoruz.
float h = dht.readHumidity();

// Sıcaklık (Celcius) bilgisini okuyoruz.


float t = dht.readTemperature();

// Sıcaklık (Fahrenheit) bilgisini okuyoruz.


float f = dht.readTemperature(true);

// Herhangi bir hata oluştuğunda uyarı veriyoruz.


if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(“DHT22 sensor bilgilerinin okunmasinda hata olustu!”);
return;
}

Serial.print(“Nem : “);
Serial.print(h);
Serial.print(“ %\t”);
Serial.print(“Sicaklik: “);
Serial.print(t);
Serial.print(“ *C “);
Serial.print(f);
Serial.print(“ *F\t”);

}
Arduıno ve Sıcaklık ve Nem Sensörleri 47

Uygulamayı çalıştırdığımızda görmeniz gereken Serial Monitor ekranı


aşağıda gösteriliyor. Arduino ortamındaki Serial Monitor üzerinden 2 saniyelik
periyotlarla çevreden alınan sıcaklık ve nem değerlerini görebiliyoruz.
48 Bölüm 2 Sıcaklık ve Nem Sensörleri

DS18B20 ile Sıcaklık Ölçme Uygulaması


DS18B20, tek hatlı dijital bir sıcaklık sensörüdür. 9 ile 12 bit aralığında değerler
ile -55 0C ile 125 0C arasında sıcaklık ölçümü yapabiliyor. Benzersiz tek hat
arabirimi iletişimi için tek port pin gerektiriyor. Her sensörün dahili ROM
depolanan benzersiz bir 64 bit seri kodu bulunuyor. Multidrop yeteneği ile
sıcaklık algılama uygulamalarını kolaylaştırıyor.
DS18B20 sensörünün çalışma gerilimi DC 3.3 - 5.5 V arasındadır. Kullanıcı
tarafından 9 ile 12 bit aralığında çözünürlüğü seçilebiliyor. Özellikle termostatik
kontrol, endüstriyel sistemler, tüketici ürünleri veya herhangi ısıya duyarlı
sistemlerde kullanılabiliyor.

DS18B20 ile ilgili ayrıntılı bilgileri ve veri dökümanlarını(datasheet) aşağıdaki


adreste bulabilirsiniz:
http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf
DS18B20 sensörünü kullanmak için harici bileşen olarak direnç kullanacağız.
DS18B20 sensörünü kullanmak için yazacağımız kodlarda öncelikle OneWire
kütüphanemizi kod geliştirme ortamına dahil edeceğiz. Öncelikle kütüphane-
mizi indiriyoruz:
http://volkankanat.com/wp-content/uploads/2014/12/OneWire_kutuphanesi.rar
Arduino yazılımındaki Sketch>Import Library>Add Library... menüsünden,
indirdiğimiz ZIP dosyasını seçerek kütüphaneleri Arduino ortamına
ekleyebiliyoruz.
Bunun için kullanılan Arduino kodları aşağıda:
Arduıno ve Sıcaklık ve Nem Sensörleri 49

Arduino Kodu
/*
DS18B20 ile Sıcaklık Ölçme Uygulaması

Kod yazmadan önce ilk olarak OneWire


kütüphanesini kod geliştirme ortamımıza ekliyoruz.
Daha sonra sensörden sıcaklık bilgilerini okuyoruz.

*/

// One Wire kütüphanesini dahil ediyoruz.


#include <OneWire.h>

// DS18B30 pini olarak 2 nolu dijital pini belirliyoruz.


int DS18S20_Pin = 2;

OneWire ds(DS18S20_Pin);

void setup(void)
{
// Seri iletişimi başlatıyoruz.
Serial.begin(9600);
}

void loop(void)
{

// temperature değişkenini sıcaklık değerini alma fonksiyonuna bağlıyoruz.


float temperature = getTemp();

// Serial Monitor ekranına sıcaklık değerini yazdırıyoruz.


Serial.print(“Sicaklik: “);
Serial.println(temperature);

// 1 saniye bekliyoruz.
delay(1000);

// Bu fonksiyon ile sensörden gelen verileri değerlendirerek


// Celcius cinsinden sıcaklık değerine dönüştürüyoruz.

float getTemp(){

byte data[12];
byte addr[8];
50 Bölüm 2 Sıcaklık ve Nem Sensörleri

if ( !ds.search(addr)) {

ds.reset_search();
return -1000;
}

if ( OneWire::crc8( addr, 7) != addr[7]) {


Serial.println(“CRC yok!”);
return -1000;
}

if ( addr[0] != 0x10 && addr[0] != 0x28) {


Serial.print(“Sensor algilanamadi”);
return -1000;
}

ds.reset();
ds.select(addr);
ds.write(0x44,1);

byte present = ds.reset();


ds.select(addr);
ds.write(0xBE);

for (int i = 0; i < 9; i++) {


data[i] = ds.read();
}
ds.reset_search();

byte MSB = data[1];


byte LSB = data[0];

float tempRead = ((MSB << 8) | LSB);


float TemperatureSum = tempRead / 16;

return TemperatureSum;
}
Arduıno ve Sıcaklık ve Nem Sensörleri 51

SHT15 ile Sıcaklık ve Nem Ölçme Uygulaması


SHT15, kompakt ve kolay bir şekilde uygulama gerçekleştirilen bir sıcaklık ve
nem sensördür. Düşük maliyetli, tam kalibre edilmiş, yüksek hassasiyete sahip
ve uzun vadede kullanım sağlayabilen bir sensördür. Uzun vadede kullanım
için CMOSens Teknolojisini barındırıyor. Özelllikle tıbbi uygulamalar, test ve
ölçümler, bina kontrol ve HVAC, otomasyon ve süreç kontrolü uygulamalarında
sıklıkla kullanılmakta.
SHT15 sensörü, 4 saniyeden daha kısa bir zaman aralığında tepki veriyor. Aynı
zamanda 30uW civarında bir güç tüketimi gerektirdiği için düşük güç tüketimli
uygulamalarda kullanılabiliyor. Yüksek hassasiyete sahip olduğundan hassas
çiğ noktası hesaplamasını mümkün kılıyor.
52 Bölüm 2 Sıcaklık ve Nem Sensörleri

SHT15 ile ilgili ayrıntılı bilgileri ve veri dökümanlarını(datasheet) aşağıdaki


adreste bulabilirsiniz:
https://www.sparkfun.com/datasheets/Sensors/SHT1x_datasheet.pdf
Sensörün önemli özelliklerini aşağıdaki tabloda bulabilirsiniz:

Ölçüm Aralığı (Nem) 0 - 100 % RH


Mutlak RH Doğruluğu +/- 2% RH (10 … 90% RH)
Tekrarlama RH + / - % 0.1 RH
Sıcaklık Doğruluğu + / - 0.3 OC @ 25 OC
Ölçüm Periyodu < 4 saniye
Güç Tüketimi 30 uW

Sensörün pinleri aşağıda gösterildiği gibidir:

Uygulamamızda SHT15 sensörünü kullanarak çevrenin sıcaklık ve nem


bilgilerini algılayacağız. Bunun için kullanılan Arduino kodları aşağıda:

Arduino Kodu
/*
SHT15 ile Sıcaklık ve Nem Ölçme Uygulaması

SHT15 ile Arduino bağlantılarımızı devre şemasında


gösterildiği gibi yaptıktan sonra kodlarımızı yazıyoruz.
*/

// Clock pinini tanımlıyoruz.


int SHT_clockPin = 3;
// Veri pinini tanımlıyoruz.
int SHT_dataPin = 2;

void setup()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
}
Arduıno ve Sıcaklık ve Nem Sensörleri 53

void loop()
{
// Sıcaklık ve nem değerlerini okuyoruz.
float temperature = getTemperature();
float humidity = getHumidity();

Serial.print(temperature);
Serial.print(“ | “);
Serial.println(humidity);

float getTemperature()
{
// Sıcaklık bilgisini Celcius cinsinden okuyoruz.
SHT_sendCommand(B00000011, SHT_dataPin, SHT_clockPin);
SHT_waitForResult(SHT_dataPin);

int val = SHT_getData(SHT_dataPin, SHT_clockPin);


SHT_skipCrc(SHT_dataPin, SHT_clockPin);
// Celcius birmine çevirme işlemini yapıyoruz.
return (float)val * 0.01 - 40;
}

float getHumidity()
{
// Nem bilgisini okuyoruz.
SHT_sendCommand(B00000101, SHT_dataPin, SHT_clockPin);
SHT_waitForResult(SHT_dataPin);
int val = SHT_getData(SHT_dataPin, SHT_clockPin);
SHT_skipCrc(SHT_dataPin, SHT_clockPin);
return -4.0 + 0.0405 * val + -0.0000028 * val * val;
}
void SHT_sendCommand(int command, int dataPin, int clockPin)
{

pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
digitalWrite(dataPin, HIGH);
digitalWrite(clockPin, HIGH);
digitalWrite(dataPin, LOW);
digitalWrite(clockPin, LOW);
digitalWrite(clockPin, HIGH);
digitalWrite(dataPin, HIGH);
digitalWrite(clockPin, LOW);
54 Bölüm 2 Sıcaklık ve Nem Sensörleri

shiftOut(dataPin, clockPin, MSBFIRST, command);

digitalWrite(clockPin, HIGH);
pinMode(dataPin, INPUT);

if (digitalRead(dataPin)) Serial.println(“ACK hata 0”);


digitalWrite(clockPin, LOW);
if (!digitalRead(dataPin)) Serial.println(“ACK hata 1”);
}

void SHT_waitForResult(int dataPin)


{
// SHT15 sensörünün cevabını bekliyoruz.
pinMode(dataPin, INPUT);

// Onay
int ack;

// Değer için 2 saniye beklemeliyiz.


for (int i = 0; i < 1000; ++i){
delay(2);
ack = digitalRead(dataPin);
if (ack == LOW) break;
}

if (ack == HIGH) Serial.println(“ACK hata 2”);


}

int SHT_getData(int dataPin, int clockPin){


// SHT 15 sensöründen veri alıyoruz
// MSB (most significant bits) alıyoruz
pinMode(dataPin, INPUT);
pinMode(clockPin, OUTPUT);
byte MSB = shiftIn(dataPin, clockPin, MSBFIRST);
pinMode(dataPin, OUTPUT);
digitalWrite(dataPin, HIGH);
digitalWrite(dataPin, LOW);
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);

// LSB (less significant bits) alıyoruz.


pinMode(dataPin, INPUT);
byte LSB = shiftIn(dataPin, clockPin, MSBFIRST);
return ((MSB << 8) | LSB); //combine bits
}

void SHT_skipCrc(int dataPin, int clockPin)


Neler Öğrendik? 55

{
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
digitalWrite(dataPin, HIGH);
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
}

Neler Öğrendik?
Bu bölümde, farklı özelliklere sahip sıcaklık ve nem sensörleri ile uygulamalar
geliştirme konusuna değindik. Ölçülen bilgiler aynı çevre şartlarının bilgileri
olsa da farklı sensörlerle aynı uygulamaları gerçekleştirmenin avantajlarına
ve dezavantajlarına değindik. Elinizde bulunan sıcaklık ve nem sensörlerinin
neredeyse tamamının kullanımını inceledik. Bu bölümde öğrendikleriniz
ile içerisinde sıcaklık ve nem sensörleri barındıran oldukça farklı ve önemli
mühendislik uygulamaları gerçekleştirebilirsiniz.
3
Mesafe Sensörleri

Bu Bölümde
Giriş 58 Günümüzde bir çok önemli mühendislik uygulama-
Arduino ve Mesafe Sensörleri 59 larında mesafe sensörleri kullanılıyor. Mesafe bilgileri-
Neler Öğrendik? 81 nin algılanıp yorumlanmasıyla donanımların kontrolü
gerçekleştiriliyor. Piyasada ise bu ihtiyacı karşılamaya
yönelik bir çok mesafe sensörü mevcut. Peki biz bu
sensölerden hangisini kullanacağız? Sistemimiz için
hangi sensör daha uygun?
Bu bölümde, en çok kullanılan mesafe sensörleri
ile Arduino uygulamaları gerçekleştirerek hangi
sensörün uygulamamız için uygun olduğuna karar
vereceğiz.
58 Bölüm 3 Mesafe Sensörleri

Giriş
Mesafe sensörleri uygulamalarda en çok kullanılan sensörlerden biri. Piyasada
bir çok farklı çeşitte sensör bulunuyor. Seçim yaparken de uygulamamız için
gereken en uygun sensörü seçmemizin bazı ipuçları var.
Öncelikle gerçekleştireceğimiz uygulamanın koşullarını belirliyoruz. Ölçüm
yapacağımız mesafe aralığına uygun bir sensör seçmek gerçekleştireceğimiz ilk
adım olacak. Farklı ölçüm aralıklarına sahip bir sensör seçimi uygulamamızda
istediğimiz sonuçları elde etmemize engel olur. Mesafe ölçümü için çok farklı
yöntemler mevcut. Kullanacağımız sensörlerin mesafe ölçüm yöntemine göre
değerlendirerek uygulamalar yapacağız.
İlk bölümde anlattığımız gibi sensörler analog veya sayısal çıkış verebiliyor. Bu
duruma dikkat etmeliyiz. Sensörlerin istenilen hassaslıkta ölçüm yapması da
çok önemli. Hassasiyeti düşük olan sensörler ile ölçüm yaptığımızda istediğimiz
değerden uzak bir değer elde edebiliriz. Bunun aksine yüksek hassasiyetli
sensörler ile çalışmak her zaman daha avantajlı bir durum.

Sensör seçerken istediğimiz uygulamanın şartlarının sağlanıp sağlanmadığını


NOT öğrenebilmek için kesinlikle sensör veri sayfalarına (datasheet) bakmalıyız.
Ayrıca mesafe ölçme yöntemine de dikkat etmeliyiz.

Sensörler için önemli bir başka konu ise çalışma gerilimidir. Sensörün hangi
gerilim türünde ve gerilim aralıklarında çalışacağı önemli bir husus. Arduino ile
çalışma gerilimi uygun olan sensörler seçmeliyiz.
Piyasada bir çok mesafe sensörü bulunuyor. Bu bölümde Arduino ile
mesafe bilgilerinin ölçümünü gerçekleştireceğiz. Bu bilgiler ile birlikte hem
uygulamamızdaki donanımları kontrol edebileceğiz hem de verileri anlık olarak
gözlemleyebileceğiz Böylelikle, Arduino ile kullanılan mesafe sensörleri ile
oldukça önemli projeler yapma olanağına kavuşacağız.
Arduıno ve Mesafe Sensörleri 59

Arduıno ve Mesafe Sensörleri


Buraya kadar mesafe sensörleri ile temel olarak tanışmış olduk. Artık Arduino ile
beraber projeler yapmaya hazırız. İlk olarak kolay bir örnek üzerinden Arduino
ile mesafe sensörlerinin kullanımını görelim. Bu örnekte sıklıkla kullanılan HC-
SR04 ultrasonik mesafe sensörü ile mesafe ölçümünü gözlemleyeceğiz. Tabi
buradaki analog veri okuma mekanizması farklı sensörlerden veri almak için de
rahatlıkla kullanılabilir.

Hc-Sr04 ile Mesafe Ölçme Uygulaması


HC-SR04, basitçe bir mikrofon ve bir hoparlörden oluşan bir mesafe sensörüdür.
Ses gönderimi ve alımı(ultrasonic) anlayışına göre çalışıyor. Gönderilen ses 40
Hz frekansında olup, 2 cm - 400 cm arasında önünde duran en yakın nesnenin
mesafesini veriyor. 3 mm hassasiyete sahiptir. HC-SR04 sensörünün Arduino
ile kullanımı oldukça kolay. Bir çok mesafe ölçme uygulamalarında sıklıkla
kullanılıyor. Önemli avantajlarından bir tanesi ise temin edilmesi kolay ve
maliyetinin uygun olması.

HC-SR04 Ultrasonic Mesafe Sensörü

HC-SR04 ile ilgili ayrıntılı bilgileri ve veri dökümanlarını(datasheet) aşağıdaki


adreste bulabilirsiniz:
http://www.micropik.com/PDF/HCSR04.pdf
Sensörün önemli özelliklerini aşağıdaki tabloda bulabilirsiniz:

Çalışma Voltajı DC 5V
Çektiği Akım 15 mA
Çalışma Frekansı 40 Hz
Maksimum Görme Menzili 4m
Minimum Görme Menzili 2 cm
Görme Açısı 150
Tetik Bacağı Giriş Sinyali 10 us TTL Darbesi
Echo Çıkış Sinyali Giriş TTL Sinyali ve Mesafe Oranı
Boyutları 45 mm x 20 mm x 15 mm
60 Bölüm 3 Mesafe Sensörleri

Sensörün nasıl çalıştığını biraz daha inceleyelim.

Transdüser ultrasonik darbeyi iletiyor. Darbe sehimden yansıyor ve transdüser


tarafından alınıyor. Darbenin gidiş geliş zamanı sensörle sehimin mesafesine
göre orantılıdır.

Ultrasonik darbe t=0 zamanında transdüser tarafından iletiliyor. X


pozisyonundaki hedef tarafından yansıtıldıktan sonra t=tx zamanında darbe
alınıyor. Buradaki tx, X mesafesi ile orantılıdır.
T=0 zamanında ultrasonic ses sinyali iletiliyor, cisimden yansıyor, transdüser
tarafından algılanıyor ve tekrar gönderiliyor. Sonraki darbe ilk darbenin
ultrasonik enerjisinin hepsi absorbe edildiğinde iletilmelidir. Bu yüzden sensöre
bir pals gönderilerek sensör okunuyor ve sensörün veri sayfalarında (datasheet)
yazan süre kadar sensöre tekrar pals gönderilemiyor. Eğer bekleme olmazsa
sensör anlamsız değerler döndürebilir. Çünkü; ilk yolladığımız sinyal herhangi
bir yerden yansıyarak sensöre geri dönmeye devam eder.
Tüm katı ve sıvı maddeler ultrasonik dalgayı çok iyi oranda yansıtabiliyor. Hem
katı hem de sıvı cisimlerden ultrasonik enerjinin neredeyse % 99’u yansıtılıyor. Çok
ufak oranlardaki enerji miktarı ise cisim tarafından emiliyor. Bundan dolayı sensörü
farklı uygulamalarda sorunsuz bir şekilde kullanabilmemiz mümkün. Özellikle özel
amaçlı robotlarda ultrasonik mesafe sensörleri sıklıkla kullanılmakta.
Arduıno ve Mesafe Sensörleri 61

HC-SR04 ultrasonik mesafe sensörü üzerinde 4 adet pin mevcut. Sensörü


kullanabilmek için TRIG pininden yaklaşık 10 us’lik bir pals gönderiyoruz.
HC-SR04 kendi içerisinde 40 KHz frekansında bir sinyal üreterek 8 pals verici
transdüsere gönderiyor. Bu ses dalgası 15 OC sıcaklıkta, deniz seviyesinde 340
m/s bir hızla yol alır. Herhangi bir nesneye çarparak sensöre geri yansıyor. Cismin
sensörden uzaklığı ile doğru orantılı olarak ECHO pini belirli bir süre lojik 1 değer
seviyesinde kalır ve tekrar lojik 0 değer seviyesine iner. Mesafenin ölçümü için
ECHO pinin ne kadar süre lojik 1 değer seviyesinde olduğunu buluyoruz.

Uygulamamızda HC-SR04 Ultrasonic Mesafe Sensörü ile mesafe ölçümü ger-


çekleştirerek, ölçülen mesafeyi Arduino’nun Serial Monitor ekranında göstere-
ceğiz. Bunun için kullanılan Arduino kodları aşağıda:

Arduino Kodu
/*
HC-SR04 ile Mesafe Ölçme Uygulaması
HC-SR04 Ultrasonik Mesafe Sensörü ile
Mesafe Ölçümü

Sensörün TRIG ve ECHO pin tanımlamalarına


dikkat ediyoruz. Serial Monitor ekranında
62 Bölüm 3 Mesafe Sensörleri

mesafe değerini gözlemleyebiliyoruz.


İstenildiği takdirde burada ölçülen değer
LCD vb. ekranlara da aktarılabilir.

*/

// TRIG pini tanımlıyoruz.


int trigPin=12;

// ECHO pini tanımlıyoruz.


int echoPin=11;

void setup()
{
// TRIG pini dijital çıkış olarak tanımlıyoruz.
pinMode(trigPin, OUTPUT);
// ECHO pini dijital giriş olarak tanımlıyoruz.
pinMode(echoPin, INPUT);
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
}

void loop()
{
// Sure ve Uzaklık değişkenlerini tanımlıyoruz.
int sure, uzaklik;

digitalWrite(trigPin, HIGH);
delayMicroseconds(1000);

digitalWrite(trigPin, LOW);
sure = pulseIn(echoPin, HIGH);

uzaklik = (sure/58);
Serial.print(“Uzaklik(cm)= “);
Serial.println(uzaklik);

// Her 500 ms aralıklarla mesafe değerini okuyoruz.


delay(500);
}

Arduino ve HC-SR04 bağlantıları aşağıdaki şemada yer alıyor.ç


Arduıno ve Mesafe Sensörleri 63

Uygulamayı çalıştırdığımızda görmeniz gereken Serial Monitor ekranı aşağıda


gösteriliyor. Arduino ortamındaki Serial Monitor üzerinden 500 milisaniyelik
periyotlarla alınan mesafe değerlerini görebiliyoruz.c

HC-SR04 ile C#. NET Arayüzü Üzerinden Ölçülen Mesafe Değerlerinin Gözlemlenmesi
Uygulamamızda C# .NET üzerinde tasarladığımız arayüzle belirttiğimiz port
numarasına bağlantı gerçekleştirerek mesafe sensörünün ölçtüğü değeri
gözlemleyeceğiz. Bunun için kullanacağımız C#. NET arayüzü aşağıda:
64 Bölüm 3 Mesafe Sensörleri

Tasarlanan arayüzde Bağlantı Yapılacak COM Port ve Ölçülen Mesafe(cm)


adında iki adet label nesnesi, değerler için iki adet textbox nesnesi, Bağlantıyı
Kur ve Bağlantıyı Durdur adında iki adet buton nesnesi, bir adet ProgressBar
nesnesi, bir adet SerialPort nesnesi ve bir adet Timer nesnesi kullanılıyor.
ProgressBar nesnesinin Properties penceresinden Maximum özelliğini 200
olarak değiştiriyoruz.
Arayüzü tasarladıktan sonra C#. NET kodlarını yazacağız. Bunun için kullanılan
C#. NET kodları aşağıda:

C#. NET Kodu


/*
HC-SR04 ile Mesafe Ölçme Uygulaması
HC-SR04 Ultrasonik Mesafe Sensörü ile
Mesafe Ölçümü

Sensörün TRIG ve ECHO pin tanımlamalarına


dikkat ediyoruz. Serial Monitor ekranında
mesafe değerini gözlemleyebiliyoruz.
İstenildiği takdirde burada ölçülen değer
LCD vb. ekranlara da aktarılabilir.

*/

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace WindowsFormsApplication9
{
public partial class Form1 : Form
{
// seriPort isminde bir SerialPort nesnesi oluşturuluyor
SerialPort seriPort;
public Form1()
Arduıno ve Mesafe Sensörleri 65

{
InitializeComponent();
seriPort = new SerialPort();
// seriPort nesnesinin hızı 9600 bps olarak ayarlanıyor
seriPort.BaudRate = 9600;
}

private void Form1_Load(object sender, EventArgs e)


{

// Bağlantıyı Kur butonunun kodlarını yazıyoruz


private void button1_Click(object sender, EventArgs e)
{
// timer nesnesinin çalışmasını başlatıyoruz
timer1.Start();

try
{
// seriPort nesnesinin ismini textbox ile okuyoruz
seriPort.PortName = textBox1.Text;
// seriportu açıyoruz
if (!seriPort.IsOpen)
seriPort.Open();
// “Bağlantı Kuruldu...” mesajını ekrana veriyoruz
MessageBox.Show(“Bağlantı Kuruldu...”);
}

catch
{
// “Bağlantı Kurulamadı!” mesajını ekrana veriyoruz
MessageBox.Show(“Bağlantı Kurulamadı!”);
}
}

// Bağlantıyı Durdur butonunun kodlarını yazıyoruz


private void button2_Click(object sender, EventArgs e)
{
// timer nesnesinin çalışmasını durduruyoruz
timer1.Stop();
// seriportu kapatıyoruz
seriPort.Close();
66 Bölüm 3 Mesafe Sensörleri

// Timer nesnesinin kodlarını yazıyoruz


private void timer1_Tick(object sender, EventArgs e)
{
try
{

seriPort.Write(“m”);
int veri = Convert.ToInt32(seriPort.ReadExisting());
textBox2.Text = veri.ToString();
// progressBar nesnesinin doluluk oranı ölçülen mesafe değeri
ile orantılanıyor
progressBar1.Value = Convert.ToInt32(textBox2.Text);
System.Threading.Thread.Sleep(60);

}
catch
{

}
}
}

Kodlar incelendiğinde ilk olarak Bağlantı Yapılacak COM Port label nesnesinin
karşısındaki textbox nesnesine Arduino modelimizin bilgisayara bağlandığı
COM adresini yazıyoruz. Örneğin; COM4 gibi.

Arduino modelimizin bilgisayara bağlı olduğu COM adresini Bilgisayar>Aygıt


NOT Yöneticisi>Bağlantı Noktaları (COM ve LPT) ile bulabiliyoruz.
Arduıno ve Mesafe Sensörleri 67

COM adresini yazdıktan sonra Bağlantıyı Kur butonuna tıklayarak ölçülen


mesafe bilgisini textbox üzerinden gözlemliyoruz. Eğer yanlış bir COM adresi
yazdıysak Bağlantı Kurulamadı! mesajını alırız. Ölçülen mesafenin progressBar
nesnesi üzerindeki etkisine dikkat ediyoruz.
C#. NET kodlarını yazdıktan sonra Arduino kodlarını yazacağız. C#. NET ile
tasarladığımız arayüzde mesafe değerini gözlemleyebildiğimiz gibi Arduino ile
Serial Monitor üzerinde de gözlemliyoruz. Serial Monitor üzerinden gönderilen
m karakteri sonucu ölçülen mesafeyi gözlemliyoruz. Bunun için kullanılan
Arduino kodları aşağıda:

Arduino Kodu
HC-SR04 ile Mesafe Ölçme Uygulaması
HC-SR04 Ultrasonik Mesafe Sensörü ile
Mesafe Ölçümü

Sensörün TRIG ve ECHO pin tanımlamalarına


dikkat ediyoruz. Serial Monitor ekranında
mesafe değerini gözlemleyebiliyoruz.
İstenildiği takdirde burada ölçülen değer
LCD vb. ekranlara da aktarılabilir.

*/

long sure, mesafe; // süre ve mesafe değişkenlerini tanımlıyoruz


char a;

#define echoPin 7 // Devre şemasında gösterildiği gibi echoPini tanımlıyoruz


#define trigPin 8 // Devre şemasında gösterildiği gibi trigPini tanımlıyoruz
68 Bölüm 3 Mesafe Sensörleri

void setup()
{
Serial.begin (9600); // Seri haberleşmeyi başlatıyoruz
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);

}
void loop()
{

if(Serial.available()>0) // Seri haberleşme ile herhangi bir değişken gelmiş mi?


{
a = Serial.read(); // Seri haberleşme ile gelen değeri okuyoruz

if(a == ‘m’) // Eğer gelen karakter ‘m’ karakteri ise


{

digitalWrite(trigPin, LOW);
delayMicroseconds(2);

digitalWrite(trigPin, HIGH);
delayMicroseconds(10);

digitalWrite(trigPin, LOW);
sure = pulseIn(echoPin, HIGH); // süreyi buluyoruz

mesafe = sure/58.2; // mesafeyi hesaplıyoruz


Serial.println(mesafe);

delay(200);
}
}
}

Uygulamayı gerçekleştirebilmek için önce Arduino kodlarını yazıp modelimize


NOT yüklüyoruz. Ardından C#. NET kodlarını çalıştırıyoruz.

Uygulamayı çalıştırdığımızda görmeniz gereken C#. NET arayüzü aşağıda


gösteriliyor. Arduino ortamındaki Serial Monitor üzerinden m karakterini
göndererek de mesafe değerini görebiliyoruz.
Arduıno ve Mesafe Sensörleri 69

HC-SR04 ile LCD Üzerinden Ölçülen Mesafe Değerlerinin Gözlemlenmesi


Uygulamamızda HC-SR04 ile ölçülen mesafe değerini anlık olarak 2 x 16 karakter
LCD ekranında gözlemleyeceğiz. Bunun için kullanılan Arduino kodları aşağıda:

Arduino Kodu
/*
HC-SR04 ile Mesafe Ölçme Uygulaması
HC-SR04 Ultrasonik Mesafe Sensörü ile
Mesafe Ölçümü

Sensör ile ölçülen değeri inç ve santimetre


cinsinden olmak üzere 2 x 16 karakter LCD
ekrana yazdırıyoruz.

*/

// LCD kütüphanesini ekliyoruz.


#include <LiquidCrystal.h>

// LCD bağlantılarını tanımlıyoruz.


LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// Sensörün bağlantı pinlerini tanımlıyoruz.


int pingPin = 7;
int inPin = 6;

// Mesafe değişkenini inç ve santimetre olarak tanımlıyoruz.


long duration, inches, cm;
int indec, cmdec;
int inchconv = 147;
int cmconv = 59;
String s1, s2;
70 Bölüm 3 Mesafe Sensörleri

void setup()
{
// LCD’yi başlatıyoruz.
lcd.begin(16, 2);

// Sensörün bağlantı pinlerini dijital giriş ve çıkı olarak tanımlıyoruz.


pinMode(pingPin, OUTPUT);
pinMode(inPin, INPUT);

void loop()
{

digitalWrite(pingPin, LOW);
delayMicroseconds(2);

digitalWrite(pingPin, HIGH);
delayMicroseconds(10);

digitalWrite(pingPin, LOW);

// Mesafe bilgisini okuyoruz.


duration = pulseIn(inPin, HIGH);

inches = microsecondsToInches(duration);
indec = (duration - inches * inchconv) * 10 / inchconv;
cm = microsecondsToCentimeters(duration);
cmdec = (duration - cm * cmconv) * 10 / cmconv;
s1 = String(inches) + “.” + String(indec) + “in” + “ “;
s2 = String(cm) + “.” + String(cmdec) + “cm” + “ “;

// Değeri LCD ekrana yazdırıyoruz.


lcd.setCursor(0, 0);
lcd.print(s1);
lcd.setCursor(0,1);
lcd.print(s2);

delay(100);
}

long microsecondsToInches(long microseconds)


{
return microseconds / inchconv;
}

long microsecondsToCentimeters(long microseconds)


{
return microseconds / cmconv;
}

Arduino, LCD ve HC-SR04 bağlantıları aşağıdaki şemada yer alıyor.


Arduıno ve Mesafe Sensörleri 71

Parallax Pıng ile Mesafe Ölçme Uygulaması


Parallax Ping sensörü, hareketli veya sabit cisimler arasındaki mesafeyi
ölçmemizi gerektiren uygulamalar için oldukça uygun bir seçim. Robotik
uygulamaların yanı sıra güvenlik sistemleri ve kızılötesi tanımlamalar içinde
kullanılan bir sensördür. Sensörün dar bir ses konisi olduğu için, robotik
kullanımlara uygundur. Durum LED’i ve giriş/çıkış pininin ekonomik kullanımı
ürünü daha verimli ve etkin bir hale getiriyor.
Parallax Ping sensörü mesafeyi ultrasonik mesafe ölçme mantığıyla ölçüyor.
Cismin uzaklığına göre sensörden çıkan dalga boyutu da değişiyor. Tek bir giriş
/ çıkış pini Ping sensörünü tetikliyor ve hedef cisimden dönen dalgayı algılıyor.
Kart üzerinde bulunan 3 adet pin ile Ping sensörünü lehimlemeden devre
tahtası üzerinde dilediğiniz gibi kullanabilirsiniz. Sensör 2 cm’den 3 metreye
kadar ölçüm aralığına sahiptir.
72 Bölüm 3 Mesafe Sensörleri

Parallax Ping ile ilgili ayrıntılı bilgileri ve veri dökümanlarını(datasheet) aşağıdaki


adreste bulabilirsiniz:
http://che126.che.caltech.edu/28015-PING-Sensor-Product-Guide-v2.0.pdf

Sensör ile ilgili teknik bilgiler aşağıda yer almaktadır:


» Algılama Mesafesi: 2 cm ile 3 metre
» Çalışma Gerilimi: 5 V DC
» Çektiği Akım: 20 mA
» İletişim: Pozitif TTL Sinyali
» Bağlantı: 3 adet pin erkek header
» Ölçüler: 22 x 46 x 16 mm
» Çalışma Sıcaklığı: 0 – 70 OC
Parallax Ping sensörünün Arduino ile bağlantısını içeren devre şeması aşağıda
yer almaktadır:
Arduıno ve Mesafe Sensörleri 73

Uygulamamızda Parallax PING Ultrasonic mesafe sensörü ile mesafe ölçümü


gerçekleştirerek, ölçülen mesafeyi Arduino’nun Serial Monitor ekranında
göstereceğiz. Bunun için kullanılan Arduino kodları aşağıda:

Arduino Kodu
/*
Parallax PING ile Mesafe Ölçme Uygulaması
Parallax PING Ultrasonik Mesafe Sensörü ile
Mesafe Ölçümü

Sensörden gönderilen PWM dalga ile sensör


tetiklenmekte ve daha sonra gelecek olan zaman
palsini beklemek üzere olan 7 nolu pin dijital
giriş haline getiriliyor.

*/

// Sensör pinini tanımlıyoruz.


const int pingPin = 7;

void setup()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
}

void loop()
{
// Değişkenlerimizi tanımlıyoruz.
long duration, inches, cm;

pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);

digitalWrite(pingPin, HIGH);
delayMicroseconds(5);

digitalWrite(pingPin, LOW);

// Sinyali dinliyoruz.
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, LOW);

// zamanı mesafeye çeviriyoruz.


inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
74 Bölüm 3 Mesafe Sensörleri

Serial.print(inches);
Serial.print(“in, “);
Serial.print(cm);
Serial.print(“cm”);
Serial.println();
delay(100);
}

long microsecondsToInches (long microseconds)


{
return microseconds / 74 / 2;
}

long microsecondsToCentimeters (long microseconds)


{
return microseconds / 29 / 2;
}

Arduino ve Parallax Ping bağlantıları aşağıdaki şemada yer alıyor.

Sharp GP2Y0A02YK0F ile Mesafe Ölçme Uygulaması


Sharp GP2Y0A02YK0F kızılötesi sensör, 20 ile 150 cm arası engelleri
algılayabilen, kullanımı kolay, analog bir sensördür. Bu kızılötesi mesafe sensörü
yüksek mesafe ölçümleri gerçekleştirebiliyor. Sharp serisi sensörlerin farklı
modelleri mevcut. Buradaki sensör okuma yapısını diğer modellerine de ufak
değişikliklerle aktarabilirsiniz.
Arduıno ve Mesafe Sensörleri 75

Sharp mesafe sensörleri bir ölçüm veya algılamanın yapıldığı bir çok projede
sıklıkla kullanılan sensörlerdir. Sharp GP2Y0A02YK0F ise uzun mesafede benzer
sensörlere göre çok daha iyi bir performans sağlıyor.
Sharp GP2Y0A02YK0F ile ilgili ayrıntılı bilgileri ve veri dökümanlarını(datasheet)
aşağıdaki adreste bulabilirsiniz:
https://www.sparkfun.com/datasheets/Sensors/Infrared/gp2y0a02yk_e.pdf

Kullanımı oldukça kolay olan bu sensörü mikrodenetleyicinin analog giriş


pinlerine bağlayarak okuma gerçekleştirebilir veya bir karşılaştırıcı kullanarak
mesafe tayinini gerçekleştirebiliriz. Sensörün mesafeye göre verdiği analog
voltaj değerleri aşağıda gösterilmiştir.

Sensör bacak bağlantıları aşağıdaki resimdeki gibi arkadan bakıldığında sol


baştan itibaren 5V, GND (Toprak) ve Veri Çıkışı bacağıdır.
76 Bölüm 3 Mesafe Sensörleri

Sensörün Özellikleri;
» Çalışma Voltajı: 4.5 – 5.5 V DC
» Ortalama Akım Tüketimi: 33 mA
» Mesafe Ölçme Aralığı: 20 cm ile 150 cm arası
» Çıkış Tipi: Analog Voltaj
» Çıkış Voltaj Diferansiyel Mesafe Aşım Aralığı: 2.0 V
» Tepki Süresi: 38 ± 10 ms
» Boyutları: 29.5 x 13 x 21.5 mm
» Ağırlığı: 4.8 g

VCC ile GND arasına 10 uF veya daha yüksek bir kondansatör bağladığımızda
NOT giriş voltajındaki parazitleri önleyerek, sensörün daha sağlıklı çalışmasına
yardımcı oluyoruz.

Uygulamamızda Sharp GP2Y0A02YK0F ultrasonic mesafe sensörü ile mesafe


ölçümü gerçekleştirerek, ölçülen mesafeyi Arduino’nun Serial Monitor ekranın-
da göstereceğiz. Bunun için kullanılan Arduino kodları aşağıda:

Arduino Kodu
/*
Sharp GP2Y0A02YK0F ile Mesafe Ölçme Uygulaması
Sharp GP2Y0A02YK0F Kızılötesi Mesafe Sensörü ile
Mesafe Ölçümü

Sensör 20 cm ile 150 cm arasında ölçüm gerçekleştirebiliyor.


VCC ile GND arasına 10 uF veya daha yüksek bir kondansatör
bağladığımızda giriş voltajındaki parazitleri önleyerek,
sensörün daha sağlıklı çalışmasına yardımcı oluyoruz.
*/

// Sensörün bağlı olduğu analog pini tanımlıyoruz.


int IRpin = 1;
Arduıno ve Mesafe Sensörleri 77

void setup()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
}

void loop()
{
// Arduino Uno üzerinde 10 bit ADC olduğundan (5 V / 1024) = 0048828125
sonucunu buluyoruz.
float volts = analogRead(IRpin)*0.0048828125;
float distance = 65*pow(volts, -1.10);

Serial.print(“Mesafe: “);
Serial.println(distance);
delay(500);
}

Arduino ve Sharp GP2Y0A02YK0F bağlantıları aşağıdaki şemada yer alıyor.


78 Bölüm 3 Mesafe Sensörleri

VCNL4000 ile Mesafe Ölçme Uygulaması


VCNL4000 sensörü ile herhangi bir nesneye fiziksel olarak ne kadar yakın
olduğunuzu anlayabilmek oldukça kolay. Sensör içerisinde bulunan ışık
sensörü ve IR (kızılötesi) yakınlık sensörü ile kolayca mesa ölçme uygulamaları
gerçekleştirebiliyoruz.
VCNL4000 sensörü yaklaşık 20 cm aralığı kızılötesi kullanarak bir nesnenin
yakınlığını tespit edebiliyor. Yakınlık verilerinin yanı sıra ortamın ışık seviyesi
verilerini de elde edebiliyor. Sensör üzerindeki pinler sırasıyla IR+, SDA, SCL,
GND ve 3.3 V pinleridir. Sensörü enerjilendirmek için Arduino modelimizin 3.3
V pinini kullanıyoruz ve IR+ pinini enerjilendirmek için ise Arduino modelimizin
5 V pinini kullanıyoruz.

VCNL4000 ile ilgili ayrıntılı bilgileri ve veri dökümanlarını(datasheet) aşağıdaki


adreste bulabilirsiniz:
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/BreakoutBoards/vcnl4000.pdf
Aynı zamanda geliştireceğiniz uygulamalardan önce aşağıdaki adreste bulunan
uygulama notlarını incelemenizi tavsiye ediyorum:
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/BreakoutBoards/vcnl4000App.pdf

Uygulamamızda VCNL4000 mesafe sensörü ile mesafe ölçümü gerçekleştirerek,


ölçülen mesafeyi Arduino’nun Serial Monitor ekranında göstereceğiz. Bunun
için kullanılan Arduino kodları aşağıda:

Arduino Kodu
/*
VCNL4000 ile Mesafe Ölçme Uygulaması
VCNL4000 Mesafe Sensörü ile
Mesafe Ölçümü
Arduıno ve Mesafe Sensörleri 79

Sensörü enerjilendirmek için Arduino


modelimizin 3.3 V pinini kullanıyoruz ve
IR+ pinini enerjilendirmek için ise
Arduino modelimizin 5 V pinini kullanıyoruz.
Haberleşme protokolü olarak I2C haberleşme
protokolünü kullanıyoruz.

*/

// Wire kütüphanesini programımıza dahil ediyoruz.


#include <Wire.h>

// I2C haberleşme adresimizi tanımlıyoruz.


#define VCNL4000_ADDRESS 0x13

void setup()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
Wire.begin();
initVCNL4000();
}

void loop()
{

unsigned int ortamDegeri = readAmbient();


unsigned int yakinlikDegeri = readProximity();

Serial.print(ortamDegeri);
Serial.print(“ | “);
Serial.println(yakinlikDegeri);

// Her 100 milisaniye aralıklarla ölçüm gerçekleştiriyoruz.


delay(100);
}

void initVCNL4000()
{
byte temp = readVCNLByte(0x81);

if (temp != 0x11){
Serial.print(“Sensor baslatilamadi...”);
Serial.println(temp, HEX);
}else{
80 Bölüm 3 Mesafe Sensörleri

Serial.println(“VNCL4000 calisiyor...”);
}

// Işık ölçümü için gerekli ön ayarlamaları yapıyoruz.


writeVCNLByte(0x84, 0x0F);
// IR akımının 10 mA’lik adımlara sahip olmasını sağlıyoruz.
writeVCNLByte(0x83, 15);
// IR test sinyalinin frekansı
writeVCNLByte(0x89, 2);
writeVCNLByte(0x8A, 0x81);
}

unsigned int readProximity()


{
// readProximity() fonksiyonu VCNL4000 kaydedicilerinden mesafe bilgisi
için aldığı 16 bitlik değeri dönderir
byte temp = readVCNLByte(0x80);
writeVCNLByte(0x80, temp | 0x08);

// Mesafe bitlerinin hazır olması için bir süre bekliyoruz


while(!(readVCNLByte(0x80)&0x20));
unsigned int data = readVCNLByte(0x87) << 8;
data |= readVCNLByte(0x88);

return data;
}

unsigned int readAmbient(){


// readAmbient() fonksiyonu VCNL4000 kaydedicilerinden ışık bilgisi için
aldığı 16 bitlik değeri dönderir
byte temp = readVCNLByte(0x80);
writeVCNLByte(0x80, temp | 0x10);

// Bitlerin hazır olması için bir süre bekliyoruz


while(!(readVCNLByte(0x80)&0x40));
unsigned int data = readVCNLByte(0x85) << 8;
data |= readVCNLByte(0x86);

return data;
}

void writeVCNLByte(byte address, byte data){

Wire.beginTransmission(VCNL4000_ADDRESS);
Neler Öğrendik? 81

Wire.write(address);
Wire.write(data);
Wire.endTransmission();
}

byte readVCNLByte(byte address){

Wire.beginTransmission(VCNL4000_ADDRESS);
Wire.write(address);
Wire.endTransmission();
Wire.requestFrom(VCNL4000_ADDRESS, 1);
while(!Wire.available());
byte data = Wire.read();

return data;
}

Arduino ve VCNL4000 bağlantıları aşağıdaki şemada yer alıyor.

Neler Öğrendik?
Bu bölümde, farklı özelliklere sahip mesafe sensörleri ile uygulamalar
geliştirme konusuna değindik. Ölçülen bilgiler aynı çevre şartlarının bilgileri
olsa da farklı sensörlerle aynı uygulamaları gerçekleştirmenin avantajlarına
ve dezavantajlarına değindik. Elinizde bulunan mesafe veya benzeri mantıkta
çalışan sensörlerinin neredeyse tamamının kullanımını inceledik. Bu bölümde
öğrendikleriniz ile içerisinde mesafe sensörleri barındıran oldukça farklı ve
önemli mühendislik uygulamaları gerçekleştirebilirsiniz.
4
Duman ve Gaz
Sensörleri

Bu Bölümde
Giriş 84 Günümüzde bazı özel mühendislik uygulamalarında
Arduino ve Duman & Gaz Sensörleri 85 ve yangın algılama, sigara dumanı algılama gibi bazı
Neler Öğrendik? 102 uygulamalarda duman ve gaz sensörleri kullanılıyor.
Algılanacak duman veya gaz çeşidine göre farklı
sensörler kullanılıyor. Piyasada ise bu ihtiyacı
karşılamaya yönelik bir çok duman ve gaz sensörü
mevcut. Biz de algılayacağımız duman veya gazın
çeşidine göre uygun sensör kullanacağız.
Bu bölümde, en çok kullanılan duman ve gaz
sensörleri ile Arduino uygulamaları gerçekleştirerek
hangi sensörün uygulamamız için uygun olduğuna
karar vereceğiz.
84 Bölüm 4 Duman ve Gaz Sensörleri

Giriş
Duman ve gaz sensörleri yangın algılama, sigara dumanı algılama, metan gazı
algılama gibi uygulamalarda kullanılan sensör çeşidi. Piyasada bir çok farklı
çeşitte sensör bulunuyor. Seçim yaparken de uygulamamız için gereken en
uygun sensörü seçmemizin bazı ipuçları var.
Öncelikle gerçekleştireceğimiz uygulamanın koşullarını belirliyoruz. Ölçüm
yapacağımız gaz çeşidine uygun bir sensör seçmek gerçekleştireceğimiz ilk
adım olacak. Örneğin; metan gazı algılamak istiyorsak uygulamamıza uygun
metan gazı sensörü veya LPG & İzobütan & Propan gazı algılamak istiyorsak
uygulamamıza uygun sensörü seçiyoruz.
İlk bölümde anlattığımız gibi sensörler analog veya sayısal çıkış verebiliyor. Bu
duruma dikkat etmeliyiz. Sensörlerin istenilen hassaslıkta ölçüm yapması da
çok önemli. Hassasiyeti düşük olan sensörler ile ölçüm yaptığımızda istediğimiz
değerden uzak bir değer elde edebiliriz. Bunun aksine yüksek hassasiyetli
sensörler ile çalışmak her zaman daha avantajlı bir durum.

Sensör seçerken istediğimiz uygulamanın şartlarının sağlanıp sağlanmadığını


öğrenebilmek için kesinlikle sensör veri sayfalarına (datasheet)
NOT bakmalıyız. Ayrıca istediğimiz gaz çeşidinin ölçümünü gerçekleştirip
gerçekleştiremediğine dikkat etmeliyiz.

Sensörler için önemli bir başka konu ise çalışma gerilimidir. Sensörün hangi
gerilim türünde ve gerilim aralıklarında çalışacağı önemli bir husus. Arduino ile
çalışma gerilimi uygun olan sensörler seçmeliyiz.
Piyasada bir çok duman ve gaz sensörü bulunuyor. Bu bölümde
Arduino ile gaz ölçümünü gerçekleştireceğiz. Bu bilgiler ile birlikte hem
uygulamamızdaki donanımları kontrol edebileceğiz hem de verileri anlık olarak
gözlemleyebileceğiz. Böylelikle, Arduino ile kullanılan duman ve gaz sensörleri
ile oldukça farklı projeler yapma olanağına kavuşacağız.
Arduıno ve Duman & Gaz Sensörleri 85

Arduıno ve Duman & Gaz Sensörleri


Buraya kadar duman ve gaz sensörleri ile temel olarak tanışmış olduk. Artık
Arduino ile beraber projeler yapmaya hazırız. İlk olarak kolay bir örnek üzerinden
Arduino ile Gaz Sensörleri’nin kullanımını görelim. Bu örnekte MQ-4 metan &
CNG gaz sensörü ile gaz ölçümünü gözlemleyeceğiz. Tabi buradaki analog veri
okuma mekanizması farklı sensörlerden veri almak için de rahatlıkla kullanılabilir.

MQ-4 ile Metan ve CNG Gazı Ölçme Uygulaması


MQ-4 metan gazı sensörü, 300 ppm ve 10000 ppm arasında gaz kaçağı tespiti
için uygun bir dizi konsantrasyonlarda metan (CNG) doğalgaz varlığını algılıyor.
Uygulamalarını gerçekleştireceğimiz diğer MQ sensörleri gibi bu sensör çeşidi
de çıkış olarak gazın yoğunluğuna göre analog voltaj çıkışı veriyor. 300 ppm ve
10000 ppm aralığında algılama yapabilmek gaz kaçağı tespiti için gayet uygun.
(PPM Nedir?): PPM (Parts Per Million) milyonda bir birime verilen isimdir. Herhangi
bir karışımda toplam madde miktarının milyonda 1 birimlik maddesine 1 ppm
deniyor. Derişim birimi olarak kullanılıyor. Her üç harfi de küçük olarak PPM
şeklinde yazılıyor. Herhangi bir şeyin milyonda birini de ifade edebiliyor. Çok düşük
değerleri ifade etmek için kullanılıyor. Örneğin; 5000 gr. etanol içinde 5 mg metanol
varsa metanol 1 ppm değerinde etanolün içinde bulunuyor demektir.

PP Birimleri
Kısaltma İngilizce Açılımı Türkçe Açılımı
pph parts per hundred yüzde bir
ppt parts per thousand binde bir (mili)
ppm parts per million milyonda bir (mikro)
ppb parts per billion milyarda bir (nano)
ppt parts per trillion trilyonda bir (piko)
ppq parts per quadrillion katrilyonda bir (femto)

MQ-4 metan sensörü, 5V çalışma voltajı ile çalışabiliyor ve 150 mA akım çeki-
yor. -10 0C ile 50 0C arasında çalışma sıcaklığında çalışabiliyor.
86 Bölüm 4 Duman ve Gaz Sensörleri

MQ-4 ile ilgili ayrıntılı bilgileri ve veri dökümanlarını (datasheet) aşağıdaki


adreste bulabilirsiniz:
https://www.pololu.com/file/0J311/MQ4.pdf
H pinlerini 5V ile besleyerek sensörün yeterince ısınmasını ve böylece tam
olarak doğru ölçümlerle çalışmasını sağlayabiliriz. A veya B pinine 5V gerilim
uygulamak sensörün diğer pinleri üzerinden analog voltaj vermesine sebep
olur. Sensörün hassasiyeti, toprak ile sensörün çıkış pini arasına bağlayacağımız
direnç değeri ile orantılı olarak değiştirebiliyoruz. Bu direnç değeri yapacağımız
uygulamaya göre değişkenlik gösterebiliyor. Bu konuyla ilgili gerekli
hesaplamaları veri dökümanları (datasheet) üzerinden ulaşabiliyoruz. Örnek bir
başlangıç değeri olarak 10 kΩ bir direnç kullanabiliriz.
Aşağıda sensörün hassasiyet karakteristiği gösterilmektedir:

Sensörün Hassasiyet Karakteristiği

Aşağıda sıcaklık ve nemin sensörün çalışmasına etkisi gösterilmektedir:

Sıcaklık ve Nemin Sensörün Çalışmasına Etkisi


Arduıno ve Duman & Gaz Sensörleri 87

Aşağıda MQ-4 metan gazı sensörünün pin dağılımı gösterilmektedir.

Uygulamamızda MQ-4 metan gazı sensörü ile metan gazı ölçümü gerçekleşti-
rerek, ölçülen değeri Arduino’nun Serial Monitor ekranında göstereceğiz. Bu-
nun için kullanılan Arduino kodları aşağıda:

Arduino Kodu
/*
MQ-4 ile Metan ve CNG Gazı Ölçme Uygulaması
MQ-4 Metan & CNG Gazı Sensörü ile
Metan ve CNG Gazı Ölçümü

Sensörün hassasiyeti, toprak ile sensörün


çıkış pini arasına bağlayacağımız direnç
değeri ile orantılı olarak değiştirebiliyoruz.
Bu direnç değeri yapacağımız uygulamaya göre
değişkenlik gösterebiliyor. Bu konuyla ilgili
gerekli hesaplamaları veri dökümanları (datasheet)
üzerinden ulaşabiliyoruz.

Örnek bir başlangıç değeri olarak 10 kΩ bir direnç


kullanabiliriz.

*/

// Sensör Değeri isminde bir değişken tanımlıyoruz.


int sensorDegeri;

void setup()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
}

void loop()
{
88 Bölüm 4 Duman ve Gaz Sensörleri

// Analog 0 pininden okuma gerçekleştiriyoruz.


sensorDegeri = analogRead(0);
// Serial Monitor ekranına analog pinden okuduğumuz değeri yazıyoruz.
Serial.println(sensorDegeri, DEC);
// 100 ms aralıklarla ölçüm gerçekleştiriyoruz.
delay(100);
}

Arduino ve MQ-4 bağlantıları aşağıdaki şemada yer alıyor.

Devre Şeması

Uygulamayı çalıştırdığımızda görmeniz gereken Serial Monitor ekranı aşağıda


gösteriliyor. Arduino ortamındaki Serial Monitor üzerinden 100 milisaniyelik
periyotlarla alınan metan gazı değerlerini görebiliyoruz.

MQ-6 ile LPG/İzobütan/Propan Gazı Ölçme Uygulaması


MQ-6 LPG gazı sensörü, 300 ppm ve 10000 ppm arasında gaz kaçağı tespiti
için uygun bir dizi konsantrasyonlarda propan varlığını algılıyor. Uygulamalarını
gerçekleştireceğimiz diğer MQ sensörleri gibi bu sensör çeşidi de çıkış olarak
gazın yoğunluğuna göre analog voltaj çıkışı veriyor. 300 ppm ve 10000 ppm
aralığında algılama yapabilmek gaz kaçağı tespiti için gayet uygun.
MQ-6 LPG/İzobütan/Propan sensörü, 5 V çalışma voltajı ile çalışabiliyor ve 150
mA akım çekiyor. -10 0C ile 50 0C arasında çalışma sıcaklığında çalışabiliyor.
Arduıno ve Duman & Gaz Sensörleri 89

MQ-6 LPG/İzobütan/Propan Gaz Sensörü

MQ-6 ile ilgili ayrıntılı bilgileri ve veri dökümanlarını (datasheet) aşağıdaki


adreste bulabilirsiniz:
https://www.pololu.com/file/0J312/MQ6.pdf
H pinlerini 5V ile besleyerek sensörün yeterince ısınmasını ve böylece tam
olarak doğru ölçümlerle çalışmasını sağlayabiliriz. A veya B pinine 5V gerilim
uygulamak sensörün diğer pinleri üzerinden analog voltaj vermesine sebep
olur. Sensörün hassasiyeti, toprak ile sensörün çıkış pini arasına bağlayacağımız
direnç değeri ile orantılı olarak değiştirebiliyoruz. Bu direnç değeri yapacağımız
uygulamaya göre değişkenlik gösterebiliyor. Bu konuyla ilgili gerekli
hesaplamaları veri dökümanları (datasheet) üzerinden ulaşabiliyoruz. Örnek bir
başlangıç değeri olarak 10 kΩ bir direnç kullanabiliriz.
Aşağıda sensörün hassasiyet karakteristiği gösterilmektedir:

Sensörün Hassasiyet Karakteristiği


90 Bölüm 4 Duman ve Gaz Sensörleri

Aşağıda sıcaklık ve nemin sensörün çalışmasına etkisi gösterilmektedir:

Sıcaklık ve Nemin Sensörün Çalışmasına Etkisi

Aşağıda MQ-6 LPG/İzobütan/Propan gazı sensörünün pin dağılımı gösterilmektedir.

Uygulamamızda MQ-6 LPG/İzobütan/Propan gazı sensörü ile propan gazı


ölçümü gerçekleştirerek, ölçülen değeri Arduino’nun Serial Monitor ekranında
göstereceğiz. Bu uygulamamız bir önceki uygulama olan MQ-4 Metan gazı
sensörü ile birebir benzerlik gösteriyor. Sadece sensör farklılık göstermekte.
Bunun için kullanılan Arduino kodları aşağıda:

Arduino Kodu
/*
MQ-6 ile LPG/İzobütan/Propan Gazı Ölçme Uygulaması
MQ-6 LPG/İzobütan/Propan Gazı Sensörü ile
Propan Gazı Ölçümü

Sensörün hassasiyeti, toprak ile sensörün


çıkış pini arasına bağlayacağımız direnç
değeri ile orantılı olarak değiştirebiliyoruz.
Bu direnç değeri yapacağımız uygulamaya göre
Arduıno ve Duman & Gaz Sensörleri 91

değişkenlik gösterebiliyor. Bu konuyla ilgili


gerekli hesaplamaları veri dökümanları (datasheet)
üzerinden ulaşabiliyoruz.

Örnek bir başlangıç değeri olarak 10 kΩ bir direnç


kullanabiliriz.

*/

// Sensör Değeri isminde bir değişken tanımlıyoruz.


int sensorDegeri;

void setup()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
}

void loop()
{
// Analog 0 pininden okuma gerçekleştiriyoruz.
sensorDegeri = analogRead(0);
// Serial Monitor ekranına analog pinden okuduğumuz değeri yazıyoruz.
Serial.println(sensorDegeri, DEC);
// 100 ms aralıklarla ölçüm gerçekleştiriyoruz.
delay(100);
}

Arduino ve MQ-6 bağlantıları aşağıdaki şemada yer alıyor.

Devre Şeması

Uygulamayı çalıştırdığımızda görmeniz gereken Serial Monitor ekranı aşağıda


gösteriliyor. Arduino ortamındaki Serial Monitor üzerinden 100 milisaniyelik
periyotlarla alınan propan gazı değerlerini görebiliyoruz.
92 Bölüm 4 Duman ve Gaz Sensörleri

Oksijen Gazı Ölçme Uygulaması


Hava içindeki oksjien (02) konsantrasyonunu ölçmek için kullanabileceğimiz
bu sensör, konsantrasyon oranına göre orantılı bir çıkış gerilimi veriyor.
Yüksek doğruluğa sahip ve oldukça profesyonel olan ürünü hava temizlik
araştırmalarında ve ortam gaz konsantrasyonu çalışmalarında kullanabiliriz.
Analog çıkış verdiği için Arduino ile beraber oldukça kolay şekilde kullanılabiliyor.
Sensörün, yüksek tutarlılık, yüksek hassasiyet, geniş doğrusallık aralığı, güçlü
anti-parazit özelliği ve üstün güvenilirlik özellikleri bulunuyor.

Oksijen Sensörü

Oksijen Sensörü şematiğini aşağıdaki adreste bulabilirsiniz:


http://www.seeedstudio.com/wiki/images/6/60/Grove_-_Gas_Sensor%28O2%29_v1.0.pdf

Sensörün önemli özelliklerini aşağıdaki tabloda bulabilirsiniz:

Ölçüm Aralığı 0 – 30 %vol


Duyarlılık 0.10~0.25 mA(havada)
Sıcaklık Aralığı ~20 OC~50 OC
Basınç Aralığı QNE±10% ~
Tepki Süresi ≤ 15 saniye
Nem Aralığı 0~99~RH
Kararlılık <2%
Arduıno ve Duman & Gaz Sensörleri 93

Oksijen sensörü, 0 – 620 arasında analog değer çıkışı veren bir sensördür.
Arduino ile okunan bu değer gerilim değerine dönüştürülüyor. Biz de bu
gerilim değerini okuyarak yorumluyoruz.
Uygulamamızda oksijen gazı sensörü ile oksijen gazı ölçümü gerçekleştirerek,
ölçülen değeri Arduino’nun Serial Monitor ekranında göstereceğiz.
Uygulamamızda ayrıca buzzer da kullanacağız. Oksijen konsantrasyonu
belirttiğimiz değerin altında ise buzzer ötmesini gerçekleştireceğiz.
Uygulamamızda kullanacağımız oksijen sensörünü Arduino’nun analog 0 pini
ile ilişkilendiriyoruz. Buzzer’ı ise dijital 3 pini ile ilişkilendiriyoruz. Bunun için
kullanılan Arduino kodları aşağıda:

Arduino Kodu
/*
Oksijen Gazı Ölçme Uygulaması

Uygulamamızda kullanacağımız oksijen


sensörünü Arduino’nun analog 0 pini ile
ilişkilendiriyoruz. Buzzer’ı ise dijital 3
pini ile ilişkilendiriyoruz.

*/

// math.h kütüphanesini ekliyoruz.


#include <math.h>

// Buzzer pinini dijital 3 nolu pine tanımlıyoruz.


const int buzzerPin=3;
// Eşik geriliminini değerini tanımlıyoruz.
float esikGerilimi= 1.84;

void setup()
94 Bölüm 4 Duman ve Gaz Sensörleri

{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
pinMode(buzzerPin,OUTPUT);
}

void loop()
{

// Sensör Değerini ve Sensör Gerilimi değişkenlerini tanımlıyoruz.


float sensorDegeri;
float sensorGerilimi;

// Sensör değerini analog 0 giriş pininden okuyoruz ve ADC ile dijital değere dönüştürüyoruz.
sensorDegeri = analogRead(A0);
sensorGerilimi =(sensorDegeri/1024)*5.0;

// Eğer sensör gerilimi eşik geriliminden düşükse...


if(sensorGerilimi<esikGerilimi)
{
// Buzzer ötsün.
digitalWrite(buzzerPin,HIGH);
}

// Değilse...
else
{
// Buzzer ötmesin.
digitalWrite(buzzerPin,LOW);

// Sensör gerilimini Serial Monitor ekranına yazdırıyoruz.


sensorGerilimi = sensorGerilimi/201*1000;
Serial.println(“cikis gerilimi:”);

Serial.print(sensorGerilimi);
Serial.println(“ mV”);

// 1 saniye aralıklarla ölçüm gerçekleştiriyoruz.


delay(1000);
}
Arduıno ve Duman & Gaz Sensörleri 95

Uygulamayı çalıştırdığımızda görmeniz gereken Serial Monitor ekranı aşağıda


gösteriliyor. Arduino ortamındaki Serial Monitor üzerinden 1000 milisaniyelik
periyotlarla çıkış gerilimi değerlerini görebiliyoruz.

Çıkış gerilim değerini okuyarak, lineer karakteristik grafik üzerinden oksijen


konsantrasyonunu belirleyebiliyoruz. Örneğin; çıkış gerilim değeri 9.01 mV ise
oksijen konsantrasyonu %17 değerindedir.

MQ-3 ile Alkol Gazı Ölçme Uygulaması


MQ-3 alkol gazı sensörü, 0.04 mg/L ve 4 mg/L arasında alkolmetre yapmak için
uygun bir dizi konsantrasyonlarda alkol gazının varlığını algılıyor. Uygulamalarını
gerçekleştireceğimiz diğer MQ sensörleri gibi bu sensör çeşidi de çıkış olarak
gazın yoğunluğuna göre analog voltaj çıkışı veriyor. Alkolmetrelerin kullanıldığı
gaz aralığını okuyabilecek nitelikte bir sensördür.
MQ-3 Alkol gazı sensörü, 5 V çalışma voltajı ile çalışabiliyor ve 150 mA akım
çekiyor. -10 0C ile 50 0C arasında çalışma sıcaklığında çalışabiliyor.
96 Bölüm 4 Duman ve Gaz Sensörleri

MQ-3 Alkol Gazı Sensörü

MQ-3 ile ilgili ayrıntılı bilgileri ve veri dökümanlarını (datasheet) aşağıdaki


adreste bulabilirsiniz:
https://www.pololu.com/file/0J310/MQ3.pdf
H pinlerini 5V ile besleyerek sensörün yeterince ısınmasını ve böylece tam
olarak doğru ölçümlerle çalışmasını sağlayabiliriz. A veya B pinine 5V gerilim
uygulamak sensörün diğer pinleri üzerinden analog voltaj vermesine sebep
olur. Sensörün hassasiyeti, toprak ile sensörün çıkış pini arasına bağlayacağımız
direnç değeri ile orantılı olarak değiştirebiliyoruz. Bu direnç değeri yapacağımız
uygulamaya göre değişkenlik gösterebiliyor. Bu konuyla ilgili gerekli
hesaplamaları veri dökümanları (datasheet) üzerinden ulaşabiliyoruz. Örnek bir
başlangıç değeri olarak 10 kΩ bir direnç kullanabiliriz.
Aşağıda sensörün hassasiyet karakteristiği gösterilmektedir:

Sensörün Hassasiyet Karakteristiği


Arduıno ve Duman & Gaz Sensörleri 97

Aşağıda sıcaklık ve nemin sensörün çalışmasına etkisi gösterilmektedir:

Sıcaklık ve Nemin Sensörün Çalışmasına Etkisi

Aşağıda MQ-3 Alkol gazı sensörünün pin dağılımı gösterilmektedir.

Uygulamamızda MQ-3 Alkol gazı sensörü ile propan gazı ölçümü


gerçekleştirerek, ölçülen değeri Arduino’nun Serial Monitor ekranında
göstereceğiz. Bu uygulamamız önceki uygulama olan MQ-6 LPG/İzobütan/
Propan gazı sensörü ile birebir benzerlik gösteriyor. Sadece sensör farklılık
göstermekte. Bunun için kullanılan Arduino kodları aşağıda:

Arduino Kodu
/*
MQ-3 ile Alkol Gazı Ölçme Uygulaması

Sensörün hassasiyeti, toprak ile sensörün


çıkış pini arasına bağlayacağımız direnç
değeri ile orantılı olarak değiştirebiliyoruz.
Bu direnç değeri yapacağımız uygulamaya göre
98 Bölüm 4 Duman ve Gaz Sensörleri

değişkenlik gösterebiliyor. Bu konuyla ilgili


gerekli hesaplamaları veri dökümanları (datasheet)
üzerinden ulaşabiliyoruz.

Örnek bir başlangıç değeri olarak 10 kΩ bir direnç


kullanabiliriz.
*/

// Sensör Değeri isminde bir değişken tanımlıyoruz.


int sensorDegeri;

void setup()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
}

void loop()
{
// Analog 0 pininden okuma gerçekleştiriyoruz.
sensorDegeri = analogRead(0);
// Serial Monitor ekranına analog pinden okuduğumuz değeri yazıyoruz.
Serial.println(sensorDegeri, DEC);
// 100 ms aralıklarla ölçüm gerçekleştiriyoruz.
delay(100);
}

Arduino ve MQ-3 bağlantıları aşağıdaki şemada yer alıyor.

Devre Şeması

Uygulamayı çalıştırdığımızda görmeniz gereken Serial Monitor ekranı aşağıda


gösteriliyor. Arduino ortamındaki Serial Monitor üzerinden 100 milisaniyelik
periyotlarla alınan alkol gazı değerlerini görebiliyoruz.
Arduıno ve Duman & Gaz Sensörleri 99

MQ-7 ile Karbonmonoksit Gazı Ölçme Uygulaması


MQ-7 karbonmonoksit gazı sensörü, 10 ppm ve 10000 ppm arasında konsantras-
yonlarda karbonmonoksit algılıyor. Uygulamalarını gerçekleştirdiğimiz diğer
MQ sensörleri gibi bu sensör çeşidi de çıkış olarak gazın yoğunluğuna göre
analog voltaj çıkışı veriyor. 300 ppm ve 10000 ppm aralığında algılama yapabilmek
gaz kaçağı tespiti için gayet uygun.
MQ-7 LPG/İzobütan/Propan sensörü, 5V çalışma voltajı ile çalışabiliyor ve 150
mA akım çekiyor. -10 0C ile 50 0C arasında çalışma sıcaklığında çalışabiliyor.

MQ-7 Karbonmonoksit Gazı Sensörü

MQ-7 ile ilgili ayrıntılı bilgileri ve veri dökümanlarını (datasheet) aşağıdaki


adreste bulabilirsiniz:
https://www.pololu.com/file/0J313/MQ7.pdf
H pinlerini 5V ile besleyerek sensörün yeterince ısınmasını ve böylece tam
olarak doğru ölçümlerle çalışmasını sağlayabiliriz. A veya B pinine 5V gerilim
uygulamak sensörün diğer pinleri üzerinden analog voltaj vermesine sebep
olur. Sensörün hassasiyeti, toprak ile sensörün çıkış pini arasına bağlayacağımız
direnç değeri ile orantılı olarak değiştirebiliyoruz. Bu direnç değeri yapacağımız
uygulamaya göre değişkenlik gösterebiliyor. Bu konuyla ilgili gerekli
hesaplamaları veri dökümanları (datasheet) üzerinden ulaşabiliyoruz. Örnek bir
başlangıç değeri olarak 10 kΩ bir direnç kullanabiliriz.
Aşağıda sensörün hassasiyet karakteristiği gösterilmektedir:
100 Bölüm 4 Duman ve Gaz Sensörleri

Sensörün Hassasiyet Karakteristiği

Aşağıda sıcaklık ve nemin sensörün çalışmasına etkisi gösterilmektedir:

Sıcaklık ve Nemin Sensörün Çalışmasına Etkisi

Aşağıda MQ-7 karbonmonoksit gazı sensörünün pin dağılımı gösterilmektedir.


Arduıno ve Duman & Gaz Sensörleri 101

Uygulamamızda MQ-7 karbonmonoksit gazı sensörü ile propan gazı ölçümü


gerçekleştirerek, ölçülen değeri Arduino’nun Serial Monitor ekranında
göstereceğiz. Bu uygulamamız önceki uygulama olan MQ-3 Alkol gazı sensörü
ile birebir benzerlik gösteriyor. Sadece sensör farklılık göstermekte. Bunun için
kullanılan Arduino kodları aşağıda:

Arduino Kodu
/*
MQ-7 ile Karbonmonoksit Gazı Ölçme Uygulaması

Sensörün hassasiyeti, toprak ile sensörün


çıkış pini arasına bağlayacağımız direnç
değeri ile orantılı olarak değiştirebiliyoruz.
Bu direnç değeri yapacağımız uygulamaya göre
değişkenlik gösterebiliyor. Bu konuyla ilgili
gerekli hesaplamaları veri dökümanları (datasheet)
üzerinden ulaşabiliyoruz.

Örnek bir başlangıç değeri olarak 10 kΩ bir direnç


kullanabiliriz.
*/

// Sensör Değeri isminde bir değişken tanımlıyoruz.


int sensorDegeri;

void setup()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
}

void loop()
{
// Analog 0 pininden okuma gerçekleştiriyoruz.
sensorDegeri = analogRead(0);
// Serial Monitor ekranına analog pinden okuduğumuz değeri yazıyoruz.
Serial.println(sensorDegeri, DEC);
// 100 ms aralıklarla ölçüm gerçekleştiriyoruz.
delay(100);
}

Arduino ve MQ-7 bağlantıları aşağıdaki şemada yer alıyor.


Devre Şeması

Uygulamayı çalıştırdığımızda görmeniz gereken Serial Monitor ekranı aşağıda


gösteriliyor. Arduino ortamındaki Serial Monitor üzerinden 100 milisaniyelik
periyotlarla alınan karbonmonoksit gazı değerlerini görebiliyoruz.

Neler Öğrendik?
Bu bölümde, farklı özelliklere sahip duman ve gaz sensörleri ile uygulamalar
geliştirme konusuna değindik. Farklı gaz çeşitlerini ölçerek bilgileri Arduino
Serial Monitor ekranında görüntüleme konusuna değindik. Elinizde bulunan
duman veya gaz sensörlerinin neredeyse tamamının kullanımını inceledik.
Bu bölümde öğrendikleriniz ile içerisinde duman ve gaz sensörleri barındıran
oldukça farklı ve önemli mühendislik uygulamaları gerçekleştirebilirsiniz.
5
Işık ve Renk
Sensörleri

Bu Bölümde
Giriş 104 Günümüzde ışık ve renk sensörleri endüstriyel veya
Foto Pil (Işık Pili, Güneş Pili) 106 hobi amaçlı bir çok uygulamada kullanılıyor. Işık
Arduino ile Işık ve Renk Sensörleri 108 şiddetini algılayan ışık sensörleri ve farklı renkleri
Neler Öğrendik? 133 algılama yeteneğine sahip renk sensörleri bir çok
süreç içerisinde etkin bir şekilde kullanılıyor. Bunun
yanı sıra, ışık izleyen robot veya renkleri algılayarak
hareket eden robotlar gibi hobi amaçlı uygulamalar
da gerçekleştirilebiliyor.
Bu bölümde, farklı özelliklere sahip ışık ve renk
sensörleri ile Arduino uygulamaları gerçekleştirerek
hangi ivmeölçerin uygulamamız için uygun olduğuna
karar vereceğiz.
104 Bölüm 5 Işık ve Renk Sensörleri

Giriş
Üzerine düşen ışığa bağlı olarak üstünden geçen akımı değiştiren elemanlara
optik eleman denir. Optik transdüserler ışık miktarındaki değişmeleri elektriksel
işaretlere dönüştürüyor. Bu elemanlar genellikle küçük akımlı elemanlardır.
Optik transdüserler genellikle alıcının akımlarını taşımazlar sadece alıcıyı
çalıştıran elemanları kumanda ederler.
Bu tip sensörler metal olmayan parçaların algılanmasında, uzun mesafelerde
algılama istenen yerlerde, yüksek sıcaklıklara dayanım gereken yerlerde
kullanılıyor. Günümüzde kullanım alanları otomasyon sistemlerine paralel
olarak yaygınlaşmaktadır.
Optik sensörler özellikle tozlu ortamlarda çalışırken sensörün önündeki optik
kısım kirlenir ve algılama mesafesi kirliliğin durumuna göre orantılı olarak azalır.
Bu tip ortamlar için gerekenden daha fazla algılama mesafesine sahip sensörler
kullanılmalıdır.
» Karşılıklı Optik Sensörler
» Reflektörlü Optik Sensörler
» Cisimden Yansımalı Optik Sensörler
» Fiber-Optik Kablolu Optik Sensörler
» Renk Algılayıcılı Optik Sensörler
Foto Direnç (Ldr)
Üzerine ışık düştüğünde direnci azalan, karanlıkta ise direnci artan elemana
foto direnç denir. Foto dirençler LDR (Light Dependent Resistance) olarak
adlandırılıyor. Kalsiyum sülfat ve kadmiyum selenid gibi bazı maddeler
üzerlerine düşen ışık ile ters orantılı olarak direnç değişimi gösterir. Üzerine
herhangi bir ışık almadığı sürece LDR’nin direnci çok yüksektir (10 Mohm).
Uygulanan ışık şiddeti arttıkça bu direnç değeri de düşer (75 - 300 Ohm).
Giriş 105

LDR’lerin üretildikleri madde algılayıcının hassasiyetini ve algılama süresini


belirliyor. LDR’lerin üst kısmı LDR’ye gelen ışığın odaklanmasını sağlamak
için cam veya şeffaf plastik ile yapılır. LDR’lerin gövde boyutları büyüdükçe
taşıyabilecekleri akım ve buna bağlı olarak güç değerleri artar.

Foto Diyot
Foto diyotlar ışık etkisi ile ters yönde iletken olan diyotlardır. Devreye ters olarak
bağlanıyor. Anod kısmına negatif, katod kısmına ise pozitif gerilim uygulanır.

Led Diyot
LED’e doğru polarma uygulandığında P maddesindeki oyuklarla N maddesin-
deki elektronlar birleşim yüzeyinde nötrleşir. Bu birleşme anında ortaya çıkan
enerji ışık enerjisidir. Bu ışığın gözle görülebilmesi için ise P ve N maddelerinin
birleşim yüzeyine galyum arse-
nid maddesi katılmıştır. LED’le-
rin, yeşil, kırmızı, sarı ve mavi ol-
mak üzere 4 çeşit renk seçeneği
bulunuyor. Piyasada çok değişik
şekil, ebad, renk ve fiyatta bu-
lunmakta.
106 Bölüm 5 Işık ve Renk Sensörleri

Foto Pil (Işık Pili, Güneş Pili)


Güneş pilleri (fotovoltaik piller), yüzeylerine gelen güneş ışığını elektrik enerjisine
dönüştüren yarı iletken maddelerdir. Yüzeyleri kare, dikdörtgen, daire şeklinde
biçimlendirilen güneş pillerinin alanları genellikle 100 cm2 civarında, kalınlıkları
ise 0.2 - 0.4 mm arasındadır.

Güneş pilleri yarı iletken maddelerden yapılıyor. Yarı iletken özellik gösteren
silisyum, galyum kadmiyum tellür gibi maddeler kullanılır. Bu maddeler
güneş pilleri için özel olarak hazırlandıktan sonra PN eklemine güneş enerjisi
geldiğinde fotonlardaki elektron yükü PN maddeleri arasında bir potansiyel
fark yeni gerilim oluşturuyor. Bu gerilim 0.15 - 0.5 Volt civarındadır.
Işık pilleri seri bağlanarak daha büyük gerilim, paralel bağlanarak daha büyük
akım elde edilebiliyor. Güneş enerjisiyle çalışan hesap makinelerinde kullanılan
eleman ışık pilidir.

Optokuplör
Optokuplör kelime anlamı olarak optik kuplai anlamına geliyor. Kuplai bir
sistem içindeki iki katın birbirindn ayrılması ama aralarındaki sinyal iletişiminin
devam etmesi olayıdır. Ayrılma fiziksel olarak gerçekleşir ama iletişim manyetik
veya optik olarak devam eder. Bu durumun faydası, katlardan birinde olan
fazla akım, yüksek gerilim gibi olumsuz, sisteme zarar verecek etkilerden diğer
katları korumaktır.
Foto Pil (Işık Pili, Güneş Pili) 107

Işık yayan eleman ile ışık algılayan elemanın aynı gövde içinde birleştirilmesiyle
elde edilen elemanlara optokuplör denir. Optokuplörler daha çok, iki ayrı
özellikli devre arasında elektriksel bağlantı olmadan, ışık yoluyla irtibat
kurulmasını sağlayan devrelerde kullanılıyor. Şöyle ki; düşük gerilimle çalışan bir
devreyle yüksek gerilimli bir güç devresine optoküplör aracılığıyla kumanda
edilebiliyor.

Fototransistörler
Fototransistörler diğer transistörlerden farklı olarak base bacağı yerine base
ile kollektörün birleşim yüzeyine düşen ışıkla tetikleniyor. Genellikle LED ile
birlikte yansıma sensörü olarak kullanılıyorlar.

PIR Sensörler
PIR (Passive Infra Red) sensörler görüş alanlarındaki insanların ve sıcak kanlı
canlıların yaydıkları IR ışıkları algılayabilen sensörlerdir. Genellikle hareket
sensörü olarak kullanılırlar.
108 Bölüm 5 Işık ve Renk Sensörleri

PIR sensörlerindeki algılama mesafesinin arttırılması ortamdan gelen ışığın


mercek filtre ile IR ışınlarının kırılma açılarının tam sensör üzerine düşürülüp
odaklanmasıyla sağlanıyor. Canlı hareket ettiğinde sensörün çokgen yapısından
dolayı algıladığı ışığın anlık olarak kesilip yeniden sensör üzerine düşmesi ile
PIR sensör hareketi algılıyor.
Encoderler robot ve otomasyon projelerinde açısal dönme hızını ve düzeneğin
açısal pozisyonunu belirlemek amacıyla kullanılıyor.

Encoder diskinin üzerinde belirli aralıkla delikler vardır. Encoder diski dönerken
IR LED’in yaydığı ışık deliklerden geçer ve karşı taraftaki fototransistörü
tetikler. Delik olmayan kısımlarında ise IR ışık fototransistörü tetikleyemez. Bu
şekilde alınan sinyaller sayılabiliyor ve mikrodenetleyiciye gönderilebiliyor.
Mikrodenetleyicide yazılı program ile sinyaller işlenerek gerekli işlemlerin
gerçekleştirilmesi sağlanıyor.
Bir diğer encoder diski de üzerinde delikler yerine siyah ve beyaz renkte dilimler
olan encoder diksleridir. Bu tip encoder disklerinde sensör olarak yansımalı
sensörler kullanılıyor. Beyaz ve siyah renklerin algılanması sayesinde açısal
dönem hızı ve pozisyon belirleniyor.

Arduıno ile Işık ve Renk Sensörleri


Buraya kadar ışık ve renk sensörleri ile temel olarak tanışmış olduk. Artık Arduino
ile beraber projeler yapmaya hazırız. İlk olarak kolay bir örnek üzerinden Arduino
ile ışık ve renk sensörlerinin kullanımını görelim. Bu örnekte LDR ışık sensörü ile
ışık ölçümünü gözlemleyeceğiz. Tabi buradaki veri okuma mekanizması farklı
sensörlerden veri almak için de rahatlıkla kullanılabilir.
Arduıno ile Işık ve Renk Sensörleri 109

Dr ile Işık Ölçme Uygulaması


LDR (Light Dependent Resistor – Işığa Bağımlı Dirençler), ışık şiddeti ile ters
orantılı olarak direnç değişimi gösteren bir eleman. Yani LDR üzerine düşen
ışık miktarı arttıkça direnci azalıyor. Dolayısıyla karanlık ortamlarda LDR
direnci maksimum seviyede oluyor. Bir ölçü aleti ile LDR direncini karanlık bir
ortamda ölçtüğümüzde ölçü aletinin ölçemeyeceği kadar yüksek bir değeri
ifade eden 0.L kademesini görüyoruz. LDR’yi devreye gerilim bölücü olarak
bağlantıladığımızda gerilimi ışığa bağlı olarak böldükleri için ışık sensörü
olarak da kullanılabiliyor.
Bir LDR ile ışık sensörü oluşturmak istiyorsak ilk olarak kalibrasyon işlemlerimizi
gerçekleştiriyoruz. Kalibrasyonu gerçekleştirmek için bir potansiyometre kulla-
nıyoruz. LDR ile yapacağımız ışık sensörü devresini Arduino denetleyicimizin
Analog 0 girişine bir gerilim bölücü devre olarak bağlantılayarak okuduğumuz
değeri LUX biriminden bir ışık ölçüm birimine çevireceğiz.
LDR’nin Arduino analog giriş pinlerine bağlanabilmesi için bir gerilim bölücü
devre kuruyoruz. Devredeki direncin değeri kalibrasyon işlemi sırasında
ortaya çıkacağından uygulamamız için 10 K değerinde bir potansiyometre
kullanıyoruz. Direncin değerini, parlak ışıkta okumamız gereken maksimum
değere eşittir.
Satın aldığımız LDR dirençlerinin karakteristik yapıları birbirinden farklı olabi-
leceğinden dolayı standart bir maksimum değer belirleyemiyoruz. Bu yüzden
kalibrasyon işlemini gerçekleştiriyoruz.

LUX Nedir?; Lüks, 1 metre yarıçaplı bir kürenin merkezinde bulunan, 1 candela
şiddetindeki ışık kaynağının 1 metrekarelik küre yüzeyinde oluşturduğu
NOT aydınlanma şiddetidir. Buna göre, 1 candela şiddetindeki bir ışık kaynağı d
yarıçaplı bir kürenin merkezinde ise, küre yüzeyine düşen toplam ışık akısı Ø
= 4 pi.I olarak bulunur.
110 Bölüm 5 Işık ve Renk Sensörleri

LUX birimi bizim için önemli. Biraz daha anlaşılır açıklarsak, 1 LUX, 1 m2 alanın
555 nm (nano metre) dalga boyu ışıktan aldığı toplam ışık akısı şeklinde
tanımladığımızda 1,47 mW / m2 ışık enerjisi olarak tanımlanabiliyor. Özellikle bu
birimin seçilmesinin nedeni bir yüzeyin üzerine düşen ışığın tanımı olmasından
kaynaklanıyor ve tanımın ışık kaynağına uzaklık ve açı değişkenlerini
içermemesinden kaynaklanıyor. Diğer bir ışık birimi olan Lumen biriminin
kullanımı pek doğru değil.
LDR ile ilgili ayrıntılı bilgileri aşağıdaki adreste bulabilirsiniz:
http://www.biltek.tubitak.gov.tr/gelisim/elektronik/dosyalar/40/LDR_NSL19_M51.pdf
Kalibrasyon işlemlerimizi gerçekleştirmek için ışık ölçen bir cihazı satın almamız gerekiyor.

Kalibrasyon için satın aldığımız cihazın sonucu LUX birimi cinsinden veriyor
DİKKAT olmasına dikkat ediyoruz.

Peki kalibrasyon için nasıl bir cihaz tercih etmeliyiz? Cevap basit, bunun için
bir pozometre alabiliriz. Pozometre, poz değerini, objektifinden vizöre giren
ışığın miktarını ve ışık girme süresini belirleyip ölçen bir düzen. Bir SLR fotoğraf
makinesinde bu ışık miktarı, hareketli ayna kalkıp obtüratör açıldığında film
üzerine vuran miktara eşit oluyor. Pozometre resmi çekilmek istenen sahaya
tutulduğunda imal edildiği foto elektrik hücrede meydana gelen elektrik
akımının ölçümü esası ile çalışıyor. Işığı
bol alan saha pozometrede yüksek
sapma meydana getiriyor. Pozometre,
fotoğraf makinesinin kendi ölçtüğü poz
değerinden daha hassas sonuçlar ürettiği
için gerektiğinde profesyonel fotoğrafçılar
tarafından da tercih ediliyor.
Resimde görüldüğü gibi pozometre
sensöründe düşen ışığın ölçümünde
kullanılan beyaz yuvarlak şekline sahip
bir difizör (ışık süzücü) bulunuyor. Işık
süzücü, ışığın eşit dağılımı için kullanılıyor.
LDR sensörümüzü bir masa tenisi
topunu (pinpon topu) keserek içine
yerleştirebiliriz. Bu şekilde, açılı gelen
ışıkta da doğru ölçümü yapmış oluyoruz.
Arduıno ile Işık ve Renk Sensörleri 111

Gün içerisinde havanın en aydınlık olduğu bir zamanda ölçeceğimiz ışık


miktarının (500 LUX) doğru değer olduğunu düşündüğümüzde, Arduino
Serial Monitor ekranı üzerinden okuduğumuz ham değer olabildiği kadar
yüksek olana kadar direncimizi ayarlıyoruz. Örneğin; devredeki ayarlı direnç yani
pozometre çevrilerek ekrandaki 250 değerini varsayarak direnç ayarı işlemini
tamamlıyoruz. Daha sonra programımız içerisinde 250 LUX değerini 500
LUX değerine eşliyoruz ve kalibrasyon işlemimizi sonlandırıyoruz. Bunun için
kullanılan Arduino kodları aşağıda:

Arduino Kodu
/*
LDR ile Işık Ölçme Uygulaması
LM35 Işık Sensörü ile
Işık Miktarı Ölçümü

Arduino Analog 0 pininden okuduğumuz


0 – 1023 değeri, ölçtüğümüz ışığı LUX biriminde
göstermek üzere, hesapladığımız çarpana
bölerek LUX değeri aralığına eşitliyoruz.
Sonuçları Arduino Serial Monitor ekranında
gözlemliyoruz.

*/

// LDR ışık sensörünün bağlı olduğu analog giriş pinini tanımlıyoruz.


const int analogPin = A0;

// Okuduğumuz analog hamdeğeri tanımlıyoruz.


int hamDeger = 0;

// Kalibrasyon değerini tanımlıyoruz.


const float Carpan = 2;

// Sensörün Arduino Serial Monitor ekranında görünecek değeri tanımlıyoruz.


int sensorDegeri = 0;

void setup ()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
}

void loop ()
112 Bölüm 5 Işık ve Renk Sensörleri

// Analog giriş pininden değer okuyoruz.


hamdeger = analogRead(analogPin);

// Sensör Değerini hesaplıyoruz.


sensorDegeri = hamdeger / Carpan;

// Sonucu Arduino Serial Monitor ekranına yazdırıyoruz.


Serial.print(“ ISIK = “);
Serial.print (sensorDegeri);
Serial.println (“ LUX”);

// Her 1 saniyede yeni ölçüm gerçekleştiriyoruz.


delay (1000);

Arduino ve LDR bağlantıları aşağıdaki şemada yer alıyor.

Devre Şeması

Temt6000 ile Işık Ölçme Uygulaması


TEMT6000, üzerinde kolayca uygulama yapılan bir ışık sensör kartı. Sensör kartı
için harici komponent kullanmamıza gerek kalmadan sadece sensöre gelen ışık
değişimine göre sinyal pininde analog voltaj
değişimini görebiliyoruz. Işık arttıkça analog
voltaj değeri de doğru orantılı olarak artıyor.
Arduıno ile Işık ve Renk Sensörleri 113

TEMT6000 ile ilgili ayrıntılı bilgileri ve veri sayfalarını (datasheet) aşağıdaki ad-
reste bulabilirsiniz:
https://www.sparkfun.com/datasheets/Sensors/Imaging/TEMT6000.pdf
TEMT6000 özellikle cep telefonlarında, kişisel bilgisayarlarda, cep bilgisayarla-
rında (PDA), kameralarda ve göstergelerde kullanılabiliyor.
TEMT6000 sensörünün karakteristik grafiklerini inceleyerek uygulama yapma-
mız önemli. Bu grafikleri aşağıda bulabilirsiniz.

Collector Işık Akımı – Işık Miktarı Grafiği Bağıl Duyarlılık – Açısal Yerdeğiştirme Grafiği

Bağıl Spectral Duyarlılık – Dalgaboyu Grafiği


114 Bölüm 5 Işık ve Renk Sensörleri

Şimdi uygulamamızı gerçekleştiriyoruz. Bunun için kullanılan Arduino kodları aşağıda:

Arduino Kodu
/*
TEMT6000 ile Işık Ölçme Uygulaması
TEMT6000 Işık Sensörü ile
Işık Miktarı Ölçümü

Arduino Analog 0 pininden okuduğumuz


0 – 1023 değeri ile TEMT6000 ışık sensörü
İle ışık ölçümü gerçekleştiriyoruz.

*/

// TEMT6000 ışık sensörünün bağlı olduğu analog giriş pinini tanımlıyoruz.


const int analogPin = A0;

void setup ()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
}

void loop ()
{

// Analog giriş pininden değer okuyoruz.


int sensorDegeri = analogRead(analogPin);

// Sonucu Arduino Serial Monitor ekranına yazdırıyoruz.


Serial.print(“ ISIK = “);
Serial.print (sensorDegeri);

// Her 1 saniyede yeni ölçüm gerçekleştiriyoruz.


delay (1000);

Arduino ve TEMT6000 bağlantıları aşağıdaki şemada yer alıyor.


Arduıno ile Işık ve Renk Sensörleri 115

Devre Şeması

Ml8511 ile Işık Ölçme Uygulaması


ML8511, üzerinde kolayca uygulama yapılan bir ultraviole ışık sensörü. 280
ile 390 nanometre ışıkları algılama kapasitesine sahip. Arduino ile oldukça
önemli uygulamalar yapılan bu sensör ile biz de ışık ölçme uygulamamızı
gerçekleştireceğiz.

ML8511 ile ilgili ayrıntılı bilgileri ve veri sayfalarını (datasheet) aşağıdaki adreste
bulabilirsiniz:
https://cdn.sparkfun.com/datasheets/Sensors/LightImaging/ML8511_3-8-13.pdf
ML8511 sensörünün daha iyi anlaşılması için aşağıda blok diyagramı paylaşılmıştır.
116 Bölüm 5 Işık ve Renk Sensörleri

ML8511 sensörünün şematik dosyasını aşağıdaki adreste bulabilirsiniz:


https://cdn.sparkfun.com/datasheets/Sensors/LightImaging/ML8511_Breakout.pdf
ML8511 sensörünün Eagle dosyasını aşağıdaki adreste bulabilirsiniz:
https://cdn.sparkfun.com/datasheets/Sensors/LightImaging/ML8511_Breakout.zip
ML8511 sensörünün karakteristik grafiklerini inceleyerek uygulama yapmamız
önemli. Bu grafikleri aşağıda bulabilirsiniz.

Çıkış Gerilimi – UV Yoğunluğu Grafiği

Şimdi uygulamamızı gerçekleştiriyoruz. Bunun için kullanılan Arduino kodları


aşağıda:

Arduino Kodu
/*
ML8511 ile Işık Ölçme Uygulaması
ML8511 UV Işık Sensörü ile
Işık Miktarı Ölçümü

Arduino Analog 0 pininden okuduğumuz


0 – 1023 değeri ile ML8511 UV ışık sensörü
ile ışık ölçümü gerçekleştiriyoruz.

*/

// TEMT6000 ışık sensörünün bağlı olduğu analog giriş pinini tanımlıyoruz.


int UVOUT = A0;

// Arduino kartı üzerindeki 3.3 V pinini tanımlıyoruz.


int REF_3V3 = A1;

void setup ()
{
Arduıno ile Işık ve Renk Sensörleri 117

// Seri haberleşmeyi başlatıyoruz.


Serial.begin(9600);

// Giriş pinlerimizi tanımlıyoruz.


pinMode(UVOUT, INPUT);
pinMode(REF_3V3, INPUT);

void loop ()
{

// Analog giriş pininden değer okuyoruz.


int uvLevel = averageAnalogRead(UVOUT);
int refLevel = averageAnalogRead(REF_3V3);

// Çıkış gerilimini tanımlıyoruz.


float outputVoltage = 3.3 / refLevel * uvLevel;

// Gerilimi UV yoğunluğuna çeviriyoruz.


float uvIntensity = mapfloat(outputVoltage, 0.99, 2.8, 0.0, 15.0);

// Sonucu Arduino Serial Monitor ekranına yazdırıyoruz.


Serial.print(“ Cikis = “);
Serial.print (refLevel);

Serial.print(“ ML8511 Cikisi = “);


Serial.print (uvLevel);

Serial.print(“ / ML8511 Gerilimi = “);


Serial.print (outputVoltage );

Serial.print(“ / UV Intensity (mW / cm^2) = “);


Serial.print (uvIntensity);

Serial.println();

// Her 100 milisaniyede yeni ölçüm gerçekleştiriyoruz.

delay (100);

// Tanımladığımız sınıf içerisinde işlemlerimizi gerçekleştiriyoruz.


int averageAnalogRead (int pinToRead)
{
118 Bölüm 5 Işık ve Renk Sensörleri

byte numberOfReadings = 8;
unsigned int runningValue = 0;

for(int x = 0; x < numberOfReadings; x++)


runningValue += analogRead(pinToRead);
runningValue /= numberOfReadings;
return (runningValue);
}

float mapfloat (float x, float in_min, float in_max, float out_min, float out_max)

Arduino ve ML8511 bağlantıları aşağıdaki şemada yer alıyor.

Devre Şeması

Tsl2561 ile Işık Ölçme Uygulaması


TSL2561, karmaşık görünümlü spektrumları algılayan başarılı bir ışık sensörü
kartı. Kızılötesi ve görülebilir ışığı insan gözünden çok daha iyi bir şekilde
algılayabiliyor. Belirlenmiş zaman içerisinde ışığı emen TSL2561 entegre
sensörü ışığın parlaklığına göre değer veriyor.
TSL2561 doğrudan I2C haberleşme yeteneğine sahip. Ayrıca TSL2561 aynı
anda, iki fotodiyotlara gelen akımları analog - dijital dönüştürücüler (ADC) ile
dijital bilgilere çevirebiliyor. Bu sensörü kullanmak için 3V besleme gerilimine
ve 0.6 mA düşük kaynak akımına ihtiyaç duyuyoruz.
TSL2561 ile ilgili ayrıntılı bilgileri ve veri sayfalarını (datasheet) aşağıdaki adreste
bulabilirsiniz:
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/LightImaging/TSL2561.pdf
Arduıno ile Işık ve Renk Sensörleri 119

TSL2561 sensörünün daha iyi anlaşılması için aşağıda blok diyagramı paylaşılmıştır.

TSL2561 sensörünün şematik bilgilerini aşağıdaki adreste bulabilirsiniz:


http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/LightImaging/
TSL2561%20Luminosity%20Sensor%20BOB.pdf
Sensörü üreten Sparkfun Electronics firması tarafından sensörün kullanımını
açıklayan ve önemli bilgiler veren bir video hazırlanmış. Bu videoyu izlemenizi
tavsiye ederim.
https://www.youtube.com/watch?t=158&v=FYCiO6hRRt8
TSL2561 sensörünün karakteristik grafiklerini inceleyerek uygulama yapmamız
önemli. Bu grafikleri aşağıda bulabilirsiniz.

Duyarlılık – Dalgaboyu Grafiği Duyarlılık – Açısal Yerdeğiştirme Grafiği


120 Bölüm 5 Işık ve Renk Sensörleri

TSL2561 sensörü ile uygulama yapmadan önce TSL2561 kütüphanesini indirip


Arduino’nun libraries klasörüne eklememiz gerekiyor.
Aşağıdaki linkten bu kütüphaneyi elde edebilirsiniz:
https://github.com/sparkfun/TSL2561_Luminosity_Sensor_BOB
GitHub sayfasının sağ sütunundaki Download ZIP butonuna tıklayarak ZIP
dosyası olarak indiriyoruz.
Arduino IDE’deki Sketch>Import Library>Add Library... menüsünden, indirdi-
ğimiz ZIP dosyasını seçerek kütüphaneleri Arduino ortamına ekleyebiliyoruz.
Kütüphanemizi ekledikten sonra şimdi sensör ile Arduino’muzu bağlantılaya-
cağız. Bağlantı pinleri ile ilgili açıklamaları aşağıdaki tablodan okuyabilirsiniz.

Şimdi uygulamamızı gerçekleştiriyoruz. Bunun için kullanılan Arduino kodları aşağıda:

Arduino Kodu
/*
TSL2561 ile Işık Ölçme Uygulaması
TSL2561 Işık Sensörü ile
Işık Miktarı Ölçümü

Arduino Analog 4 ve Analog 5 pininden okuduğumuz


değerler ile ölçüm gerçekleştiriyoruz.
Sensörün besleme gerilimi olarak Arduino modelimizin
3.3 V besleme pinin kullanıyoruz.

Pin bağlantılarını belirtilen şekilde yapıyoruz.


Any Arduino “SDA” “SCL”
Uno, Redboard, Pro A4 A5
Mega2560, Due 20 21
Leonardo 2 3

Temel işlemler için INT (Interrupt - Kesme) pinine ihtiyaç duymuyoruz.


*/
Arduıno ile Işık ve Renk Sensörleri 121

// TSL2561 kütüphanesini tanımlıyoruz.


#include <SFE_TSL2561.h>

// I2C iletişimi için kullanacağımız Wire kütüphanesini tanımlıyoruz.


#include <Wire.h>

// Işık (light) isminde bir nesne oluşturuyoruz.


SFE_TSL2561 light;

// Global değişkenlerimizi tanımlıyoruz.


boolean gain;
unsigned int ms;

void setup ()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);

light.begin();

// Sensörün fabrika kimliğine ulaşıyoruz. Bunu yapmak zorunda değiliz.


unsigned char ID;

if (light.getID(ID))
{
Serial.print(“Got factory ID: 0X”);
Serial.print(ID,HEX);
Serial.println(“, should be 0X5X”);
}

// Sensör iletişiminde herhangi bir problem varsa bunu belirtiyoruz.


else
{
byte error = light.getError();
printError(error);
}

gain = 0;

unsigned char time = 2;

Serial.println(“Set zamanlaması...”);
light.setTiming(gain,time,ms);

Serial.println(“Powerup...”);
light.setPowerUp();
122 Bölüm 5 Işık ve Renk Sensörleri

void loop ()
{

// Bir süre bekliyoruz.


delay(ms);

// Sensörden veri alıyoruz.


unsigned int data0, data1;

if (light.getData(data0,data1))
{
// True değerini döndürüyorsa bağlantı doğru bir şekilde gerçekleşmiştir.

Serial.print(“data0: “);
Serial.print(data0);
Serial.print(“ data1: “);
Serial.print(data1);

double lux;
boolean good;

// LUX biriminden hesaplama gerçekleştiriyoruz.


good = light.getLux(gain,ms,data0,data1,lux);

// Sonuçları Serial Monitor ekranından gözlemleyebiliyoruz.


Serial.print(“ lux: “);
Serial.print(lux);

if (good) Serial.println(“ (good)”); else Serial.println(“ (BAD)”);


}
else
{
// False değerini döndürüyorsa bağlantı doğru bir şekilde gerçekleşmemiştir.

byte error = light.getError();


printError(error);
}
}

// Tanımladığımız sınıf içerisindeki işlemleri gerçekleştiriyoruz.


void printError(byte error)

// Eğer bağlantıda hata oluşmuşsa bize anlamlı bir hata mesajı döndürecek.
{
Arduıno ile Işık ve Renk Sensörleri 123

Serial.print(“I2C hatasi: “);


Serial.print(error,DEC);
Serial.print(“, “);

switch(error)
{
case 0:
Serial.println(“basarili”);
break;
case 1:
Serial.println(“iletim icin cok uzun veri”);
break;
case 2:
Serial.println(“received NACK on address (disconnected?)”);
break;
case 3:
Serial.println(“received NACK on data”);
break;
case 4:
Serial.println(“baska bir hata”);
break;
default:
Serial.println(“bilinmeyen bir hata”);
}
}

Arduino ve TSL2561 bağlantıları aşağıdaki şemada yer alıyor.

Devre Şeması
124 Bölüm 5 Işık ve Renk Sensörleri

Adjd-S311 ile Renk Ölçme Uygulaması


ADJD-S311, 2.2 x 2.2 x 0.76 mm ebatlarında olan 4 kanallı bir dijital renk
sensörüdür. Kanal başına 10 bitlik bir çözünürlüğe sahip olması, en ufak renk
değişimlerini dahi algılayabileceği anlamına geliyor.
Beyaz bir LED ve CMOSIC ile entegreli RGB filtreler ve ön tarafında bulunan ADC
modülleri ile birleştirilmiş bir IC modülüdür. 100 ile 100.000 LUX arasında ölçüm
gerçekleştirebilme yeteneğine sahip.

Özellikler:
» 4 kanala sahip olma ve kanal başına 10 bitlik çözünürlüğe sahip olma,
» Her bir kanal için ayrık kazanım seçenekleri bulunma,
» İki kablo ile seri haberleşme gerçekleştirebilmesi,
» Düşük güç moduna, uyku moduna sahip olması.
ADJD-S311ile ilgili ayrıntılı bilgileri ve veri sayfalarını (datasheet) aşağıdaki
adreste bulabilirsiniz:
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/LightImaging/
datasheetCR999.pdf
Sensör için önerilen çalışma şartları aşağıdaki tabloda yer alıyor.
Arduıno ile Işık ve Renk Sensörleri 125

Şimdi uygulamamızı gerçekleştiriyoruz. Bunun için kullanılan Arduino kodları aşağıda:

Arduino Kodu
/*
ADJD-S311 ile Renk Ölçme Uygulaması
ADJD-S311 Renk Sensörü ile
Renk Ölçümü

*/

// Önce sensörümüzü kalibre ediyoruz.

int redGain = 0x03;


int greenGain = 0x0;
int blueGain = 0x0f;
int clearGain = 0x01;

// RGB LED pinlerini tanımlıyoruz.


int redPin = 9;
int greenPin = 10;
int bluePin = 11;

// I2C haberleşme için kullandığımız Wire kütüphanesini ekliyoruz.


#include <Wire.h>

// Sensörün 7 bit I2C adresini belirtiyoruz.


#define I2C_ADDRESS 0x74

#define REG_CAP_RED 0x06


#define REG_CAP_GREEN 0x07
#define REG_CAP_BLUE 0x08
#define REG_CAP_CLEAR 0x09

#define REG_INT_RED_LO 0x0A


#define REG_INT_RED_HI 0x0B
#define REG_INT_GREEN_LO 0x0C
#define REG_INT_GREEN_HI 0x0D
#define REG_INT_BLUE_LO 0x0E
#define REG_INT_BLUE_HI 0x0F
#define REG_INT_CLEAR_LO 0x10
#define REG_INT_CLEAR_HI 0x11

#define REG_DATA_RED_LO 0x40


#define REG_DATA_RED_HI 0x41
#define REG_DATA_GREEN_LO 0x42
126 Bölüm 5 Işık ve Renk Sensörleri

#define REG_DATA_GREEN_HI 0x43


#define REG_DATA_BLUE_LO 0x44
#define REG_DATA_BLUE_HI 0x45
#define REG_DATA_CLEAR_LO 0x46
#define REG_DATA_CLEAR_HI 0x47

float redFactor=1;
float blueFactor=1;
float greenFactor=1;

int calibrationDarkness = 0;
byte calibrationRed = 5;
byte calibrationGreen = 5;
byte calibrationBlue = 5;

void setup(void)
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);

// I2C haberleşmeyi başlatıyoruzç


Wire.begin();

set_register(REG_CAP_RED, redGain);
set_register(REG_CAP_GREEN, greenGain);
set_register(REG_CAP_BLUE, blueGain);
set_register(REG_CAP_CLEAR, clearGain);

int ledGain = getColorGain();

set_gain(REG_INT_RED_LO,ledGain);
set_gain(REG_INT_GREEN_LO,ledGain);
set_gain(REG_INT_BLUE_LO,ledGain);

performMeasurement();

int red=get_readout(REG_DATA_RED_LO);
int green=get_readout(REG_DATA_GREEN_LO);
int blue=get_readout(REG_DATA_BLUE_LO);

int m=2000; //bigger anyway


m=min(m,red);
m=min(m,green);
m=min(m,blue);
Arduıno ile Işık ve Renk Sensörleri 127

redFactor=((float)m*255.0)/(1000*(float)red);
greenFactor=((float)m*255.0)/(1000*(float)green);
blueFactor=((float)m*255.0)/(1000*(float)blue);

void loop()
{

int clearGain = getClearGain();


set_gain(REG_INT_CLEAR_LO,clearGain);
int colorGain = getColorGain();
set_gain(REG_INT_RED_LO,colorGain);
set_gain(REG_INT_GREEN_LO,colorGain);
set_gain(REG_INT_BLUE_LO,colorGain);

// RGB değerlerini resetliyoruz.


int cc = 0;
int red=0;
int green=0;
int blue=0;

for (int i=0; i<4 ;i ++) {


performMeasurement();
cc +=get_readout(REG_DATA_CLEAR_LO);
red +=get_readout(REG_DATA_RED_LO);
green +=get_readout(REG_DATA_GREEN_LO);
blue +=get_readout(REG_DATA_BLUE_LO);
}

// Ortamalarını buluyoruz.
cc/=4;
red /=4;
green /=4;
blue /=4;

float redValue = (float)red*redFactor;


float greenValue = (float)green*greenFactor;
float blueValue = (float)blue*blueFactor;

Serial.print(“red: “);
Serial.print(redValue);

Serial.print(“green: “);
Serial.print(greenValue);
128 Bölüm 5 Işık ve Renk Sensörleri

Serial.print(“blue: “);
Serial.print(blueValue);

analogWrite(redPin, map(redValue, 0, 1024, 0, 255));


analogWrite(greenPin, map(greenValue, 0, 1024, 0, 255));
analogWrite(bluePin, map(blueValue, 0, 1024, 0, 255));

// 1 saniye bekliyoruz.
delay(1000);
}

int getClearGain()
{
int gainFound = 0;
int upperBox=4096;
int lowerBox = 0;
int half;

while (!gainFound) {
half = ((upperBox-lowerBox)/2)+lowerBox;

if (half == lowerBox) { //no further halfing possbile


break; //no further halfing possbile
}

else
{
set_gain(REG_INT_CLEAR_LO,half);
performMeasurement();
int halfValue = get_readout(REG_DATA_CLEAR_LO);

if (halfValue > 1000) {


upperBox=half;
}
else if (halfValue<1000) {
lowerBox = half;
}
else {
break; //no further halfing possbile
}
}
}
return half;
}
Arduıno ile Işık ve Renk Sensörleri 129

int getColorGain()
{
int gainFound = 0;
int upperBox=4096;
int lowerBox = 0;
int half;
while (!gainFound) {
half = ((upperBox-lowerBox)/2)+lowerBox;

if (half==lowerBox) { //no further halfing possbile


break; // gain found
}
else {

set_gain(REG_INT_RED_LO,half);
set_gain(REG_INT_GREEN_LO,half);
set_gain(REG_INT_BLUE_LO,half);
performMeasurement();
int halfValue = 0;

halfValue=max(halfValue,get_readout(REG_DATA_RED_LO));
halfValue=max(halfValue,get_readout(REG_DATA_GREEN_LO));
halfValue=max(halfValue,get_readout(REG_DATA_BLUE_LO));

if (halfValue>1000) {
upperBox=half;

}
else if (halfValue<1000) {
lowerBox=half;

}
else {
break; // gain found
}
}
}
return half;
}

void performMeasurement()
{
set_register(0x00,0x01); // start sensing
130 Bölüm 5 Işık ve Renk Sensörleri

while(read_register(0x00) != 0) {
// waiting for a result
}
}

int get_readout(int readRegister)


{
return read_register(readRegister) + (read_register(readRegister+1)<<8);
}

void set_gain(int gainRegister, int gain)


{
if (gain <4096) {
uint8_t hi = gain >> 8;
uint8_t lo = gain;

set_register(gainRegister, lo);
set_register(gainRegister+1, hi);
}
}

void set_register(unsigned char r, unsigned char v)


{

Wire.beginTransmission(I2C_ADDRESS);
Wire.send(r);
Wire.send(v);
Wire.endTransmission();
}

unsigned char read_register(unsigned char r)


{

unsigned char v;
Wire.beginTransmission(I2C_ADDRESS);
Wire.send(r); // register to read
Wire.endTransmission();

Wire.requestFrom(I2C_ADDRESS, 1); // read a byte


while(!Wire.available()) {
// waiting
}
v = Wire.receive();
return v;
}
Arduıno ile Işık ve Renk Sensörleri 131

Arduino ve ADJD-S311 bağlantıları aşağıdaki şemada yer alıyor.

Devre Şeması

Arduıno Lılypad Işık Sensörü Uygulaması


Lilypad ışık sensörü, Arduino Lilypad modeli için hazırlanmış bir ışık sensörü. 0
- 5V arasında analog olarak çıkış üreten kullanımı kolay bir ışık sensörüdür. Gün
ışığına maruz kaldığında sensör 5V çıkış üretiyor. Sensörün yüzeyini elimiz ile
kapattığımızda ise 0V çıkış üretiyor. Kapalı alan aydınlatmasında sensörü 1 - 2 V
arasında değer üretebiliyor.
Lilypad ışık sensörü, Arduino Lilypad modelinin tüm özelliklerine sahip. Örneğin;
iletken ip yardımıyla kumaşa dikilebilyor. Üstelik kart ve sensörler kumaşın
üzerinde iken kumaşı yıkayabiliyoruz. Kartın çapı 20 mm, kalınlığı ise 0.8 mm’dir.
Sensörün ile şematik çizimini aşağıdaki adreste bulabilirsiniz:
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/E-Textiles/Lilypad/LilyPixel.pdf
132 Bölüm 5 Işık ve Renk Sensörleri

Şimdi uygulamamızı gerçekleştiriyoruz. Bunun için kullanılan Arduino kodları aşağıda:

Arduino Kodu
/*
Arduino Lilypad Işık Sensörü Uygulaması
Arduino Lilypad modeli için üretilmiş
ışık sensörü ile uygulamamızı gerçekleştiriyoruz.

*/

// LED pinimizi tanımlıyoruz.


int LEDpin = 13;

// Sensörümüzün bağlantılandığı analog pini tanımlıyoruz.


int sensorPin = 0;

// Sensörden okunan değeri tanımlıyoruz.


int sensorDegeri;

void setup()
{
// Pin bağlantılarını tanımlıyoruz.
pinMode(LEDpin, OUTPUT);

// Seri haberleşmeyi başlatıyoruz.


Serial.begin(9600);

digitalWrite(LEDpin, HIGH);
}

void loop()
{
// Sensör değerimizi analog olarak okuyoruz.
sensorDegeri = analogRead(sensorPin);
// Okuduğumuz değeri Serial Monitor ekranına yazdırıyoruz.
Serial.println(sensorDegeri);

// Her 100 ms için ölçüm gerçekleştiriyoruz.


delay(100);
}

Arduino Lilypad ve ışık sensörü bağlantıları aşağıdaki şemada yer alıyor.


Neler Öğrendik? 133

Devre Şeması

Neler Öğrendik?
Bu bölümde, mühendislik uygulamalarında sıklıkla kullanılan ışık sensörleri
kavramına değindik. Bu konnuda uygulamalar gerçekleştirdik. Renk sensörü
ile alakalı da bir uygulama gerçekleştirdik. Bu bölümde öğrendikleriniz ile
içerisinde ışık ve renk sensörleri barındıran oldukça farklı ve önemli mühendislik
uygulamaları gerçekleştirebilirsiniz.
6
Elektrik ve Manyetizma
Sensörleri

Bu Bölümde
Giriş 136 Günümüzde elektrik ve manyetizma sensörleri
Arduino ile Elektrik ve Manyetizma endüstriyel amaçlı bir çok uygulamada kullanılıyor.
Sensörleri 138 Voltaj, akım, direnç, endüktans, kapasitans gibi
Neler Öğrendik? 152 elektriksel değişkenlerin şiddetini algılayan elektrik
sensörleri ve alan yoğunluğu, manyetik moment ve
geçirgenlik gibi manyetik alana bağlı değişkenleri
algılama yeteneğine sahip manyetizma sensörleri bir
çok süreç içerisinde etkin bir şekilde kullanılıyor.
Bu bölümde, farklı özelliklere sahip elektrik ve
manyetizma sensörleri ile Arduino uygulamaları
gerçekleştirerek hangi sensörün uygulamamız için
uygun olduğuna karar vereceğiz.
136 Bölüm 6 Elektrik ve Manyetizma Sensörleri

Giriş
Bir tel, bobin haline getirilip içinden akım geçirilirse, bu bobinin içinde ve
çevresinde manyetik alan oluşur. Bu manyetik alan gözle görülmez. Ancak
bobinin içerisindeki nüvenin hareketi ve bobinin çevresinden yaklaştırılan
metaller bobinin indüktansını değiştirir. Bu prensipten hareketle manyetik
sensörler geliştirilmiştir.

Manyetik sensör ve transdüserler, günlük hayatta daha çok güvenlik gerektiren


yerlerde metallerin (silah, bıçak gibi) aranmasında, hazine arama dedektörlerinde
kullanılıyor. Sanayide ise kumanda ve kontrol sistemlerinde, tıp elektroniğinde,
otomatik kumanda kontrol uygulamalarında, yer değişimlerinin hassas olarak
ölçülmesinde kullanılıyor.

Reed/Temassız Algılayıcılar
Manyetik temassız algılayıcılar, kalıcı mıknatısların ve elektromıknatısların
oluşturdukları manyetik alana etkiyorlar. Reed anahtarlarında ferromanyetik
malzemeden yapılan kontak dilleri eritilerek cam bir pistona bağlanıyor.
Pistonun içinde reaksiyona girmeyen ve yanmayan bir gaz bulunuyor.
Giriş 137

Reed-temassız algılayıcının yakınına bir manyetik alan yaklaştığı zaman kontak


dilleri manyetiklenir. Manyetiklenen kontak dilleri birbirlerini çekiyor ve kontak
böylece kapanıyor.

İndüktif/Manyetik Temassız Algılayıcılar


Endüktif sensör, kendisine yaklaşan cismi temas etmeden algılamak için
kullanılıyor. Sensör kendi algılama sahası içerisinde bir manyetik alan
oluşturuyor. Algılama sahasına giren bir metal cisim bu manyetik alanı etkiliyor.
Bu değişim sensör içerisindeki elektronik devrelerde işleniyor ve sensörün
çıkış değerini değiştiriyor. Endüktif sensörler genellikle 50 mm’ye kadar ölçüm
yapabiliyorlar.

Hall Temassız Algılayıcılar


Bir yarı iletkenden elektronlar akarken akım yönüne dik bir manyetik alan
uygulanınca elektronlar belli bir bölgede yoğunlaşır. Bu durum da yarı iletkenin
diğer uçlarında gerilim oluşmasına neden oluyor. Bu duruma hall etkisi denir. Bu
gerilimin değeri, manyetik alana levhanın yakınlığı ile değişir. Aynı prensipten
alan etkili transdüserler yapılır. Alan etkili transdüserler hassas mesafe, pozisyon
ve dönüş algılayıcıları olarak kullanılıyor.

Elektriksel sensörler ise voltaj, akım, direnç, endüktans, kapasitans, dielektrik


katsayısı, polarizasyon, elektrik alanı gibi elektriksel değişiklikleri algılayan
sensörlerdir.
138 Bölüm 6 Elektrik ve Manyetizma Sensörleri

Arduıno ile Elektrik ve Manyetizma Sensörleri


Buraya kadar elektrik ve manyetizma sensörleri ile temel olarak tanışmış
olduk. Artık Arduino ile beraber projeler yapmaya hazırız. İlk olarak kolay bir
örnek üzerinden Arduino ile elektrik ve manyetizma sensörlerinin kullanımını
görelim. Bu örnekte ACS715 akım sensörü ile ışık ölçümünü gözlemleyeceğiz.
Tabi buradaki veri okuma mekanizması farklı sensörlerden veri almak için de
rahatlıkla kullanılabilir.

ACS715 ile Akım Ölçme Uygulaması


ACS715, Allegro’nun 30 Amperlik manyetik etkiye bağlı lineer akım sensörüdür.
Bu sensör çeşidi 30 ampere kadar tek yönlü akım girişine izin veriyor. ACS715
analog çıkış veren bir sensördür. 500 mV’a kadar griş akımı ve % 1.5’den daha
az hata payıyla çalışıyor.
Özellikler:
» 0 ile 30 ampere kadar tek yönlü akım girişlerini algılayabiliyor. -1.5 A akım için
anlamlı bir geribildirim sağlıyor ve üzerindeki aşırı akım durumlarında ise beş
kez koruma sağlıyor.
» İletken yolda dahili tipik 1.2 mΩ direnç bulunuyor. Kart ince bakır PCB’den
oluşuyor. Dolayısıyla kartın üzerinden çok az güç kaybı yaşanıyor.
» 80 KHz band aralığı vardır ve bu aralığı opsiyonel olarak harici kondansatör
kullanarak filtreleme yaparak değiştirebiliyoruz.
» Özellikle otomotiv sektöründe yaygın kullanıma sahip.
» -40 ile 150 0C sıcaklıklarında çalışabiliyor.
Arduıno ile Elektrik ve Manyetizma Sensörleri 139

ACS715 ile ilgili ayrıntılı bilgileri ve veri sayfalarını (datasheet) aşağıdaki adreste
bulabilirsiniz:
https://www.pololu.com/file/download/ACS715.pdf?file_id=0J197
ACS715 sensörünün daha iyi anlaşılması için aşağıda blok diyagramı
paylaşılmıştır.

ACS715 sensörünün karakteristik grafiklerini inceleyerek uygulama yapmamız


önemli. Bu grafikleri aşağıda bulabilirsiniz.

Ortam Sıcaklığına Karşı Ortalama Akım Grafiği


140 Bölüm 6 Elektrik ve Manyetizma Sensörleri

Ortam Sıcaklığına Karşı Manyetik Offset Grafiği

Ortam Sıcaklığına Karşı Manyetik Offset Grafiği

Uygulamada tercih ettiğimiz ACS715 akım sensörü Hall Effect ilkesine göre
çalışıyor. Sensörün ölçeceği akımın maksimum geriliminin 30V DC olduğunu
unutmamalıyız.
ACS715 datasheet dosyasını incelediğimizde her 1 Amper için 133 mV gerilim
üretiyor. Bu durumda, 30 Amper akım için üreteceği maksimum gerilim 3.99
V oluyor. Fakat değer aralığımız 0 - 5 V analog gerilim veya 0 - 1023 decimal
tabanlı değer olduğu için, sensörün 0 - 3.9 V değer aralığını bu aralığa eşitlemek
için 5000 mV / 133 mV = 37 değerini buluyoruz.
Şimdi uygulamamızı gerçekleştiriyoruz. Bunun için kullanılan Arduino kodları
aşağıda:
Arduıno ile Elektrik ve Manyetizma Sensörleri 141

Arduino Kodu
/*
ACS715 ile Akım Ölçme Uygulaması
ACS715 Allegro Akım Sensörü ile
Devredeki Akım Miktarı Ölçümü

Arduino Analog 0 pininden okuduğumuz


0 – 1023 değeri ölçtüğümüz akımı Amper
birimi olarak göstermek üzere, hesapladığımız
datasheet çarpanı ile bölerek 0 - 30 A değer aralığına
eşliyoruz.

*/

// Analog giriş pinimizi tanımlıyoruz.


const int analogPin = A0;

// Değer isimli değişkenimizi tanımlıyoruz.


int deger = 0;
// Çarpanımızı tanımlıyoruz.
const float carpan = 27.64;

// Sonuç değişkenimizi tanımlıyoruz.


double sonuc = 0;

void setup()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
}

void loop()
{
// Analog değeri okuyoruz.
deger = analogRead(analogPin);

// Değeri Voltaj olarak hesaplıyoruz.


sonuc = deger / carpan;

// Sonuçları Serial Monitor ekranında bakıyoruz.


Serial.print(“ AKIM = “);
Serial.print(sonuc, 2);
Serial.println(“ A”);
142 Bölüm 6 Elektrik ve Manyetizma Sensörleri

// 500 ms aralıklarla işlemleri tekrarlıyoruz.


delay(500);
}

Arduino ve ACS715 bağlantıları aşağıdaki şemada yer alıyor.

INA169 ile Akım Ölçme Uygulaması


INA169, Sparkfun Electronics firmasının ürettiği bir high-side akım monitörüdür.
Pozitif güç pinine bir direnç bağlantısı yaptığımız takdirde sensör bize bu
direnç üzerindeki voltaj değerlerini veriyor. INA 169 çıktısı, voltaj düşümlerinin
ölçülerini baz alan küçük bir akımdır. INA 169 çıktısı ile toprak arasına bir direnç
koyduğumuzda çıkışı voltaj olarak ölçebiliyoruz.
Sensörün besleme voltajı 2.7 V’tan 60 V’a kadar değişebiliyor. Bekleme akımı ise
sadece 60 uA’dir.
INA169 sensörünün şematik dosyasını aşağıdaki adreste bulabilirsiniz:
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Current/INA169_Breakout.pdf
Arduıno ile Elektrik ve Manyetizma Sensörleri 143

INA169 ile ilgili ayrıntılı bilgileri ve veri sayfalarını (datasheet) aşağıdaki adreste
bulabilirsiniz:
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Current/ina169.pdf
INA169 sensörünün daha iyi anlaşılması için aşağıda blok diyagramı
paylaşılmıştır.

Akım ölçümü için kullanacağımız denklemi inceleyelim.

» IS, ölçmek istediğimiz akım değeri,


» VOUT, INA169 sensörünün çıkışından ölçtüğümüz gerilim değeri,
» 1 kΩ, INA169 sensörünün yapısı gereği kullanmamız gereken bir sabit direnç değeri,
» RS, şant direncidir. 10 Ω olarak alınabilir,
» RL, çıkış direncidir. 10 Ω olarak alınabilir.
Şimdi bir örnek yapalım. Eğer sensörümüzün çıkışından okuduğumuz gerilim
değeri 2.8 V ise ölçtüğümüz akım değerini belirttiğimiz formülü kullanarak şu
şekilde buluyoruz:

Sensör üzerinde 5 adet pin bulunuyor.


144 Bölüm 6 Elektrik ve Manyetizma Sensörleri

» GND, devrenin toprağına bağladığımız pin,


» VIN+, güç kaynağının pozitif kısmına bağlantılanması gereken pin (örneğin; pil,
çıkış pini vb.),
» VIN-, yükün pozitif kısmına bağlantılanması gereken pin (örneğin; Arduino’nun
VCC pini, LEDin pozitif kısmı vb.),
» VOUT, çıkış pinidir ve gerilim seviyesini ölçen bir yer bağlantılan pindir (örneğin;
multimetre, osiloskop, Arduino ADC birimi vb.),
» VCC, gerilim verdiğimiz pindir.
Sensörümüzü satın aldıktan sonra pinleri lehimlenmemiş olarak bize ulaşmış
olabilir. Bu durumda ilk olarak lehimleme işlemlerimizi gerçekleştiriyoruz.
Arduıno ile Elektrik ve Manyetizma Sensörleri 145

Şimdi uygulamamızı gerçekleştiriyoruz. Bunun için kullanılan Arduino kodları


aşağıda:

Arduino Kodu
/*
INA169 ile Akım Ölçme Uygulaması
INA169 Akım Sensörü ile
Devredeki Akım Miktarı Ölçümü

*/

// Sabitlerimizi tanımlıyoruz.
const int SENSOR_PIN = A0;
const int RS = 10;
const int VOLTAGE_REF = 5;

// Global değişkenlerimizi tanımlıyoruz.


float sensorValue;
float current;
void setup()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
}

void loop()
{
// Sensör değerimizi okuyoruz.
sensorValue = analogRead(SENSOR_PIN);

// Sensör değerimizi ADC ile dijital değere dönüştürüyoruz.


sensorValue = (sensorValue * VOLTAGE_REF) / 1023;

// Is = (Vout x 1k) / (RS x RL)


current = sensorValue / (10*RS);

// Değerleri Arduino Serial Monitor ekranında gözlemleyebiliyoruz.


Serial.print(current, 3);
Serial.println(“ A”);

// İşlemleri 500 ms aralıklarla tekrarlıyoruz.


delay(500);

Arduino ve INA169 bağlantıları aşağıdaki şemada yer alıyor.


146 Bölüm 6 Elektrik ve Manyetizma Sensörleri

Devre Şeması

Uygulamayı gerçekleştirdiğimizde Arduino Serial Monitor ekranında değerleri


görebiliyoruz.
Arduıno ile Elektrik ve Manyetizma Sensörleri 147

MAG3130 ile 3 Eksen Magnetometre Uygulaması


MAG3130, Sparkfun Electronics firmasının ürettiği 3 eksenli dijital bir
magnetometredir. Manyetik alan veya moment ölçümünde oldukça kullanışlı.
MAG3130, standart I2C seri arayüzü çıkışına sahip.

Sparkfun Electronics firması MAG3130 için bir video hazırlamış. Uygulama ger-
çekleştirmeden önce izlemenizi tavsiye ederim.
https://www.youtube.com/watch?v=ZMpMYVjokNw
MAG3130 sensörünün daha iyi anlaşılması için aşağıda blok diyagramı payla-
şılmıştır.

Aşağıda MAG3130 sensörünün pin bağlantıları ve ölçüm için kullandığı


koordinat sistemi gösterilmiştir.
148 Bölüm 6 Elektrik ve Manyetizma Sensörleri

MAG3130 ile ilgili ayrıntılı bilgileri ve veri sayfalarını (datasheet) aşağıdaki


adreste bulabilirsiniz:
https://cdn.sparkfun.com/datasheets/Sensors/Magneto/MAG3110_v9.2.pdf
Şimdi uygulamamızı gerçekleştiriyoruz. Bunun için kullanılan Arduino kodları
aşağıda:

Arduino Kodu
/*
MAG3130 ile 3 Eksen Magnetometre Uygulaması

Yazdığımız kodlar 16 bit çözünürlükte x, y ve z kodlarını okuyor.

*/

// I2C haberleşmesi için Wire kütüphanesini ekliyoruz.


#include <Wire.h>

// MAG3130 için 7 bitlik adres tanımlıyoruz.


#define MAG_ADDR 0x0E

void setup()
{
// I2C haberleşmesini başlatıyoruz.
Wire.begin();

// Seri haberleşmeyi başlatıyoruz.


Serial.begin(9600);

config();
}

void loop()
{
print_values();
delay(5);
}

// config sınıfında belirttiğimiz işlemleri gerçekleştiriyoruz.


void config (void)
{
// Cihazı 0x0E adresine iletiyoruz.
Wire.beginTransmission(MAG_ADDR);
Arduıno ile Elektrik ve Manyetizma Sensörleri 149

Wire.send(0x11);

// Otomatik resetlemeyi etkinleştiriyoruz.


Wire.send(0x80);

// İletişimi durduruyoruz.
Wire.endTransmission();

delay(15);

// Cihazı 0x0E adresine iletiyoruz.


Wire.beginTransmission(MAG_ADDR);

Wire.send(0x10);

Wire.send(1);

// İletişimi durduruyoruz.
Wire.endTransmission();

// print_values sınıfında belirttiğimiz işlemleri gerçekleştiriyoruz.


void print_values (void)
{
Serial.print(“x=”);
Serial.print(readx());
Serial.print(“,”);
Serial.print(“y=”);
Serial.print(ready());
Serial.print(“,”);
Serial.print(“z=”);
Serial.println(readz());

int readx(void)
{
// MSB ve LSB’yi tanımlıyoruz.
int xl, xh;

Wire.beginTransmission(MAG_ADDR);
Wire.send(0x01);

// İletişimi durduruyoruz.
Wire.endTransmission();
150 Bölüm 6 Elektrik ve Manyetizma Sensörleri

delayMicroseconds(2);

Wire.requestFrom(MAG_ADDR, 1);

while(Wire.available())
{
xh = Wire.receive();
}

delayMicroseconds(2);

Wire.beginTransmission(MAG_ADDR);
Wire.send(0x02);

// İletişimi durduruyoruz.
Wire.endTransmission();

delayMicroseconds(2);

Wire.requestFrom(MAG_ADDR, 1);

while(Wire.available())
{
xl = Wire.receive();
}

// MSB ve LSB’yi birleştiriyoruz.


int xout = (xl|(xh << 8));
return xout;
}

int ready (void)


{
// MSB ve LSB’yi tanımlıyoruz.
int yl, yh;
Wire.beginTransmission(MAG_ADDR);
Wire.send(0x03);

// İletişimi durduruyoruz.
Wire.endTransmission();

delayMicroseconds(2);

Wire.requestFrom(MAG_ADDR, 1);

while(Wire.available())
{
Arduıno ile Elektrik ve Manyetizma Sensörleri 151

yh = Wire.receive();
}

delayMicroseconds(2);

Wire.beginTransmission(MAG_ADDR);
Wire.send(0x04);

// İletişimi durduruyoruz.
Wire.endTransmission();

delayMicroseconds(2);

Wire.requestFrom(MAG_ADDR, 1);

while(Wire.available())
{
yl = Wire.receive();
}

// MSB ve LSB’yi birleştiriyoruz.


int yout = (yl|(yh << 8));
return yout;

int readz(void)
{
// MSB ve LSB’yi tanımlıyoruz.
int zl, zh;

Wire.beginTransmission(MAG_ADDR);
Wire.send(0x05);

// İletişimi durduruyoruz.
Wire.endTransmission();

delayMicroseconds(2);

Wire.requestFrom(MAG_ADDR, 1);

while(Wire.available())
{
zh = Wire.receive();
}

delayMicroseconds(2);
Wire.beginTransmission(MAG_ADDR);
Wire.send(0x06);

// İletişimi durduruyoruz.
Wire.endTransmission();

delayMicroseconds(2);

Wire.requestFrom(MAG_ADDR, 1);

while(Wire.available())
{
zl = Wire.receive();
}

// MSB ve LSB’yi birleştiriyoruz.


int zout = (zl|(zh << 8));
return zout;

Neler Öğrendik?
Bu bölümde, mühendislik uygulamalarında sıklıkla kullanılan elektrik ve
manyetizma sensörleri kavramına değindik. Bu konnuda uygulamalar
gerçekleştirdik. Bu bölümde öğrendikleriniz ile içerisinde akım, gerilim ve
manyetizma sensörleri barındıran oldukça farklı ve önemli mühendislik
uygulamaları gerçekleştirebilirsiniz.
7
İvmeölçerler

Bu Bölümde
Giriş 154 Günümüzde ivmeölçerler sanayide ve bilimsel
Arduino ve İvmeölçerler 157 çalışmalarda bir çok uygulamada kullanılıyor.
Neler Öğrendik? 186 Yüksek hassasiyete sahip ivmeölçerler füzelerde,
uçaklarda, insansız hava araçlarında, gemilerde ve
denizaltlarında navigasyon sistemlerinde kullanılan
en önemli parçalardan biridir. Bunun yanı sıra, döner
makinelerde titreşimi tespit edip, bu titreşimin hangi
sınırlar içinde gerçekleştiğini gözler.
Bu bölümde, farklı özelliklere sahip ivmeölçerler
ile Arduino uygulamaları gerçekleştirerek hangi
ivmeölçerin uygulamamız için uygun olduğuna karar
vereceğiz.
154 Bölüm 7 İvmeölçerler

Giriş
Fizikte, hızın zamana göre değişme miktarı veya hızın zamana göre türevine eşit
olan niceliğe ivme denir. İvme vektörel bir nicelik olarak, cismin hem yönünün hem
de hızının zamana göre değişimini veriyor. İvmenin birimi SI cinsinden m / s2’dir.
SI Nedir?: 1960’taki Ağırlıklar ve Ölçümler genel konferansında tanımlanan ve
resmi statü verilen Uluslar Arası Birim Sistemi’dir. Bu sistem, bilimde ve teknolojide
kullanılmak üzere önerilmiştir. SI Birim Sistemi’nin genel kabulü, teknik iletişimi
kolaylaştırmaya yöneliktir. SI Birim Sistemi, MKS Birim Sistemiyle doğrudan ilgili.

Aşağıdaki tabloda bazı SI türeme birimleri için özel isimler ve semboller


gösterilmiştir.

İvme, fizik kuralı olarak bilinen a = F / m ifadesi ile bulunuyor. Buradaki F ifadesi,
hareket yönünde uygulanan kuvveti, m ise cismin sahip olduğu kütleyi ifade
ediyor. Burada F ifadesi vektörel bir nicelik olup, m gibi skaler bir niceliğe
bölündüğünde vektörel bir nicelik olan a ifadesi meydana geliyor.
Giriş 155

İvmeölçer veya akselerometre, bir kütleye uygulanan ivmeyi ölçen cihaz.


Uygulanan ivmenin ölçümünde, koordinat ivmesi (referans ivme) bilinmesine
gerek duyulmuyor. Bunun yerine ivmeölçer, içindeki test kütlesine referans
eksenindeki, kütleden kaynaklı olan uygulanan kuvvetlere bakıyor. Örneğin;
dünya üzerinde deniz seviyesine yakın bir bölgede düz bir yüzey üzerinde
ivmeölçerin gösterdiği değer 9.81 m / s2 olurken, serbest düşen bir cisim
üzerinde veya boş uzayda göstereceği değer 0 m / s2 oluyor.

İvmeölçer bir kütlenin sahip olduğu ivme değerini ölçerken, içerisinde bulunan
konumlandırılmış kütlenin, değişken konumundan faydalanarak sonuç
elde ediyor. Yani bu kütlelerin dik konumunu referans kabul ederek, oluşan
değişiklikleri bu referans noktalarıyla kıyaslayarak bulabiliyor.

Görüldüğü gibi, kütle ivme kılavuzunun içerisinde yatay olarak konumlandırılmış.


Başlangıç noktası 0 gram olarak belirlenmiş olup, kıyaslamaları 0 grama göre
yapıyor. Bu kılavuz dikey olarak konumlandırıldığında ise, kütlenin konumu
1 grama geliyor. Çünkü içerisindeki kütle yatay olarak 9.81 m / s2 değerine
eşit bir ivmeyle hareket ettirilseydi, 1 gram noktasına gelecek şekilde kütle
konumlandırılmış olacaktı. Burada dikey olarak kütleye etki eden yer çekimi
etkisiyle, yatayda görülen etki dikeyde de geçerli oluyor.
156 Bölüm 7 İvmeölçerler

Burada ele aldığımız ivmeölçerler, bu eksenlerin birleşmesiyle hareketi kontrol


ediyor. Bilindiği gibi, bu sensörler tek yönlü ölçüm yapabiliyor. Bu nedenle, 3
adet sensör birleşerek 3 boyutta hareketi kontrol edebiliyor. Bu 3 eksen ise x,
y ve z olarak isimlendirilirse, bu şekilde gösterimle koordinat sistemi oluşmuş
oluyor. Böylece sistem oluşacak ivme değişikliklerini her yönde kontrol
edebilecektir.
İvmeölçerler, sanayide ve bilimsel çalışmalarda bir çok uygulama alanında
kullanılıyor. Yüksek hassasiyete sahip ivmeölçerler füzelerde, uçaklarda,
insansız hava araçlarında, gemilerde ve denizaltılarda navigasyon sistemlerinde
kullanılan en önemli parçalarda biri. Bunun yanı sıra, döner makinelerde
titreşimi tespit edip, bu titreşimin hangi sınırlar içinde gerçekleştiğini gözlüyor.
Günümüzde tablet bilgisayarlar ve dijital kameralarda titreşim engelleyici
sistemlerin devreye girmesinde, görüntü netleştirmede ve kullanıcı duyarlı
sistemlerin etkinleşmesinde kullanılıyor.
İvmeölçerler farklı yöntemlerle çalışıyor. Bunların en yaygın olarak kullanılanları
piezoelektrik ve kapasitif ivmeölçerlerdir. Piezoelektrik ivmeölçerler,
içerisindeki mikroskobik kristaller maruz kaldıkları stres sonucunda orantılı
olarak gerilim üretiyor. Üretilen bu gerilimin değeri, önceden tanımlanmış olan
gerilim değeri ile kıyaslanıyor ve ivmenin etkisi bulunmuş oluyor.

Diğer bir çeşit ivmeölçer ise kapasitif ivmeölçerlerdir. Birbirine yakın iki paralel
levha arasında kapasitif etki oluşuyor ve kapasitans değeri ortaya çıkıyor. Bu
tip ivmeölçerlerde kapastif iletim prensibi kullanılıyor. Bir ivme uygulandığı
takdirde sabit elektrot ve hareketli elektrot arasındaki mesafe değişiyor. Bu
sayede kapasite değerinin de değişmesi gerçekleşiyor. Sonuç olarak ivme ile
ilintili bir çıkış değeri elde ediliyor.
Arduıno ve İvmeölçerler 157

İvme sensörleri analog ve sayısal çıkışlı olmak üzere ikiye ayrılıyor. Analog ivme
sensörleri, ivmenin değişmesine göre sürekli gerilim değeri veriyor. Sayısal ivme
sensörleri ise; uygulama alanına göre, modüle edilmiş çıkış değerleri veriyor.
İvme sensörleri seçilirken göz önünde bulundurulması gereken özellikler
şunlardır:
» Eksen Sayısı: Bilindiği gibi ivme sensörlerinin hareketi kontrol edebilmesi için
birden fazla eksene sahip olması gerekiyor. Piyasada çok eksenli bir çok ivmeölçer
mevcut. Ancak en yoğun olarak 2 ve 3 eksenli ivmeölçerler kullanılıyor.
» Hassasiyet: Ölçümün önemine göre hassasiyeti düşük veya yüksek ivme sensör-
leri tercih edilebiliyor. Hassasiyeti yüksek olan ivme sensörleri ivmedeki küçük
bir değişimde dahi çok büyük tepkiler verebiliyor.
» Bant Genişliği: Yavaş hareket eden bir sistemde ivme değişimlerini algılayabilmek
için bant genişliğinin 50 Hz, yüksek hızda ise 100 Hz olması gerekiyor.
» Empedans: Uygulanan sistemin çıkış elemanının empedansının, uygulanan
ivmeölçerle uygun olması gerekiyor.

Arduıno ve İvmeölçerler
Buraya kadar ivmeölçerler ile temel olarak tanışmış olduk. Artık Arduino ile
beraber projeler yapmaya hazırız. İlk olarak kolay bir örnek üzerinden Arduino
ile ivmeölçer kullanımını görelim. Bu örnekte ADXL337 ivmeölçeri ile ivme
ölçümünü gözlemleyeceğiz. Tabi buradaki veri okuma mekanizması farklı
ivmeölçerlerden veri almak için de rahatlıkla kullanılabilir.

ADXL337 ile İvme Ölçme Uygulaması


ADXL337, Sparkfun Electronics firmasının ürettiği 3 eksene sahip bir ivmeölçer.
Bu analog ivmeölçerler uzun alanlarda rahatlıkla kullanılabiliyor. ADXL337
oldukça düşük gürültü ve güç tüketimine sahip(sadece 300 uA). Kartın üzerinde
regülatör bulunmadığı için güç kaynağının değeri 1.8 ile 3.6 V DC arasında
158 Bölüm 7 İvmeölçerler

olmalı. ADXL337 ivmeölçerini satın aldığınızda komponentleri tam olarak


monte edilmiş halde geliyor. Ayrıca harici bileşenlerle yüklü olarak test edilmiş
bir şekilde geliyor. İçerisinde bulunan 0.1 uF kondansatörlerle bütün eksenleri
50 Hz bant aralığına ayarlanmıştır.
Özellikler:
» Çalışma Gerilimi: 1.8 V - 3.6 V DC,
» Tipik Akımı: 300 uA,
» Menzil: 3g + / - ,
» 3 eksenli algılama,
» Eksen başına tek bir kapasitör ile bant genişliğini ayarlama.

Sparkfun Electronics firması, ADXL337 ivmeölçerini tanıtan bir video hazırlamış,


izlemenizi tavsiye ederim.
https://www.youtube.com/watch?v=rjWXtpbgLKg
ADXL337 sensörünün daha iyi anlaşılması için aşağıda blok diyagramı paylaşılmıştır.
Arduıno ve İvmeölçerler 159

ADXL337 ile ilgili ayrıntılı bilgileri ve veri sayfalarını (datasheet) aşağıdaki


adreste bulabilirsiniz:
https://cdn.sparkfun.com/datasheets/Sensors/Accelerometers/ADXL337.pdf
ADXL337 ivmeölçerinin pinlerinin açıklaması aşağıdaki tabloda gösterilmiştir.

ADXL337 ivmeölçeri ile uygulama gerçekleştirmeden önce şematik dosyasını


incelemek de fayda var.

ADXL337 ivmeölçerinin Eagle dosyalarını aşağıdaki adreste bulabilirsiniz:


https://cdn.sparkfun.com/datasheets/Sensors/Accelerometers/ADXL337%20
Breakout-v10.zip
Şimdi uygulamamızı gerçekleştiriyoruz. Bunun için kullanılan Arduino kodları
aşağıda:

Arduino Kodu
/*
ADXL337 ile İvme Ölçme Uygulaması
ADXL337 3 Eksen İvmeölçer ile
İvme Ölçümü

İvmeölçerin her bir ekseni için okuma gerçekleştiriyoruz.


X ekseni için Analog 0 pininden,
Y ekseni için Analog 1 pininden,
Z ekseni için Analog 2 pininden okuma gerçekleştiriyoruz.

*/
160 Bölüm 7 İvmeölçerler

// Bu iki değişkenin doğruluğundan emin oluyoruz.


//ADXL337 için bu değer 3 (±3g) ‘dir.
int scale = 3;

// Arduino Uno gibi 5V çıkış veren bir mikrodenetleyici kullanacaksak bu kod


satırını eklememiz gerekiyor.
boolean micro_is_5V = true;

void setup()
{
// Seri haberleşmeyi başlatıyoruz. Seri haberleşme hızımız 115200 bps’dir.
Serial.begin(115200);
}

// İvmeölçer verilerimizi her bir eksen için okuyoruz.


void loop()
{
// X, Y ve Z ekseninin bilgilerini A0, A1 ve A2 pininden okuyoruz.
int rawX = analogRead(A0);
int rawY = analogRead(A1);
int rawZ = analogRead(A2);

// Her eksen için ölçülen değerleri Analog Dijital Dönüştürme işleminden geçiriyoruz.
float scaledX, scaledY, scaledZ;

// 5V için...
if (micro_is_5V)
{
scaledX = mapf(rawX, 0, 675, -scale, scale); // 3.3/5 * 1023 =~ 675
scaledY = mapf(rawY, 0, 675, -scale, scale);
scaledZ = mapf(rawZ, 0, 675, -scale, scale);
}

// 3.3 V için...
else
{
scaledX = mapf(rawX, 0, 1023, -scale, scale);
scaledY = mapf(rawY, 0, 1023, -scale, scale);
scaledZ = mapf(rawZ, 0, 1023, -scale, scale);
}

// X,Y,Z ekseninden okuduğumuz bilgileri Arduino Serial Monitor ekranında gözlemleyebiliyoruz.


Serial.print(“X: “); Serial.println(rawX);
Serial.print(“Y: “); Serial.println(rawY);
Arduıno ve İvmeölçerler 161

Serial.print(“Z: “); Serial.println(rawZ);


Serial.println();

Serial.print(“X: “); Serial.print(scaledX); Serial.println(“ g”);


Serial.print(“Y: “); Serial.print(scaledY); Serial.println(“ g”);
Serial.print(“Z: “); Serial.print(scaledZ); Serial.println(“ g”);
Serial.println();

// Bu işlemi her 2 saniyede bir gerçekleştiriyoruz (500 Hz).


delay(2000);
}

// Arduino’nun map fonksiyonuna benzer biçimde bir mapf fonksiyonu oluşturuyoruz.


float mapf(float x, float in_min, float in_max, float out_min, float out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

Arduino ve ADXL337 bağlantıları aşağıdaki şemada yer alıyor.

Devre Şeması
162 Bölüm 7 İvmeölçerler

MMA8452Q ile İvme Ölçme Uygulaması


MMA8452Q, Sparkfun Electronics firması tarafından üretilmiş üç eksene sahip
bir ivmeölçer. Düşük güç tüketimine ve kapatma moduna sahiptir. Seçilebilir
hassasiyet çıkışına (±2g / ±4g / ±8g) sahip olmasıyla önemli bir avantaja
sahiptir. MMA8452Q ivmeölçerini satın aldığınızda komponentleri tam olarak
monte edilmiş halde geliyor. Ayrıca harici bileşenlerle yüklü olarak test edilmiş
bir şekilde geliyor.
Özellikler:
» Çalışma Gerilimi: 1.95 V - 3.6 V DC,
» ±2g / ±4g / ±8g ayarlanabilir hassasiyete sahip olma,
» 1.56 Hz ile 800 Hz arasında çıkış veri hızına sahip olma,
» 8 bit ve 12 bit dijital çıkış verebilme,
» I2C dijital çıkış arayüzüne sahip olma,
» 6 adet interrupt kaynağı için 2 adet programlanabilir interrupt pinine sahip olma,
» Hareket algılama için 3 adet gömülü kanala sahip olma,
» 6 uA ile 165 uA akım tüketimine sahip olma.

MMA8452Q sensörünün daha iyi anlaşılması için aşağıda blok diyagramı


paylaşılmıştır.
Arduıno ve İvmeölçerler 163

MMA8452Q ile ilgili ayrıntılı bilgileri ve veri sayfalarını (datasheet) aşağıdaki


adreste bulabilirsiniz:
https://cdn.sparkfun.com/datasheets/Sensors/Accelerometers/MMA8452Q-rev8.1.pdf
MMA8452Q sensörünün için saptanabilir ivmelerin yönü aşağıdaki şekilde
paylaşılmıştır.

MMA8452Q ivmeölçerinin pinlerinin açıklaması aşağıdaki tabloda gösterilmiştir.

MMA8452Q ivmeölçeri ile uygulama gerçekleştirmeden önce şematik dosyasını


incelemek de fayda var.

MMA8452Q ivmeölçerinin Eagle dosyalarını aşağıdaki adreste bulabilirsiniz:


https://cdn.sparkfun.com/datasheets/Sensors/Accelerometers/MMA8452Q_
Breakout-v10.zip
MMA8452Q sensörü ile uygulama yapmadan önce MMA8452Q kütüphanesini
indirip Arduino’nun libraries klasörüne eklememiz gerekiyor.
164 Bölüm 7 İvmeölçerler

Aşağıdaki linkten bu kütüphaneyi elde edebilirsiniz:


https://cdn.sparkfun.com/assets/learn_tutorials/2/4/9/SFE_MMA8452Q-library.zip

Arduino IDE’deki Sketch>Import Library>Add Library... menüsünden, indirdi-


ğimiz ZIP dosyasını seçerek kütüphaneleri Arduino ortamına ekleyebiliyoruz.
Şimdi uygulamamızı gerçekleştiriyoruz. Bunun için kullanılan Arduino kodları
aşağıda:

Arduino Kodu
/*
MMA8452Q ile İvme Ölçme Uygulaması
MMA8452Q 3 Eksen İvmeölçer ile
İvme Ölçümü

Uygulamamızı gerçekleştirebilmek için programımıza


MMA8452Q kütüphanesini ekliyoruz. Kütüphaneyi aşağıdaki
linkten indirebiliriz:
https://cdn.sparkfun.com/assets/learn_tutorials/2/4/9/SFE_MMA8452Q-library.zip

Arduino IDE’deki Sketch > Import Library > Add Library... menüsünden, indirdiğimiz
ZIP dosyasını seçerek kütüphaneleri Arduino ortamına ekleyebiliyoruz.

I2C haberleşmesi için ise Wire kütüphanesini programımıza ekliyoruz.

*/

// I2C haberleşmesi için gereken Wire kütüphanesini ekliyoruz.


#include <Wire.h>

// İvmeölçere ait MMA8452Q kütüphanesini ekliyoruz.


#include <SFE_MMA8452Q.h>

// accel isminde bir nesne oluşturuyoruz.


MMA8452Q accel;

void setup()
{

// Seri haberleşmeyi başlatıyoruz.


Serial.begin(9600);

accel.init();
}

void loop()
Arduıno ve İvmeölçerler 165

{
// İvmeölçer ile herhangi bir ivme bilgisi ölçülmüşse...
if (accel.available())
{
// ... bu bilgiyi okuyoruz.
accel.read();

printCalculatedAccels();

printOrientation();

// Serial Monitor ekranında değerleri gözlemleyebiliyoruz.


Serial.println();
}
}

void printAccels()
{
// İvmeölçerden X,Y,Z eksenlerine ait bilgileri okuyoruz.
Serial.print(accel.x, 3);
Serial.print(“\t”);
Serial.print(accel.y, 3);
Serial.print(“\t”);
Serial.print(accel.z, 3);
Serial.print(“\t”);
}

// Hesaplamaları gerçekleştiriyoruz.
void printCalculatedAccels()
{
Serial.print(accel.cx, 3);
Serial.print(“\t”);
Serial.print(accel.cy, 3);
Serial.print(“\t”);
Serial.print(accel.cz, 3);
Serial.print(“\t”);
}

void printOrientation()
{

byte pl = accel.readPL();
switch (pl)
166 Bölüm 7 İvmeölçerler

{
case PORTRAIT_U:
Serial.print(“Portrait Up”);
break;
case PORTRAIT_D:
Serial.print(“Portrait Down”);
break;
case LANDSCAPE_R:
Serial.print(“Landscape Right”);
break;
case LANDSCAPE_L:
Serial.print(“Landscape Left”);
break;
case LOCKOUT:
Serial.print(“Flat”);
break;
}

Arduino ve MMA8452Q bağlantıları aşağıdaki şemada yer alıyor.

Devre Şeması

Memsıc 2125 ile İvme Ölçme Uygulaması


Memsic 2125, Parallax firması tarafından üretilen ±3 g aralığında titreşim,
dönüş, ivme ve eğim ölçebilen, 2 eksene sahip bir termal ivmeölçer. Hazırdaki
uygulamalara entegre olabilmesi için diğer ivmeölçerlerle elektriksel
uyumludur. 6 bacaklı DIF kılıflı entegre devre gibi tasarlanmış olan modüle
bir devre tahtası ya da deliğe geçmeli prototip yüzeyinde tüm I / O bağlantılar
kolaylıkla yapılabiliyor.
Arduıno ve İvmeölçerler 167

Memsic 2125 ivmeölçerinin çalışma mantığı oldukça basit bir prensibe


dayanıyor. Sensörün ortasında yer alan kapalı bölmede içine ısıyı ileten bir
gazın sıkıştırıldığı yarı küresel bir bölme bulunuyor. Bu yarı küresel bölmenin
etrafında ise 4 adet ısı sensörü yer alıyor. Sensör dikey eksende eğildiğinde,
ısınan gaz yer değiştiriyor ve böylelikle yarı küresel ortamın etrafındaki ısı
sensörleri birbirinden farklı değerleri okuyorlar. Sensör ise bu farklı değerleri
birbirleriyle karşılaştırıyor ve iki eksen için farklı g (yerçekimi ivmesi) değeri
üretiyor.
Özellikler:
» Her eksende ±3g ölçüme sahip olma,
» 1 mili g değerinden az çözünürlüğe sahip olma,
» Her eksende basit g kuvveti atım çıkışına sahip olma,
» 6 pin 0.1 inç aralıklı DIP modüle sahip olma,
» Sıcaklık için analog çıkış pinine (Tout) sahip olma,
» + 3.3 ile +5 V DC çalışma gerilimine ihtiyaç duyması,
» 5 V DC gerilim ile çalıştığında 4 mA’den daha az çalışma akımına ihtiyaç duyması,
» TTL / CMOS uyumlu, çevrim haddi hızlanmayla orantılı, 100 Hz PWM output
sinyaline sahip olma,
» 10.7 x 10.7 x 11.8 mm (0.42 x 0.42 x 0.45 inç) ebatlarında olma,
» 0 ile +70 OC çalışma sıcaklığına sahip olma.

Memsic 2125 sensörünün daha iyi anlaşılması için aşağıda çalışma mantığı res-
medilmiştir.
168 Bölüm 7 İvmeölçerler

Memsic 2125 ile ilgili ayrıntılı bilgileri ve veri sayfalarını (datasheet) aşağıdaki
adreste bulabilirsiniz:
http://www.robotshop.com/media/files/pdf/memsic-2125-datasheet-28017.pdf
Memsic 2125 sensörünün için ivmelerin yönü aşağıdaki şekilde paylaşılmıştır.
Buna göre sensör üzerinden Düşey Rotasyonel Açı ve X ve Y Tilt Açıları hesap-
lanabiliyor.

Memsic 2125 ivmeölçerinin pinlerinin açıklaması aşağıdaki tabloda gösterilmiştir.

Memsic 2125 ivmeölçeri ile uygulama gerçekleştirmeden önce şematik


dosyasını incelemek de fayda var.

Yukarıdaki şematik dosyada, sensörün X ve Y eksenleri için verilmiş olan pals


çıkışları ve uygulamada birer adet 220 Ω direnç üzerinden Arduino modelimizin
2 ve 3 nolu pinlerine bağlanacak olan, 2 (Y Out) ve 5 (X Out) nolu sensör
çıkışlarını görebiliyoruz.
Memsic 2125 ivmeölçeri ile geliştirilebilecek uygulamalar şunlardır;
» Bağımsız robot uygulamaları için çift eksenli kayma tespiti,
» İki eksenli Tilt algılamalı otonom robot uygulamaları,
» Tek eksenli dönüş konumu tespiti,
Arduıno ve İvmeölçerler 169

» Alarm sistemlerine yönelik hareket / hareketsizlik tespiti,


» RC hobi projeleri için otopilot uygulamalarıdır.
Uygulamamızı gerçekleştirirken, Memsic 2125 ivmeölçerinin X ve Y çıkışlarını
Arduino kartımızın Dijital 2 pin ve Dijital 3 nolu pinlerine bağlantılıyoruz.
İvmeölçerin 3 nolu bacağını toprak (GND) hattına bağlantılıyoruz. İvmeölçerin
6 nolu bacağını + 5V hattına bağlantılıyoruz.

Şimdi uygulamamızı gerçekleştiriyoruz. Bunun için kullanılan Arduino kodları


aşağıda:

Arduino Kodu
/*
Memsic 2125 ile İvme Ölçme Uygulaması
Memsic 2125 2 Eksen İvmeölçer ile
İvme Ölçümü

Bağlantılar:
* İvmeölçerin X çıkışı -> Arduino digital pin 2
* İvmeölçerin Y çıkışı -> Arduino digital pin w
* İvmeölçerin 3 nolu bacağı -> Toprak (GND) hattı
* İvmeölçerin 6 nolu bacağı -> +5V hattı

*/

// İvmeölçerin X çıkış pinini tanımlıyoruz.


const int xPin = 2;

// İvmeölçerin Y çıkış pinini tanımlıyoruz.


const int yPin = 3;
170 Bölüm 7 İvmeölçerler

void setup() {

// Seri haberleşmeyi başlatıyoruz.


Serial.begin(9600);

// İvmeölçerin X ve Y pininin dijital giriş pini olarak tanımlıyoruz.


pinMode(xPin, INPUT);
pinMode(yPin, INPUT);
}

void loop() {

// X ve Y pininden okunan değerler.


int pulseX, pulseY;

int accelerationX, accelerationY;

// X ve Y ekseninden okuma yapıyoruz.


pulseX = pulseIn(xPin, HIGH);
pulseY = pulseIn(yPin, HIGH);

accelerationX = ((pulseX / 10) - 500) * 8;


accelerationY = ((pulseY / 10) - 500) * 8;

// Değerleri Serial Monitor ekranında görüntülüyoruz.


Serial.print(accelerationX);
Serial.print(“\t”);
Serial.print(accelerationY);
Serial.println();

// Her 100 milisaniyede bir işlemleri tekrarlıyoruz.


delay(100);
}

Arduino ve Memsic 2125 bağlantıları aşağıdaki şemada yer alıyor.

Devre Şeması
Arduıno ve İvmeölçerler 171

ADXL345 İle İvme Ölçme Uygulaması


ADXL345, düşük güç tüketimine sahip, 3 eksende çıkış verebilen bir açısal ivme
sensörüdür. ±16 g’lik bir algılama alanına sahip. I2C hattı üzerinden ve SPI hattı
üzerinden çıkış alınabiliyor.

SPI Nedir?: Serial Peripheral Interface ya da SPI, veri yolu full duplex modunda
çalışan senkron bir seri veri bağlantısı standartıdır. İsmi Motorola tarafından
belirlenmiş. Master / Slave kipinde çalışan aygıtlardan Master aygıt veri
İPUCU çerçevesini başlatıyor. Birden fazla Slave aygıt varsa kendilerine ait Slave
Seçim teliyle seçilebiliyorlar. SPI, benzer seri iletişim biçimlerinden daha fazla
tele ihtiyaç duyuyor. Bu nedenle dört telli olarak da anılıyor.

SPI Veri Yolu: Birincil ve İkincil Aygıtlar

Tipik SPI Veri Yolu: Birincil Aygıt ve Üç Adet İkincil Aygıt

Kart üzerinde dahili voltaj regülatörü bulunduğundan 3 ile 5 V arası bir giriş
gerilimi ile beslenebiliyor. Kart üzerinde bununla beraber iki adet kesme pini
de bulunuyor. Bu pinler, serbest düşüş, dokunma veya çift dokunma için
ayarlanarak çıkış vermesi sağlanabiliyor.
Özellikler:
» 3 ile 5 V DC giriş voltajına ihtiyaç duyan,
» Düşük güç tüketimine (40 uA) sahip,
» Serbest düşüş algılamaya sahip olma,
» SPI ve I2C arayüzüne sahip olma.
172 Bölüm 7 İvmeölçerler

ADXL345 sensörünün daha iyi anlaşılması için aşağıda blok diyagramı


paylaşılmıştır.

ADXL345 ile ilgili ayrıntılı bilgileri ve veri sayfalarını (datasheet) aşağıdaki


adreste bulabilirsiniz:
http://www.analog.com/media/en/technical-documentation/data-sheets/ADXL345.pdf

ADXL345 sensörünün için saptanabilir ivmelerin yönü ile ilgili bilgi aşağıdaki
şekilde paylaşılmıştır.

ADXL345 sensörünü satın aldığımızda pinleri lehimlenmemiş bir şekilde


gelebiliyor. Bunun için öncelikle ivmeölçerin pinlerini lehimliyoruz. İlk olarak
uygun headerları devre tahtası üzerine şekilde gösterildiği gibi yerleştiriyoruz.
Arduıno ve İvmeölçerler 173

Daha sonra ivmeölçerimizin lehimlenme için ayrılmış kısımları ile header


parçamızı birleştiriyoruz.

Son olarak lehimleme işlemimizi gerçekleştiriyoruz.

ADXL345 için I2C haberleşmesini gerçekleştirebilme amacıyla Arduino


bağlantısını gerçekleştireceğiz. Bağlantı ile ilgili açıklamalar ve devre şeması
aşağıda yer alıyor.
GND (ADXL345) > GND (Arduino)
VIN (ADXL345) > +5 V (Arduino)
SDA (ADXL345) > SDA (Arduino)
SCL (ADXL345) > SCL (Arduino)
174 Bölüm 7 İvmeölçerler

ADXL345 ivmeölçerinin pinlerinin açıklaması aşağıdaki tabloda gösterilmiştir.


Arduıno ve İvmeölçerler 175

ADXL345 sensörü ile uygulama yapmadan önce ADXL345 kütüphanelerini


indirip Arduino’nun libraries klasörüne eklememiz gerekiyor.
Aşağıdaki linklerden bu kütüphaneleri elde edebilirsiniz:
https://github.com/adafruit/Adafruit_Sensor
https://github.com/adafruit/Adafruit_ADXL345
Arduino IDE’deki Sketch>Import Library>Add Library... menüsünden, indirdi-
ğimiz ZIP dosyasını seçerek kütüphaneleri Arduino ortamına ekleyebiliyoruz.
Şimdi ADXL345 sensörümüzün çalışıp çalışmadığını test ediyoruz. Bu işlem
için yukarıda verdiğimiz ADXL345 ile Arduino’nun I2C bağlantı devre şemasını
kullanıyoruz. Bunun için kullanılan Arduino kodları aşağıda:

Arduino Kodu
/*
ADXL345 ile İvme Ölçme Uygulaması
ADXL345 3 Eksen İvmeölçer ile
İvme Ölçümü Testi

*/

// I2C haberleşmesi için Wire kütüphanesini ekliyoruz.


#include <Wire.h>

// ADXL345 sensörü için gerekli kütüphaneleri ekliyoruz.


#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>

/* Sadece sensörümüze ait bir kimlik tanımlıyoruz. */


Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);

void displaySensorDetails(void)
{
sensor_t sensor;
accel.getSensor(&sensor);
Serial.println(“------------------------------------”);
Serial.print (“Sensor: “); Serial.println(sensor.name);
Serial.print (“Driver Ver: “); Serial.println(sensor.version);
Serial.print (“Unique ID: “); Serial.println(sensor.sensor_id);
Serial.print (“Max Value: “); Serial.print(sensor.max_value); Serial.println(“ m/s^2”);
Serial.print (“Min Value: “); Serial.print(sensor.min_value); Serial.println(“ m/s^2”);
Serial.print (“Resolution: “); Serial.print(sensor.resolution); Serial.println(“ m/s^2”);
176 Bölüm 7 İvmeölçerler

Serial.println(“------------------------------------”);
Serial.println(“”);
delay(500);
}

void displayDataRate(void)
{
Serial.print (“Data Rate: “);

switch(accel.getDataRate())
{
case ADXL345_DATARATE_3200_HZ:
Serial.print (“3200 “);
break;
case ADXL345_DATARATE_1600_HZ:
Serial.print (“1600 “);
break;
case ADXL345_DATARATE_800_HZ:
Serial.print (“800 “);
break;
case ADXL345_DATARATE_400_HZ:
Serial.print (“400 “);
break;
case ADXL345_DATARATE_200_HZ:
Serial.print (“200 “);
break;
case ADXL345_DATARATE_100_HZ:
Serial.print (“100 “);
break;
case ADXL345_DATARATE_50_HZ:
Serial.print (“50 “);
break;
case ADXL345_DATARATE_25_HZ:
Serial.print (“25 “);
break;
case ADXL345_DATARATE_12_5_HZ:
Serial.print (“12.5 “);
break;
case ADXL345_DATARATE_6_25HZ:
Serial.print (“6.25 “);
break;
Arduıno ve İvmeölçerler 177

case ADXL345_DATARATE_3_13_HZ:
Serial.print (“3.13 “);
break;
case ADXL345_DATARATE_1_56_HZ:
Serial.print (“1.56 “);
break;
case ADXL345_DATARATE_0_78_HZ:
Serial.print (“0.78 “);
break;
case ADXL345_DATARATE_0_39_HZ:
Serial.print (“0.39 “);
break;
case ADXL345_DATARATE_0_20_HZ:
Serial.print (“0.20 “);
break;
case ADXL345_DATARATE_0_10_HZ:
Serial.print (“0.10 “);
break;
default:
Serial.print (“???? “);
break;
}
Serial.println(“ Hz”);
}

void displayRange(void)
{
Serial.print (“Range: +/- “);

switch(accel.getRange())
{
case ADXL345_RANGE_16_G:
Serial.print (“16 “);
break;
case ADXL345_RANGE_8_G:
Serial.print (“8 “);
break;
case ADXL345_RANGE_4_G:
Serial.print (“4 “);
break;
case ADXL345_RANGE_2_G:
178 Bölüm 7 İvmeölçerler

Serial.print (“2 “);


break;
default:
Serial.print (“?? “);
break;
}
Serial.println(“ g”);
}

void setup(void)
{
Serial.begin(9600);
Serial.println(“Accelerometer Test”); Serial.println(“”);

/* Sensörümüzü başlatıyoruz. */
if(!accel.begin())
{
/* Herhangi bir bağlantı sorunuyla karşılaştığımızda hata mesajını üretiyoruz. */
Serial.println(“Ooops, no ADXL345 detected ... Check your wiring!”);
while(1);
}

accel.setRange(ADXL345_RANGE_16_G);
/

displaySensorDetails();

displayDataRate();
displayRange();
Serial.println(“”);
}

void loop(void)
{

sensors_event_t event;
accel.getEvent(&event);

/* Sonuçları Arduino Serial Monitor ekranında görüntülüyoruz. */


Serial.print(“X: “); Serial.print(event.acceleration.x); Serial.print(“ “);
Serial.print(“Y: “); Serial.print(event.acceleration.y); Serial.print(“ “);

Serial.print(“Z: “); Serial.print(event.acceleration.z); Serial.print(“


“);Serial.println(“m/s^2 “);
delay(500);
}
Arduıno ve İvmeölçerler 179

Uygulamamızı çalıştırdığımızda Arduino Serial Monitor ekranında aşağıdaki


gibi bir sonuç elde ediyoruz.

İvmeölçerimizi test ettik, doğru bir şekilde çalıştığını gözlemledik. Şimdi sırada
kalibrasyon işlemlerimiz var. Öncelikle kalibrasyon için gerekli olan programı-
mızı yüklüyoruz. Bu işlem için yukarıda verdiğimiz ADXL345 ile Arduino’nun
I2C bağlantı devre şemasını kullanıyoruz. Bunun için kullanılan Arduino kodları
aşağıda:

Arduino Kodu
/*
ADXL345 ile İvme Ölçme Uygulaması
ADXL345 3 Eksen İvmeölçer ile
İvme Kalibrasyonu

*/

// I2C haberleşmesi için Wire kütüphanesini ekliyoruz.


#include <Wire.h>

// ADXL345 sensörü için gerekli kütüphaneleri ekliyoruz.


#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>

/* Sadece sensörümüze ait bir kimlik tanımlıyoruz. */


Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);

// Değişkenlerimizi tanımlıyoruz.
float AccelMinX = 0;
float AccelMaxX = 0;
float AccelMinY = 0;
float AccelMaxY = 0;
float AccelMinZ = 0;
float AccelMaxZ = 0;
180 Bölüm 7 İvmeölçerler

void setup(void)
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
Serial.println(“ADXL345 Accelerometer Calibration”);
Serial.println(“”);

/* Sensörümüzü başlatıyoruz. */
if(!accel.begin())
{
/* Herhangi bir bağlantı sorunuyla karşılaştığımızda hata mesajını üretiyoruz. */
Serial.println(“Ooops, no ADXL345 detected ... Check your wiring!”);
while(1);
}
}

void loop(void)
{
Serial.println(“Type key when ready...”);

// Bir karakter gelene kadar bekliyoruz.


while (!Serial.available()){}

sensors_event_t accelEvent;
accel.getEvent(&accelEvent);

if (accelEvent.acceleration.x < AccelMinX) AccelMinX = accelEvent.


acceleration.x;
if (accelEvent.acceleration.x > AccelMaxX) AccelMaxX = accelEvent.
acceleration.x;

if (accelEvent.acceleration.y < AccelMinY) AccelMinY = accelEvent.


acceleration.y;
if (accelEvent.acceleration.y > AccelMaxY) AccelMaxY = accelEvent.
acceleration.y;

if (accelEvent.acceleration.z < AccelMinZ) AccelMinZ = accelEvent.


acceleration.z;
if (accelEvent.acceleration.z > AccelMaxZ) AccelMaxZ = accelEvent.
acceleration.z;

Serial.print(“Accel Minimums: “); Serial.print(AccelMinX); Serial.print(“ “);Serial.


print(AccelMinY); Serial.print(“ “); Serial.print(AccelMinZ); Serial.println();
Serial.print(“Accel Maximums: “); Serial.print(AccelMaxX); Serial.print(“ “);Serial.
print(AccelMaxY); Serial.print(“ “); Serial.print(AccelMaxZ); Serial.println();
Arduıno ve İvmeölçerler 181

while (Serial.available())
{
Serial.read();
}
}

Kalibrasyon sketch’imizi yükledikten sonra sırasıyla aşağıdaki resimlerdeki gibi


ADXL345 ivmeölçerimizin pozisyonunu değiştiriyoruz.
Öncelikle ivmeölçerimizi masa gibi sağlam ve düz bir yüzeye yerleştiriyoruz.
Serial Monitor ekranına bu durama karşılık herhangi bir karakter yazın.
Programımız bu pozisyon için sonuçlarını ekranda gösterecektir.

Daha sonra şekildeki gibi düz levhanın yönünü değiştiriyoruz ve Serial Monitor
ekranına farklı bir karakter daha giriyoruz.

Daha sonra şekildeki gibi düz levhanın yönünü değiştiriyoruz ve Serial Monitor
ekranına farklı bir karakter daha giriyoruz.

Eğer kalibrasyon işlemlerini doğru bir şekilde tamamladıysak aşağıdaki gibi bir
sonuç ekranı gözlemliyoruz.
182 Bölüm 7 İvmeölçerler

ADXL345 ivmeölçeri ile uygulama gerçekleştirmeden önce şematik dosyasını


incelemek de fayda var.

ADXL345 ivmeölçerinin Eagle dosyalarını aşağıdaki adreste bulabilirsiniz:


http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Accelerometers/
ADXL345_Breakout.zip
Şimdi uygulamamızı gerçekleştiriyoruz. Bunun için kullanılan Arduino kodları
aşağıda:
Arduıno ve İvmeölçerler 183

Arduino Kodu
/*
ADXL345 ile İvme Ölçme Uygulaması
ADXL345 3 Eksen İvmeölçer ile
İvme Ölçümü

*/

// SPI haberleşmesi için SPI kütüphanenisini ekliyoruz.


#include <SPI.h>

// Chip Select pini olarak 10 nolu pini tanımlıyoruz.


int CS=10;

// Buradaki bilgileri ilgili veri sayfalarından (datasheet) okuyoruz.

// Power Control Register


char POWER_CTL = 0x2D;
char DATA_FORMAT = 0x31;

//X-Axis Data 0
char DATAX0 = 0x32;

//X-Axis Data 1
char DATAX1 = 0x33;

//Y-Axis Data 0
char DATAY0 = 0x34;

//Y-Axis Data 1
char DATAY1 = 0x35;

//Z-Axis Data 0
char DATAZ0 = 0x36;

//Z-Axis Data 1
char DATAZ1 = 0x37;

char THRESH_ACT = 0x24;


char THRESH_INACT = 0x38;
char TIME_INACT = 0x26;

char INT_ENABLE = 0x2E;

char INT_MAP = 0x2F;


char ACT_INACT_CTL = 0x27;

char INT_SOURCE = 0x30;


184 Bölüm 7 İvmeölçerler

char values[10];

// x,y,z eksenlerinden okuma gerçekleştirmek için değişkenlerimizi tanımlıyoruz.


int x,y,z;

void setup(){
// SPI haberleşmesini etkinleştiriyoruz.
SPI.begin();

// SPI bağlantısını ADXL345 sensörü iin konfigüre ediyoruz.


SPI.setDataMode(SPI_MODE3);

// Seri haberleşmeyi başlatıyoruz.


Serial.begin(9600);

// Chip Select pinini çıkış olarak tanımlıyoruz.


pinMode(CS, OUTPUT);

// İletişim başlamadan önce Chip Select pini HIGH seviyesinde tanımlanmalı.


digitalWrite(CS, HIGH);

attachInterrupt(0, interruptHandler, RISING);

writeRegister(DATA_FORMAT, 0x01);

// Ölçüm modu.
writeRegister(POWER_CTL, 0x08);

writeRegister(INT_MAP,0xF7 && 0xEF);

writeRegister(THRESH_INACT,1);

writeRegister(TIME_INACT,0);

writeRegister(ACT_INACT_CTL, 0x0F);

writeRegister(INT_ENABLE, 0x08);

readRegister(INT_SOURCE, 1, values);

// Kesme için bekliyoruz.


Serial.println(“Waiting for interrupt!”);
}

void interruptHandler(){

Serial.println(“something raise an interrupt!”);


}

void loop(){
Arduıno ve İvmeölçerler 185

readRegister(DATAX0, 6, values);

// The X değeri values[0] ve values[1] içerisinde saklanıyor.


x = ((int)values[1]<<8)|(int)values[0];

//The Y değeri values[2] ve values[3] içerisinde saklanıyor.


y = ((int)values[3]<<8)|(int)values[2];

//The Z değeri values[4] ve values[5] içerisinde saklanıyor.


z = ((int)values[5]<<8)|(int)values[4];

// Sonuçları Serial Monitor ekranında gösteriyoruz.


Serial.print(x, DEC);
Serial.print(‘,’);
Serial.print(y, DEC);
Serial.print(‘,’);
Serial.println(z, DEC);
delay(500);
}

// Bu sınıf ile Register bilgilerini yazıyoruz.


void writeRegister(char registerAddress, char value){

// Chip Select pinini LOW seviyesinde tanımlıyoruz.


digitalWrite(CS, LOW);

SPI.transfer(registerAddress);

SPI.transfer(value);

//SPI haberleşmesinin sonunda Chip Select pinini HIGH seviyesinde tanımlıyoruz.


digitalWrite(CS, HIGH);
}

// Bu sınıf ile Register bilgilerini okuyoruz.


void readRegister(char registerAddress, int numBytes, char * values){

char address = 0x80 | registerAddress;

if(numBytes > 1)address = address | 0x40;

// Chip Select pinini LOW seviyesinde tanımlıyoruz.


digitalWrite(CS, LOW);

SPI.transfer(address);

for(int i=0; i<numBytes; i++){


values[i] = SPI.transfer(0x00);
}
// Chip Select pinini HIGH seviyesinde tanımlıyoruz.
digitalWrite(CS, HIGH);
}

Arduino ve ADXL345 bağlantıları aşağıdaki şemada yer alıyor.

Neler Öğrendik?
Bu bölümde, farklı özelliklere sahip ivmeölçer sensörleri ile uygulamalar
geliştirme konusuna değindik. Ölçülen bilgiler aynı çevre şartlarının bilgileri
olsa da farklı sensörlerle aynı uygulamaları gerçekleştirmenin avantajlarına
ve dezavantajlarına değindik. Elinizde bulunan ivmeölçerlerin neredeyse
tamamının kullanımını inceledik. Bu bölümde öğrendikleriniz ile içerisinde
ivmeölçerleri barındıran oldukça farklı ve önemli mühendislik uygulamaları
gerçekleştirebilirsiniz.
EK1
Standart ASCII
Tablosu
188 Bölüm EK1 Standart ASCII Tablosu

Standart ASCII Tablosu


Oct Dec Hex Sembol Açıklama
000 0 0x00 NUL Boş
001 1 0x01 SOH Başlık Başlangıcı
002 2 0x02 STX Metin Başlangıcı
003 3 0x03 ETX Metin Sonu
004 4 0x04 EOT Aktarım Sonu
005 5 0x05 ENQ Sorgu
006 6 0x06 ACK Bildirim
007 7 0x07 BEL Zil
010 8 0x08 BS Geri Al
011 9 0x09 HT Yatay Sekme
012 10 0x0a LF Satır Besleme
013 11 0x0b VT Dikey Besleme
014 12 0x0c FF Form Besleme
015 13 0x0d CR Satır Başı
016 14 0x0e SO Dışarı Kaydır
017 15 0x0f SI İçeri Kaydır
020 16 0x10 DLE Veri Bağlantısından Çık
021 17 0x11 DC1 Aygıt Denetimi - 1
022 18 0x12 DC2 Aygıt Denetimi - 2
023 19 0x13 DC3 Aygıt Denetimi - 3
024 20 0x14 DC4 Aygıt Denetimi - 4
025 21 0x15 NAK Olumsuz Bildirim
026 22 0x16 SYN Zaman Uyumlu Boşta Kalma
027 23 0x17 ETB Aktarım Bloğu Sonu
030 24 0x18 CAN İptal
031 25 0x19 EM Ortam Sonu
032 26 0x1a SUB Değiştir
033 27 0x1b ESC Çık
034 28 0x1c FS Dosya Ayırıcı
035 29 0x1d GS Grup Ayırıcı
036 30 0x1e RS Kayıt Ayırıcı
037 31 0x1f US Birim Ayırıcı
040 32 0x20 SP Space
041 33 0x21 ! Ünlem
189 Bölüm EK1 Standart ASCII Tablosu

042 34 0x22 “ Çift Tırnak


043 35 0x23 # Diyez
044 36 0x24 $ Dolar
045 37 0x25 % Yüzde
046 38 0x26 & Ve
047 39 0x27 ‘ Tek Tırnak
050 40 0x28 ( Aç Parantez
051 41 0x29 ) Kapa Parantez
052 42 0x2a * Yıldız
053 43 0x2b + Artı
054 44 0x2c , Virgül
055 45 0x2d - Eksi
056 46 0x2e . Nokta
057 47 0x2f / Slash
060 48 0x30 0 Sıfır
061 49 0x31 1 Bir
062 50 0x32 2 İki
063 51 0x33 3 Üç
064 52 0x34 4 Dört
065 53 0x35 5 Beş
066 54 0x36 6 Altı
Oct Dec Hex Sembol Açıklama
067 55 0x37 7 Yedi
070 56 0x38 8 Sekiz
071 57 0x39 9 Dokuz
072 58 0x3a : İki Nokta Üst Üste
073 59 0x3b ; Noktalı Virgül
074 60 0x3c < Küçüktür
075 61 0x3d = Eşittir
076 62 0x3e > Büyüktür
077 63 0x3f ? Soru İşareti
0100 64 0x40 @ At işareti
0101 65 0x41 A A
0102 66 0x42 B B
0103 67 0x43 C C
0104 68 0x44 D D
190 Bölüm EK1 Standart ASCII Tablosu

0105 69 0x45 E E
0106 70 0x46 F F
0107 71 0x47 G G
0110 72 0x48 H H
0111 73 0x49 I I
0112 74 0x4a J J
0113 75 0x4b K K
0114 76 0x4c L L
0115 77 0x4d M M
0116 78 0x4e N N
0117 79 0x4f O O
0120 80 0x50 P P
0121 81 0x51 Q Q
0122 82 0x52 R R
0123 83 0x53 S S
0124 84 0x54 T T
0125 85 0x55 U U
0126 86 0x56 V V
0127 87 0x57 W W
0130 88 0x58 X X
0131 89 0x59 Y Y
0132 90 0x5a Z Z
0133 91 0x5b [ Aç Köşeli Parantez
0134 92 0x5c \ Ters Slash
0135 93 0x5d ] Kapa Köşeli Parantez
0136 94 0x5e ^ Üs
0137 95 0x5f _ Alt Tire
0140 96 0x60 ‘ Tek Tırnak
0141 97 0x61 a a
0142 98 0x62 b b
0143 99 0x63 c c
0144 100 0x64 d d
0145 101 0x65 e e
0146 102 0x66 f f
0147 103 0x67 g g
0150 104 0x68 h h
191 Bölüm EK1 Standart ASCII Tablosu

0151 105 0x69 i i


0152 106 0x6a j j
0153 107 0x6b k k
0154 108 0x6c l l
0155 109 0x6d m m
0156 110 0x6e n n
0157 111 0x6f o o
Oct Dec Hex Sembol Açıklama
0160 112 0x70 p p
0161 113 0x71 q q
0162 114 0x72 r r
0163 115 0x73 s s
0164 116 0x74 t t
0165 117 0x75 u u
0166 118 0x76 v v
0167 119 0x77 w w
0170 120 0x78 x x
0171 121 0x79 y y
0172 122 0x7a z z
0173 123 0x7b { Aç Süslü Parantez
0174 124 0x7c | Dikey Çizgi
0175 125 0x7d } Kapa Süslü Parantez
0176 126 0x7e ~ Tilda
0177 127 0x7f Delete
Kaynaklar
» www.arduino.cc , Arduino Home - Arduino Resmi Web Sitesi
» http://learn.adafruit.com/ , Adafruit Learning System
» http://www.mdpi.com/journal/sensors”, MDPI
» Embedded System Design , Heath, Steve (2003). Newnes
» http://mathworks.com , Mathworks
» Mühendisler için Arduino , Kanat Volkan, Dikeyeksen Yayıncılık (2014)
» http://fritzing.org/learning/, Fritzing
» The Art of Electronics 2nd Edition Cambridge University Press , Paul Horowitz,
Winfield Hill, Cambridge, 1989
» https://learn.sparkfun.com/ , Sparkfun Learn
http://makezine.com/category/electronics/arduino/ , Make Magazine
» Sensörler Ders Notları , Yrd. Doç. Dr. İlker Ünal
» Electronic Circuits: Fundamentals and Applications, 3rd Edition Routlege
Tooley, Mike (2012)

Kısaltmalar
» LED: Light Emitting Diode
» LDR: Light Dependent Resistance
» PIR: Passive Infra Red
» IEEE: Elektrik ve Elektronik Mühendisleri Enstitüsü
» WPAN: Kablosuz Kişisel Alan Ağı
» WWAN: Kablosuz Geniş Alan Ağı
» WISA: Wireless Interface for Sensors and Actuators
» SNR: Gürültü Oranı
» ADC: Analog Digital Converter
» ROM: Read Only Memory
» PPM: Parts Per Million
» I2C: Inter-Integrated Circuit
» SPI: Serial Peripheral Interface
EK2
Kitapta Kullanılan
Komponentlerin
Listesi ve Indeks
194 Bölüm EK2 Kitapta Kullanılan Komponentlerin Listesi ve Indeks

Bölüm 1 | Sensörler
» (Kavramsal açıklamalar yapıldığı için herhangi bir komponent kullanılmamıştır.)

Bölüm 2 | Sıcaklık ve Nem Sensörleri


» 1 x Arduino Uno Rev 3
» 1 x 1,5 m A’dan B’ye USB Kablo
» 1 x 65’li Karışık Jumper Kablo Seti
» 1 x Breadboard
» 1 x LM35 Sıcaklık Sensörü
» 1 x DHT11 Sıcaklık ve Nem Sensörü
» 1 x DHT22 Sıcaklık ve Nem Sensörü
» 1 x DS18B20 Sıcaklık Sensörü
» 1 x SHT15 Sıcaklık Sensörü
» 5 x 10K Ohm Direnç
» 5 x 4.7K Ohm Direnç

Bölüm 3 | Mesafe Sensörleri


» 1 x Arduino Uno Rev 3
» 1 x 1,5 m A’dan B’ye USB Kablo
» 1 x 65’li Karışık Jumper Kablo Seti
» 1 x Breadboard
» 1 x HC-SR04 Ultrasonic Mesafe Sensörü
» 1 x Parallax Ping Mesafe Sensörü
» 1 x Sharp GP2Y0A02YK0F Mesafe Sensörü
» 1 x VCNL4000 Mesafe Sensörü

Bölüm 4 | Duman ve Gaz Sensörleri


» 1 x Arduino Uno Rev 3
» 1 x 1,5 m A’dan B’ye USB Kablo
» 1 x 65’li Karışık Jumper Kablo Seti
» 1 x Breadboard
» 1 x MQ-4 Metan ve CNG Gazı Sensörü
» 1 x MQ-6 LPG / İzobütan / Propan Gazı Sensörü
195 Bölüm EK2 Kitapta Kullanılan Komponentlerin Listesi ve Indeks

» 1 x Oksijen Gazı Sensörü


» 1 x MQ-3 Alkol Gazı Sensörü
» 1 x MQ-7 Karbonmonoksit Gazı Sensörü

Bölüm 5 | Işık ve Renk Sensörleri


» 1 x Arduino Uno Rev 3
» 1 x Arduino Lilypad
» 1 x 1,5 m A’dan B’ye USB Kablo
» 1 x 65’li Karışık Jumper Kablo Seti
» 1 x Breadboard
» 1 x 5mm LDR
» 1 x Pozometre (Var olması durumunda kullanılmalı)
» 1 x TEMT6000 Işık Sensörü
» 1 x ML8511 Işık Sensörü
» 1 x TSL2561 Işık Sensörü
» 1 x ADJD-S311 Renk Sensörü
» 1 x Arduino Lilypad Işık Sensörü
» 1 x RGB LED
» 5 x 100 Ohm Direnç
» 5 x 150 Ohm Direnç

Bölüm 6 | Elektrik ve Manyetizma Sensörleri


» 1 x Arduino Uno Rev 3
» 1 x 1,5 m A’dan B’ye USB Kablo
» 1 x 65’li Karışık Jumper Kablo Seti
» 1 x Breadboard
» 1 x ACS715 Akım Sensörü
» 1 x INA169 Akım Sensörü
» 1 x MAG3130 3 Eksen Magnetometre
» 1 x LED
» 5 x 430 Ohm Direnç
196 Bölüm EK2 Kitapta Kullanılan Komponentlerin Listesi ve Indeks

Bölüm 7 | İvmeölçerler
» 1 x Arduino Uno Rev 3
» 1 x 1,5 m A’dan B’ye USB Kablo
» 1 x 65’li Karışık Jumper Kablo Seti
» 1 x Breadboard
» 1 x ADXL337 3 Eksen İvmeölçer
» 1 x MMA8452Q 3 Eksen İvmeölçer
» 1 x MEMSIC 2125 2 Eksen İvmeölçer
» 1 x ADXL345 3 Eksen İvmeölçer
» 5 x 430 Ohm Direnç

Indeks

A C F
ACS715 138 C#. 35 Foto Direnç 14, 104
ADC 40 COM 38 Foto Diyot 15, 105
Adjd-S311 124 COM Port 35 Foto Pil 15, 106
ADXL337 159 Coordinator 26 Fototransistörler 17, 107
ADXL337 ile İvme 157 Çözünürlük 27
ADXL345 171, 172 G
Ağ 24 D
Gain 40
Akım Ölçme 142 DHT11 41 Gaz 83, 99
Algılayıcılar 10 DHT22 7, 44 Giriş 32, 58, 104, 136, 154
Alkol Gazı 95 Dijital 40 Güneş Pili 15, 106
AND 25 Dinamik 20 Gürültü 28, 29
Arduino Kodu 34 diyafram 23
Arduino 33, 59, 77, 85, 157 DS18B20 48 H
Arduino Lilypad 131 Duman 83 Hall 11, 137
atış gürültüsü 29 Durdur 35 Hareketli Bobin 23
B Hassasiyet 28
E
Hata 28
Bant 21 Elektrik 135 HC-SR04 59, 69
Basınç 11 Elektriksel 3 Hoparlör 22
Bobin 20 Encoderler 18
End Device 26
Indeks 197

I M P
INA169 142 Manyetik 3, 20 Parallax 71
İndüktif 10, 137 Manyetik Sensör 9 Parallax Pıng 71
ISA100 26 Manyetizma 135 Piezoelektrik Basınç 13
MATLAB & Simulink 39
Işık Pili 15 PIR 17
Mekanik 3
Işık Sensörü 131 Memsic 2125 166 PIR Sensörler 107, 17
Işık ve Renk 103 Menzil 158 Propan 88
Işıma 3 Mesafe 57, 58, 69 pull-up 8
Isı ve Nem 7 Mesafe Ölçme 59, 71
İvmeölçer 153, 157 Mesafe Sensörleri 57 R
İvme Ölçme 166 Mikrofon 19 Reed 10, 136
İzobütan 88 Mikrofonlar 22
Renk Ölçme 124
mıknatıs 23
rezistör 5
K Ml8511 115
MMA8452Q 162 Router 26
Kablosuz Sensör 24 MMA8452Q ile İvme162
Kalibrasyon 28 MQ-3 95 S
Kapasitif 11, 20 MQ-4 85 Sensör Çeşitleri 3
Karbonmonoksit 99 MQ-6 88 Sensör Karakteristikleri 27
Karbon Tozlu 22 MQ-7 99
Sensörler 1
Kondansör 20 Multidrop 48
Serial Monitor 47
Kristal 23 N SerialPort 35
Kristal Mikrofonlar 21 Şeritli 21
Kuantalama 29 Neler 55, 81, 102, 133, 152, 186
Ses Sensörleri 18
Kur 35 Neler Öğrendik 29
Sharp 74
Nem 33
Sharp GP2Y0A02YK0F 74
L Nem Ölçme 41
NTC 5 SHT15 51
LCD 69 Simulink 39
LDR 14, 104 O Simulink Support 40
Led Diyot 15, 105 Ölçme 33 Sıcaklık 31, 33, 39, 51
Lilypad Işık 131 Ölçüm 27 SNR 29
Lm35 33 Ölçüm Aralığı 27 Strain Gauge 12
LM35 7, 33 OneWire 48
Load Cell 12 optik kuplai 16
LPG 97 Optik Sensörler 13
Optokuplör 16, 106
Indeks 198

T U Y
Teknoloji 24 Uç Cihazlar 26 Yönetici 26
Temassız 11, 136 Ultrasonik 18 Yönlendirici 26
term 5 Uygulama 33, 157 Yükleme 28
Termal 3
termistör 5 V Z
Termocouple 4 VCNL4000 78 ZigBee 26
Termokupl 8
tiz 23 W
Transduser 2 Wirelles Interface 25
Wirelless 25
Wisa 25
Wirelless Hart 25

You might also like