Daha önceden LM35 sıcaklık sensörü ile bir uygulama gerçekleştirmiştik. LM35 analog çıkış veren bir sensördü. Bu yazımda ise sizlere dijital çıkış veren bir sıcaklık sensörü olan Dallas 18B20 (DS18B20) ile ilgili bilgi vermek istiyorum.
DS18B20 'nin özelliklerinden bahsedecek olursak ; * ±0.5°C ölçüm hassasiyetine sahip * Dallas firmasının geliştirdiği One Wire haberleşmesini kullanır * Ölçüm aralığı -55°C 'den +125°C 'ye kadardır. * Termometre çözünürlüğü kullanıcının seçimine bağlı olarak 9 bitten 12 bite kadardır.
Daha ayrıntılı bilgiyi datasheet sayfasında bulabilirsiniz. DS18B20 Datasheet Bu sensör ile ilgili yazı yazmak istedim çünkü DS18B20 sensörü ki uygulamayı gerçekleştirdiğinizde siz de anlayacaksınız, LM35 sensörüne göre daha kararlı ve daha hassas. Oda sıcaklığı ölçümünden ziyade vücut ateşi vb. hassasiyet gereken ölçümler yapabilirsiniz. Uygulamaya geçmeden önce aşağıdaki linkten "One Wire" kütüphanesini indirip Arduino klasörünün libraries klasörüne yüklüyoruz. OneWire Kütüphanesi Linki
// Sıcaklık sensörünü bağladığımız dijital pini 2 olarak belirliyoruz. int DS18S20_Pin =2;
// Sıcaklık Sensörü Giriş-Çıkışı OneWire ds(DS18S20_Pin); // 2. Dijital pinde.
voidsetup(void) { Serial.begin(9600); // Seri iletişimi başlatıyoruz. }
voidloop(void) { // temperature değişkenini sıcaklık değerini alma fonksiyonuna bağlıyoruz. float temperature = getTemp(); // Sensörden gelen sıcaklık değerini Serial monitörde yazdırıyoruz. Serial.print("Sicaklik: "); Serial.println(temperature); // 1 saniye bekliyoruz. Monitörde saniyede 1 sıcaklık değeri yazmaya devam edecek. delay(1000);
}
// Aşağıdaki fonksiyon DS18B20 sıcaklık sensörümüzden gelen verileri // Celcius cinsinden sıcaklık değerlerine çevirmek için kullanılıyor. // Herhangi bir değişiklik yapmamız gerekmiyor.
floatgetTemp(){ //returns the temperature from one DS18S20 in DEG Celsius
byte data[12]; byte addr[8];
if ( !ds.search(addr)) { //no more sensors on chain, reset search ds.reset_search(); return-1000; }
if ( OneWire::crc8( addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); return-1000; }
if ( addr[0] !=0x10&& addr[0] !=0x28) { Serial.print("Device is not recognized"); return-1000; }
ds.reset(); ds.select(addr); ds.write(0x44,1); // start conversion, with parasite power on at the end
Bu yazımda geçen yazıda yaptığımız termometre uygulamasında kullandığımız seri haberleşme yerine LCD ekranı kullanarak yine aynı projeyi yaptım.
Bu projeyi PCB karta işlerken elbette seri haberleşme portu yerine portatif olan LCD'yi kullanmak durumunda kalırız. Bu yüzden LCD'yi de öğrenmek mühim. Zaten Seri Haberleşmeyi tam olarak öğrenebilirsek LCD'yi de kullanmak zor olmayacaktır. Burda sadece LCD Ekran kullanımı ve LM35 Termometre projelerini birleştirdim ve aşağıdaki kodu koştum. LCD Bağlantılarını tekrar yazacağım uğraşmak istemeyenler için :).
LCD'nin 1 - VSS (Toprak) 2- +VDD 3- Potansiyometrenin Ortası 4- Arduino 7.pinine 5- Toprak 6- Arduino 8.pinine 11- Arduino 9.pinine 12- Arduino 10.pinine 13- Arduino 11.pinine 14- Ardunio 12.pinine 15- +VDD 16- Toprak ***Şemada 15. ve 16.pinlerin yerlerini ters yazmışım çok özür diliyorum. 15 VDD, 16 Toprağa bağlı olmalı.Potansiyometrenin
Sağ Bacak Toprak, Sol Bacak +VDD
Kodlarımız :
#include <LiquidCrystal.h> // Kütüphane Gerekli LiquidCrystal lcd(7, 8, 9, 10, 11, 12); //Arduino pinleri LCD için float sicaklik; //Analog değeri dönüştüreceğimiz sıcaklık float analoggerilim; //Ölçeceğimiz analog değer
lcd.print("Sicaklik Degeri"); // İmlecten itibaren bu yazı yazılacak lcd.setCursor(0,1); // 1.satırın ilk sütunundayız lcd.print(sicaklik); // Ardndan Bu değişken değer yazılacak lcd.print(" Derece"); //Değer ardından da bu yazı yazılacak lcd.setCursor(1,7); //Derece yazısının yeri (2.satır,7.sütun) delay(1000); //Bu kısım LCD'lerin frekans çalışma aralığı yüzünden giriliyor.
Analog giriş fonksiyonları ile sadece potansiyometre gibi elemanların çıkışlarını değil aynı zamanda analog çıkış veren bütün sensörlerin gerilim değerlerini Arduino'ya aktarabiliriz.Elbette ki bu değerler 5V değerini aşmamalı.
Sol taraftaki resimde sıcaklık değerini analog çıkış olarak vermekte olan LM35 sensörü ve pinlerinin ne için kullanıldığı gösterilmekte. Vs+ Arduino'muzun 5V, Toprak pini GND'ye ve Vçıkış olarak gösterilen pin de herhangi bir analog girişe takılarak Arduino ile sıcaklık ölçümü yapabiliriz. Bu proje ile hem sensör ölçümlerine başlamış olacağız, hem de bir önceki yazıda görmüş olduğumuz "float" kodunu da kullanmış olacağız. Analog giriş için Arduino'daki A1 pin girişini kullandım. Analog girişler sol tarafta olduğundan devre kurma işininin rahat olması için breadboard un sağ tarafının kullanılması sağlıklı olur. Matematiksel ifadeyi kurabilmek için yani analog değeri sayısal değere çevirmek için LM35'in analog çıkış yapısını bilmemiz gerekir. Orta bacağından verilen mV mertebesindeki gerilim her°C için 10 mV üretir. Yani 25 °Ciçin çıkış 250 mV olur.
Arduino'daki ADC 10 bitlik olduğu için ve en yüksek değerimiz 5000 mV olduğu için bu 5000 mV'u 1024 parçaya işlemcimiz ayıracaktır. Yani 1023.değer bize 5V'u verecek ve her 10 mV bize 1 °C 'yi verecek şekilde programımızı yazıyoruz. Kodlarımız ; float sicaklik; //Analog değeri dönüştüreceğimiz sıcaklık float analoggerilim; //Ölçeceğimiz analog değer
Seri Haberleşme monitörü ile okuduğumuz değerler. Sensörün etrafında ateş yakarak değeri arttırabilirsiniz. Tabi sensörü yakmayın ateşle :))).
Bu da devremizin videosu.En kısa zamanda bu sensör ile yaptığımız sıcaklık ölçümünü LCD'ye bağlayarak burda yayınlayacağım. Video'yu beğenmeyi unutmayın :).