Sıcaklık ölçen malzemeler ve termistörler

Sıcaklık ölçmede kullanılan sensörler, genel olarak sıcaklık değişimlerine voltaj, frekans, direnç değişimleriyle; lojik seviyelerle veya direk olarak lojik data gibi çeşitli yollardan çıkış verirler. Bunlardan en çok tanınanlardan birisi National Semiconductor üretimi olan LM35' dir. Diğer firmaların da değişik kodlarla benzer ürünleri mevcut. LM35 3 bacaklı, voltaj seviyeleri ile sıcaklığı bildiren bir malzemedir. Voltaj çıkışı mV seviyesindedir ve AVO metre ile bu voltaj değeri okunup, 10' a bölünürse sıcaklık okunması yapılmış olur. Lojik bir sistemde bu sensörü kullanabilmeniz için bir A/D (analog->dijital) çevirici kullanmanız gerekir. Diğer yandan A/D dönüştürücüyü içinde barındıran ürünler de mevcuttur. Bunlardan Dallas Semiconductor üretimi DS1820 daha hassas ölçümlerde kullanılabileceği gibi tek pin üzerinden lojik bir sistemle bilgi alışverişinde bulunabilir. Bildiğim kadarıyla her iki ürün de İstanbul piyasasında mevcut, ilgilenenlere duyurulur. Bir diğer ürün ise Analog Devices tarafından üretilen TMP04' dür. Lojik bir sisteme bağlı olarak çalışabilen bu sensör sıcaklık değişimlerine iki lojik seviye ile karşılık verir. Lojik 1 ve lojik 0 süreleri okunarak, çarpılır. Böylece sıcaklık değeri elde edilir.

Tüm bunların yanında, komple çözüm olarak donanım görüntüleme yongaları National, Dallas, Analog, Winbond gibi çeşitli üreticiler tarafından çeşitli özelliklerde üretilmektedirler. Bu özellikler kendinden (built-in) sensörlü, programlanabilir, otomatik veya elle fan kontrollü, voltaj monitörlü olarak çeşitlilikler gösterir.

Devremizde, doğal olarak sıcaklık değerlerini okumamızda yardımcı olacak, direnci sıcaklığa bağımlı olarak değişen ve termistör olarak bilinen sensörlerden kullanacağız. Termistörler NTC (Negative Temperature Coefficient) ve PTC (Positive Temperature Coefficient) olmak üzere 2 çeşittirler ve doğrusal olarak çalışmazlar. NTC tipi termistörler, sıcaklık değişimlerine ters olarak direnç değişimi ile karşılık verirler. PTC tipinde ise değişim sıcaklıkla aynı yöndedir. Fakat bu değişimler az önce söylediğimiz gibi doğrusal değil eksponansiyel olarak gerçekleşir ve "ısıl direnç" formülü ile ortaya konur (NTC için):

RT = R0*exp(ß*(1/T-1/T0))

RT = Herhangi bir sıcaklık değerinde direnç değeri.
R0 = Standart olarak termistör üzerinde yazan direnç değeridir. Yine bu değer aynı zamanda 25 °C' de (T0) ölçülen değerdir. Belli miktarda sapma gösterebilir.
ß = Direncin kendisine özel değişim katsayısı. Üretici firma kataloğundan öğrenebilir veya yazının devamında bizim yapacağımız gibi hesaplanabilir.
T = Herhangi bir andaki sıcaklık değeri. Kelvin (K) cinsindendir.
T0 = Standart olarak 298.16 K (273.16 Kelvin + 25) olarak alınır. Termistör kataloğunda direnç değeriyle birlikte verilir.

Formülde bize lazım olan T' dir. T' yi çekersek:

T = (ß*298)/(298*(lnRT-lnR0)+ß)

Bu formülde bilinmeyen olarak karşımıza RT ve ß değerleri çıkıyor. ß değerini kendimiz hesaplayacağız veya aldığı termistörün üreticisini öğrenebilenler varsa Internet üzerinden firma kataloglarına göz atıp, bilgi edinebilirler. RT değerini ise devremiz sayesinde ölçebileceğiz.

ß değerinin hesaplanması

Bu değeri tespit edebilmemiz için bir ohm metreye veya AVO metreye, bir kap dolusu buza ve şart olmasa da ikinci bir termometreye ihtiyacımız var. İkinci termometre için en ideali sanırım bir LM35 edinmek ve AVO metre ile okumak. Bu tür işlerle uğraşıyorsanız ucuzundan analog bir AVO metre bayağı işinize yarar. Dijital olanlar ise okuma yaparken kolaylık sağlıyor. Bunların da ucuz modelleri mevcut.

Buzluktan çıkaracağımız buzları bir kaba koyup 1-2 dk. kadar bekliyoruz. Bunun sebebi buzun yüzey sıcaklığı büyük ihtimalle 0 °C altında bir değerde olması. 0 °C' a ulaşabilmesi için biraz zaman tanıyoruz. Buz yüzeyi sulanmadan termistörümüzü buzun içine daldırıp direncini ohm metre ile veya AVO metre ile ölçmeye başlıyoruz. Termistör direnci belli bir seviyede belli bir süre sabit kaldıktan sonra direnci düşmeye başlayacak. Direnç düşmeden, o süre zarfında okuduğumuz değeri not ediyoruz. NTC tipi kullandığımızdan dolayı sıcaklık düştüğü zaman direncin artacağını belirtmiştik. Buz sulanmaya başlayınca termistörün kendi iç ısısı ve bazı diğer etkenlerden dolayı direnç düşmeye başlıyor. Eğer ölçümü kesinleştirmek isterseniz 1 saat aralıklarla bu işlemleri tekrarlayın. Kendi termistörümde 2.9 Kohm değerini okudum. Buzun tamamı eriyene kadar ısının 0 °C' de kaldığını biliyoruz. Buradan yola çıkarak okuduğum 2.9 Kohm termistörün 0 °C' de aldığı değerdir. T değerini ve RT değerini biliyoruz. Buradan "ısıl direnç" formülü ile ß' yı hesaplayabiliriz. Kendi 1 K termistörüm için:

2.9*1000 = 1000*exp(ß*(1/273.16-1/298.16))

hesap sonucu olarak ß = ~3460 buldum. Hesaplama işinde Powertoys for Windows XP içinden çıkan PowerToy Calculator oldukça işime yaradı, tavsiye ederim.

Devre şeması, işleyişi ve malzemeler

Image

Devre, 9 pin seri port ile kullanılıyor. Başlangıçta lojik 0 seviyesinde bulunan TXD, DTR ve DSR pinleri bize yardımcı olacak. DTR çıkış, DSR ise giriş olarak faaliyet gösterir. DTR, lojik 1 seviyesine getirilince kronometremize basıyoruz. Bu uçta yaklaşık 12 V' luk bir gerilim oluşacak. Potansiyel farkından dolayı akım DTR üzerinden TXD' ye ulaşmak isteyecek. Bunun için termistör üzerinden kapasitörümüze ulaşacak. Diyotumuz ters bağlandığı için üzerine gerilim düşmesi gerçekleşmeyeceğinden devrede yokmuş gibi davranır. Benzer bir şekilde kapasitörümüz DC gerilim uygulandığı için açık devre gibi davranır fakat bir farkla: kapasitör üzerinde belli bir miktar yük depolayabilir. Yani kapasitör termistör üzerinden dolana kadar, akım kondansatör üzerinden dolaşmaya çalışacak. Kondansatör (kapasitör), dolduktan sonra açık devre özelliği ortaya çıkacak ve 0 Volt' a giden tek yol olarak DSR pinimiz kalacak. DSR pinimiz yüksek empedanslı olduğu için devre akımının son çare olarak buraya yöneldiğini düşünebiliriz. Akım DSR pinini tetikleyince kronometremizi durduruyoruz. DTR, lojik 0 yapılınca kondansatörümüz diyot üzerinden boşalıyor.

Devrenin çalışması gördüğünüz üzere oldukça basit: kondansatör, termistör üzerinden şarj ediliyor, dolunca bizi DSR pininden haberdar ediyor. Dolma süresi direk olarak,

Tc = Rth*C

şeklinde ifade edilir. Tc, saniye; Rth bizim devremizde RT; C ise kondansatörümüzün kapasitesidir. Süreyi az önce bahsettiğim şekilde ölçtük. Bu değeri kapasiteye bölecek olursak RT değerimizi elde etmiş oluruz. Tabii tüm bunlar yazılım yardımıyla olacak.

Biraz da termistör, kondansatör ikilisinin oluşturduğu elektronik yapıdan bahsetmek istiyorum. Bir direnç ve kondansatörden oluşan bu ufak devre RC devresi olarak bilinir. Bizim devremizde integratör görevi yapan bu ikili filtre, rezonans ve zamanlama devreleri gibi bir çok uygulamanın temelini oluşturur. Bir çok örneğine çeşitli yerlerde rastlayabilirsiniz.

Şimdi devremizin malzemelerini ve montajını inceleyelim. Devre çok az malzemeden oluştuğu için montajı yine DB9 konnektörü üzerine yapacağız ve kapağını kapatacağız. 

Öncelikle malzemelerimize göz atalım:

* 1 Kohm veya benzeri NTC termistör
* 1n4148 diyot
* 10 µF/25 V veya daha fazla kapasiteli
* DB9 dişi konnektör

Image

Devreyi oluşturan malzemeler bir arada

Image

Kondansatör ve termistöre yakından bakış

Kondansatörü ve diyotu rahatlıkla temin edebilirsiniz, belki termistörde zorlanabilirsiniz. Termistörü herhangi bir değerde alabilirsiniz. Yani 10 K bulursanız almamazlık etmeyin. Yazının ilerleyen kısımlarında görebileceğiniz gibi bu değerleri yazılım içinden ayarlayabiliyorsunuz. Aynı şey kondansatör içinde geçerli.

Montaja başlamadan önce birkaç uyarıda bulunmak istiyorum:

* Malzemeleri lehimlemek için kullanacağınız havyaya dikkat edin veya kullanmayı bilmiyorsanız bilen birine yaptırın.
* Devre montajına dikkat edin. Yapacağınız yanlış bir lehim veya kısa devre durumunda COM portunuz zarar görebilir.
* Konnektörü COM portuna bağlamadan önce bilgisayarınızı kapatın.
* Devreyi kritik sıcaklık ölçümlerinde (overclock edilmiş sistemler gibi), aşırı yüksek veya düşük sıcaklık değerlerinde
ve hızlı değişimler gösteren alanlarda kullanmayın.

Montaja başlıyoruz

Montaja yine diyot ile başlıyoruz. Diyotun üzerinde bulunan çizgiye dikkat ederek, anodunu konnektörün 6. pinine; katodunu yani işaretli kısmını 4. pine lehimliyoruz.

Image

Diyot montajı

Kondansatörümüz elektrolitik tiptedir ve kutuplu olduğundan montajına dikkat edin. Hangi bacağın negatif olduğu '-' işaretleriyle gösterilmiştir. Kutupları anlamanın bir diğer yolu da malzemenin bacaklarına bakmaktır. Uzun olan bacak pozitiftir. Kondansatörün negatif kutbu aşağıdaki resimden de görebileceğiniz gibi 3. pine pozitif olan bacağı ise diyotun anodunu lehimlediğimiz 6. pin lehimliyoruz. Pinleri karıştırmamak için özen gösterin, biraz hayal gücünüzü zorlamanız gerekiyor :).

Image

Kondansatörün montajı, pinlere dikkat

Termistörümüzü istediğimiz noktaya yerleştirebilmemiz için iki tane kablo kullanacağız. Kabloları çok uzun tutmayın. Bu iki kabloyu diyotumuzu lehimlediğimiz pinlere lehimliyoruz. Birisi 4. diğeri 6. pine montajı yapılacak. Bu işi bitirdikten sonra iki kablonun boşta kalan uçlarını termistöre lehimleyin. Bu noktada termistörün hangi bacağının hangi kabloya bağlandığının önemi bulunmamakta.

Image

Devremizdeki tüm malzemelerin montajı bitmiş halde

Son aşamada kapağımızı kapatıp, termistör bacaklarını birbirlerinden elektrik bandı ile yalıtıyoruz. Böylece montaj aşamasını bitirmiş oluyoruz.

Image

Devremiz kullanılmaya hazır

Yazılımın hazırlanışı ve kullanımı

Devremiz çok az malzemeden imal edildiği için gerekli bazı işlemleri yazılım yoluyla halledeceğiz. Yukarıda devremizin işleyişi ile ilgili kısımda DTR pinini lojik 1 ve 0 konumları arasında geçiş yaptığımızdan, DSR pininin lojik 1' i algılamasından bahsettik. Tüm bu işlemler yazılım ile yapılıyor.

Yazılım için popüler görsel programlama dillerinden Borland Delphi 6 kullandım. Yorumlayıcı için ayrıca SerialNG adlı bileşeni ve rdtsc isimli 'unit' dosyasını kullandım. Bu iki bileşeni, yazılımın kaynak kodlarıyla beraber buradan indirebilirsiniz.

Bu bileşenleri kullanma amacıma gelelim. Öncelikle SerialNG' den bahsedeyim:

SerialNG adından da anlaşılabileceği üzere bir seri iletişim bileşeni. i386lardan bu yana işlemcilerde kullanılan bir özellik mevcut. Güvenlik için programların portlara olan erişimini kısıtlayabiliyorsunuz. Microsoft NT ile beraber bu özelliği kullanıyor. Win 9x/Me sürümlerinde bu özellik problem değilken veya kullanılmıyorken, açıkçası bende ayrıntısını bilemiyorum, Win NT4/2000/XP sürümlerinde IO noktalarına direk erişmeye çalıştığınızda 'Privileged instruction' hatası alıyorsunuz. Bunun sebebi kullanıcı modunda olan programların (privilege level 3) IO noktalarına erişimi güvenlik sebebiyle engelleniyor. Öte yandan çekirdek ve sistem dosyaları, sürücüler privilege level 0 düzeyinde çalıştıkları için problem yok. Bu problemi çözmek için işlemcinin program kimliğine göre oluşturduğu tabloda kendi programınızın seviyesini değiştirebilir veya programınız için privilege level 0 düzeyinde çalışan bir sürücü yazabilirsiniz. Elbette bu yollar oldukça zahmetli. Bir üçüncü yol derleyici (debugger, yorumlayıcı vs.) ile beraber kullanabileceğiniz bileşenler kullanmak veya çok fonksiyonlu hazır '.dll' veya '.sys' dosyaları kullanmak. İşte SerialNG açık kaynak kodlu olarak Delphi ile beraber seri portlara erişim ile kullanabileceğiniz oldukça güzel hazırlanmış bir bileşen.

Rdtsc, yine aynı problemden beni kurtaran bir diğer bileşen. Açık kaynak kodlu olan bu Delphi uniti size mikro saniye seviyesinde zaman ölçümü yapabilen tam bir kurtarıcı. Kurtarıcı olmasının sebebi benzer işi yapabilen unitlerin yukarıda bahsettiğim 'Privileged instruction' hatasına sebep olmaları.

İşin aslı XP' de uyumluluk modunu kullanırsanız problem çözülüyor fakat bize böyle kaçamak çözümler yakışmaz :).

Yazılım ile ilgili olarak bundan sonra kullanılışından bahsedeceğim. Kodlar ile ilgili açıklamaları kaynak kodlarının içinde bulabilirsiniz. Eğer yorumlayıcınız yok ise '.pas' dosyalarını Notepad gibi programlar ile rahatlıkla okuyabilirsiniz (sadece okuyabilirsiniz). Açıkçası Delphi konusunda pek bilgili değilim, kodlarla ilgili sorularınızı cevaplayamayabilirim

Derlenmiş vaziyette çıkan programımızı çalıştırdığımızda gayet ufak boyutlarda hazırlanmış bir pencere göreceksiniz. Pencerede yer alan 'Süre' ibaresi kondansatör dolum süresini ifade etmektedir.

Image

Programın ana penceresi

Program menüsüne göz attığımızda devreyi kullanmamıza yarayan 'Başla' ve 'Ayarlar' seçenekleri ön plana çıkıyor. Hemen 'Başla' demeden önce 'Ayarlar' penceresinden gerekli ayarlarınızı yapmanız çok önemlidir.

Image

Programa ait menü

'Ayarlar' penceresinde görebileceğiniz üzere bütün gerekli ayarları bir yerden rahatlıkla yapabilirsiniz. Öncelikle 'COM Port' kutusundan devrenizi bağladığınız portu seçin. 'Kalibrasyon' kısmında yer alan 'Miktar' kutusuna '0' girin. Termistör ß değerini, direncini, kondansatör değerini resimde gördüğünüz gibi 'Sabitler' kutusunda dolduruyoruz. Bir uyarıda bulunayım: kondansatör değerini direk 'µF' cinsinden giriyoruz fakat direnç değerini eğer 'K' varsa '1000' ile çarpıyoruz. 'Program' kutusunda programın kaç s. aralıklarla (örneğin 1 s.) ölçüm yapacağını ve Windows ile beraber otomatik olarak başlamasını ayarlayabilirsiniz. En altta yer alan 'Kayıt tutma' ayarlarını aktifleştirirseniz okuma ile eş zamanlı veya kendi belirleyeceğiniz aralıklarda sıcaklık değerlerinin bir '.txt' dosyasında tutulmasını sağlayabilirsiniz. Bu kayıt dosyaları programla aynı dizinde 'Log' isimli klasörde günün tarihi ile adlandırılarak tutuluyor.

Image

"Ayarlar" penceresi

Image

Kayıt tutma özelliği aktifleştirilmiş durumda

Ayarlarımızı yaptıktan sonra menüden 'Başla' diyerek ölçüme başlayabilirsiniz. Sıcaklık değeri okunmaya başlayacaktır. Bu işlemi durdurmak için 'Dur' ibaresine tıklıyoruz.

Image

Süre ve sıcaklık bilgisi

Kalibrasyon

Elimizdeki malzemeler elbette ideal değiller. Böyle olması da gerekir. Bu sebeple eğer bir ölçü aleti yapıyorsanız kalibrasyon ayarını da yapmalısınız.

Direnç değerindeki ufak sapmalar, kondansatördeki kaçaklar, termistöre bağlı kabloların direnci derken devreyi olumsuz etki eden bir çok faktörle karşı karşıya kalıyoruz. Bunların ölçüm sonucuna etkilerini bilir ve en aza çekebilirsek kalibrasyon işlemini halletmiş oluruz.

Devremizde ortaya çıkan etkenleri göz önüne aldığımızda kondansatörün dolum süresinin ideal dolum süresi ile arasındaki farkı belirleyip, aşağı veya yukarı çekmemizle uygun sıcaklık değerini yakalamaya çalışacağız.

Bunun için belli bir sıcaklık değerinde yazılım yardımıyla kondansatör dolum süresini okuyacağız. Bu iş için yine buz yöntemini kullanabilirz. 0 °C' de benim termistörümün değeri 2.9 Kohm idi. Bu değerde ideal dolum süresi 2900*0.00001*1000000=29000 mikro saniye (µs) olması gerekir. Sensörümüzü buzların arasında soktuğumuz zaman yaklaşık olarak 32170-32250 civarında dolaştığını gözlemledim. Bu iki değerin yaklaşık olarak ortalaması olan 32200'den ideal süreyi çıkartırsak arada 3200 µs kadar fark olduğunu görüyoruz. Bu değeri 'Ayarlar' penceresinde yer alan 'Kalibrasyon' kutusu içerisindeki 'Miktar' kısmına yazıp, kalibrasyon işlemimizi biraz kabaca olarak hallediyoruz.

Uygulamalar ve değerlendirme

Devrenin ve programın uygulamaları arasında en popüler olanı kuşkusuz bir çok web sayfasında görebileceğiniz yerel sıcaklık bilgileri. Benzer şekilde programın kayıtlarını tuttuğu '.txt' dosyalarını ASP veya PHP ile okuyarak web sayfanızda sıcaklık bilgilerini gösterebilirsiniz. Hiç yabana atılır bir uygulama değil bence. Bir diğer uygulama sıcaklık alarmı olabilir. Ben programa eklemedim ama ilgilenenler birkaç ufak eklemeyle belli bir sıcaklığın üzerine çıkıldığında alarm sesi üretilmesini veya başka bir devreyi, düzeneği tetikleyebilirler. Benzer şekilde devre ile sıcaklığa bağlı olarak fan devir kontrolü gerçekleştirilebilir.

Devrede termistör yerine direnci ışık (LDR) veya basınçla değişen elemanlar kullanarak birazda yazılımı modifiye ederek gerçekten ilginç uygulamalar yapılabilir. Hatta yazının başlarında bahsi geçen ohm metreden bir tane yapabilirsiniz. Bu yazıyı yazarken aklıma gelen bir diğer uygulama ise termistör yerine potansiyometre gibi elle ayarlanabilen dirençlerle bir servo veya step motor kontrollü çalışan kol yapılabilir. Her şey hayal gücünüze bağlı.

Aslında tüm bu uygulamalar, profesyonel olarak hazırlanacaksa devrelerde A/D ve D/A dönüştürücüler kullanılır. Bu dönüştürücülerden gelen bilgileri işlemek için ise bilginin önemine, seviyesine, hızına ve miktarına bağlı olarak mikrodenetleyiciler, dijital sinyal işlemcileri veya bilgisayarlar kullanılabilir. Ekran kartları, ses kartları, tv kartları, modemler, donanım izleme yongaları, joystick portları vb. donanımlar bu dönüştürücülerden içermektedirler ve sayısız uygulamaları vardır. Böylece analog Dünyamız bilgisayarımızla uyumlu hale gelir.


Kaynak : Berkan Metin