#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// =======================
// Pin Definitions
// =======================
const int currentSensorPin = 34; // ACS712
const int voltageSensorPin = 35; // ZMPT101B
const int buttonPin = 2; // Simulate RFID scan
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD 16x2, address 0x27
// =======================
// Variables
// =======================
float current = 0.0;
float voltage = 0.0;
String rfidTag = "None";
// =======================
// Setup
// =======================
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
pinMode(buttonPin, INPUT_PULLDOWN); // push button simulate RFID
pinMode(currentSensorPin, INPUT);
pinMode(voltageSensorPin, INPUT);
Serial.println("Simulation Started!");
}
// =======================
// Loop
// =======================
void loop() {
// ----- Simulate Sensor Reading -----
int sensorValueCurrent = analogRead(currentSensorPin);
int sensorValueVoltage = analogRead(voltageSensorPin);
// Convert ACS712 (5A version) to Amps
current = ((sensorValueCurrent - 512) * (5.0 / 1024.0)) * 5; // rough simulation
// Convert ZMPT101B analog reading to Voltage (0-250V)
voltage = ((sensorValueVoltage / 1023.0) * 250.0); // rough simulation
// ----- Simulate RFID Scan -----
if (digitalRead(buttonPin) == HIGH) {
rfidTag = "RFID_001"; // simulate tag scanned
} else {
rfidTag = "None";
}
// ----- Display on LCD -----
lcd.clear();
lcd.setCursor(0,0);
lcd.print("V:");
lcd.print(voltage, 1);
lcd.print("V I:");
lcd.print(current, 2);
lcd.print("A");
lcd.setCursor(0,1);
lcd.print("Tag:");
lcd.print(rfidTag);
// ----- Simulate Sending Data -----
Serial.print("Sending Data -> ");
Serial.print("Voltage: "); Serial.print(voltage,1);
Serial.print("V, Current: "); Serial.print(current,2);
Serial.print("A, RFID: "); Serial.println(rfidTag);
delay(1000); /