Professional Documents
Culture Documents
dikeyeksen ® 43
ISBN 978-605-4898-13-8
Yayıncılık Sertifika No 19703
1. Baskı: Nisan 2015
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
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.
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.
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
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.
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.
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.
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
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
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
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.
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.
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.
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
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
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
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.
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
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.
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ö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
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
Arduino Kodu
/*
LM35 ile Sıcaklık Ölçme Uygulaması
LM35 Sıcaklık Sensörü ile
Sıcaklık Ölçümü
*/
void setup ()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
}
void loop ()
{
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
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:
Arayüzü tasarladıktan sonra C#. NET kodlarını yazacağız. Bunun için kullanılan
C#. NET kodları aşağıda:
*/
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
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ı!”);
}
}
System.Threading.Thread.Sleep(100);
}
catch (Exception ex) { }
}
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ü
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);
}
}
Arduino Kodu
/*
DHT11 ile Sıcaklık ve Nem Ölçme Uygulaması
void setup()
{
Arduıno ve Sıcaklık ve Nem Sensörleri 43
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);
}
44 Bölüm 2 Sıcaklık ve Nem Sensörleri
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.
Arduino Kodu
/*
DHT22 ile Sıcaklık ve Nem Ölçme Uygulaması
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();
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
Arduino Kodu
/*
DS18B20 ile Sıcaklık Ölçme Uygulaması
*/
OneWire ds(DS18S20_Pin);
void setup(void)
{
// Seri iletişimi başlatıyoruz.
Serial.begin(9600);
}
void loop(void)
{
// 1 saniye bekliyoruz.
delay(1000);
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;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1);
return TemperatureSum;
}
Arduıno ve Sıcaklık ve Nem Sensörleri 51
Arduino Kodu
/*
SHT15 ile Sıcaklık ve Nem Ölçme Uygulaması
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);
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
digitalWrite(clockPin, HIGH);
pinMode(dataPin, INPUT);
// Onay
int ack;
{
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ö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
Ç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
Arduino Kodu
/*
HC-SR04 ile Mesafe Ölçme Uygulaması
HC-SR04 Ultrasonik Mesafe Sensörü ile
Mesafe Ölçümü
*/
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);
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
*/
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;
}
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ı!”);
}
}
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 Kodu
HC-SR04 ile Mesafe Ölçme Uygulaması
HC-SR04 Ultrasonik Mesafe Sensörü ile
Mesafe Ölçümü
*/
void setup()
{
Serial.begin (9600); // Seri haberleşmeyi başlatıyoruz
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
sure = pulseIn(echoPin, HIGH); // süreyi buluyoruz
delay(200);
}
}
}
Arduino Kodu
/*
HC-SR04 ile Mesafe Ölçme Uygulaması
HC-SR04 Ultrasonik Mesafe Sensörü ile
Mesafe Ölçümü
*/
void setup()
{
// LCD’yi başlatıyoruz.
lcd.begin(16, 2);
void loop()
{
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(10);
digitalWrite(pingPin, LOW);
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” + “ “;
delay(100);
}
Arduino Kodu
/*
Parallax PING ile Mesafe Ölçme Uygulaması
Parallax PING Ultrasonik Mesafe Sensörü ile
Mesafe Ölçümü
*/
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);
Serial.print(inches);
Serial.print(“in, “);
Serial.print(cm);
Serial.print(“cm”);
Serial.println();
delay(100);
}
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
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.
Arduino Kodu
/*
Sharp GP2Y0A02YK0F ile Mesafe Ölçme Uygulaması
Sharp GP2Y0A02YK0F Kızılötesi Mesafe Sensörü ile
Mesafe Ölçümü
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 Kodu
/*
VCNL4000 ile Mesafe Ölçme Uygulaması
VCNL4000 Mesafe Sensörü ile
Mesafe Ölçümü
Arduıno ve Mesafe Sensörleri 79
*/
void setup()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
Wire.begin();
initVCNL4000();
}
void loop()
{
Serial.print(ortamDegeri);
Serial.print(“ | “);
Serial.println(yakinlikDegeri);
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...”);
}
return data;
}
return data;
}
Wire.beginTransmission(VCNL4000_ADDRESS);
Neler Öğrendik? 81
Wire.write(address);
Wire.write(data);
Wire.endTransmission();
}
Wire.beginTransmission(VCNL4000_ADDRESS);
Wire.write(address);
Wire.endTransmission();
Wire.requestFrom(VCNL4000_ADDRESS, 1);
while(!Wire.available());
byte data = Wire.read();
return data;
}
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ö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
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
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ü
*/
void setup()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
}
void loop()
{
88 Bölüm 4 Duman ve Gaz Sensörleri
Devre Şeması
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ü
*/
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);
}
Devre Şeması
Oksijen Sensörü
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ı
*/
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 analog 0 giriş pininden okuyoruz ve ADC ile dijital değere dönüştürüyoruz.
sensorDegeri = analogRead(A0);
sensorGerilimi =(sensorDegeri/1024)*5.0;
// Değilse...
else
{
// Buzzer ötmesin.
digitalWrite(buzzerPin,LOW);
Serial.print(sensorGerilimi);
Serial.println(“ mV”);
Arduino Kodu
/*
MQ-3 ile Alkol Gazı Ölçme Uygulaması
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);
}
Devre Şeması
Arduino Kodu
/*
MQ-7 ile Karbonmonoksit Gazı Ölçme Uygulaması
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);
}
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
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
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
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.
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
Arduino Kodu
/*
LDR ile Işık Ölçme Uygulaması
LM35 Işık Sensörü ile
Işık Miktarı Ölçümü
*/
void setup ()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
}
void loop ()
112 Bölüm 5 Işık ve Renk Sensörleri
Devre Şeması
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
Arduino Kodu
/*
TEMT6000 ile Işık Ölçme Uygulaması
TEMT6000 Işık Sensörü ile
Işık Miktarı Ölçümü
*/
void setup ()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
}
void loop ()
{
Devre Şeması
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
Arduino Kodu
/*
ML8511 ile Işık Ölçme Uygulaması
ML8511 UV Işık Sensörü ile
Işık Miktarı Ölçümü
*/
void setup ()
{
Arduıno ile Işık ve Renk Sensörleri 117
void loop ()
{
Serial.println();
delay (100);
byte numberOfReadings = 8;
unsigned int runningValue = 0;
float mapfloat (float x, float in_min, float in_max, float out_min, float out_max)
Devre Şeması
TSL2561 sensörünün daha iyi anlaşılması için aşağıda blok diyagramı paylaşılmıştır.
Arduino Kodu
/*
TSL2561 ile Işık Ölçme Uygulaması
TSL2561 Işık Sensörü ile
Işık Miktarı Ölçümü
void setup ()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
light.begin();
if (light.getID(ID))
{
Serial.print(“Got factory ID: 0X”);
Serial.print(ID,HEX);
Serial.println(“, should be 0X5X”);
}
gain = 0;
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 ()
{
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;
// 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
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”);
}
}
Devre Şeması
124 Bölüm 5 Işık ve Renk Sensörleri
Ö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
Arduino Kodu
/*
ADJD-S311 ile Renk Ölçme Uygulaması
ADJD-S311 Renk Sensörü ile
Renk Ölçümü
*/
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);
set_register(REG_CAP_RED, redGain);
set_register(REG_CAP_GREEN, greenGain);
set_register(REG_CAP_BLUE, blueGain);
set_register(REG_CAP_CLEAR, clearGain);
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);
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()
{
// Ortamalarını buluyoruz.
cc/=4;
red /=4;
green /=4;
blue /=4;
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);
// 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;
else
{
set_gain(REG_INT_CLEAR_LO,half);
performMeasurement();
int halfValue = get_readout(REG_DATA_CLEAR_LO);
int getColorGain()
{
int gainFound = 0;
int upperBox=4096;
int lowerBox = 0;
int half;
while (!gainFound) {
half = ((upperBox-lowerBox)/2)+lowerBox;
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
}
}
set_register(gainRegister, lo);
set_register(gainRegister+1, hi);
}
}
Wire.beginTransmission(I2C_ADDRESS);
Wire.send(r);
Wire.send(v);
Wire.endTransmission();
}
unsigned char v;
Wire.beginTransmission(I2C_ADDRESS);
Wire.send(r); // register to read
Wire.endTransmission();
Devre Şeması
Arduino Kodu
/*
Arduino Lilypad Işık Sensörü Uygulaması
Arduino Lilypad modeli için üretilmiş
ışık sensörü ile uygulamamızı gerçekleştiriyoruz.
*/
void setup()
{
// Pin bağlantılarını tanımlıyoruz.
pinMode(LEDpin, OUTPUT);
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);
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.
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
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.
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ü
*/
void setup()
{
// Seri haberleşmeyi başlatıyoruz.
Serial.begin(9600);
}
void loop()
{
// Analog değeri okuyoruz.
deger = analogRead(analogPin);
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.
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;
void loop()
{
// Sensör değerimizi okuyoruz.
sensorValue = analogRead(SENSOR_PIN);
Devre Şeması
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.
Arduino Kodu
/*
MAG3130 ile 3 Eksen Magnetometre Uygulaması
*/
void setup()
{
// I2C haberleşmesini başlatıyoruz.
Wire.begin();
config();
}
void loop()
{
print_values();
delay(5);
}
Wire.send(0x11);
// İletişimi durduruyoruz.
Wire.endTransmission();
delay(15);
Wire.send(0x10);
Wire.send(1);
// İletişimi durduruyoruz.
Wire.endTransmission();
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();
}
// İ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();
}
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();
}
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.
İ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 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.
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.
Arduino Kodu
/*
ADXL337 ile İvme Ölçme Uygulaması
ADXL337 3 Eksen İvmeölçer ile
İvme Ölçümü
*/
160 Bölüm 7 İvmeölçerler
void setup()
{
// Seri haberleşmeyi başlatıyoruz. Seri haberleşme hızımız 115200 bps’dir.
Serial.begin(115200);
}
// 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);
}
Devre Şeması
162 Bölüm 7 İvmeölçerler
Arduino Kodu
/*
MMA8452Q ile İvme Ölçme Uygulaması
MMA8452Q 3 Eksen İvmeölçer ile
İvme Ölçümü
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.
*/
void setup()
{
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();
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;
}
Devre Şeması
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.
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ı
*/
void setup() {
void loop() {
Devre Şeması
Arduıno ve İvmeölçerler 171
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.
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 için saptanabilir ivmelerin yönü ile ilgili bilgi aşağıdaki
şekilde paylaşılmıştır.
Arduino Kodu
/*
ADXL345 ile İvme Ölçme Uygulaması
ADXL345 3 Eksen İvmeölçer ile
İvme Ölçümü Testi
*/
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
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);
İ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
*/
// 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...”);
sensors_event_t accelEvent;
accel.getEvent(&accelEvent);
while (Serial.available())
{
Serial.read();
}
}
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
Arduino Kodu
/*
ADXL345 ile İvme Ölçme Uygulaması
ADXL345 3 Eksen İvmeölçer ile
İvme Ölçümü
*/
//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 values[10];
void setup(){
// SPI haberleşmesini etkinleştiriyoruz.
SPI.begin();
writeRegister(DATA_FORMAT, 0x01);
// Ölçüm modu.
writeRegister(POWER_CTL, 0x08);
writeRegister(THRESH_INACT,1);
writeRegister(TIME_INACT,0);
writeRegister(ACT_INACT_CTL, 0x0F);
writeRegister(INT_ENABLE, 0x08);
readRegister(INT_SOURCE, 1, values);
void interruptHandler(){
void loop(){
Arduıno ve İvmeölçerler 185
readRegister(DATAX0, 6, values);
SPI.transfer(registerAddress);
SPI.transfer(value);
SPI.transfer(address);
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
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
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 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