Arduino ile Sıcaklık Ölçümü

0
218

Bu yazımızda analog sensör kullanarak arduino ile sıcaklık ölçümü nasıl yapılır, sizleri bilgilendirmeye çalışacağız.

Analog sıcaklık sensörlerinde ölçüm sonucu, sensörün çıkış ucundan analog olarak alınır. Sensörün çıkış ucundaki gerilim, ortam ısısı ile orantılı olarak azalıp artar. Bu tip sensörler genellikle besleme (+V veya VCC), şase (GND) ve çıkış (OUT) olmak üzere üç uçludur. Sensör çıkış ucu ile arduino kart arasındaki bağlantı için arduino kartın analog girişleri kullanılır.

LM35 Sıcaklık Sensörü

LM35 sensörü için çalışma gerilimi en düşük 4V, en yüksek 20V olmalıdır. Tipik çalışma gerilimi 5V ‘tur.

Sıcaklık ölçüm aralığı; LM35, LM35A için -55 ℃ ile 155 ℃,

LM35C, LM35CA için -40 ℃ ile 110 ℃,

LM35D için 0 ℃ ile 100 ℃ ‘dir.

lm35 pinleri

LM35 çıkış ucundaki gerilim 0 ℃ ‘de 0 V ‘tur. Her 1 ℃ ‘lik sıcaklık artışında bu gerilim 10mV artar.

lm35 arduino bağlantı
 int lm35adc; 
float sicaklik;

void setup() {
Serial.begin(9600);
}

void loop(){
lm35adc = analogRead(A1);

// Arduino Uno için ADC çözünürlük 5/1024 = 0.004882V = 4.882 mV
// Sensör çıkış ucundaki gerilim (mV) = 4.882 * lm35adc
// 1 °C sıcaklık 10mV olduğundan;
// Gerilimi dereceye çevirmek için = (4.882 * lm35adc) / 10
// = 0.4882 * lm35adc;

sicaklik = 0.4882 * lm35adc;
Serial.print("Sıcaklık :");
Serial.print(sicaklik);
Serial.println(" °C");
delay(1000);
}
 

0 °C ile 155 ℃ arasında sıcaklık ölçümü yapılacak ise yukarıdaki bağlantı şekli uygundur. Ancak bu bağlantı şeklinde sıcaklığın negatif olduğu durumda sensör çıkışı 0 Volt ‘ta sabit kalır.

LM35 ile negatif sıcaklık değerleri de ölçülmek istenirse ya simetrik besleme kullanılmalı yada ve öteleme yapılmalıdır. Simetrik besleme arduino kartlar için kullanışlı olmadığından en doğrusu öteleme yöntemidir.

Öteleme yönteminde; LM35 sensörün GND ucuna seri iki adet hızlı diyot (1N4148) bağlanır. Bu şekilde sensör çıkışındaki gerilim seviyesi yaklaşık 700 mV artar. Yani sıcaklık 0 °C ‘de iken sensör çıkışının 700mV olacağı anlamına gelir. Negatif sıcaklık değerlerinde ise sensör çıkışı 700 mV ‘tun altına iner.

Örneğin -10 °C için sensör çıkışı [700 – (10*10)] = 600mV olur.

Lm35 Arduino
 int lm35adc;
int lm35adc2;
float sicaklik;

void setup() {
Serial.begin(9600);
}

void loop(){
lm35adc2 = analogRead(A0);
lm35adc = analogRead(A1);


// Arduino Uno için ADC çözünürlük 5/1024 = 0.004882V = 4.882 mV
// Sensör çıkış ucundaki gerilim = 4.882 * lm35adc
// Gerilimi dereceye çevirmek için = [4.882 * (lm35adc2 - lm35adc)] / 10
// = 0.482 * (lm35adc2 - lm35adc)

sicaklik = 0.482 * (lm35adc - lm35adc2);
Serial.print("Sıcaklık :");
Serial.print(sicaklik);
Serial.println(" °C");
delay(1000);
}

MCP9700A Sıcaklık Sensörü

MCP9700A sıcaklık sensörüne uygulanacak en düşük besleme gerilimi 2.3V, en yüksek besleme gerilimi 5.5V ‘tur. Bu nedenle hem 3.3V hemde 5V arduino kartlarda kullanılabilir. Düşük maliyetli ve yüksek doğruluk oranına sahip olması da ayrı bir tercih nedenidir.

Sıcaklık ölçüm aralığı; MCP9700A için -45 ℃ ile +125 ℃ arasıdır.

MCP9700A pin bağlantısı

MCP9700A sıcaklık sensörünün çıkış ucundaki gerilim 0 ℃ ‘de 500mV ‘tur. Her 1 ℃ ‘lik sıcaklık artışında bu gerilim değeri 10mV artar. (25 ℃ ‘de çıkış ucunda 750mV gerilim olacaktır.)

MCP9700A Arduino bağlantı

Yukarıdaki bağlantı şemasındaki iki adet direnç (1.8K ve 75K) sensörün çıkışında gerilim bölücü olarak çalışır.

Arduino Uno kartın analog girişleri 10 bit olduğundan gerilim çözünürlüğü (5 / 1024) 0.004882V = 4.882 mV ‘tur. Bu demektir ki her 4.882 mV gerilim artışında ADC değeri 1 artar. MCP9700A sıcaklık sensörünün çıkışına bağlanacak gerilim bölücü devre her 1 ℃ sıcaklık artışı için 10mV değerini 9.764 mV seviyesine çeker. Böylece her 1 ℃ sıcaklık 2 ADC değerine eşitlenir. Bu eşitlemenin avantajı ölçümün daha doğrusal olmasıdır.

 float mc9700adc;                     
float derece;

// MCP9700A
// 500mV + °C BAŞINA 10mV (1.8k -- 75k = 9.764 mV)
// -50 °C ---> 0mV ---> ADC 0
// 0 °C ---> 500mV ---> ADC 100
// +125 °C ---> 1750mV ---> ADC 250 + 100 = 350

void setup() {
Serial.begin(9600);
}

void loop() {
mc9700adc = analogRead(A0)

if ( mc9700adc < 100) { // Sıcaklık negatif
derece = 50 - ( mc9700adc /2);
Serial.print("Sıcaklık : -");
Serial.print(derece);
Serial.println(" °C");
}

else // Sıcaklık pozitif

{
derece = (mc9700adc / 2) - 50;
Serial.print("Sıcaklık :");
Serial.print(derece);
Serial.println(" °C");
}

delay(1000);

}


CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz