El objetivo de esta práctica es simular la caída libre de un micro:bit desde una altura de 4 metros. El estudiante en la planta alta soltará el micro:bit, y el estudiante en el piso de abajo lo "atrapará" (es decir, se calcula el tiempo de caída hasta que el micro:bit detecta que está en caída libre). Se implementará un conteo regresivo con efectos de sonido y se generará una gráfica para visualizar los resultados.
- 1 micro:bit (para simular el objeto que cae)
- Cable USB para conectar el micro:bit
- Computadora con MicroPython instalado
- Acceso a un editor de texto para escribir y cargar el código
-
Configuración inicial:
- El estudiante en la planta alta prepara el micro:bit para que esté listo para soltarlo.
- El micro:bit está configurado para detectar la caída libre utilizando el acelerómetro.
-
Cuenta regresiva:
- El micro:bit en la planta alta emitirá una cuenta regresiva visual y con efectos de sonido desde "10" hasta "1" antes de soltarlo.
-
Detección de caída libre:
- El micro:bit detectará el momento en que comienza la caída utilizando el acelerómetro.
-
Generación de la gráfica:
- Una vez calculado el tiempo de caída, se generará una gráfica en formato HTML con los resultados de la caída.
from microbit import *
import music
import time
import math
# Constantes
altura = 4 # en metros
gravedad = 9.8 # aceleración de la gravedad en m/s^2
tiempo_de_caida = math.sqrt(2 * altura / gravedad) # tiempo de caída en segundos
# Función para reproducir el conteo regresivo con música
def cuenta_regresiva():
display.scroll("En sus marcas...")
music.play(music.PRELUDE)
sleep(1000)
display.scroll("Listos...")
music.play(music.BA_DING)
sleep(1000)
display.scroll("Fuera!")
music.play(music.POWER_UP)
sleep(1000)
display.scroll("10")
sleep(1000)
display.scroll("9")
sleep(1000)
display.scroll("8")
sleep(1000)
display.scroll("7")
sleep(1000)
display.scroll("6")
sleep(1000)
display.scroll("5")
sleep(1000)
display.scroll("4")
sleep(1000)
display.scroll("3")
sleep(1000)
display.scroll("2")
sleep(1000)
display.scroll("1")
sleep(1000)
# Simulación de caída libre
def caida_libre():
display.show(Image.HAPPY)
start_time = time.ticks_ms() # Tiempo de inicio
while True:
if accelerometer.is_gesture("freefall"): # Detecta la caída libre
fall_time = (time.ticks_ms() - start_time) / 1000 # Tiempo en segundos
break
sleep(50) # Espera antes de comprobar otra vez
return fall_time
# Mostrar instrucciones iniciales
display.scroll("Lanzamiento en 3...2...1")
sleep(1000)
# Realizar cuenta regresiva
cuenta_regresiva()
# Medir el tiempo de la caída
tiempo = caida_libre()
# Mostrar el tiempo en la pantalla del micro:bit
display.scroll("Tiempo: " + str(tiempo) + " s")
# Generar y guardar la gráfica (maydata.html)
# Suponiendo que tienes la habilidad de guardar el archivo HTML en algún servidor o sistema.
html_content = f"""
<html>
<head>
<title>Gráfica de Caída Libre</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
<h1>Caída Libre desde 4 metros</h1>
<canvas id="myChart" width="400" height="200"></canvas>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
var myChart = new Chart(ctx, {{
type: 'line',
data: {{
labels: ['0', '1', '2', '3', '4'],
datasets: [{
label: 'Tiempo de Caída',
data: [{tiempo}, {tiempo + 0.1}, {tiempo + 0.2}, {tiempo + 0.3}, {tiempo + 0.4}],
borderColor: 'rgba(75, 192, 192, 1)',
borderWidth: 1
}]
}},
options: {{
scales: {{
y: {{
beginAtZero: true
}}
}}
}}
}});
</script>
</body>
</html>
"""
# Guardar el HTML como archivo (puedes ajustarlo a tu sistema de archivos)
with open('CaidaLibreYupiii.html', 'w') as file:
file.write(html_content)
- Se utiliza la función
music.play()
para reproducir sonidos predefinidos durante la cuenta regresiva desde "10" hasta "1". - La pantalla del micro:bit muestra el mensaje correspondiente mientras se reproduce la música.
- Se usa el acelerómetro del micro:bit para detectar la caída libre con la función
accelerometer.is_gesture("freefall")
. Esta función detecta el cambio repentino de aceleración cuando el micro:bit cae.
- El tiempo de caída se calcula mediante la fórmula de caída libre: $$ t = \sqrt{\frac{2h}{g}}, \quad \text{donde} \quad h = 4 , \text{m} \quad \text{y} \quad g = 9.8 , \text{m/s}^2 $$
- El archivo
maydata.html
se genera para mostrar una gráfica de la caída libre utilizando Chart.js. Los resultados de tiempo de caída se usan como datos para graficar.
-
Ajustar la altura de la caída:
- Modificar el código para permitir que el estudiante ingrese la altura de la caída desde el micro:bit y observe cómo cambia el tiempo de caída.
-
Analizar los resultados:
- Los estudiantes pueden modificar los datos en el archivo
maydata.html
y usar un navegador para analizar visualmente cómo varía el tiempo de caída con diferentes alturas.
- Los estudiantes pueden modificar los datos en el archivo
-
Exploración de otras gráficas:
- A partir de la fórmula de la caída libre, los estudiantes pueden crear más gráficos para explorar la relación entre la aceleración, el tiempo y la altura.
- Código del micro:bit en un archivo
.py
. - Archivo
CaidaLibreYupiii.html
con la gráfica de los resultados. - Informe de la actividad explicando los resultados obtenidos.
Los estudiantes serán evaluados con base en los siguientes criterios:
- Correcta implementación del conteo regresivo con efectos de sonido.
- Precisión en la detección de la caída libre utilizando el acelerómetro.
- Correcta interpretación de los resultados y presentación de la gráfica.