#include <Wire.h>
#include <LiquidCrystalTr_I2C.h>
// Röle devresi
#define onikiv 9
#define yirmialtiv 8
#define otuzikiv 7
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);
const int currentSensor = A2;
const int voltageSensor = A0;
float vOUT = 0.0;
float vIN = 0.0;
float R1 = 1732.0;
float R2 = 665.0;
float Vdata = 0;
float V,I,I1;
float Cdata;
float value;
// Derece Simgesi Custom Char
byte derece[8] = {
B01100,
B10010,
B10010,
B01100,
B00000,
B00000,
B00000,
B00000
};
byte tdc[8] = {
B01100,
B01100,
B01100,
B01100,
B01100,
B11110,
B10010,
B11110
};
//////////////////////////////
// LM35 Sıcaklık Sensörü
const int lm35 = A3;
float voltaj_deger = 0;
int sicaklik = 0;
int gelen_veri = 0;
/////////////////////////////
void setup()
{
Serial.begin(115200);
pinMode(onikiv, OUTPUT);
pinMode(yirmialtiv, OUTPUT);
pinMode(otuzikiv, OUTPUT);
digitalWrite(onikiv, HIGH);
digitalWrite(yirmialtiv, LOW);
digitalWrite(otuzikiv, LOW);
// initialize the LCD
lcd.begin();
// Turn on the blacklight and print a message.
lcd.backlight();
lcd.setCursor(0,0);
lcd.print(" 30V 5A GÜC KAYNAĞI");
lcd.setCursor(0,1);
lcd.print("WATT:");
lcd.setCursor(0,2);
lcd.print("VOLT:");
lcd.setCursor(0,3);
lcd.print("AMPER:");
lcd.setCursor(14,2);
lcd.print("TEMP");
lcd.createChar(0, tdc);
lcd.setCursor(18, 2);
lcd.write(0);
lcd.setCursor(14,3);
lcd.print("0");
lcd.createChar(1, derece);
lcd.setCursor(15, 3);
lcd.write(1);
lcd.setCursor(16,3);
lcd.print("C");
delay(1000);
}
void loop() {
// Röle Devresi Serial Monitör
/*if(Serial.available()>0){
char oku = Serial.read();
Serial.println(oku);
if(oku == '1'){
digitalWrite(onikiv, LOW);
digitalWrite(yirmialtiv, LOW);
delay(1000);
digitalWrite(otuzikiv, HIGH);
}else if(oku == '2'){
digitalWrite(onikiv, LOW);
digitalWrite(otuzikiv, LOW);
delay(1000);
digitalWrite(yirmialtiv, HIGH);
}else if(oku == '3'){
digitalWrite(otuzikiv, LOW);
digitalWrite(yirmialtiv, LOW);
delay(1000);
digitalWrite(onikiv, HIGH);
}else if(oku == '4'){
digitalWrite(otuzikiv, LOW);
digitalWrite(yirmialtiv, LOW);
digitalWrite(onikiv, LOW);
}
}*/
/////////////////////////////
// LM35 Sıcaklık Sensörü
gelen_veri = analogRead(lm35);
voltaj_deger = (gelen_veri / 1023.0) * 5000;
sicaklik = voltaj_deger / 10.0;
lcd.setCursor(14, 2);
lcd.print(" ");
lcd.setCursor(14,2);
lcd.print("TEMP");
lcd.createChar(0, tdc);
lcd.setCursor(18, 2);
lcd.write(0);
lcd.setCursor(14, 3);
lcd.print(" ");
lcd.setCursor(14, 3);
lcd.print(sicaklik);
lcd.createChar(1, derece);
lcd.setCursor(16, 3);
lcd.write(1);
lcd.print("C");
delay(50);
///////////////////////////////////
// Daha kararlı ortalama bir sonuç almak için 350 kez okuma yapma
for(int i = 0; i < 350; i++)
{
Cdata = Cdata + analogRead(currentSensor);
Vdata = Vdata + analogRead(voltageSensor);
delay(1);
}
// Akım sensörü değerini hesaplama
Cdata=Cdata/350;
V=(Cdata/1024.0)*5000;
I=((V - 2500)/ 68);
//////////////////////
// Voltaj sensörü değerini hesaplama
Vdata=Vdata/350;
vOUT = (Vdata * 5.0) / 1024.0;
vIN = (vOUT / (R2/(R1+R2)));
//////////////////////////////
// Watt hesaplama ve ekrana yazdırma
lcd.setCursor(0,1);
lcd.print("WATT: ");
lcd.setCursor(6,1);
value=(I * vIN);
if (value<0){lcd.print("0.00");} else {lcd.print(value);}
/////////////////////////////////////////////////////////
// Amper değerini ekrana yazdırma
lcd.setCursor(0,3);
lcd.print("AMPER: ");
lcd.setCursor(6,3);
if (I<0) {lcd.print("0.00");} else {lcd.print(I);}
//////////////////////////////////////////////////
// Voltaj değerini ekrana yazdırma
lcd.setCursor(0,2);
lcd.print("VOLT: ");
lcd.setCursor(6,2);
lcd.print(vIN);
/////////////////////////////////
// Röle Devresi Otomatik Hareket
if(vIN <= 15.00){
digitalWrite(yirmialtiv, LOW);
digitalWrite(otuzikiv, LOW);
delay(250);
digitalWrite(onikiv, HIGH);
}else if((vIN >= 15.10)||(vIN <= 17.00)){
digitalWrite(onikiv, LOW);
digitalWrite(otuzikiv, LOW);
delay(250);
digitalWrite(yirmialtiv, HIGH);
}else if(vIN >= 17.10){
digitalWrite(onikiv, LOW);
digitalWrite(yirmialtiv, LOW);
delay(250);
digitalWrite(otuzikiv, HIGH);
}
///////////////////////////////////
// Değerleri sıfırlama
Cdata=0;
I=0;
V=0;
Vdata=0;
vIN=0;
value;
delay(50);
}
// LCD Satır Temizleme Fonksiyonu
void SatirTemizle(int satir) {
lcd.setCursor(0, satir);
lcd.print(" ");
lcd.setCursor(0, satir);
}