30. Proyecto integrador: simulador de bloques, cuerdas y rozamiento

Construiremos un simulador que decide si el sistema permanece en reposo, calcula fuerzas y aceleraciones, conserva la restricción de cuerda y avanza con un paso temporal fijo.

30.1 Objetivo del proyecto

El sistema contiene un bloque A sobre una mesa horizontal y una masa B colgante. Ambos están conectados por una cuerda ideal que pasa sobre una polea fija ideal. Entre A y la mesa puede existir rozamiento.

El programa deberá:

  • Determinar si el rozamiento estático puede conservar el reposo.
  • Pasar al modelo cinético cuando el estado estático no sea posible.
  • Calcular aceleración común, tensión y fuerza de rozamiento.
  • Actualizar el movimiento mediante pasos fijos.
  • Detenerse cuando la masa colgante alcanza el límite del escenario.

30.2 Supuestos y alcance

CuerposPartículas con masas positivas.
CuerdaInextensible, flexible, sin masa y siempre tensa durante el movimiento.
PoleaFija, sin masa y con eje sin rozamiento.
MesaHorizontal; se usa rozamiento seco de Coulomb.
GravedadCampo uniforme con g = 9,81 m/s².
FinalLa simulación se detiene antes de modelar una colisión.

El proyecto impone 0 ≤ μk ≤ μs como condición de sus datos. Aunque no sea una desigualdad universal, representa el conjunto de materiales elegido para este simulador.

30.3 Variables y convención de signos

Usaremos una coordenada común s:

  • s > 0: A avanza hacia la polea.
  • El mismo incremento hace descender a B.
  • v = ds/dt y a = d²s/dt² comparten esa convención.
ΔxA = ΔyB = Δs

Esta igualdad proviene de la longitud constante de la cuerda. Reduce el movimiento a un grado de libertad mientras el vínculo permanezca tenso.

30.4 Estados del simulador

PreparadoDatos validados
EstáticoSin deslizamiento
DeslizamientoRozamiento cinético
PausaEstado conservado
FinalizadoLímite alcanzado

Las fórmulas activas dependen del estado. Una máquina de estados explícita evita aplicar simultáneamente rozamiento estático y cinético.

30.5 Comprobar el reposo

Si el sistema permanece en reposo, la masa B necesita T = mBg. Sobre A, esa tensión debe ser equilibrada por rozamiento estático:

fs,necesario = mBg

La normal sobre A es N = mAg y el máximo disponible:

fs,max = μsmAg

El reposo es posible si mB ≤ μsmA. En ese estado a = 0, v = 0 y no debe iniciarse la integración del deslizamiento.

30.6 Ecuaciones durante el deslizamiento

Cuando B desciende y A se mueve hacia la polea, el rozamiento cinético sobre A apunta en sentido opuesto:

Para A: T − fk = mAa
Para B: mBg − T = mBa

Con fk = μkmAg, la aceleración es:

a = g(mB − μkmA)/(mA + mB)

Bajo las condiciones elegidas, si falla el reposo y μk ≤ μs, esta aceleración es positiva.

30.7 Calcular tensión y fuerzas de contacto

Una vez conocida la aceleración:

T = mB(g − a)
fk = μkmAg
N = mAg

La misma tensión debe satisfacer T = mAa + fk. Comparar ambas expresiones es una verificación independiente.

También deben cumplirse T ≥ 0 y N ≥ 0. Un valor imposible señalaría un error de datos, signos o modelo.

30.8 Arquitectura por responsabilidades

ModeloCuerpos, parámetros y estado.
ValidadorMasas, coeficientes y paso temporal.
DinámicaEstado de contacto, fuerzas y aceleración.
IntegradorActualiza s y v.
ControladorReproducir, pausar, avanzar y reiniciar.
VistaCanvas, controles y lecturas.

Separar estas responsabilidades permite probar la dinámica sin dibujar y cambiar la visualización sin modificar las ecuaciones.

30.9 Estructura de datos

El estado mínimo puede expresarse como:

{ tiempoS, desplazamientoM, velocidadMps, fase, pasos }

Los parámetros permanecen separados:

{ masaAKg, masaBKg, muEstatico, muCinetico, gravedad, dtS, recorridoMaximoM }

Reiniciar crea un estado nuevo en vez de reutilizar referencias modificadas. La fase se vuelve a decidir con los parámetros actuales.

30.10 Algoritmo de actualización

  1. Validar parámetros y conservar μk ≤ μs.
  2. Si v = 0, comprobar si el rozamiento estático puede mantener el reposo.
  3. Si el sistema desliza, calcular normal, rozamiento cinético, aceleración y tensión.
  4. Actualizar primero la velocidad y después el desplazamiento mediante Euler semimplícito.
  5. Avanzar el reloj y el contador de pasos.
  6. Comprobar si se alcanzó el recorrido máximo.
vn+1 = vn + anΔt
sn+1 = sn + vn+1Δt

30.11 Paso fijo y controles

La reproducción utiliza un acumulador de tiempo real y subpasos de tamaño Δt. La interfaz ofrece:

  • Reproducir/Pausar: controla el consumo de tiempo real.
  • Avanzar un paso: facilita inspeccionar una transición.
  • Reiniciar: restaura posición, velocidad, tiempo y fase.

Modificar un parámetro detiene y reinicia el escenario. Así nunca se mezclan estados calculados con conjuntos de parámetros diferentes.

30.12 Evento final y dominio del modelo

El modelo es válido mientras A no alcanza la polea y B no toca el suelo. Ambos límites se representan mediante un recorrido máximo común.

Cuando s ≥ smax, el simulador:

  • Ajusta visualmente s al límite.
  • Cambia la fase a finalizado.
  • Detiene el reloj físico.
  • No intenta resolver la colisión posterior.
Detenerse en el límite declarado es preferible a inventar una física no especificada.

30.13 Plan de verificación

CasoResultado esperado
mB ≤ μsmAReposo, tensión mBg y rozamiento estático igual.
μs = μk = 0a = mBg/(mA + mB).
mB → 0El sistema tiende al reposo bajo las condiciones iniciales.
Reducir ΔtEl tiempo y la velocidad al alcanzar el límite deben converger.
Ecuaciones de tensiónmB(g − a) ≈ mAa + f.
RestricciónLos desplazamientos de A y B conservan el mismo módulo.

30.14 Simulador integrador

Probá configuraciones que permanezcan en reposo y otras que deslicen. Reducí el paso temporal y compará el estado final.

Bloque, polea, cuerda y rozamiento

La masa B intenta descender y arrastra al bloque A hacia la polea.

a = g(mB − μk·mA)/(mA + mB) = 2,15 m/s²
FaseDeslizamiento
Aceleración2,15 m/s²
Tensión22,99 N
Rozamiento12,26 N cinético
Estado cinemáticos = 0,00 m; v = 0,00 m/s
Tiempo / pasos0,000 s / 0

30.15 Núcleo dinámico en JavaScript

La función decide el estado inicial y devuelve las fuerzas compatibles:

function evaluarSistema(parametros) {
  const { masaA, masaB, muS, muK, g = 9.81 } = parametros;
  if (!(masaA > 0 && masaB > 0 && muS >= 0 && muK >= 0 && muK <= muS)) {
    throw new RangeError('Parámetros fuera del dominio del modelo');
  }

  const normal = masaA * g;
  const necesario = masaB * g;
  const maximoEstatico = muS * normal;
  if (necesario <= maximoEstatico) {
    return { fase: 'estatico', aceleracion: 0, tension: necesario, rozamiento: necesario };
  }

  const rozamiento = muK * normal;
  const aceleracion = (masaB * g - rozamiento) / (masaA + masaB);
  const tension = masaB * (g - aceleracion);
  return { fase: 'deslizamiento', aceleracion, tension, rozamiento };
}

console.log(evaluarSistema({ masaA: 5, masaB: 3, muS: 0.4, muK: 0.25 }));

Un paso semimplícito modifica únicamente el estado cinemático y respeta el límite del escenario:

function avanzarEstado(estado, aceleracion, dt, recorridoMaximo) {
  if (estado.fase !== 'deslizamiento') return { ...estado };

  const velocidad = estado.velocidad + aceleracion * dt;
  const desplazamientoCalculado = estado.desplazamiento + velocidad * dt;
  const finalizado = desplazamientoCalculado >= recorridoMaximo;

  return {
    ...estado,
    velocidad,
    desplazamiento: Math.min(desplazamientoCalculado, recorridoMaximo),
    tiempo: estado.tiempo + dt,
    fase: finalizado ? 'finalizado' : 'deslizamiento'
  };
}

const inicial = { fase: 'deslizamiento', desplazamiento: 0, velocidad: 0, tiempo: 0 };
console.log(avanzarEstado(inicial, 2, 0.1, 3));

30.16 Pruebas mínimas del proyecto

  • Rechazar masas no positivas y coeficientes fuera de rango.
  • Ajustar o rechazar configuraciones con μk > μs.
  • Comprobar correctamente los dos lados del umbral estático.
  • Verificar la tensión desde la ecuación de A y desde la de B.
  • Confirmar que el reinicio crea exactamente el estado inicial.
  • Ejecutar una cantidad conocida de pasos y comparar con un cálculo independiente.
  • Comprobar que nunca se supera el recorrido máximo almacenado.
  • Repetir con Δt/2 y estudiar convergencia.

Cada error corregido debe conservarse como prueba de regresión.

30.17 Desafíos de ampliación y criterios de evaluación

Ampliaciones propuestas

  1. Mostrar diagramas de cuerpo libre separados para A y B.
  2. Agregar un registro descargable de t, s, v, a, T y rozamiento.
  3. Comparar Euler explícito y semimplícito.
  4. Permitir una fuerza externa adicional sobre A y volver a derivar el umbral estático.
  5. Detectar con mayor precisión el instante en que B alcanza el límite.
  6. Construir pruebas automáticas para valores aleatorios dentro del dominio.

Criterios de evaluación

ÁreaEvidencia esperada
Modelo físicoSupuestos, ejes, diagramas y ecuaciones coherentes.
EstadosTransición correcta entre reposo, deslizamiento y final.
CódigoResponsabilidades separadas, datos validados y funciones comprobables.
Integración numéricaPaso fijo, reinicio completo y evento final controlado.
VerificaciónCasos límite, residuos, convergencia y pruebas de regresión.
ComunicaciónUnidades, estados y resultados visibles para el usuario.

30.18 Cierre del curso

El proyecto reúne el recorrido completo: identificar interacciones, dibujar fuerzas, elegir ejes, aplicar las leyes de Newton, imponer restricciones, seleccionar el modelo de rozamiento, representar datos, acumular fuerzas, integrar y verificar.

  • Una simulación comienza con un modelo físico explícito.
  • Las fuerzas se evalúan según el estado y se suman vectorialmente.
  • Las restricciones conectan la dinámica de varios cuerpos.
  • Los cambios de contacto exigen cambiar de ecuación.
  • El paso temporal y el método numérico forman parte del resultado.
  • La verificación debe acompañar cada etapa del desarrollo.

Con esta base, el alumno está preparado para abordar trabajo y energía, cantidad de movimiento, rotaciones y simulaciones físicas de mayor complejidad.