Skip to content

Instantly share code, notes, and snippets.

@IoTeacher
Last active November 27, 2024 17:21
Show Gist options
  • Save IoTeacher/64f3fb90fd07993610beb6fd9b5a8d98 to your computer and use it in GitHub Desktop.
Save IoTeacher/64f3fb90fd07993610beb6fd9b5a8d98 to your computer and use it in GitHub Desktop.
microbit caida libre

Práctica Académica - Caída Libre con micro:bit

Objetivo

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.

Materiales

  • 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

Procedimiento

  1. 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.
  2. 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.
  3. Detección de caída libre:

    • El micro:bit detectará el momento en que comienza la caída utilizando el acelerómetro.
  4. 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.

Código

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)

Explicación del Código

1. Cuenta regresiva con música:

  • 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.

2. Detección de caída libre:

  • 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.

3. Cálculo del tiempo de caída:

  • 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 $$

4. Generación de la gráfica:

  • 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.

Actividades adicionales

  1. 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.
  2. 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.
  3. 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.

Entregables

  • 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.

Evaluación

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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment