11/05/2024

Arduino Sıcaklık ve Nem Sensörleri

KY-028 NTC Termistör Sıcaklık Sensörü:

KY028 sensörü NTC sıcaklık direnci kullanan bir sensördür. Amacı ortam sıcaklığını göstermek değildir. NTC sensörler ayarladığımız sıcaklık değerine göre Açma ve Kapama (0/1) değeri üretir. Yaygın kullanım alanlarından birisi güç kaynakları gibi yüksek ısı üreten elektronik devrelerin soğutmasını sağlayan fanların belirlediğimiz sıkaclık değeri aşıldığında çalışmasını sağlamaktır. Üzerindeki NTC direnci ısındıkça direnç değeri azalır. Bu özellik kullanılarak çeşitli devrelerde kullanılabilir.
Bu sensör modülünün üzerindeki trimpot ile ısı duyarlılığı değiştirilir ve ihtiyacımız olan sıcaklık değeri belirlenir.

Arduino için KY-028 ısı sensörünü kullanabileceğimiz ve çalışma mantığını anlamamızı sağlayacak örnek bir kod.

int Analog_Data = A0;
int Digital_Data = 7; 
String Durum; 
void setup ()
{
  pinMode (Analog_Data, INPUT);
  pinMode (Digital_Data, INPUT);  
  Serial.begin (9600);
}
void loop ()
{
 float Analog;
 int Digital;
  Analog = analogRead (Analog_Data);
  Digital = digitalRead (Digital_Data); 

  if (Digital == 1) Durum = "  AÇIK"; else Durum = "  KAPALI";
  Serial.print ("Analog değer: "); Serial.print (Analog, 2);
  Serial.print (" / ");
  Serial.print ("Dijital değer: "); Serial.print (Digital, 2);
  Serial.println (Durum);

  delay (1000);
}

Arduino ve KY028 Sensör Bağlantıları:

Sensör A0 (Analog) – Arduino A0
Sensör G(Ground) – Arduino G
Sensör +(Pozitif) – Arduino 5V
Sensör D0(Dijital) – Arduino 7 (veya farklı dijital giriş)

 

KY028 Termistör Sensörü ile Fan kullanımı (OLED Ekranlı)

Kullanılan Malzemeler:
KY-028 Termistör Sıcaklık Sensörü
KY-001 Sıcaklık Sensörü
DHT-11 Sıcaklık ve Nem Sensörü
18B20 Su Geçirmez Prob Sensör (Sıve sıcaklığı ölçümleri için)
BD139 NPN Transistör
1.3 inc Oled Ekran (SSD1106) 4 Pin
4.7K Direnç
1K Direnç
Arduino Uno
Fan

// KY028 Sensör Oled Ekran ve Fan kullanımı (KY028 & 1.3 inc OLED & Fun)
#include "U8glib.h"
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK);	

int Analog_Data = A0;
int Digital_Data = 7; 
String Durum;
float Analog;
int Digital; 

void draw(void) { 
    
u8g.setFont(u8g_font_unifont);

u8g.setPrintPos(0, 20); 
u8g.print("DIGITAL VERI: ");
u8g.setPrintPos(105, 20); 
u8g.print(Digital);

u8g.setPrintPos(0, 45); 
u8g.print(Durum);
  
}

void setup(void) {
  // Görüntüyü ters çevirme. Gerekirse
  // u8g.setRot180();
  pinMode (Analog_Data, INPUT);
  pinMode (Digital_Data, INPUT);
  pinMode(2, OUTPUT); 
}

void loop(void) {

  Analog = analogRead (Analog_Data);
  Digital = digitalRead (Digital_Data); 
if (Digital == 1){ 
         Durum = "FAN ACIK";
         digitalWrite(2, HIGH); 
    }
    else {                   
         Durum = "FAN KAPALI";
         digitalWrite(2, LOW); 
    }
  
      // picture loop
u8g.firstPage();  
  do {    
    draw();
  } while( u8g.nextPage() );
  
  delay(500);
}

Arduino maksimum 5V çıkışa sahiptir. Fan ise 9-12V ile çalışmaktadır. Bu yüzden fan beslemesi bağımsız olmalıdır. Bunun için BD139 NPN bir transistörü anahtar olarak kullanıyoruz.



KY001 Sıcaklık Sensörü, DHT11 Sıcaklık ve Nem Sensörü, 18B20 Su Geçirmez Sensörü Karşılaştırma (OLED Ekranlı) Kod

// KY001, DHT11, 18B20 Prob Sensor

#include <DallasTemperature.h>
#include <DHT.h>
#define DHTPIN 12
DHT dht(DHTPIN, DHT11);
#include "U8glib.h"
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK);	

#define BUS 2 // Veri kablosu Arduino Pin 2 de
OneWire oneWire(BUS);
DallasTemperature s1(&oneWire); // KY001
DallasTemperature s2(&oneWire);

void ekrana_yaz(void) { 

float t = dht.readTemperature(); //DHT11 Sıcaklık (Temperature)
float h = dht.readHumidity();  // DHT11 Nem (Humidity)
 
u8g.setFont(u8g_font_unifont);
u8g.setPrintPos(0, 10); 
u8g.print("PROB  :");
u8g.setPrintPos(65, 10); 
u8g.print(s1.getTempCByIndex(0)); // Aynı girişte birden fazla IC olabilir. 0 nolu girişteki ilk IC yi ifade ediyor. 1 ise diğerini (18B20 Prob & KY001)
u8g.setPrintPos(108, 10); 
u8g.print("C");

u8g.setPrintPos(0, 25); 
u8g.print("KY001 :");
u8g.setPrintPos(65, 25); 
u8g.print(s1.getTempCByIndex(1));
u8g.setPrintPos(108, 25); 
u8g.print("C");

u8g.setPrintPos(0, 40); 
u8g.print("DHT11 :");
u8g.setPrintPos(65, 40); 
u8g.print(t);
u8g.setPrintPos(108, 40); 
u8g.print("C");

u8g.setPrintPos(0, 55); 
u8g.print("DHT11 : ");
u8g.setPrintPos(65, 55); 
u8g.print(h);
u8g.setPrintPos(108, 55); 
u8g.print("%");
}

void setup(void) {
  Serial.begin(9600); 
  s1.begin(); // sensor 1
  s2.begin(); // sensor 2
  dht.begin();
}

void loop(void) {

  s1.requestTemperatures();  // Sıcaklık değerini almak için komutu gönder (Send the command to get temperatures)
  s2.requestTemperatures();
   
      // picture loop
  u8g.firstPage();  
  do {    
    ekrana_yaz();
  } while( u8g.nextPage() );  
  delay(500);
}


Bilgi:
Kod içerisinde bulunan Oled ekran kütüphanesi ve ekran komutları SH1106 ekranlar içindir. SSD1306 ekranlar ile çalışmayabilir. Bu durumda Adafruit kütüphanesi kullanılabilir. (Ekran komutlarında değişiklik yapmanız gerekecektir.) SSD1306 ekranlar için farklı bir uygulama Arduino Amper Volt Watt Ölçümü yazımızda mevcuttur.

Gerekli kütüphane dosyaları:
SH1106 Çipli OLED ekran için U8glip kütüphane dosyası.
18B20 Dallas Temperature kütüphane dosyası.
DHT11 Sıcaklık ve Nem Sensörü kütüphane dosyası.

* 4.7K direnç 18B20 Prob Sensör için gereklidir.
* DHT22 modülü DHT11 yerine kullanılabilir. DHT22 çok daha hassas ve verimli olçüm yapmaktadır. Fiyat olrak DHT11 çok daha ucuz olduğu için tercih edilmiştir.