#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// Pins
#define CURRENT_PIN 33 // Potentiometer for CT sensor
#define TEMP_PIN 4 // DS18B20 data pin
#define RELAY_PIN 23 // Relay control pin (updated pin)
#define BUZZER_PIN 18 // Buzzer pin
#define LED_PIN 19 // LED red indicator pin
// Thresholds
#define CURRENT_THRESHOLD 600
// LCD setup
LiquidCrystal_I2C lcd(0x27, 16, 2);
// DS18B20 setup
OneWire oneWire(TEMP_PIN);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(115200);
sensors.begin();
lcd.init();
lcd.backlight();
pinMode(RELAY_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // Transformer ON
digitalWrite(BUZZER_PIN, LOW); // Buzzer off
digitalWrite(LED_PIN, LOW); // LED off
Serial.println("Transformer Protection System Started");
lcd.setCursor(0, 0);
lcd.print("System Started");
lcd.setCursor(0, 1);
lcd.print("Transformer ON");
delay(2000);
lcd.clear();
}
void loop() {
int currentValue = analogRead(CURRENT_PIN);
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
// Display to Serial
Serial.print("Current: ");
Serial.print(currentValue);
Serial.print(" | Temp: ");
Serial.print(tempC);
Serial.println(" °C");
// Display to LCD
lcd.setCursor(0, 0);
lcd.print("Current:");
lcd.print(currentValue);
lcd.setCursor(0, 1);
lcd.print("Temp:");
lcd.print(tempC);
lcd.print("C ");
// Ground Fault Detection Only
if (currentValue > CURRENT_THRESHOLD) {
digitalWrite(BUZZER_PIN, HIGH); // Buzzer ON
digitalWrite(LED_PIN, HIGH); // LED ON
digitalWrite(RELAY_PIN, LOW); // Turn off transformer
Serial.println("[FAULT] Ground Fault Detected");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("FAULT: Ground");
lcd.setCursor(0, 1);
lcd.print("Transformer OFF");
delay(4000);
// Turn everything off
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(LED_PIN, LOW);
} else {
digitalWrite(RELAY_PIN, HIGH); // Transformer ON
digitalWrite(BUZZER_PIN, LOW); // Buzzer OFF
digitalWrite(LED_PIN, LOW); // LED OFF
}
delay(1000);
}