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);
}