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
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 :).