import gradio as gr # Constants for resistivity (ohm·mm²/m) RESISTIVITY = { "Copper": 0.0172, "Aluminum": 0.0282 } def cable_sizing(load_kw, voltage, power_factor, length, drop_percent, material): try: # Step 1: Calculate current current = (load_kw * 1000) / (voltage * power_factor) # Step 2: Allowable voltage drop vd_allowed = (drop_percent / 100) * voltage # Step 3: Required cross-sectional area rho = RESISTIVITY[material] area = (2 * rho * length * current) / vd_allowed # 2 for single-phase, use √3 for three-phase # Round to nearest standard cable size standard_sizes = [1.5, 2.5, 4, 6, 10, 16, 25, 35, 50, 70, 95, 120, 150, 185, 240] recommended_size = min([s for s in standard_sizes if s >= area], default=">240") return ( f"Calculated Current: {current:.2f} A\n" f"Required Area: {area:.2f} mm²\n" f"Recommended Cable Size: {recommended_size} mm² ({material})" ) except Exception as e: return f"Error: {e}" # Gradio Interface iface = gr.Interface( fn=cable_sizing, inputs=[ gr.Number(label="Load (kW)"), gr.Number(label="Voltage (V)"), gr.Number(label="Power Factor (pf)", value=0.8), gr.Number(label="Cable Length (m)"), gr.Number(label="Allowable Voltage Drop (%)", value=3), gr.Radio(["Copper", "Aluminum"], label="Conductor Material", value="Copper") ], outputs="text", title="Cable Sizing Calculator ⚙️", description="Estimate suitable cable size based on load, voltage, and voltage drop limit." ) iface.launch()