Ardunio ve LM35DZ ile sıcaklık ölçümü

Uzun zamandır yazmayı planladığım ve bir türlü yazamadığım Ardunio ile Sıcaklık Ölçer yazısını yazmak bugüne nasip oldu :)

Bundan yaklaşık 1,5 yıl öncesinde projesini geliştirdiğimiz bir devlet kurumunun ihalesinde geliştirilen sistemin bulunduğu odanın sıcaklığını bildiren bir cihaz verilmelidir diye ihale şartnamesinde madde vardı.

Türkiye’den hızlıca tedarik etmem gerekiyordu bu cihazı. Araştırmalarım sonucunda en ideal cihaz şu olmuştu.(Araştırmak için çok vaktim olmadı ama 2 saatlik araştırma sonucundaki seçenekler arasındaki en ideali diyebiliriz)

ardunio4

Fiyatı 227€. Sıcaklık ölçmek için hiç uygun görünmeyen bir design. Sensör kapalı bir kutunun içinde. Sensör kapalı kutunun içinde olduğu zaman, sıcaklık ölçmede sapmalar olacağı kanaatindeyim. Ve cihaz SMTP dahi desteklemiyor.

Hiç içime sinmemesine rağmen, ihalenin kabul alması için SMTP desteklemeyen, sensörü kapalı kutuda olan ve 227€ gibi bir fiyatı olan cihazı satın almak durumunda kaldık.

Bu cihazdan, 10-20 $ arasında değişen herhangi bir Ardunio boardı ve tanesi 1-2$ olan “birkaç” sıcaklık sensörü ile yapalım dedik.

Birkaç sıcaklık sensörü çünkü, her sensörün kalibrasyonu aynı olmayabilir. En az 2 sensör koyup bu sensörler arasındaki sıcaklıklar arasında çok büyük sapma yoksa sıcaklığın o değer olduğundan emin olabiliriz.

Ya da sensörün 1′i bozulduğu anda, diğer sensörden ölçüm yapmaya devam edebilmeliyiz diye düşündük.

20160527_165110

Devremizi bu şekilde 2 sensör olacak şekilde tasarladım.

Boarda upload ettiğim kod şudur :

int ledPin = 13; // select the pin for the LED
int sensorValue0=0, sensorValue1=0, sensorValue2=0, sensorValue3=0, sensorValue4=0, sensorValue5=0;
int incomingByte;

void setup() {
// declare pin 9 to be an output:
pinMode(9, OUTPUT);
// declare the ledPin as an OUTPUT:
pinMode(ledPin, OUTPUT);
// To increase the resolution of 10bit ADC when measuring temperature sensors
// We decrease the reference voltage to internal of Arduino, which is around 1.1V
analogReference(INTERNAL);
Serial.begin(9600);
// Serial.println(“Arduino serial port monitor v0.1 READY”);
// Serial.println(“Click on h to dump Help”);
}

void loop() {
// read the value from the sensor:
sensorValue0 = analogRead(A0);
sensorValue1 = analogRead(A1);
sensorValue2 = analogRead(A2);
sensorValue3 = analogRead(A3);
sensorValue4 = analogRead(A4);
sensorValue5 = analogRead(A5);

incomingByte = Serial.read();
delay(10);

if(incomingByte == 00) Serial.println(“Lütfen bir komut gönderin “);
if(incomingByte == 48) Serial.println(sensorValue0/9.31);
if(incomingByte == 49) Serial.println(sensorValue1/9.31);
if(incomingByte == 50) Serial.println(sensorValue2/9.31);
if(incomingByte == 51) Serial.println(sensorValue3/9.31);
if(incomingByte == 52) Serial.println(sensorValue4/9.31);
if(incomingByte == 53) Serial.println(sensorValue5/9.31);

if(incomingByte == 104) {
Serial.println(“Type 0 – 5 to read analog input values in 10bit text”);
}
}

Ardunio’nun Serial port monitorunden 0 ile 5 arasında herhangi bir input girdiğinizde, size o inputtan gelen değeri dönecektir.

Bunun için de WPF ile küçük bir monitoring toolu yazdım:

Onun da ekran görüntüsü şu şekilde
ardunio2ardunio1

2′nolu sensörden ölçmek istediğinizde ya da 5′den ölçmek istediğinizde seçebiliyorsunuz.

1′den fazla sensör seçili ise, sensörler arasındaki uyuşmazlıklar da kontrol edilebilir ve sapmanın az olduğu değeri dönecektir.

Ve belli bir sıcaklığın üstüne çıktığında mail atacaktır. Ya da bir buzzer bağlayıp onun ötmesini de sağlayabilirdik.

ardunio3