Smart-Grid-System / Hardware_Simulation.py
chinmay0805's picture
hardware implementation
2d25bec
import serial
import random
import time
SERIAL_PORT = 'COM10'
BAUD_RATE = 115200
try:
# Initialize Serial connection
arduino = serial.Serial(SERIAL_PORT, BAUD_RATE, timeout=1)
time.sleep(2) # Allow connection to stabilize
print("Smart Grid RL Simulation")
print("========================================\n")
while True:
# Generate a random hour for the scenario
hour = random.randint(0, 23)
time_str = f"{hour:02d}:00"
print(f"[Scenario -> Hour {time_str}]")
# --- Scenario Logic & Hardware Triggering ---
if 10 <= hour <= 16:
print(" State: Running on Solar Power")
print(" Hardware: LED is [SOLID ON]")
arduino.write(b'S') # Trigger Arduino Solar state
reward = 2.50
print(f" RL Reward: +${reward:.2f} (Free energy utilized)")
elif 17 <= hour <= 21:
print(" State: Discharging Home Battery")
print(" Hardware: LED is [BLINKING]")
arduino.write(b'B') # Trigger Arduino Battery state
reward = 4.80
print(f" RL Reward: +${reward:.2f} (Avoided expensive peak rates!)")
else:
print(" State: Drawing from Grid")
print(" Hardware: LED is [OFF]")
arduino.write(b'G') # Trigger Arduino Grid state
reward = -1.20
print(f" RL Reward: -${abs(reward):.2f} (Paid off-peak grid rate)")
print("-" * 40)
time.sleep(3) # Pause for 3 seconds between scenarios
except serial.SerialException:
print(f"Error: Could not connect to {SERIAL_PORT}. Check connection and close Arduino Serial Monitor.")
except KeyboardInterrupt:
print("\nSimulation stopped by user.")
finally:
if 'arduino' in locals() and arduino.is_open:
arduino.close()