Un problema clásico que unifica de manera natural los intereses de la Ingeniería Civil y la Agroindustrial es el diseño y evaluación de canales abiertos para el transporte de agua.
En Civil, esto aplica al diseño de alcantarillados pluviales y canales de drenaje; en Agroindustrial, es el fundamento de los sistemas de riego por gravedad y el manejo de efluentes en plantas de procesamiento. Este problema requiere tomar decisiones sobre la geometría del canal (estructuras condicionales) y evaluar su comportamiento ante diferentes niveles de agua (estructuras repetitivas).
Aquí tienes la propuesta estructurada para tu curso.
El Problema: Se requiere construir un programa en Python que calcule el caudal (\(Q\)) que puede transportar un canal abierto. El usuario (ingeniero) debe poder elegir si el canal es de sección rectangular o trapezoidal. Además, debido a que el caudal varía según la temporada de lluvias, el programa debe calcular y mostrar el caudal para una serie de diferentes profundidades del agua (tirante) utilizando un ciclo repetitivo, evaluando si el canal se desborda o cumple con el diseño.
Fundamento Teórico (Ecuación de Manning): La velocidad del flujo en un canal abierto se rige por la ecuación de Manning:
\[v = \frac{1}{n} \cdot R_h^{2/3} \cdot S^{1/2}\]
Y el caudal total se obtiene multiplicando la velocidad por el área transversal (\(Q = v \cdot A\)):
\[Q = \frac{1}{n} \cdot A \cdot R_h^{2/3} \cdot S^{1/2}\]
Donde:
\[R_h = \frac{A}{P}\]
Para calcular el Área (\(A\)) y el Perímetro mojado (\(P\)), las ecuaciones dependen de la forma del canal:
Canal Rectangular:
\(A = b \cdot y\)
\(P = b + 2y\)
Canal Trapezoidal:
\(A = (b + z \cdot y) \cdot y\)
\(P = b + 2y \cdot \sqrt{1 + z^2}\)
(Variables geométricas: \(b\) = ancho de la base, \(y\) = tirante o profundidad del agua, \(z\) = relación de talud lateral).
La solución requiere descomponer el problema utilizando funciones. Para fomentar el aprendizaje guiado, los estudiantes no deben programar todo en un solo bloque, sino interactuar con el asistente de IA (Copilot, Gemini o ChatGPT) para construir módulos.
calcular_geometria(tipo_canal, b, y, z=0)**:
Usa un bloque if/elif para validar el
tipo_canal (“rectangular” o “trapezoidal”) y retorna el
Área y el Perímetro.calcular_caudal(A, P, n, S)**: Recibe la
geometría, calcula el Radio Hidráulico y aplica la ecuación de Manning
para retornar el Caudal.for o
while): Define una lista de diferentes
profundidades (\(y\)) e itera sobre
ellas llamando a las funciones anteriores, imprimiendo una tabla de
resultados.Pide a tus estudiantes que usen los siguientes prompts con su IA para construir el código paso a paso, asegurando que entienden la lógica y no solo copian y pegan:
calcular_geometria que reciba el tipo de
canal, la base (b), la profundidad (y) y el talud (z). Usa un
if/elif para calcular el Área y el Perímetro mojado según
sea rectangular o trapezoidal. No me des el código completo de una vez,
muéstrame cómo estructurar el condicional y explícamelo.”calcular_caudal. Necesito usar la raíz
cuadrada, ¿debo importar la librería math en Python?
Explícame cómo elevar el radio hidráulico a la 2/3 de forma correcta en
código.”tirantes = [0.5, 1.0, 1.5, 2.0]. Guíame para
hacer un ciclo for que recorra esta lista, llame a mis
funciones anteriores y use un print formateado (f-strings)
para mostrar el caudal en cada paso.”Para que el estudiante verifique que sus funciones operan correctamente, bríndales estos datos de entrada (basados en un canal de concreto con pendiente suave).
Parámetros fijos:
| Profundidad (\(y\)) | Caudal Rectangular (\(m^3/s\)) | Caudal Trapezoidal (\(z = 1.5\)) (\(m^3/s\)) |
|---|---|---|
| 0.5 m | 0.835 | 1.157 |
| 1.0 m | 2.656 | 5.390 |
| 1.5 m | 4.974 | 13.064 |
| 2.0 m | 7.625 | 24.628 |
(Nota: Los resultados pueden variar ligeramente en los decimales dependiendo del redondeo, pero deben aproximarse fielmente a estos valores).
Estructura el Colab de la siguiente manera para que los estudiantes sigan un flujo de trabajo ordenado:
Celda de Texto (Markdown): Contexto del
Proyecto: Uso de LaTeX para ecuaciones. Pide al estudiante que
documente el problema. Deben insertar las ecuaciones de Manning usando
sintaxis LaTeX ($$ Q = ... $$) y explicar brevemente las
variables. Esto fortalece su habilidad para redactar informes técnicos
en herramientas interactivas.
Celda de Código: Importación y Geometría:
Definición de la primera función. Aquí importan math y
construyen la función calcular_geometria(). Se recomienda
que ejecuten esta celda de forma aislada y hagan un print
de prueba (ej.
print(calcular_geometria("rectangular", 2, 1))) para
depurar errores antes de avanzar.
Celda de Código: Ecuación de Manning: Definición
de la función calcular_caudal(). Al separar la geometría de
la hidráulica, les enseñas el principio de modularidad en programación,
muy útil para escalar el código después (ej. si luego quieren añadir
tuberías circulares).
Celda de Código: Simulación y Ciclo Repetitivo:
Implementación del iterador. En esta celda configuran las constantes
(\(n, S, b, z\)) y la lista de
profundidades. Construyen el ciclo for que itera sobre los
tirantes, invoca las funciones y formatea la salida en consola simulando
un reporte técnico.
¿Cómo podemos integrar Matplotlib o Seaborn en este ejercicio para que los estudiantes grafiquen la curva de Profundidad vs. Caudal directamente en el cuaderno de Colab?
Integrar la visualización gráfica es el paso ideal. En hidráulica, a esta gráfica se le conoce como la Curva de Descarga (o curva de calibración) de la sección transversal, y visualizarla permite a los estudiantes de ingeniería comprender de forma intuitiva cómo un pequeño aumento en el nivel del agua genera un incremento exponencial en la capacidad de transporte del canal.
Además, desde el punto de vista computacional, este paso es un puente perfecto hacia las competencias que desarrollarán más adelante en asignaturas como Estadística Aplicada, ya que los obliga a pasar de simplemente imprimir resultados en consola a almacenar datos en estructuras (listas o arreglos) para luego graficarlos.
Aquí tienes la estrategia para integrar Matplotlib o Seaborn en la guía de tu cuaderno interactivo.
El principal reto para los estudiantes en esta etapa es entender que
la función print() no guarda la información. Debes
indicarles que antes de iniciar el ciclo repetitivo, necesitan crear
“contenedores” vacíos (listas) para guardar los caudales calculados.
El nuevo flujo lógico será:
caudales_rect = [] y
caudales_trap = [].for, calcular el caudal y usar el
método .append() para agregarlo a la lista
correspondiente.Pide a tus estudiantes que interactúen con su asistente de IA utilizando estos prompts para construir la nueva lógica:
for que calcula caudales, pero solo
los imprime. Actúa como mi profesor de programación y explícame cómo
crear listas vacías antes del ciclo y cómo usar .append()
para ir guardando los resultados del caudal rectangular y trapezoidal en
cada iteración.”tirantes (eje X) y dos listas llamadas
caudales_rect y caudales_trap (eje Y). Dame el
código básico usando matplotlib.pyplot para graficar ambas
líneas en una sola figura. Incluye cómo ponerle título al gráfico,
etiquetas a los ejes y una leyenda.”seaborn para que mi
gráfico de Matplotlib se vea más profesional, con un estilo de
cuadrícula (grid) adecuado para un informe de ingeniería?”Puedes añadir estos pasos a la secuencia de tu cuaderno interactivo:
Celda de Código: Almacenamiento en Listas:
Transición de datos. Los estudiantes declaran el arreglo de tirantes
(pueden usar numpy.arange si quieres introducir la
librería, por ejemplo np.arange(0.5, 3.0, 0.1)) y
configuran los ciclos para llenar las listas mediante
.append().
Celda de Código: Visualización con
Matplotlib/Seaborn: Gráfica comparativa. Se importan las
librerías (import matplotlib.pyplot as plt y
import seaborn as sns). Configuran el estilo base de
Seaborn (sns.set_theme()) y trazan la gráfica usando
plt.plot().
Celda de Texto (Markdown): Análisis de la Curva de Descarga: Se le pide al estudiante que observe la gráfica e inserte una celda de texto respondiendo: ¿Por qué la curva del canal trapezoidal crece más rápido que la del rectangular a medida que aumenta la profundidad? (La respuesta teórica es que el área del trapecio se expande lateralmente por el talud, reduciendo el impacto de la fricción relativa).
Al ejecutar el código, los estudiantes deben obtener una gráfica parabólica convexa hacia el eje Y (Caudal).