import gradio as gr def calculate_vdc(num_resistors, resistances, connection_type, target_current): # Convert space-separated resistance values to floats try: r_list = [float(r) for r in resistances.split()] if len(r_list) != num_resistors: return "⚠️ Number of resistance values does not match the count!", "" except: return "⚠️ Invalid resistance values!", "" # Equivalent resistance if connection_type == "Series": req = sum(r_list) else: try: req = 1 / sum([1/r for r in r_list]) except: return "⚠️ Invalid parallel combination!", "" # Voltage calculation vdc = req * target_current # Suggest nearest standard DC supply standard_vdc_levels = [3, 5, 6, 9, 12, 15, 24, 48] nearest_vdc = min(standard_vdc_levels, key=lambda x: abs(x - vdc)) result = ( f"Equivalent Resistance: {req:.3f} Ω\n" f"Target Current: {target_current:.3f} A\n" f"Required VDC: {vdc:.3f} V\n" ) suggestion = f"Nearest Standard DC Voltage Source: {nearest_vdc} V" return result, suggestion # ---------------------- # Gradio Interface # ---------------------- with gr.Blocks(title="DC Voltage Source Selector") as demo: gr.Markdown("## 🔋 DC Voltage Source Selector") gr.Markdown( "Enter the number of resistors, their values, and connection type.\n" "The app will calculate the required **DC voltage source**." ) num_resistors = gr.Number(label="Number of Resistors", value=1, precision=0) resistances = gr.Textbox( label="Enter Resistance Values (space-separated, in ohms)", placeholder="Example: 10 20 30" ) connection_type = gr.Radio( ["Series", "Parallel"], label="Connection Type", value="Series" ) target_current = gr.Number( label="Desired Current (A)", value=0.1, step=0.01 ) output_text = gr.Textbox(label="Calculation Result") suggestion = gr.Textbox(label="Recommended DC Voltage Source") btn = gr.Button("Calculate Voltage") btn.click( calculate_vdc, inputs=[num_resistors, resistances, connection_type, target_current], outputs=[output_text, suggestion] ) demo.launch()