Smart grid model with renewable energy sources in MATLAB Simulink
Introduction to Smart Grids
Smart grids represent the future of electrical power distribution, combining traditional power infrastructure with advanced digital communication technologies. Unlike conventional power grids, smart grids can automatically detect and respond to local changes in usage, integrate renewable energy sources efficiently, and provide real-time information to both utilities and consumers.
In this comprehensive tutorial, we'll explore smart grid concepts through practical MATLAB Simulink simulation, covering:
- Bidirectional power flow management
 - Renewable energy integration (Solar & Wind)
 - Energy storage systems (Battery & Supercapacitors)
 - Load balancing and demand response
 - Grid stability and protection systems
 
Prerequisites
Basic knowledge of electrical circuits, power systems fundamentals, and familiarity with MATLAB/Simulink interface. Understanding of AC power analysis and three-phase systems is recommended.
Smart Grid Components
Before diving into simulation, let's understand the key components that make a grid "smart":
Setting Up the Simulink Model
We'll build a comprehensive smart grid model step by step. Start by opening MATLAB and creating a new Simulink model:
% MATLAB Commands to initialize the workspace
clear all; clc;
% Define simulation parameters
sim_time = 10; % Simulation time in seconds
solar_capacity = 100e3; % 100 kW solar capacity
wind_capacity = 150e3; % 150 kW wind capacity
battery_capacity = 200e3; % 200 kWh battery capacity
base_load = 180e3; % 180 kW base load
% Grid parameters
grid_voltage = 11e3; % 11 kV distribution voltage
grid_frequency = 50; % 50 Hz
                            1. Traditional Grid Source
First, let's model the traditional grid connection:
% Grid Source Block Configuration
% Use: Three-Phase Source (Simulink/SimPowerSystems/Electrical Sources)
% Parameters:
% - Peak line-to-line voltage: 11000*sqrt(2) V
% - Frequency: 50 Hz
% - Phase angle: 0 degrees
% - Internal resistance: 0.01 ohm
% - Internal inductance: 1e-6 H
                            2. Solar Power Generation
Model a solar PV system with MPPT controller:
function [P_solar, V_dc] = solarPVModel(irradiance, temperature)
    % Solar PV model with temperature and irradiance variation
    
    % Standard conditions
    G_std = 1000; % W/m^2
    T_std = 25; % °C
    
    % PV module parameters
    V_oc = 40; % Open circuit voltage
    I_sc = 8.5; % Short circuit current
    V_mp = 32; % Voltage at maximum power
    I_mp = 7.8; % Current at maximum power
    
    % Temperature coefficients
    alpha = 0.0032; % Current temperature coefficient
    beta = -0.0032; % Voltage temperature coefficient
    
    % Calculate actual values
    I_sc_actual = I_sc * (irradiance/G_std) * (1 + alpha*(temperature-T_std));
    V_oc_actual = V_oc * (1 + beta*(temperature-T_std));
    
    % Simplified MPPT - assume operating at 80% of Voc
    V_dc = 0.8 * V_oc_actual;
    I_dc = I_sc_actual * 0.9; % Simplified current calculation
    
    P_solar = V_dc * I_dc;
end
                            3. Wind Power Generation
Implement a wind turbine model with variable wind speed:
function P_wind = windTurbineModel(wind_speed)
    % Wind turbine power curve
    
    % Turbine specifications
    P_rated = 150e3; % 150 kW rated power
    v_cut_in = 3; % Cut-in wind speed (m/s)
    v_rated = 12; % Rated wind speed (m/s)
    v_cut_out = 25; % Cut-out wind speed (m/s)
    
    if wind_speed < v_cut_in || wind_speed > v_cut_out
        P_wind = 0;
    elseif wind_speed < v_rated
        % Cubic relationship in Region 2
        P_wind = P_rated * ((wind_speed - v_cut_in)/(v_rated - v_cut_in))^3;
    else
        % Constant power in Region 3
        P_wind = P_rated;
    end
    
    % Add turbulence factor
    turbulence = 1 + 0.1*randn(); % 10% turbulence
    P_wind = P_wind * max(0, turbulence);
end
                            Energy Storage System
Implement a battery energy storage system with state-of-charge management:
function [P_battery, SOC] = batteryModel(P_demand, P_generation, SOC_prev, dt)
    % Battery Energy Storage System model
    
    % Battery parameters
    capacity = 200e3; % 200 kWh capacity
    efficiency_charge = 0.95;
    efficiency_discharge = 0.95;
    SOC_min = 0.2; % Minimum 20% SOC
    SOC_max = 0.9; % Maximum 90% SOC
    max_charge_power = 100e3; % 100 kW max charging
    max_discharge_power = 100e3; % 100 kW max discharging
    
    % Calculate power imbalance
    P_imbalance = P_generation - P_demand;
    
    if P_imbalance > 0 && SOC_prev < SOC_max
        % Excess generation - charge battery
        P_battery = -min(P_imbalance * efficiency_charge, max_charge_power);
        % Update SOC
        energy_change = -P_battery * dt / 3600; % Convert to kWh
        SOC = SOC_prev + energy_change / capacity;
        SOC = min(SOC, SOC_max);
        
    elseif P_imbalance < 0 && SOC_prev > SOC_min
        % Deficit - discharge battery
        P_battery = min(-P_imbalance / efficiency_discharge, max_discharge_power);
        % Update SOC
        energy_change = P_battery * dt / 3600; % Convert to kWh
        SOC = SOC_prev - energy_change / capacity;
        SOC = max(SOC, SOC_min);
        
    else
        % No battery action
        P_battery = 0;
        SOC = SOC_prev;
    end
end
                            Load Modeling and Demand Response
Smart grids enable demand response - the ability to modify consumer demand patterns:
function [P_load, P_critical, P_flexible] = smartLoadModel(t, price_signal)
    % Smart load model with demand response capability
    
    % Base load profile (typical residential/commercial)
    hour = mod(t/3600, 24); % Convert time to hour of day
    
    % Typical daily load curve
    if hour >= 0 && hour < 6
        base_factor = 0.6; % Low demand during night
    elseif hour >= 6 && hour < 9
        base_factor = 0.9; % Morning peak
    elseif hour >= 9 && hour < 17
        base_factor = 0.8; % Daytime
    elseif hour >= 17 && hour < 22
        base_factor = 1.0; % Evening peak
    else
        base_factor = 0.7; % Late evening
    end
    
    % Critical load (cannot be reduced)
    P_critical = 120e3 * base_factor * 0.6; % 60% of load is critical
    
    % Flexible load (can respond to price signals)
    base_flexible = 120e3 * base_factor * 0.4; % 40% is flexible
    
    % Demand response based on price
    price_threshold = 0.15; % $/kWh threshold
    if price_signal > price_threshold
        % Reduce flexible load when prices are high
        reduction_factor = min(0.5, (price_signal - price_threshold) * 2);
        P_flexible = base_flexible * (1 - reduction_factor);
    else
        P_flexible = base_flexible;
    end
    
    P_load = P_critical + P_flexible;
end
                            Grid Control and Optimization
Implement an energy management system that optimizes power flow:
function control_signals = energyManagementSystem(grid_data)
    % Energy Management System - optimization and control
    
    % Extract current state
    P_solar = grid_data.solar_power;
    P_wind = grid_data.wind_power;
    P_load = grid_data.load_demand;
    SOC = grid_data.battery_soc;
    grid_price = grid_data.electricity_price;
    
    % Total renewable generation
    P_renewable = P_solar + P_wind;
    
    % Initialize control signals
    control_signals.battery_mode = 'standby';
    control_signals.grid_import = 0;
    control_signals.load_shed = 0;
    
    % Power balance calculation
    P_balance = P_renewable - P_load;
    
    if P_balance > 50e3 && SOC < 0.9
        % Excess renewable power - charge battery
        control_signals.battery_mode = 'charge';
        control_signals.battery_power = min(P_balance, 100e3);
        
    elseif P_balance < -20e3 && SOC > 0.3
        % Power deficit - discharge battery
        control_signals.battery_mode = 'discharge';
        control_signals.battery_power = min(-P_balance, 100e3);
        P_balance = P_balance + control_signals.battery_power;
        
    end
    
    % Grid interaction
    if P_balance < -10e3
        % Still have deficit - import from grid
        control_signals.grid_import = -P_balance;
    elseif P_balance > 10e3
        % Excess power - export to grid (if allowed)
        control_signals.grid_export = P_balance;
    end
    
    % Emergency load shedding if needed
    if control_signals.grid_import > 200e3 % Grid import limit
        excess_demand = control_signals.grid_import - 200e3;
        control_signals.load_shed = excess_demand;
        control_signals.grid_import = 200e3;
    end
end
                            Simulation Results and Analysis
Run the complete simulation and analyze the results:
% Complete simulation script
function runSmartGridSimulation()
    % Simulation parameters
    dt = 0.1; % Time step (seconds)
    t_end = 86400; % 24 hours simulation
    t = 0:dt:t_end;
    n = length(t);
    
    % Initialize result arrays
    results.time = t;
    results.solar_power = zeros(1, n);
    results.wind_power = zeros(1, n);
    results.load_demand = zeros(1, n);
    results.battery_power = zeros(1, n);
    results.battery_soc = zeros(1, n);
    results.grid_power = zeros(1, n);
    
    % Initial conditions
    SOC = 0.5; % 50% initial SOC
    
    % Run simulation
    for i = 1:n
        current_time = t(i);
        
        % Environmental conditions (varying throughout the day)
        irradiance = 1000 * max(0, sin(pi * current_time / 43200)); % Solar irradiance
        temperature = 25 + 10 * sin(pi * current_time / 43200); % Temperature variation
        wind_speed = 8 + 4 * sin(pi * current_time / 21600) + randn(); % Wind variation
        
        % Generate power from renewables
        [P_solar, ~] = solarPVModel(irradiance, temperature);
        P_wind = windTurbineModel(wind_speed);
        
        % Calculate load demand
        electricity_price = 0.1 + 0.05 * sin(pi * current_time / 43200); % Variable pricing
        [P_load, ~, ~] = smartLoadModel(current_time, electricity_price);
        
        % Battery management
        P_renewable = P_solar + P_wind;
        [P_battery, SOC] = batteryModel(P_load, P_renewable, SOC, dt);
        
        % Grid power (positive = import, negative = export)
        P_grid = P_load - P_renewable - P_battery;
        
        % Store results
        results.solar_power(i) = P_solar;
        results.wind_power(i) = P_wind;
        results.load_demand(i) = P_load;
        results.battery_power(i) = P_battery;
        results.battery_soc(i) = SOC;
        results.grid_power(i) = P_grid;
    end
    
    % Plot results
    plotSmartGridResults(results);
end
function plotSmartGridResults(results)
    figure('Position', [100, 100, 1200, 800]);
    
    % Power flow subplot
    subplot(2,2,1);
    plot(results.time/3600, results.solar_power/1000, 'y-', 'LineWidth', 2);
    hold on;
    plot(results.time/3600, results.wind_power/1000, 'b-', 'LineWidth', 2);
    plot(results.time/3600, results.load_demand/1000, 'r-', 'LineWidth', 2);
    plot(results.time/3600, results.grid_power/1000, 'k-', 'LineWidth', 2);
    xlabel('Time (hours)');
    ylabel('Power (kW)');
    title('Smart Grid Power Flow');
    legend('Solar', 'Wind', 'Load', 'Grid', 'Location', 'best');
    grid on;
    
    % Battery status subplot
    subplot(2,2,2);
    yyaxis left;
    plot(results.time/3600, results.battery_power/1000, 'g-', 'LineWidth', 2);
    ylabel('Battery Power (kW)');
    yyaxis right;
    plot(results.time/3600, results.battery_soc*100, 'm-', 'LineWidth', 2);
    ylabel('SOC (%)');
    xlabel('Time (hours)');
    title('Battery Energy Storage System');
    grid on;
    
    % Energy balance subplot
    subplot(2,2,3);
    renewable_energy = (results.solar_power + results.wind_power)/1000;
    plot(results.time/3600, renewable_energy, 'g-', 'LineWidth', 2);
    hold on;
    plot(results.time/3600, results.load_demand/1000, 'r-', 'LineWidth', 2);
    xlabel('Time (hours)');
    ylabel('Power (kW)');
    title('Renewable vs Load');
    legend('Renewable Generation', 'Load Demand', 'Location', 'best');
    grid on;
    
    % Grid interaction subplot
    subplot(2,2,4);
    grid_import = max(0, results.grid_power/1000);
    grid_export = max(0, -results.grid_power/1000);
    plot(results.time/3600, grid_import, 'r-', 'LineWidth', 2);
    hold on;
    plot(results.time/3600, grid_export, 'b-', 'LineWidth', 2);
    xlabel('Time (hours)');
    ylabel('Power (kW)');
    title('Grid Interaction');
    legend('Import from Grid', 'Export to Grid', 'Location', 'best');
    grid on;
end
                            Key Performance Indicators
Monitor renewable energy penetration (%), grid import/export balance, battery utilization, load factor, and power quality metrics to evaluate smart grid performance.
Advanced Features
1. Voltage Regulation
Smart grids must maintain voltage within acceptable limits despite variable generation:
function V_regulated = voltageRegulation(V_measured, P_reactive)
    % Automatic Voltage Regulator for smart grid
    
    V_reference = 1.0; % Per unit reference voltage
    V_tolerance = 0.05; % ±5% tolerance
    
    % PI controller parameters
    Kp = 2.0;
    Ki = 0.5;
    
    persistent integral_error;
    if isempty(integral_error)
        integral_error = 0;
    end
    
    % Calculate error
    voltage_error = V_reference - V_measured;
    integral_error = integral_error + voltage_error;
    
    % PI controller output
    Q_correction = Kp * voltage_error + Ki * integral_error;
    
    % Apply reactive power correction
    P_reactive_new = P_reactive + Q_correction;
    
    % Simplified voltage calculation
    V_regulated = V_measured + 0.1 * Q_correction;
    
    % Limit voltage within acceptable range
    V_regulated = max(V_reference - V_tolerance, ...
                     min(V_reference + V_tolerance, V_regulated));
end
                            2. Fault Detection and Protection
function fault_status = faultDetection(I_measured, V_measured)
    % Smart grid fault detection system
    
    % Protection settings
    I_threshold = 1.5; % 150% of rated current
    V_threshold_low = 0.8; % 80% of rated voltage
    V_threshold_high = 1.2; % 120% of rated voltage
    
    fault_status.overcurrent = max(I_measured) > I_threshold;
    fault_status.undervoltage = min(V_measured) < V_threshold_low;
    fault_status.overvoltage = max(V_measured) > V_threshold_high;
    fault_status.any_fault = fault_status.overcurrent || ...
                            fault_status.undervoltage || ...
                            fault_status.overvoltage;
    
    if fault_status.any_fault
        fprintf('FAULT DETECTED: ');
        if fault_status.overcurrent
            fprintf('Overcurrent ');
        end
        if fault_status.undervoltage
            fprintf('Undervoltage ');
        end
        if fault_status.overvoltage
            fprintf('Overvoltage ');
        end
        fprintf('\n');
    end
end
                            Simulation Limitations
Remember that these are simplified models for educational purposes. Real smart grid systems involve complex dynamics, detailed power electronics models, and sophisticated control algorithms that require more advanced simulation tools.
Benefits of Smart Grid Technology
| Benefit | Traditional Grid | Smart Grid | 
|---|---|---|
| Renewable Integration | Limited, causes instability | High integration with stability | 
| Outage Detection | Customer calls required | Automatic detection | 
| Energy Efficiency | Fixed consumption patterns | Demand response optimization | 
| Power Quality | Basic regulation | Advanced monitoring & control | 
Future Developments
The evolution of smart grids continues with emerging technologies:
- Artificial Intelligence: Machine learning for predictive maintenance and optimization
 - Blockchain: Peer-to-peer energy trading and secure transactions
 - 5G Communication: Ultra-low latency for real-time control
 - Edge Computing: Distributed intelligence at grid nodes
 - Electric Vehicle Integration: V2G (Vehicle-to-Grid) capabilities
 
Conclusion
Smart grid simulation using MATLAB Simulink provides invaluable insights into modern power system operation. The integration of renewable energy sources, energy storage, and intelligent control systems creates a more resilient, efficient, and sustainable electrical grid.
This tutorial covered the fundamental aspects of smart grid modeling, from individual component models to system-level optimization. The simulation framework can be extended to explore specific aspects like microgrid operation, electric vehicle integration, or advanced protection schemes.