Spaces:
Sleeping
Sleeping
import streamlit as st | |
import matplotlib.pyplot as plt | |
from PIL import Image | |
# Set page configuration | |
st.set_page_config(page_title="Hydraulic Pump Power Calculator", page_icon="\U0001F6E0", layout="centered") | |
# Load engineering icon | |
icon = Image.open("engineering_icon.png") | |
# Unit conversion factors | |
UNIT_CONVERSIONS = { | |
"Displacement": {"cc/rev": 1, "in^3/rev": 16.387}, | |
"Pressure": {"bar": 1, "PSI": 0.0689476}, | |
"Torque": {"Nm": 1, "lb-ft": 1.35582} | |
} | |
# Hydraulic Power Calculation and Missing Parameter Estimation | |
def calculate_hydraulic_parameters(displacement, pressure, rpm, torque, displacement_unit, pressure_unit, torque_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 | |
# 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 | |
return displacement_cc, pressure_bar, rpm, torque_nm, power_displacement, power_torque | |
# Generate chart | |
def generate_chart(displacement, pressure, rpm, torque): | |
terms = ["Displacement (cc/rev)", "Pressure (bar)", "RPM", "Torque (Nm)"] | |
values = [displacement, pressure, rpm, torque] | |
fig, ax = plt.subplots() | |
ax.bar(terms, values, color=['blue', 'green', 'red', 'orange']) | |
ax.set_title("Hydraulic Parameters") | |
ax.set_ylabel("Values") | |
plt.xticks(rotation=45) | |
return fig | |
# Streamlit App | |
st.image(icon, width=100) | |
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"]) | |
pressure_unit = st.sidebar.selectbox("Pressure Unit:", ["bar", "PSI"]) | |
torque_unit = st.sidebar.selectbox("Torque Unit:", ["Nm", "lb-ft"]) | |
st.sidebar.header("Input Parameters") | |
# User inputs | |
displacement = st.sidebar.number_input("Pump Displacement (cc/rev or in^3/rev):", min_value=0.0, step=0.1) | |
pressure = st.sidebar.number_input("Working Pressure (bar or PSI):", min_value=0.0, step=0.1) | |
rpm = st.sidebar.number_input("Pump RPM:", min_value=0.0, step=1.0) | |
torque = st.sidebar.number_input("Torque (Nm or lb-ft):", min_value=0.0, step=0.1) | |
# Calculate parameters and power | |
if st.sidebar.button("Calculate"): | |
displacement_cc, pressure_bar, rpm, torque_nm, power_displacement, power_torque = calculate_hydraulic_parameters( | |
displacement, pressure, rpm, torque, displacement_unit, pressure_unit, torque_unit | |
) | |
st.subheader("Results") | |
st.write(f"Pump Displacement: {displacement_cc:.2f} cc/rev" if displacement_cc else "Pump Displacement: Not provided or calculable.") | |
st.write(f"Working Pressure: {pressure_bar:.2f} bar" if pressure_bar else "Working Pressure: Not provided or calculable.") | |
st.write(f"Torque: {torque_nm:.2f} Nm" if torque_nm else "Torque: Not provided or calculable.") | |
st.write(f"Hydraulic Power based on Displacement: {power_displacement:.2f} kW" if power_displacement else "Power based on Displacement: Not calculable.") | |
st.write(f"Hydraulic Power based on Torque: {power_torque:.2f} kW" if power_torque else "Power based on Torque: Not calculable.") | |
# Display chart | |
fig = generate_chart(displacement, pressure, rpm, torque) | |
st.pyplot(fig) | |
# 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.") | |