File size: 2,328 Bytes
551bd7a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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()