Spaces:
Sleeping
Sleeping
import streamlit as st | |
# Set page configuration | |
st.set_page_config(page_title="Hydraulic Pump Power Calculator", page_icon="\U0001F6E0", layout="centered") | |
# Unit conversion factors | |
UNIT_CONVERSIONS = { | |
"Displacement": {"cc/rev": 1, "in^3/rev": 16.387, "liters/rev": 1000}, | |
"Pressure": {"bar": 1, "MPa": 10, "PSI": 0.0689476, "kPa": 0.01, "atm": 1.01325}, | |
"Torque": {"Nm": 1, "lb-ft": 1.35582}, | |
"Flow Rate": {"L/min": 1, "m^3/h": 16.6667, "GPM (US)": 3.78541, "GPM (UK)": 4.54609} | |
} | |
# Hydraulic Power Calculation and Missing Parameter Estimation | |
def calculate_hydraulic_parameters(displacement, pressure, rpm, torque, flow_rate, | |
displacement_unit, pressure_unit, torque_unit, flow_rate_unit): | |
# Convert inputs to base units | |
displacement_cc = displacement * UNIT_CONVERSIONS["Displacement"].get(displacement_unit, 1) if displacement else None | |
pressure_bar = pressure * UNIT_CONVERSIONS["Pressure"].get(pressure_unit, 1) if pressure else None | |
torque_nm = torque * UNIT_CONVERSIONS["Torque"].get(torque_unit, 1) if torque else None | |
flow_rate_lpm = flow_rate * UNIT_CONVERSIONS["Flow Rate"].get(flow_rate_unit, 1) if flow_rate else None | |
# Calculate missing parameters if possible | |
if displacement_cc and pressure_bar and rpm and not torque_nm: | |
torque_nm = (displacement_cc * pressure_bar) / (20 * 3.14159) | |
elif torque_nm and pressure_bar and rpm and not displacement_cc: | |
displacement_cc = (torque_nm * 20 * 3.14159) / pressure_bar | |
elif torque_nm and displacement_cc and rpm and not pressure_bar: | |
pressure_bar = (torque_nm * 20 * 3.14159) / displacement_cc | |
# Calculate power using available data | |
power_displacement = (displacement_cc * pressure_bar * rpm) / 600.0 if displacement_cc and pressure_bar and rpm else None | |
power_torque = (torque_nm * rpm) / 9549 if torque_nm and rpm else None | |
power_flow_rate = (flow_rate_lpm * pressure_bar) / 600.0 if flow_rate_lpm and pressure_bar else None | |
# Convert results to all available units | |
results = { | |
"displacement": {unit: displacement_cc / factor for unit, factor in UNIT_CONVERSIONS["Displacement"].items()} if displacement_cc else {}, | |
"pressure": {unit: pressure_bar / factor for unit, factor in UNIT_CONVERSIONS["Pressure"].items()} if pressure_bar else {}, | |
"torque": {unit: torque_nm / factor for unit, factor in UNIT_CONVERSIONS["Torque"].items()} if torque_nm else {}, | |
"flow_rate": {unit: flow_rate_lpm / factor for unit, factor in UNIT_CONVERSIONS["Flow Rate"].items()} if flow_rate_lpm else {}, | |
"power_displacement": power_displacement, | |
"power_torque": power_torque, | |
"power_flow_rate": power_flow_rate | |
} | |
return results, displacement_cc, pressure_bar, torque_nm, flow_rate_lpm | |
# Streamlit App | |
st.title("Hydraulic Pump Power Calculator") | |
st.sidebar.header("Input Units") | |
# Unit selection | |
displacement_unit = st.sidebar.selectbox("Displacement Unit:", ["cc/rev", "in^3/rev", "liters/rev"]) | |
pressure_unit = st.sidebar.selectbox("Pressure Unit:", ["bar", "MPa", "PSI", "kPa", "atm"]) | |
torque_unit = st.sidebar.selectbox("Torque Unit:", ["Nm", "lb-ft"]) | |
flow_rate_unit = st.sidebar.selectbox("Flow Rate Unit:", ["L/min", "m^3/h", "GPM (US)", "GPM (UK)"]) | |
st.sidebar.header("Input Parameters") | |
# User inputs | |
displacement = st.sidebar.number_input("Pump Displacement (cc/rev, in^3/rev, or liters/rev):", value=None, step=0.1, format="%.2f") | |
pressure = st.sidebar.number_input("Working Pressure (bar, MPa, PSI, kPa, or atm):", value=None, step=0.1, format="%.2f") | |
rpm = st.sidebar.number_input("Pump RPM:", value=None, step=1.0, format="%.0f") | |
torque = st.sidebar.number_input("Torque (Nm or lb-ft):", value=None, step=0.1, format="%.2f") | |
flow_rate = st.sidebar.number_input("Flow Rate (L/min, m^3/h, GPM (US), or GPM (UK)):", value=None, step=0.1, format="%.2f") | |
# Calculate parameters and power | |
if st.sidebar.button("Calculate"): | |
results, displacement_cc, pressure_bar, torque_nm, flow_rate_lpm = calculate_hydraulic_parameters( | |
displacement, pressure, rpm, torque, flow_rate, | |
displacement_unit, pressure_unit, torque_unit, flow_rate_unit | |
) | |
st.subheader("Results") | |
# Display formulas | |
st.write("### Formulas Used:") | |
if displacement_cc and pressure_bar and rpm: | |
st.write("Power based on Displacement: Power (kW) = (Displacement (cc/rev) × Pressure (bar) × RPM) / 600") | |
if torque_nm and rpm: | |
st.write("Power based on Torque: Power (kW) = (Torque (Nm) × RPM) / 9549") | |
if flow_rate_lpm and pressure_bar: | |
st.write("Power based on Flow Rate: Power (kW) = (Flow Rate (L/min) × Pressure (bar)) / 600") | |
# Display input conversions | |
st.write("### Converted Input Parameters:") | |
if displacement_cc: | |
st.write(f"Displacement: {displacement_cc:.2f} cc/rev") | |
if pressure_bar: | |
st.write(f"Pressure: {pressure_bar:.2f} bar") | |
if torque_nm: | |
st.write(f"Torque: {torque_nm:.2f} Nm") | |
if flow_rate_lpm: | |
st.write(f"Flow Rate: {flow_rate_lpm:.2f} L/min") | |
# Display results for all units | |
if results["displacement"]: | |
st.write("### Pump Displacement:") | |
for unit, value in results["displacement"].items(): | |
st.write(f"{value:.2f} {unit}") | |
if results["pressure"]: | |
st.write("### Working Pressure:") | |
for unit, value in results["pressure"].items(): | |
st.write(f"{value:.2f} {unit}") | |
if results["torque"]: | |
st.write("### Torque:") | |
for unit, value in results["torque"].items(): | |
st.write(f"{value:.2f} {unit}") | |
if results["flow_rate"]: | |
st.write("### Flow Rate:") | |
for unit, value in results["flow_rate"].items(): | |
st.write(f"{value:.2f} {unit}") | |
# Power results | |
st.write("### Hydraulic Power:") | |
if results['power_displacement']: | |
st.write(f"Based on Displacement: {results['power_displacement']:.2f} kW / {(results['power_displacement'] * 1.34102):.2f} HP") | |
else: | |
st.write("Power based on Displacement: Not calculable.") | |
if results['power_torque']: | |
st.write(f"Based on Torque: {results['power_torque']:.2f} kW / {(results['power_torque'] * 1.34102):.2f} HP") | |
else: | |
st.write("Power based on Torque: Not calculable.") | |
if results['power_flow_rate']: | |
st.write(f"Based on Flow Rate: {results['power_flow_rate']:.2f} kW / {(results['power_flow_rate'] * 1.34102):.2f} HP") | |
else: | |
st.write("Power based on Flow Rate: Not calculable.") | |
# Hugging Face Space Deployment Notice | |
st.sidebar.markdown("---") | |
st.sidebar.write("This app is ready for deployment on Hugging Face Spaces using Streamlit.") | |
st.sidebar.write("To deploy, include this `app.py` and `requirements.txt` in your Hugging Face Space repository.") | |