Arduino projelerimizde çevremizdeki fiziksel değişimleri algılamanın en popüler yollarından biri sıcaklık ölçümüdür. Sıcaklık ölçmek için LM35 veya DHT11 gibi dijital/analog entegre sensörler bulunsa da, endüstride ve kombi, kahve makinesi gibi ev aletlerinde en çok tercih edilen, oldukça ucuz ve dayanıklı olan eleman 10k NTC Termistördür.
Daha önceki yazılarımızda bağımlı dirençlerden bahsetmiştik. NTC de sıcaklığa bağlı olarak direnci değişen harika bir analog bileşendir. Gelin, yenidir.com takipçileri için 10k NTC'nin çalışma mantığını, Arduino ile voltaj bölücü bağlantısını ve Steinhart-Hart formülü kullanarak direnç değerini nasıl santigrat dereceye (°C) dönüştüreceğimizi adım adım inceleyelim.

NTC (Negative Temperature Coefficient), Türkçesiyle "Negatif Sıcaklık Katsayılı Termistör" anlamına gelir. Çalışma mantığı şudur: Üzerine düşen sıcaklık arttıkça, gösterdiği iç direnç değeri düşer. Sıcaklık azaldıkça ise direnç değeri artar.
Peki neden "10k" deniyor? Çünkü bu termistör, oda sıcaklığında (tam olarak 25°C'de) tam 10.000 Ohm (10kΩ) direnç değerine sahiptir. Sıcaklık 25°C'nin üzerine çıktığında bu değer 9k, 8k diye düşmeye başlar.
Arduino dijital veya analog pinlerinden doğrudan bir direnç değerini ölçemez; Arduino sadece voltajı (gerilimi) okuyabilir (0V - 5V arası). Bu yüzden NTC'nin değişen direncini voltaj değişimine çevirmek için Sabit bir 10kΩ direnç ile "Voltaj Bölücü" devresi kurmamız gerekir.
Bağlantıyı breadboard üzerinde şu şekilde yapıyoruz:

Arduino A0 pininden 0 ile 1023 arasında bir değer okur. Bu değeri sıcaklığa dönüştürmek için sadece orantı kurmak yetmez, çünkü NTC'nin sıcaklık-direnç eğrisi doğrusal (lineer) değildir, logaritmiktir. En hassas ve doğru sonuçları almak için bilim dünyasında kabul görmüş Steinhart-Hart denklemini kodumuzun içine entegre edeceğiz. Merak etmeyin, Arduino'nun matematik kütüphanesi (math.h) bu zorlu logaritma hesabını bizim için arka planda yapacak.
Aşağıdaki kodları Arduino IDE programınıza yapıştırıp kartınıza yükleyin. Herhangi bir harici kütüphane kurmanıza gerek yoktur, kodlar tamamen standart matematiksel fonksiyonlarla çalışır.
#include <math.h> // Logaritma hesabı yapabilmek için matematik kütüphanesini ekliyoruz.
const int ntcPin = A0; // NTC'nin bağlı olduğu analog pin
// Steinhart-Hart ve Voltaj Bölücü sabitleri
float sabitDirenc = 10000.0; // Voltaj bölücüde kullandığımız sabit direnç (10k)
float ntcOdaDirenci = 10000.0; // NTC'nin 25 derecedeki direnci (10k)
float odaSicakligi = 298.15; // Kelvin cinsinden 25°C (25 + 273.15)
float bKatsayisi = 3950.0; // NTC'nin Beta (B) katsayısı (Genellikle 3950'dir)
void setup() {
Serial.begin(9600); // Seri haberleşmeyi başlatıyoruz.
}
void loop() {
int analogDeger = analogRead(ntcPin); // A0 pininden 0-1023 arası değeri oku
// Analog değeri voltaj bölücü formülü ile Ohm cinsinden dirence çeviriyoruz
float ntcGuncelDirencin = sabitDirenc / (1023.0 / (float)analogDeger - 1.0);
// Steinhart-Hart Denklemi ile sıcaklık hesaplama (Kelvin cinsinden)
float sicaklikKelvin;
sicaklikKelvin = ntcGuncelDirencin / ntcOdaDirenci; // (R/Ro)
sicaklikKelvin = log(sicaklikKelvin); // ln(R/Ro)
sicaklikKelvin /= bKatsayisi; // 1/B * ln(R/Ro)
sicaklikKelvin += 1.0 / odaSicakligi; // + (1/To)
sicaklikKelvin = 1.0 / sicaklikKelvin; // Tersini al (Kelvin)
// Kelvin değerini Santigrat dereceye (°C) çeviriyoruz
float sicaklikCelsius = sicaklikKelvin - 273.15;
// Sonuçları Seri Port Ekranına yazdırıyoruz
Serial.print("NTC Direnci: ");
Serial.print(ntcGuncelDirencin);
Serial.print(" Ohm | ");
Serial.print("Sıcaklık: ");
Serial.print(sicaklikCelsius, 1); // Virgülden sonra 1 basamak göster
Serial.println(" *C");
delay(1000); // 1 saniyede bir ölçüm yap
}
Kodu yükledikten sonra Arduino IDE üzerinde Seri Port Ekranını (Serial Monitor) açın. Ekranda oda sıcaklığınızı göreceksiniz. Hassasiyeti test etmek için NTC'yi iki parmağınızın arasına alıp sıkın; vücut sıcaklığınız nedeniyle NTC direncinin hızla düştüğünü, ekrandaki sıcaklık değerinin ise 30-34 °C seviyelerine doğru hızla yükseldiğini canlı olarak izleyebilirsiniz.
10k NTC kullanarak analog verileri anlamlı fiziksel birimlere dönüştürmeyi başardık. NTC'ler su geçirmez kılıflarda (prob şeklinde) satılabildiği için akvaryum sıcaklığı ölçümü, sıvı tankı takibi gibi zorlu şartlarda çok rahat kullanılabilir. Bu projenin devamında, sıcaklık belirli bir değerin üzerine çıktığında daha önce öğrendiğimiz Röle modülünü tetikleyerek bir fanı çalıştıran otomatik bir "Termostat/Soğutma Sistemi" yapabilirsiniz.
yenidir.com analog sensörler rehberimizde harika bir aşamayı tamamladık! Bir sonraki yazımızda, bu sıcaklık değerlerini ve daha önce öğrendiğimiz DS1302 saat verilerini tek bir ekranda toplamak için projelerimize nasıl I2C LCD Ekran bağlayacağımızı öğrenelim mi? Sorularınızı ve yorumlarınızı aşağıda paylaşmayı unutmayın!
Henüz yorum yapılmamış. İlk yorumu siz yapın!