4 Mayıs 2018 Cuma

Hc-Sr04 Mesafe Sensörü ve 29.1 ?



Hc-Sr04 Mesafe Sensörü ve Bağlantı Uçları
Arduino projelerimizde sıkça kullanılan sensörlerin başında olan ultrasonik mesafe sensöründen bahsedeceğim. Bu sensör yarasaları taklit eden bir yapıya sahiptir. Sensörün üzerinde bulunan bir adet hoparlör ve bir adet mikrofon sayesinde karşıda bir engel olup olmadığını algılamanın yanında ne kadar uzaklıkta bir cisim olduğunu da hesaplayabilmekteyiz. Aşağıdaki görselden de anlaşılacağı üzere hoparlörden çıkan yüksek frekanstaki ses bir engele çarpıp yankısının tekrar geri dönmesi sonucu mikrofona ulaştığı an engel ve mesafe hakkında veriler oluşturulmaktadır.

Trigger bağlı olduğu ardunio Output (Çıkış) pininden Sinyal değerini  Lojik 1 (açık) olarak işaretlendiğinde sensörün hoparlöründen ultrasonic ses dalgaları yayıyor, bu ses dalgaları bir cisme çarpıp  geri döndüğünden dönen ses dalgaları sensörün mikrofon tarafından algılandığında Echo  pininden arduino üzerinde bağlı olan Input (Giriş)  dijital pine Lojik 1 (açık) değerini aktarıyor ve bu sayede sensör önünde bulunan nesneleri en az 2cm en fazla 4m den algılayabilmektedir. Arduino açık  bağlantı şeması aşağıdaki gibi yapılır.


Gelelim ölçümü nasıl hesapladığına: Öncelikle 29.1 değeri nedir nereden geliyoru anlamamız gerekir. Bu sensörün çalışma prensibi yazımın başında da belirttiğim gibi yarasalardan ilham alınarak yapılmıştır. Hoparlörden çıkan ultrasonic ses dalgaları cisme kadar gidip çarpar ve mikrofon alıcısına kadar gittiği yolu tekrar dönerek ulaşır. Burası önemli mesafe hesaplanırken yolun sadece gidiş yada dönüş kısmı hesaplanmalıdır dolayısı ile giden ve gelen ses dalgasının süresi mesafeyi iki kez hesaplanmaması için geçen süre ikiye bölünmelidir.
Buraya kadar tamamdır umarım ancak 29.1 hala açıklığa kavuşmadı dediğinizi duyar gibiyim işte şimdi bu değerin geldiği yeri açıklıyorum. Ses dalgası sıfır santigrat derecede 331 metre/saniye yol almaktadır, bu bir fizik kuralıdır ayrıca normal oda sıcaklığının 20 santigrat derece kabul edildiğinide hatırlarsak bu değeri ispatlamaya başlayalım.


Ses dalgasının hızı bulunulan konumun sıcaklığına bağlı olarak değişkenlik gösterdiğinden sıcaklık faktörünü dikkate alan şu formülü kullanarak bu değere ulaşmaya çalışalım.


T (Bulunulan ortamın sıcaklığı) değerine bağlı olarak ses dalgası saniyede kaç metre yol alıyor hesaplanıyor. Oda sıcaklığı 20 santigrat derece alarak yerine koyarsak.

Bizim ardunio da sensör üzerinden bu değerin hesabında mikro saniye ve cm cinsinden hesaplıyoruz ve ayrıca zaman / uzunluk oranı yapılırken, ispat formülünde bulunan sonuç metre ve sn cinsinden olması ve ayrıca oranın uzunluk / zaman olduğuna dikkat ediniz.

Metreden santimetreye ve saniyeden mikrosaniye dönüşüm yapmak istersek dönüşüm birimleri 
1 metre = 100cm
1 sn = 1 000 000 MikroSaniye olduğuna göre bu oran ile çarparsak



Burada dikkat ederseniz uzunluk / zaman oranı var bizim arduinodaki oranımız zaman / uzunluk bu orana dönüştürmek için sonucu ters çevirme işlemini 1 / 0.3429102606 yapıyoruz.



gördüğünüz gibi 29.1 değerinin 20 santigrat dereceli ortamda kullanıldığını ispatlamış olduk. Sorulması gereken şu olmalı peki ölçüm yapılan ortamın sıcaklığı 30 santigrat derece olursa ne olur?
Elbette hatalı bir ölçüm yapmış oluruz. Ortamın sıcaklığına göre davranan bir yapı kurmamız ve bu sıcaklığı tespit ettikten sonra yukarda gördüğünüz hesaplamaları arduino programında hesaplatmalısınız böylece gerçek ölçüm sonucuna ulaşabilirsiniz.






2 Mayıs 2018 Çarşamba

16x2 LCD Tanıyalım

16x2 LCD ve Bağlantı Uçları?

Arduino projelerimizde çokça kullandığımız LCD lerin en yaygınlarından birisi 16 sütun 2 satırdan oluşan en bilinen modelin bağlantı uçlarından bahsedeceğim.

VSS: Besleme Gerilimi Hattının GND ucu
VDD Besleme Gerilimi Hattının +5V ucu
V0: LCD ekranında Kontrast ayarı yapmak için uç (Potansiyometrenin orta bacağına bağlanır)
RS: LCD nin hafızasına kayıt yapan uç
RW: LCD den veri okuma veya veri yazma şekline göre değiştirilebilen uç (Kullanılmaz ise GNDye bağlanır.)
E: LCD den veri alma açık(1) kapalı(0) şeklinde kullanılan uç (Dijital Pine  bağlanır.)
D0: 8 Bit veri için data ucu başlangıcı (Dijital Pine  bağlanır.)
D1: 8 Bit veri için data ucu (Dijital Pine  bağlanır.)
D2: 8 Bit veri için data ucu (Dijital Pine  bağlanır.)
D3: 8 Bit veri için data ucu (Dijital Pine  bağlanır.)
D4: 4 Bit veri için data ucu başlangıcı aynı zamanda 8 Bit veri için data ucu (Dijital Pine  bağlanır.)
D5: 4 Bit veri için data ucu aynı zamanda 8 Bit veri için data ucu (Dijital Pine  bağlanır.)
D6: 4 Bit veri için data ucu aynı zamanda 8 Bit veri için data ucu (Dijital Pine  bağlanır.)
D7: 4 Bit veri için data ucu aynı zamanda 8 Bit veri için data ucu (Dijital Pine  bağlanır.)
A: LCD Panelin aydınlatma ledinin Anod ucu +3V (+5V dan beslerseniz 220ohm koruma direnci bağlayın)
K:LCD Panelin aydınlatma ledinin Katod ucu GND

Arduino Üzerine Bağlantı Şekli


Bilinmesi Gerekenler

Arduino için gerekli kütüphane (#include <LiquidCrystal.h>)

Nesne Tanımı ve Bağlantı Uçları LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Pin numaraları değiştirilebilir. 
Bağlantı Karşılıkları şu şekildedir. LiquidCrystal lcd(RS, E, D4, D5, D6, D7);

En Bilinen Fonksiyonları ve Kullanım Şekilleri

lcd.begin(16,2) 16 Sütun 2 Satırdan oluştuğunu belirten başlangıç fonksiyonu

lcd.print("Ekrana Yazılacak Metin") Ekrana yazdırma fonksiyonu int, char gibi  veri tipinden oluşturulmuş ve atanmış değişkenleri de doğrudan  çağırabiliriz.
lcd.print(a) a değişkeni int veya char olabilir.
lcd.print(300) 300 sayısını doğrudan ekrana yazar.
lcd.print(300, BIN) Binary dönüşümü yaparak ekrana 300 sayısının ikili sayı tipini yazar.
lcd.print(300, OCT) Sekizli dönüşümü yaparak ekrana 300 saysının sekiz tabanı karşılığını yazar.
lcd.print(300, HEX) Onaltılı dönüşümü yaparak ekrana 300 sayısının onaltı tabanı karşılığını yazar.

lcd.clear() Ekranı ve Hafızayı temizler.
lcd.cursor() İmleçi ekranda _ alt tire şeklinde gösterir.
lcd.noCursor() İmleci kapatır.
lcd.setCursor(0,0) Yazının başlangıc sütunu ve satırını belirtir. satır ve sütun 0 dan başlar. birinci sütun birinci satır (0,0) parametresi ile belirtilir. örneğin 3 sütun 2. satır için (2,1) kullanılır.
lcd.home() yine aynı şekilde yazının başlangıç konumunu belirtir. lcd.setCursor(0,0) demekle aynı anlama gelir.

lcd.blink() yanıp sönen bir imleç şeklinde imleç görünür.
lcd.noBlink() yanıp sönen imleci kapatır.

lcd.noDisplay() LCD ekranını hafızayı temizlemeden ekranı kapatır.
lcd.display() Kapanan LCD ekranını tekrar açar.
lcd.scrollDisplayRight() Soldan sağa doğru yazıyı kaydırır.
lcd.scrollDisplayLeft() Sağdan sola doğru yazıyı kaydırır.