---
layout: activity
title: "El Interruptor Mágico de Aplausos"
image: src/16.5-magic-clap-switch/16.5-interruptor-magico-aplausos.svg

video: src/videos/16.5_magic_clap_switch.mp4
video_title: "¿Qué haremos?"
description: "¡Aplauso y se enciende la luz! Consolida todo lo que has aprendido sobre eventos, variables y condicionales para crear un interruptor activado por sonido, al estilo de la domótica."
lang: es
permalink: /es/actividades/el-interruptor-magico-de-aplausos/
ref: activity_magic_clap_switch

# ACTIVITY INFO
level: 2
computational_topics:
  - "Temporización y Eventos"
  - "Variables y Datos"
  - "Condicionales y Lógica"
general_topics:
  - "Vida Cotidiana"
  - "Ciencia y Tecnología"

tags: [Síntesis, Eventos, Variables de Estado, Condicionales, Toggle, Domótica, Sensor de Ruido]

introduction: |
  Has dominado las piezas del rompecabezas: **eventos** que escuchan, **variables** que recuerdan y **condicionales** que deciden. Ahora, en esta misión de síntesis, unirás todo para crear un proyecto clásico y mágico: un interruptor que enciende y apaga la luz con un aplauso. ¡Prepárate para construir tu primer dispositivo de "hogar inteligente" y demostrar todo lo que has aprendido!

teacher: |
  ### **Cursos**
  * Grados 6-12

  ### **Materiales**
  * Celular, tableta o computadora
  * Conexión a Internet

  ### **Descripción**
  Este es un proyecto de síntesis diseñado para revisar y solidificar el ciclo interactivo (Evento -> Variable -> Condicional) en una aplicación práctica y limpia. Introduce una arquitectura de programa puramente dirigida por eventos, que no requiere un bucle principal para su lógica, demostrando un paradigma de programación eficiente.

  ### **Objetivos Educativos**
  * Sintetizar y aplicar los conceptos de eventos, variables de estado y condicionales en un solo proyecto.
  * Implementar una funcionalidad de "interruptor" (toggle).
  * Construir un programa eficiente y puramente dirigido por eventos.
  * Relacionar los conceptos de programación con aplicaciones del mundo real como la domótica.

  ### **Inicio (10 minutos) - Ensamblando el Motor**
  1.  Da la bienvenida a la clase: **"Hoy vamos a actuar como ingenieros y ensamblar todas las piezas que hemos aprendido para construir un producto final que lo demuestre todo. Nuestro objetivo: un interruptor de luz activado por aplausos."**
  2.  Pide a los estudiantes que deduzcan la arquitectura: **"¿Qué 'piezas' de programación que ya conocemos creen que necesitaremos para construir esto?"** Guíalos para que identifiquen la necesidad de:
      * Un **evento** para detectar el aplauso.
      * Una **variable** para recordar si la luz está encendida o apagada.
      * Un **condicional** para decidir si encender o apagar.
  3.  Felicítalos: **"¡Exacto! Ya tienen el plano en su cabeza. Ahora, vamos a construirlo."**

  {{learn}}

  ### **Desarrollo (20-30 minutos) - Construyendo el Interruptor Inteligente**
  1.  Con la arquitectura clara, los estudiantes pueden comenzar el ensamblaje.
  2.  Guíalos a través de **las instrucciones para crear el interruptor**, como se detalla a continuación. Haz que noten la ausencia de un bucle principal y discutan por qué no es necesario esta vez.

  ### **Cierre (5-10 minutos) - Un Programa Eficiente**
  1.  Una vez que todos puedan controlar sus luces con aplausos, es hora de analizar la elegancia del código.
  2.  Inicia la discusión: **"Miren su código final. ¿Notan algo importante que falta en comparación con proyectos anteriores?"** (¡No hay bucle principal!). **"¿Por qué no lo necesitamos? Porque toda la lógica ocurre *dentro* del evento. Esta es una forma muy eficiente de programar."**

  {{reflect}}

# DYNAMIC SECTIONS AS ARRAY
content_sections:

  - id: "learn"
    title: "Síntesis: Uniendo las Piezas del Rompecabezas"
    type: "learn"
    icon: "book-reader"
    content: |
      Has aprendido los tres superpoderes de la programación interactiva:
      * **Eventos:** Para reaccionar a las acciones del mundo exterior (como un aplauso).
      * **Variables:** Para dar memoria a tu programa y recordar su estado (como si la luz está encendida o apagada).
      * **Condicionales:** Para tomar decisiones basadas en ese estado.
      En este proyecto, no aprenderemos un concepto nuevo, sino que combinaremos estos tres en una sola aplicación elegante y funcional, demostrando que ya tienes todo lo necesario para crear proyectos complejos.
    media: "src/16.5-magic-clap-switch/a-interactive-programming.es.svg"

  - title: "Arquitectura Dirigida por Eventos"
    type: "learn"
    content: |
      Este proyecto utiliza una arquitectura de programa muy limpia y eficiente. A diferencia de la vela, que tenía un bucle principal constantemente animando, **¡aquí no hay bucle principal para la lógica!**
      El programa está completamente inactivo al principio. Toda la acción (cambiar la variable Y decidir qué hacer con la luz) ocurre *dentro del mismo bloque de evento*. El programa se "despierta" con el aplauso, hace su trabajo instantáneamente y se vuelve a "dormir". Esta forma de programar es muy común en las aplicaciones modernas para ahorrar energía y recursos del procesador.
    media: "src/16.5-magic-clap-switch/b-architecture-driven-by-events.es.svg"

  - id: "create"
    title: "Crear"
    type: "create"
    icon: "cogs"
    heading_text: "¡A construir el interruptor mágico!"
    steps:
      - "Necesitaremos 2 componentes en nuestro smartphone: <comp>NivelRuido</comp> para detectar el aplauso (un aumento súbito de ruido) y <comp>DibujoLED</comp> para que actúe como nuestra 'ampolleta'."
      - "Recuerda escanear o abrir ambos componentes en tu dispositivo."
    ready_message: "¡Estamos listos para programar un poco de magia!"

  - title: "Composición del Código"
    type: "code-composition"
    icon: "code"
    content: |
      Este código es un ejemplo perfecto de eficiencia. `Al iniciar` solo prepara la variable `estado`. Luego, el programa espera sin hacer nada. El bloque de evento `cuando el nivel de ruido detecta aumento repentino` lo es todo: primero, usa la lógica de 'interruptor' (`estado = no estado`) para invertir el estado actual. Inmediatamente después, un bloque `si... sino...` lee el *nuevo* estado de esa misma variable y enciende o apaga la luz. Todo sucede en un instante, solo cuando es necesario.
    media: "[700]https://app.protobject.com/generate?equivalent-luz-encendida-al-ruido&es&dynamic&-1"

  - id: "reflect"
    title: "Reflexiona"
    type: "reflect"
    icon: "lightbulb"
    content:
      - |
        Compara este código con el de la "Vela Mágica". ¿Cuál es la principal diferencia en su estructura? (Este no tiene bucle principal). ¿Cuál crees que es más eficiente y por qué?
      - |
        El concepto de "domótica" o "hogar inteligente" se basa en dispositivos como este. ¿Qué otros aparatos en una casa te gustaría controlar con eventos como la voz, el movimiento o los aplausos?
      - |
        Actualmente, cualquier ruido fuerte activa el interruptor. ¿Cómo podrías hacerlo más robusto para que no se active accidentalmente (por ejemplo, con una tos)?

    right_content:
      - text: |
            **Desafío:** ¡Dale un toque cinematográfico! En lugar de encenderse de golpe, ¿cómo harías para que la luz se "desvanezca" hacia adentro o hacia afuera, píxel por píxel? **Pista**: Para recorrer todos los píxeles de una pantalla uno por uno, necesitarás un tipo de bucle especial que pueda contar... ¡el bucle "for", que veremos en la próxima misión!
      - media: "src/16.5-magic-clap-switch/c-gradual-light.svg"
---