19 Ocak 2024 Cuma

Arduino MEGA 2560 ile NTC Termistörü ile Sıcaklık Ölçümü ve i2c LCD Ekranda Okuma

Arduino MEGA 2560 kart ile NTC Termistörünü okuyup LCD Ekranda gösterme:



Arduino üzerinden alınan +5V ile LCD ve NTC devreleri beslendi. Yapılan bağlantı yukarıdaki gibi olacak. Kullanılan NTC 10K değerindedir. NTC nin direnç değeri 25°C sıcaklıkta sahip olduğu direnç değeriyle anılırlar.




Burada tüm LDC Lerin i2c adresleri aynı. Görüldüğü üzere i2c hattı üzerinde aynı adrese ait birden çok LCD çalışabilmekte.  Çünkü LCD'ler sadece MCU dan verialma modunda olduğu için sorun çıkmamakta. Eğer LCD yerine MCU ya veri gönderen bir donanım bağlı olsaydı o zaman donanım hatası alacaktık.




LCD adresleri 0x27   ,  0x26   ve  0x25 olarak değiştirildi. 0x26 adresli Lcd AN0 kanalındaki ölçüm değerini, 0x25 adresli LCD ise AN1 kanalındaki ölçüm değerini gösterecek şekilde yazılımda gerekli düzenlemeler yapıldı.

i2c Lcd kütüphanesini linkten indirebilirsiniz. Mete Hocaya emekleri için teşekkür ederiz.


#include <Wire.h>
#include <LiquidCrystalTr_I2C.h>
#include <math.h>


LiquidCrystal_I2C Lcd_Main(0x27, 16, 2);  // i2c Lcd Adresi 0x27.  Ayrıntı için: https://www.ti.com/lit/gpn/PCF8574      
LiquidCrystal_I2C Lcd_AN0(0x26, 16, 2);
LiquidCrystal_I2C Lcd_AN1(0x25, 16, 2);

void setup()
{
 
  Lcd_Main.begin();
  Lcd_AN0.begin();
  Lcd_AN1.begin();
  Serial.begin(9600);

 
  Lcd_Main.backlight();  // Lcd Arka Plan aydınlatması açma komutu,  Kapatmak için ise Lcd_Main.noBacklight();
  Lcd_AN0.backlight();
  Lcd_AN1.backlight();
 

}

double NTC_Hesapla(int NTC_Oku) {   // Void Loop içerisindeki Ham_Deger değişkenindeki veriyi NTC_Oku değişkeni ile  NTC_Hesapla fonksiyonu içerisine aldık.
  double NTC_Hsp_Sicaklik;      // Ondalık değerimizi tutacak değişken.
  NTC_Hsp_Sicaklik = log(((10240000 / NTC_Oku) - 10000));  //  10K değerinde NTC kullandım.  25°C ortamda ölçülen direnç değeridir.
  NTC_Hsp_Sicaklik = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * NTC_Hsp_Sicaklik * NTC_Hsp_Sicaklik)) * NTC_Hsp_Sicaklik);  // https://www.thinksrs.com/downloads/programs/therm%20calc/ntccalibrator/ntccalculator.html
  NTC_Hsp_Sicaklik = NTC_Hsp_Sicaklik - 273.15;  //  Kelvin'den Santigrat çevrimi.
  return NTC_Hsp_Sicaklik;
}

void loop()
{
  int Ham_Deger = analogRead(A0);
  double sicaklik_AN0 = NTC_Hesapla(Ham_Deger);

  Ham_Deger = analogRead(A1);
  double sicaklik_AN1 = NTC_Hesapla(Ham_Deger);


  Serial.print("AN0: " );
  Serial.print(sicaklik_AN0 );
  Serial.print("  AN1: " );
  Serial.println(sicaklik_AN1 );

  // LCD 0X27
  Lcd_Main.clear();
  Lcd_Main.print("NTC SICAKLIK");
  Lcd_Main.setCursor(0,1);
  Lcd_Main.print("ÖLÇÜM UYGULAMASI");
  // LCD 0X26
  Lcd_AN0.clear();
  Lcd_AN0.print("AN-0 SICAKLIK");
  Lcd_AN0.setCursor(0,1);
  Lcd_AN0.print(sicaklik_AN0);  Lcd_AN0.print(" \337C");    //   "\337"= Derece Sembolü
  // LCD 0X25
  Lcd_AN1.clear();
  Lcd_AN1.print("AN-1 SICAKLIK");
  Lcd_AN1.setCursor(0,1);
  Lcd_AN1.print(sicaklik_AN1);  Lcd_AN1.print(" \337C");    //   "\337"= Derece Sembolü
  delay(1500);
}