A continuación se detalla el ejercicio propuesto en español basado en el ejemplo resuelto del PDF DESIGN OF A SOLAR COLLECTOR, con énfasis en el uso de los números de Reynolds (Re) y Nusselt (Nu). Incluye también un checklist breve para guiar el flujo de trabajo en GitHub Codespaces.
Se requiere diseñar un colector solar plano capaz de proporcionar un caudal de aire de 1 m³/s a una temperatura de 40 °C, en condiciones climáticas similares a las descritas:
Se selecciona un colector con dimensiones iniciales de 8.5 m × 4 m × 0.05 m (longitud × ancho × profundidad).
Creación del repositorio
solar_collector_design
.gitignore
para Python.Iniciar GitHub Codespaces
Instalar extensiones
Creación del entorno virtual
python -m venv .venv
source .venv/bin/activate # Linux/Mac
.venv\Scripts\activate # Windows
Archivos con ayuda del chatbot en Codespaces
README.md
: descripción del ejercicio y pasos de
resolución.requirements.txt
: incluir numpy
,
pandas
, streamlit
,
matplotlib
.Instalación de módulos
pip install -r requirements.txt
Desplegar en Streamlit
Crear app.py
con entradas para dimensiones,
propiedades del aire y correlaciones.
Mostrar resultados de Re, Nu y h.
Ejecutar:
streamlit run app.py
Alojar en Streamlit Community Cloud
main
y archivo de inicio
app.py
.¿Quieres que prepare también un modelo de app.py
en Python (Streamlit) para que los estudiantes introduzcan
parámetros, calculen automáticamente Re, Nu y h, y comparen con los
valores de referencia?
Aquí tienes un modelo de app.py
con
Streamlit listo para usar en GitHub
Codespaces. Incluye explicación en Markdown, entradas
editables, cálculos paso a paso de Re,
Nu y h, y verificación con el valor de
referencia ≈ 22 W/m²·K del ejemplo.
La app calcula parámetros de diseño internos de un colector solar plano con ducto rectangular:
Geometría y caudal Área de flujo \((A = b\cdot a) con (b=) ancho y (a=) profundidad. Velocidad media (V = Q/A)\).
Diámetro hidráulico \((D_h = \dfrac{2ab}{a+b})\).
Régimen de flujo \((\displaystyle Re=\dfrac{\rho,V,D_h}{\mu})\). Criterios: laminar \((Re<2300)\), transición \((2300\le Re\le 4000)\), turbulento \((>4000)\).
Transferencia de calor Correlación del ejemplo (turbulento interno, diseño preliminar): \((\displaystyle Nu = 0.02,Re^{0.8})\). Luego \((h = \dfrac{Nu,k}{D_h})\).
Valores por defecto replican el caso del apéndice: \((Q=1~\mathrm{m^3/s})\), \((L=8.5~\mathrm{m})\), \((b=4.0~\mathrm{m})\), \((a=0.05~\mathrm{m})\), \((\rho=1.28~\mathrm{kg/m^3})\), \((\mu=1.8\times10^{-5}~\mathrm{kg/(m\cdot s)})\), \((k=0.025~\mathrm{W/(m\cdot K)})\). Se espera \((Re\approx 3.52\times10^4)\), \((Nu\approx 86.7)\), \((h\approx 21.9~\mathrm{W/m^2K})\).
# app.py
# Diseño interno de colector solar: Re, Nu y h para ducto rectangular
# Listo para GitHub Codespaces + Streamlit
# Autor: plantilla docente
# Requisitos: streamlit, numpy
import math
import numpy as np
import streamlit as st
st.set_page_config(page_title="Colector solar: Re, Nu, h", layout="wide")
st.title("Diseño de colector solar plano: Reynolds, Nusselt y coeficiente h")
with st.expander("Instrucciones y modelo físico", expanded=True):
st.markdown(
"""
**Qué hace esta app**
1) Calcula el **diámetro hidráulico**: \(D_h = \\dfrac{2ab}{a+b}\\)
2) Calcula la **velocidad media**: \(V = Q/A\\), con \(A = b\\cdot a\\)
3) Calcula **Reynolds**: \(Re = \\dfrac{\\rho V D_h}{\\mu}\\)
4) Usa la correlación del ejemplo: \(Nu = 0.02\\,Re^{0.8}\\)
5) Obtiene **h**: \(h = \\dfrac{Nu\\,k}{D_h}\\)
**Criterios de régimen**
- Laminar: Re < 2300
- Transición: 2300 ≤ Re ≤ 4000
- Turbulento: Re > 4000
> Esta correlación es una **aproximación didáctica** apropiada para el ejemplo del apéndice. Para diseño detallado considere efectos de relación de aspecto, entrada térmica/hidráulica en desarrollo y correcciones de rugosidad.
"""
)
# -------------------------
# Entradas
# -------------------------
st.subheader("Parámetros de entrada")
col1, col2, col3 = st.columns(3)
with col1:
Q = st.number_input("Caudal volumétrico Q [m³/s]", 0.001, 10.0, 1.0, step=0.01, format="%.3f")
L = st.number_input("Longitud del ducto L [m]", 0.1, 100.0, 8.5, step=0.1)
b = st.number_input("Ancho interno b [m]", 0.01, 20.0, 4.0, step=0.1)
with col2:
a = st.number_input("Profundidad interna a [m]", 0.005, 1.0, 0.05, step=0.005, format="%.3f")
rho = st.number_input("Densidad del aire ρ [kg/m³]", 0.5, 2.0, 1.28, step=0.01, format="%.2f")
mu = st.number_input("Viscosidad dinámica μ [kg/(m·s)]", 1e-6, 1e-3, 1.8e-5, step=1e-6, format="%.6f")
with col3:
k = st.number_input("Conductividad térmica k [W/(m·K)]", 0.010, 0.100, 0.025, step=0.001, format="%.3f")
T_in = st.number_input("Temperatura de entrada aire [°C] (opcional)", -10.0, 80.0, 30.0, step=0.5)
T_out = st.number_input("Temperatura objetivo aire [°C] (opcional)", -10.0, 100.0, 40.0, step=0.5)
# -------------------------
# Cálculos
# -------------------------
A = b * a # área de flujo
V = Q / A # velocidad media
Dh = 2.0 * a * b / (a + b) # diámetro hidráulico
Re = rho * V * Dh / mu # Reynolds
# Validación de dominio para Nu
Nu = 0.02 * (Re ** 0.8) if Re > 0 else np.nan
h = (Nu * k) / Dh if Dh > 0 else np.nan
# Clasificación del régimen
if Re < 2300:
regimen = "Laminar"
elif Re <= 4000:
regimen = "Transición"
else:
regimen = "Turbulento"
# Referencia del apéndice (~22 W/m2K)
h_ref = 22.0
dif_h = h - h_ref if np.isfinite(h) else np.nan
# -------------------------
# Resultados
# -------------------------
st.subheader("Resultados")
c1, c2, c3, c4 = st.columns(4)
c1.metric("Área de flujo A [m²]", f"{A:.4f}")
c2.metric("Velocidad V [m/s]", f"{V:.3f}")
c3.metric("D_h [m]", f"{Dh:.4f}")
c4.metric("Reynolds Re [-]", f"{Re:,.0f}")
c5, c6, c7 = st.columns(3)
c5.metric("Nusselt Nu [-]", f"{Nu:.1f}")
c6.metric("h [W/m²·K]", f"{h:.1f}")
c7.metric("Régimen", regimen)
st.info(
f"Comparación con referencia del ejemplo: h_ref ≈ {h_ref:.1f} W/m²·K; "
f"Δh = {dif_h:+.1f} W/m²·K." if np.isfinite(dif_h) else
"Sin comparación disponible."
)
# -------------------------
# Sensibilidad rápida
# -------------------------
with st.expander("Sensibilidad rápida (opcional)"):
st.markdown(
"""
Ajuste **a** (profundidad) y **b** (ancho) para estudiar efectos geométricos:
- A mayor **a** o **b** crece el área A, baja V y tiende a bajar **Re** y **h**.
- Reducir **a** incrementa V y Re, pero puede aumentar pérdidas de carga.
"""
)
st.caption("Plantilla educativa. Verifique correlaciones específicas si el diseño final exige mayor precisión.")
requirements.txt
sugeridostreamlit>=1.36
numpy>=1.26
solar_collector_design
y añada .gitignore
para
Python.python -m venv .venv
source .venv/bin/activate # Linux/Mac
.venv\Scripts\activate # Windows
README.md
con objetivos, ecuaciones y pasos; genere
requirements.txt
.pip install -r requirements.txt
streamlit run app.py
main
, archivo app.py
, publique
y comparta el enlace.