Pensamiento Computacional · Protobject

Los textos frente al código

Revisión de las 17 fichas contra el programa Protobject que cada una describe. Cada hallazgo trae cuatro líneas: qué dice el texto, qué hace el código, dónde chocan — y con qué lo cambiaría.

Estado: TODO APLICADO (17-08-2026). El autor aprobó las 38 propuestas en bloque, así que los botones y el JSON ya no hacen falta: cada hallazgo lleva ahora una línea Estado con lo que se hizo. Tres puntos quedaron aplicados solo del lado Protobject — el .hex de micro:bit no se puede editar sin recompilar — y están marcados en ámbar. El detalle de lo pendiente, al final, en «Qué se hizo y qué queda».

Las fichas describen la versión Protobject, y así se revisaron. Donde micro:bit hace algo distinto no es un error del texto: va aparte en §5.

Hallazgos retirados en esta pasada

Todos por el mismo motivo: leer el archivo en vez de la actividad.

§1 Resumen

ActividadFichaLo principal
1corazóncoherenteSolo redacción es-CL.
2xilófonorevisarEl 60: la ficha dice qué es (el Do central) y el bloque para qué sirve — falta unir las dos mitades.
3xilófono LEDscasi«La División Mágica» cuenta la mitad de la fórmula.
4visualizadorrevisarLos bloques se ven en inglés: el .ptj tiene los componentes mal nombrados.
5robot cosquillosocasiFalta el bloque que devuelve la cara de reposo.
6alarma de galletasrevisarEmpieza diciendo que los programas ya tienen memoria. No la tienen.
7despertadorrevisarRemite a otra actividad, también desde dentro de un bloque.
8murciélagorevisarDiez remisiones al girasol, y la animación sin describir.
9desafío del robotrevisarLa celebración no suena una vez: se repite para siempre. Y la ficha no cuenta por qué crece la barra.
10corazón del robotrevisarLlama «velocidad» a variables que guardan tiempo de espera: la relación es la inversa.
11velacasiFalta un renombre de cinco.
12no derramescasiUna pregunta quedó fósil.
13interruptorrevisarDescribe un paso del al iniciar que no existe.
14encendidocambiar textoDecidido: la ficha se actualiza al marco del programa. Propuestas listas.
15papa explosivarevisarLa bandera no se menciona, y por eso el texto afirma dos cosas falsas.
16metrónomograveTres nombres de variable que no existen en el código.
17batalla de gritosrevisarHabla de un temporizador que ya no existe.
§2 Pasadas globales §3 Ficha por ficha §5 Adaptaciones de micro:bit §6 Ilustraciones §7 Hecho y pendiente

§2 Dos pasadas globales

Correcciones transversales que se aceptan o rechazan en bloque.

Estado✔ Aplicado en las 17 fichas. Excluidos, como estaba dicho: el permalink y el nombre del SVG de la 15 (rompen enlaces; decisión aparte).
Dicecomputadora en las 17 fichas · teléfono en 10 · smartphone en 7 · patata en el permalink y el nombre del SVG de la 15.
ProblemaRegla es-CL del proyecto: celular, computador, papa. Son 39 casos, casi todos en la línea de materiales que se repite con cinco variantes.
Cambiaría conPasada mecánica en las 17: computadoracomputador, teléfono/smartphonecelular, y unificar la línea de materiales en una sola forma: «Celular y computador». Excluye el permalink y el nombre de archivo de la 15 (rompen enlaces): esos dos, solo si lo confirmas aparte.
Estado✔ Aplicado: las remisiones de las 9 fichas reescritas conservando el contenido didáctico. Verificación global: cero restos (las únicas coincidencias que quedan son autorreferencias de cada ficha a su propio título).
Dice«el proyecto anterior» · «la última actividad» · «el próximo proyecto» · «Despertador de Girasol» · «Interruptor Mágico de Aplausos»… — 25 remisiones en 9 fichas (peores: la 8 con diez y la 14 con ocho).
ProblemaRegla dura del proyecto: la progresión está en el orden, no en las remisiones. Ninguna actividad debe nombrar a otra.
Cambiaría conReescribir las 25 conservando el contenido didáctico sin nombrar nada. El patrón: «Nuestro girasol buscaba la luz» → «Muchos programas se activan con la luz»; «Comparen este código con el del Despertador de Girasol» → «Miren su propio código: ¿cuál es el único bloque que decide si la criatura ama el día o la noche?»; «Partiremos de la base del Interruptor Mágico» → «Necesitarás 2 componentes…». Te presento las 25 reescrituras completas para vista previa antes de tocar nada.

§3 Ficha por ficha

16 · metronomo-con-inclinacion

El Metrónomo de DJ

Estado✔ Aplicado.
Dice«…prestando especial atención a la estructura condicional si (tiempoActual - ultimoTiempo) > intervalo» — y en otra sección, «constantemente calculamos el tiempo que ha pasado: tiempoActual - ultimoPulso».
Haceestablecer tiempoTranscurrido a (milisegundos − ultimoPulso) si (tiempoTranscurrido > intervaloPulso):
ChocaNinguno de los tres nombres que cita —tiempoActual, ultimoTiempo, intervalo— existe en el programa. El estudiante que los busque en su pantalla no los va a encontrar. Y la resta ya no está anidada dentro del si: hoy tiene nombre propio.
Cambiaría conGuía docente: «…prestando especial atención a los dos pasos: establecer tiempoTranscurrido a (milisegundos − ultimoPulso) y si (tiempoTranscurrido > intervaloPulso)». Sección de aprendizaje: «constantemente calculamos el tiempo que ha pasado y lo guardamos con nombre propio: tiempoTranscurrido = milisegundos − ultimoPulso». Y en «Composición del Código», nombrar la variable: «con el reloj calculamos el tiempoTranscurrido desde el ultimoPulso, y el si compara esas dos duraciones».
planificacion.html usa un cuarto nombre, ultimoLatido —está en tus decisiones abiertas—, y afirma que el programa «muestra el bpm», cosa que no hace. Lo dejo anotado fuera de los botones porque el nombre es una decisión editorial tuya.
10 · corazon-variables-eventos

El Corazón de Mi Robot Amigo

Dos hallazgos de la pasada anterior se retiraron (ver arriba: «durmiente» y «acelerado»). Queda uno.

Estado✔ Aplicado.
Dice«…en cada ciclo, lee las variables de velocidad para saber qué tan rápido debe latir» — y otras dos veces igual.
Haceretraso de pausaLarga milisegundos
ChocaLas variables no guardan velocidad: guardan tiempo de espera. La relación es la inversa —más espera, más lento—, así que «variables de velocidad» sugiere que subir el número acelera el corazón, cuando es al revés. Es la confusión que el renombre a pausaLarga/pausaCorta vino a eliminar.
Cambiaría conUsar los nombres reales y enunciar la regla una vez: «en cada ciclo, lee pausaLarga y pausaCorta para saber cuánto esperar entre un dibujo y el siguiente»; «su único trabajo es escribir un nuevo valor en pausaLarga y pausaCorta»; y en Composición: «Ojo: estas variables no guardan velocidad sino milisegundos de espera — mientras más espera, más lento late el corazón».
Estado✔ Aplicado.
Dice(Composición) «…establecemos las variables de velocidad a un ritmo "tranquilo"» — sin más.
Haceal iniciar: pausaLarga = 500, pausaCorta = 150 gesto "vuelve la calma": pausaLarga = 500, pausaCorta = 150 ← los MISMOS números
ChocaEl ritmo tranquilo está escrito dos veces, y el texto no lo advierte. Quien cambie los números solo en al iniciar verá que el primer gesto de calma se los deshace, y creerá que el programa no obedece.
Cambiaría conAñadir al final de la Composición: «Ojo: el ritmo tranquilo aparece dos veces — en al iniciar y en el gesto que devuelve la calma. Si cambias uno, cambia también el otro, o el gesto deshará tu ajuste.»
14 · 17.2-cinematic-power-on

El Encendido Cinematográfico — decidido: se cambia el texto

El renombre de los estudiantes puso los contadores en el marco del programa (filas afuera, columnas adentro, x = columnas, y = filas); la ficha seguía hablando en el marco de quien mira. Decisión tomada: el programa se queda como está y la ficha se actualiza. Propuestas:

Estado✔ Aplicado.
Dice«El bucle exterior recorre las columnas (de 1 a 7). Por cada columna, el bucle interior recorre todas las filas de esa columna.»
Hacecontar con filas desde 1 hasta 7: contar con columnas desde 1 hasta 7: dibuja en x columnas y filas
ChocaLa ficha y el código usan las mismas dos palabras al revés. El estudiante que lea ambas encuentra que «exterior = columnas» en el papel y «exterior = filas» en la pantalla.
Cambiaría con«El bucle exterior recorre las filas (de 1 a 7): elige un renglón de la cuadrícula. Por cada fila, el bucle interior recorre las columnas y va encendiendo el píxel x = columnas, y = filas. La variable de adentro es la que cambia más rápido: da sus 7 vueltas completas por cada valor de la de afuera — por eso el bloque dibuja se ejecuta 7 × 7 = 49 veces, una por cada LED.» (Incluye el concepto que hoy falta: cuál variable cambia más rápido.)
Estado✔ Aplicado.
Dice(Composición) «…dos bucles contar con anidados recorren cada columna y fila…» · (cierre docente) «¿Qué hace la variable 'columnas'? ¿Y la variable 'filas'?» · (Reflexiona) «¿Qué cambiarías para que el barrido fuera de arriba hacia abajo en lugar de lado a lado?»
ChocaLos otros tres lugares donde la ficha nombra los bucles, todos en el orden viejo. Coherencia: si el párrafo principal cambia, estos tres tienen que cambiar con él.
Cambiaría conComposición: «…dos bucles contar con anidados recorren la cuadrícula: filas afuera y, dentro de cada fila, columnas, encendiendo cada píxel (dibuja en x columnas y filas) con una pausa de 10 ms.» Cierre docente: «¿Qué hace la variable filas? ¿Y columnas? ¿Cuál de las dos cambia más rápido?» Reflexiona: «El barrido recorre la cuadrícula renglón por renglón. ¿Qué cambiarías para que la recorriera columna por columna? (Pista: piensa cuál de los dos bucles va afuera y cuál adentro, sin tocar el bloque dibuja.)»
15 · papas-caliente-juego

La Papa Explosiva Digital

El renombre está completo. Lo que no se actualizó es el contenido.

Estado✔ Aplicado.
Dice«Toda la lógica del juego está dentro del evento cuando es tocado. Primero, se establece un tiempoRestante aleatorio…» — y en otra sección, «Presionar la pantalla inicia una nueva ronda del juego».
Haceal iniciar el programa: establecer listo a verdadero cuando BotónTáctil3 es tocado: si listo: establecer listo a falso establecer tiempoRestante a (entero aleatorio de 5 a 15)
ChocaHay un al iniciar aparte; lo primero del evento no es el sorteo sino el si listo; y presionar no inicia una ronda si ya hay una en curso. La bandera es justo lo que impide que un segundo toque reinicie la partida — y el texto nunca la nombra.
Cambiaría conAñadir a «La Lógica de la Papa Caliente»: «Bandera: la variable listo recuerda si el juego está libre. Parte en verdadero en al iniciar; el evento solo arranca una ronda si listo, y lo primero que hace es ponerla en falso, para que un segundo toque no reinicie la ronda en curso.» Y en Composición: «Casi toda la lógica vive dentro del evento cuando es tocado, protegida por un si listo. Primero la bandera pasa a falso, luego se sortea tiempoRestante y comienza la música.»
Estado✔ Aplicado.
Dice«1. Primero, comprueba una condición (por ejemplo, ¿es el tiempo restante > 0?).»
Hacerepetir mientras (tiempoRestante > 0):
ChocaEl renombre se aplicó también dentro de la cita de código: en prosa «el tiempo restante» está bien, pero entre comillas de código tiene que ser el nombre exacto del bloque.
Cambiaría con¿es tiempoRestante > 0?
9 · juego-toques

¡El Desafío de Activación del Robot!

Estado✔ Aplicado.
Dice«…se pintará la pantalla según la cantidad de energía para que podamos ver el progreso del desafío.»
HaceCada vuelta del ciclo dibuja UNA sola línea de 3 píxeles. Dentro de esa rama nunca se borra.
ChocaLa frase sugiere que el programa dibuja una barra proporcional. No: dibuja una línea. La barra existe porque lo dibujado antes sigue encendido — es la pantalla la que recuerda, no el programa. Es el punto más difícil de la actividad y no está explicado; tampoco se menciona el repetir para siempre donde vive todo esto.
Cambiaría con«Todo esto vive dentro de repetir para siempre. Cada vuelta enciende una sola línea —la que corresponde a la energía actual— y como dentro de esa rama nunca se borra, las líneas anteriores quedan encendidas: por eso ves crecer la barra
Estado✔ Aplicado.
Dice«En caso contrario, sabremos que el robot ha sido activado y reproducirá un sonido
Hacesino: borrar dibujo · dibuja cara feliz · reproducir 'celebración final' (y todo dentro de repetir para siempre)
ChocaLa rama de victoria tiene tres bloques y el texto menciona uno — falta la cara feliz, que es el premio visual. Y la celebración no suena una vez: al estar dentro del ciclo infinito, se repite para siempre.
Cambiaría con«En caso contrario, el robot se activa: se borra la barra, aparece una cara feliz y suena la celebración — y como todo vive dentro del ciclo, la celebración se repite hasta que reinicies el programa.»
Estado✔ Aplicado.
Dice«…quién puede cargarla hasta 7 primero tocando la pantalla.»
Hacesi (energia < 7): dibuja … ← con energía 7 pasa directo a la victoria: el séptimo escalón no llega a dibujarse
ChocaEl 7 es correcto (son 7 toques). Pero la barra sube seis escalones y al séptimo toque aparece directamente la cara: quien espere ver la barra llena antes de ganar, no la verá. Menor — decide tú si vale la aclaración.
Cambiaría conMedia frase en Composición: «(La barra sube seis escalones: el séptimo toque no dibuja el último, sino que pasa directo a la celebración.)»
Decisión abierta tuya, fuera de los botones: la variable se llama energia, los comentarios del código dicen «toques» y la ficha escribe energía con tilde en dos citas de bloque. Conviene resolver las tres juntas.
13 · luz-encendida-al-ruido

El Interruptor Mágico de Aplausos

Estado✔ Aplicado.
Dice«Al iniciar prepara la variable estado y colorea con negro el dibujo LED
Haceal iniciar el programa: establecer estado a falso
ChocaEse segundo paso no existe: el al iniciar tiene una sola instrucción. El estudiante que siga la ficha al pie de la letra construirá un bloque de más.
Cambiaría con«Al iniciar solo prepara la variable estado en falso: la pantalla parte apagada y el programa queda esperando el primer aplauso.»
Estado✔ Aplicado.
Dice«…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…»
ProblemaDescribe bien el orden, pero no dice que sea obligatorio — y es el concepto central de la actividad.
Cambiaría conAñadir: «Este orden no es opcional: si el si… sino… leyera la variable antes de invertirla, la luz mostraría siempre el estado anterior — el interruptor iría un aplauso atrasado.»
17 · gritometro-tiempo-gritos

La Batalla de Gritos

Estado✔ Aplicado.
Dice«El temporizador de LEDS está en marcha» — y otra vez, «…el temporizador estará en marcha».
HaceLa reestructuración eliminó el reloj: no queda ningún bloque de tiempo. El avance es: encender un LED → esperar 500 ms → pasar a la casilla siguiente.
ChocaYa no hay temporizador. El tiempo se mide contando LEDs, uno cada medio segundo — un mecanismo distinto y más bonito de explicar. La palabra vieja hace buscar un bloque que no está.
Cambiaría con«Estado de Conteo: la barra de LEDs va avanzando; partidaEnCurso es verdadera.» Y en la otra: «…mientras el nivel de ruido sea mayor o igual a 5, la barra sigue avanzando un LED cada medio segundo (estado de Conteo).»
Estado✔ Aplicado.
Dice«Un evento de ruido fuerte inicia el juego, pero solo si estamos en el estado de Espera
Hacecuando NivelRuido2 detecta aumento repentino: establecer partidaEnCurso a verdadero ← sin ninguna condición
ChocaEl evento dispara siempre; quien decide ignorarlo es el bucle principal. La distinción es el corazón de la máquina de estados que la actividad enseña — y unas líneas más abajo la propia ficha lo cuenta bien: se contradice.
Cambiaría con«Un evento de ruido fuerte pone en marcha el juego activando partidaEnCurso. El evento se dispara siempre; es el bucle principal el que solo le hace caso cuando está en Espera.»
Estado✔ Aplicado.
Dice(Composición) «…si la columna es mayor a 7, se seguirán iluminando los LEDs de la siguiente fila, y así sucesivamente.»
Hacesi (columna > 7): columna = 1, fila = fila + 1 si (fila > 7): fila = 1 ← este segundo paso no está contado
ChocaEl avance tiene dos pasos y el texto cuenta uno. Falta qué pasa al llenarse la pantalla (vuelve arriba y repinta: el gritómetro se satura y deja de cambiar) y que un grito durante los 5 s de enfriamiento se pierde sin aviso.
Cambiaría con«El avance funciona como escribir en un cuaderno: sumo 1 a la columna; si me pasé del borde, vuelvo a la primera columna y bajo una fila; y si me pasé de la última fila, vuelvo arriba — con la pantalla llena, el gritómetro repinta sobre lo encendido y ya no se ve cambio. Ojo: un grito durante los 5 segundos finales se pierde; hay que esperar a que la pantalla se apague y volver a gritar.»
6 · alarma-caja-galletas

¡Alarma: El Ladrón de Galletas!

Estado✔ Aplicado.
Dice(primera frase) «Tus programas ya tienen memoria, ¡ahora enseñémosles a tomar decisiones!»
HaceNinguna de las cinco actividades anteriores usa variables. La memoria se estrena en la 9.
ChocaDa por sabido algo que el estudiante no ha visto nunca, en la frase de entrada.
Cambiaría con«Tus programas ya saben repetir y reaccionar a los sensores; ¡ahora enseñémosles a tomar decisiones
Estado✔ Aplicado.
Dice(cierre) «¡Y eso es lo que aprenderemos en el próximo proyecto con el bloque "Si... Sino..."!»
ProblemaRemite a otra actividad (regla dura) y adelanta el si no en la lección que estrena el condicional sin rama falsa.
Cambiaría con«…necesitaríamos una forma de decirle al programa qué hacer cuando la condición no se cumple. ¿Se te ocurre cómo podría el programa apagar la alarma solo?»
Aquí la refactorización arregló el texto: «activa la secuencia de alarma con luces y sonido» —luces primero— hoy es cierto en las dos plataformas. Único caso de los 17 donde el refactor cerró un desajuste en vez de abrirlo.
4 · luci-discoteca-ruido

El Visualizador de Música

Estado✔ Aplicado: componentes renombrados a DibujoLED1/NivelRuido2 en el .ptj, derivados regenerados, AST actualizado y equivalencia re-verificada: 17/17 con GED 0.
Dice(paso 1 de «Crear») «Presiona Añadir dispositivo y selecciona NivelRuido… y DibujoLED
HaceCOMPONENTES: LEDDraw1=MatrixDraw, NoiseLevel2=NoiseLevel clear en LEDDraw1 drawOnXY 3 … en LEDDraw1
ChocaÚnica de las 17 con los componentes nombrados en inglés. El decodificador no reconoce la categoría y muestra los bloques en inglés: quien abre «Ver bloques en vivo» lee clear en LEDDraw1 justo después de que la ficha le dijo DibujoLED.
Cambiaría conCambio en el código, no en la ficha: renombrar en el .ptj LEDDraw1DibujoLED1 y NoiseLevel2NivelRuido2, regenerar los cuatro derivados y verificar que la equivalencia sigue en GED 0 (los nombres de instancia no son parte del nodo canónico, así que no debería moverse).
Estado✔ Aplicado.
Dice«La pantalla es una cuadrícula de LEDs y cada posición se identifica con una coordenada de fila (Y).»
Hacedibuja en x 3 y ◻ · dibuja en x 4 y ◻ · dibuja en x 5 y ◻
ChocaComo simplificación funciona (la altura es lo único que cambia). Pero la actividad lleva la etiqueta «Posición y Coordenadas» y el bloque que el estudiante arma pide dos coordenadas: decir que basta una choca con lo que ve al armar el bloque. Cuesta una línea evitarlo.
Cambiaría con«La pantalla es una cuadrícula de LEDs y cada posición se identifica con dos coordenadas: la columna (X) y la fila (Y). En este visualizador las columnas quedan fijas, y lo que el ruido controla es la fila.»
Estado✔ Aplicado.
Dice(Composición) «En un bucle repetir para siempre, el programa lee constantemente el nivel de ruido. Luego, usa ese número para decidir la fila…»
Hacerepetir para siempre: borrar dibujo ← primera instrucción, no mencionada dibuja …
ChocaEl borrar que abre cada vuelta no se menciona, y es lo que impide que las luces anteriores queden encendidas — la pregunta que cualquier estudiante se hace al ver la luz «moverse».
Cambiaría con«En un bucle repetir para siempre, el programa primero borra el dibujo —para que la luz anterior no quede encendida— y luego lee el nivel de ruido y decide en qué fila dibujar.»
2 · xilofono-inclinacion

El Xilófono Mágico Inclinable

Estado✔ Aplicado.
Dice«Haz clic en el signo de interrogación para abrir los comentarios… tomamos ese número, se lo sumamos a una nota base (60, que es Do central) y reproducimos el resultado.»
Hace// comentario del propio bloque: "El teclado musical solo recibe números positivos, mientras la inclinación puede tener valores negativos, por lo que sumamos un valor, en este caso 60."
ChocaLas dos explicaciones son ciertas y complementarias: el 60 es el Do central (nota MIDI 60), y sumarlo es además lo que garantiza que el resultado nunca sea negativo. Pero la ficha da una mitad y el comentario del bloque da la otra, sin nada que las conecte — y la propia ficha manda abrir ese comentario. El estudiante aplicado encuentra dos explicaciones distintas del mismo número.
Cambiaría con«…se lo sumamos a una nota base (60, que es el Do central) y reproducimos el resultado. Ese corrimiento cumple además una segunda función: el teclado musical solo acepta números positivos y la inclinación puede ser negativa — sumar 60 asegura que la nota siempre exista.»
Estado✔ Aplicado.
Dice(pasos de «Crear») «1. …selecciona Inclinación. / 2. Presiona de nuevo… y selecciona TecladoMusical
HaceCOMPONENTES: TecladoMusical1, Inclinación2 tocar nota número (y in Inclinación2 + 60) en TecladoMusical1
ChocaEl orden de los pasos es el inverso al del proyecto guardado: siguiendo la ficha, el estudiante obtiene Inclinación1/TecladoMusical2 y los bloques que ve dicen lo contrario. Pasa solo en los dos xilófonos.
Cambiaría conInvertir los dos pasos: primero TecladoMusical, después Inclinación. (Igual en la ficha 3, que hereda el mismo orden.)
7 · despertador-por-la-manana

El Despertador de Girasol

El código es el ejemplo canónico del si … si no y el texto lo describe bien. Los problemas son de otro tipo.

Estado✔ Aplicado en Protobject (el comentario vive en el .ptj). ⏳ micro:bit: mismo arreglo a mano en MakeCode y re-exportar el .hex.
Dice(comentario del bloque condicional, en ambas plataformas) «Este bloque es un condicional extendido, en la actividad anterior teníamos un bloque que ejecutaba su contenido si se cumple la condición…»
ProblemaLa remisión prohibida está dentro del código. El lado Protobject puedo corregirlo yo (el comentario vive en el XML del .ptj); el lado micro:bit queda manual.
Cambiaría con«Condicional extendido: si la condición se cumple se ejecuta la primera parte; si no se cumple, se ejecuta una segunda parte distinta.» — la misma explicación, sin remitir a nada.
Estado✔ Aplicado.
Dice(guía docente) «SI hay luz, suena una melodía. SINO, permanece en silencio
Hacesino: detener sonido de ReproductorSonido3 borrar dibujo en DibujoLED2
ChocaEl si no no «permanece»: ejecuta dos acciones. Y ese es el punto de la actividad — la rama falsa hace algo. La frase trabaja contra la lección; la propia ficha lo dice bien dos secciones más abajo.
Cambiaría con«SI hay luz, suena una melodía. SINO, apaga la melodía y la pantalla
Estado✔ Aplicado.
Dice(Reflexiona) «¿Cómo cambiarías solo la condición para crear una luz de noche que se encienda automáticamente en la oscuridad?»
HaceLa rama verdadera tiene DOS acciones: melodía + dibujo.
ChocaInvirtiendo solo la comparación se obtiene una luz de noche que además toca la melodía de alarma toda la noche. La pregunta funciona en lo lógico, pero el resultado no es el que promete — y esa asimetría daría una pregunta mejor.
Cambiaría con«…¿Cómo cambiarías la condición para que el sol se encienda en la oscuridad? ¿Y qué más tendrías que cambiar para que sea una luz de noche de verdad, y no una alarma nocturna?»
8 · luces-de-fiesta-al-oscurecer

El Vuelo del Murciélago Nocturno

El murciélago es la actividad física; eso no se toca. Quedan las remisiones —cubiertas por la pasada global g-rem, diez de las 25 están aquí— y una sección incompleta.

Estado✔ Aplicado.
Dice(«Composición del Código») «Dentro del bucle principal, usamos el bloque si... sino.... La clave es la condición…» — y nada más.
HaceLa rama verdadera tiene 8 bloques más: 4 dibujos y 4 pausas de 200 ms.
ChocaDe once bloques se describen dos, y falta justamente la animación — lo que el estudiante ve. Falta también el porqué de la última pausa: sin ella el cuarto dibujo dura casi nada, porque el bucle vuelve de inmediato al primero. Es el bloque que parece sobrar y no sobra.
Cambiaría conAñadir: «Dentro de la rama verdadera hay cuatro dibujos que se alternan, cada uno seguido de un retraso de 200 ms: eso produce el aleteo. La última pausa también hace falta — sin ella, el cuarto dibujo se borraría de inmediato al reiniciar el bucle: cada imagen necesita su tiempo en pantalla.»
Estado✔ Aplicado.
Dice(report.html) enlace a _activities/16.4-bat-in-the-dark.es.md
ProblemaEse archivo no existe (el real es 16.3-…): enlace roto en el reporte que leen los estudiantes.
Cambiaría conCorregir el enlace a _activities/16.3-bat-in-the-dark.es.md.
12 · nivel-con-ruido

¡No Derrames el Líquido! — la mejor actualizada

Cero remisiones, ningún resto de los nombres viejos, el redondeo bien contado, y la ficha que documenta el asunto de los ejes. Dos retoques.

Estado✔ Aplicado.
Dice(Reflexiona) «Describe una situación en la que la alarma sonaría. ¿Qué valores tendrían que tener la inclinación X y la inclinación Y
Haceestablecer centradoX a ((ledX ≥ 3) y (ledX ≤ 5))
ChocaLa zona segura ya no se define sobre la inclinación cruda sino sobre la posición de LED. Para contestar en inclinaciones habría que rehacer el escalado de cabeza. Es el último fósil de los nombres viejos.
Cambiaría con«Describe una situación en la que la alarma sonaría. ¿Qué valores tendrían que tener ledX y ledY para que eso suceda — y hacia dónde tendrías que inclinar el celular para conseguirlo?»
Estado✔ Aplicado.
Dice«Al iniciar el programa, estableceremos la variable debeSonarAlarma a verdadero» — y no vuelve a aparecer.
Hacesi (centradoX y centradoY): dibuja … [verde] si debeSonarAlarma: tocar nota · esperar 100 ms · debeSonarAlarma = falso
ChocaHay un si anidado bien visible en la imagen del código que la ficha nunca explica. Es el mecanismo de disparo único: la nota de acierto suena una sola vez al entrar a la zona, no en cada vuelta.
Cambiaría conAñadir a la Composición: «Dentro del camino verde hay un si debeSonarAlarma: hace que la nota de acierto suene una sola vez al entrar a la zona (la bandera pasa a falso), y la rama de alarma la vuelve a poner en verdadero, dejándola lista para la próxima vez que recuperes el equilibrio.»
11 · flama-vela-con-soplo

La Vela Mágica de Cumpleaños

Estado✔ Aplicado.
Dice«…un evento (tu soplo) cambiará el estado de una variable (la flama), y un condicional leerá ese estado».
Haceestablecer velaEncendida a verdadero
ChocaEs la única de las cinco apariciones que quedó sin renombrar — aquí «la flama» nombra la variable, no la llama del dibujo. Corrigiéndola, la ficha queda con «llama» al 100 % y la indecisión flama/llama se resuelve sola.
Cambiaría con«…cambiará el estado de una variable (velaEncendida), y un condicional leerá ese estado.»
Estado✔ Aplicado en Protobject: el comentario ahora describe el bloque al que está pegado («Dibuja la punta de la llama en el centro. (Quien borra la punta anterior es el redibujo de la vela, un bloque más arriba.)»). ⏳ micro:bit: mismo arreglo a mano.
Dice(comentario del código) «Borra la punta de la llama anterior»
HaceEl comentario está en el bloque que DIBUJA la punta central; el que borra es el "dibuja" de la vela, un bloque más arriba.
ChocaSeñala el bloque equivocado, en las dos plataformas — y el que sí borra es justo el que los estudiantes tienden a eliminar «para simplificar», con lo que la llama deja rastro.
Cambiaría conMover el comentario al bloque dibuja de la vela (el que efectivamente borra la punta anterior). Protobject lo aplico yo en el .ptj; micro:bit queda manual.
Estado✔ Aplicado.
Dice«Su única tarea es mirar la variable velaEncendida en cada ciclo y decidir: ¿dibujo la llama o dejo la pantalla en negro?» — sin describir la animación.
Hacedibuja la vela → punta al azar → 200 ms → dibuja la vela → punta al centro → 200 ms
ChocaLos dos fotogramas y el porqué del segundo «dibuja la vela» no están contados. Ese redibujo es lo que apaga la punta anterior: quien lo borre «para simplificar» verá la llama dejar rastro.
Cambiaría conAñadir: «La rama verdadera alterna dos fotogramas —la punta al azar y la punta al centro— con 200 ms entre ellos. Antes de cada punta se vuelve a dibujar la vela: ese redibujo es lo que apaga la punta anterior. Si lo quitas para simplificar, las puntas se acumulan y la llama deja de titilar.»
5 · robot-risa-simpatica-al-ruido

El Robot Cosquilloso

Estado✔ Aplicado.
Dice«Cuando aplaudes, este bloque se activa, reproduce el sonido y ejecuta un bucle repetir 8 veces para animar la boca. Al terminar, el robot vuelve a la normalidad y espera el próximo aplauso.»
Hacereproducir sonido 'reacción divertida' repetir 8 veces: … detener sonido ← no mencionado dibuja (cara de reposo) ← no mencionado
ChocaVolver al reposo no es automático: es un bloque que hay que poner, y el texto lo presenta como si ocurriera solo — justo en la actividad que estrena los eventos, donde la lección es «disparo → pasa algo → vuelve». Falta también el detener sonido.
Cambiaría con«…ejecuta un bucle repetir 8 veces para animar la boca. Después, un bloque detener sonido corta la risa si aún sonaba, y un último dibuja vuelve a poner la cara de reposo — la misma de Al iniciar. Por eso el robot queda listo para el próximo aplauso.»
3 · xilofono-inclinacion-con-nota-led

El Xilófono del Futuro (con LEDs)

Estado✔ Aplicado.
Dice(«La División Mágica») «…usando una simple operación matemática como la división, podemos reducir el rango de números del sensor para que encaje perfectamente en nuestra pantalla.»
Hacedibuja en x 4 y (4 + redondear((y in Inclinación2) ÷ 15))
ChocaDividir no basta: el resultado queda centrado en cero, con negativos que caerían fuera de la pantalla. Lo que hace que encaje son el + 4 (el LED del centro) y el redondeo, y ninguno se menciona. Quien quite la división para probar —como sugiere la reflexión— verá algo que el texto no le preparó para entender.
Cambiaría conAñadir: «Pero dividir no basta: el resultado queda centrado en cero, con números negativos que caerían fuera de la pantalla. Por eso además sumamos 4 —el LED del centro— y redondeamos, porque la pantalla solo entiende posiciones enteras. Con el celular quieto, el punto queda justo al medio.»
Estado✔ Aplicado.
Dice«La clave de este código es que el valor de la inclinación Y se lee dos veces: primero dividiéndolo por 15… y luego para calcular la nota musical
Haceluz: 4 + redondear(inclinación ÷ 15) sonido: 60 + inclinación ← misma forma: reposo + desviación
ChocaNo es falso, pero desaprovecha lo que la refactorización dejó servido: las dos fórmulas tienen hoy la misma forma, y esa simetría es el objetivo declarado de la actividad («una entrada, múltiples salidas»).
Cambiaría con«La clave es que la inclinación se lee dos veces, y las dos fórmulas tienen la misma forma: un valor de reposo más la desviación. Para el sonido, 60 + inclinación. Para la luz, 4 + inclinación ÷ 15. Un mismo dato, dos escalas, la misma idea — ¡por eso luz y sonido nunca se desincronizan!»
Estado✔ Aplicado en Protobject: la suma quedó 60 + y in Inclinación2 (verificado en el decodificado). ⏳ micro:bit: invertir a 1000 + aceleración x en MakeCode y re-exportar el .hex — el binario no se puede editar sin recompilar.
Dice(contexto) La actividad 3 quedó con 60 + inclinación; la actividad 2, con el orden viejo inclinación + 60.
ProblemaEl mismo bloque conceptual aparece invertido en dos actividades consecutivas. Si la gramática «reposo + desviación» debe reconocerse, conviene alinear también la 2. Es un cambio de código (mismo resultado: la suma es conmutativa), con pipeline a re-verificar.
Cambiaría conInvertir los operandos en la actividad 2, en ambas plataformas: 60 + (y in Inclinación2) / 1000 + aceleración x. Comportamiento idéntico; re-correr la pipeline para confirmar GED 0.
1 · corazon-forever-loop

El Llavero de Corazón Luminoso — coherente

Verificado bloque por bloque: ninguna afirmación falsa, ninguna remisión, las preguntas de reflexión funcionan. Le aplica solo la pasada es-CL global.

§5 Adaptaciones de micro:bit

Informativo, sin botones: son decisiones de plataforma, no correcciones de ficha. Las legítimas no se tocan; las que parecen descuidos, si quieres las convierto en propuestas en otra pasada.

Correctas — no tocar

QuéProtobject → micro:bit
Tamaño de la matriz7×7 (1..7) → 5×5 (0..4)
Escala del sensorinclinación ±100 → aceleración ±1023 mg
Umbralesluz 50 → 100, oscuridad 30 → 75, inclinación 20 → 400
Eje del sensorcada plataforma usa el que le resulta natural
Altura del sonidonota MIDI → frecuencia en Hz

Parecen descuidos

ActividadQué pasaPor qué importa
16 · metrónomo+600 contra +60: con el aparato plano, 600 BPM contra 60.La unidad (BPM) es la misma en ambas: parece un cero de más.
16 · metrónomoEl pulso se reproduce «hasta que termine»: bloquea el ciclo.El periodo real es intervalo + nota: no respeta la fórmula que la actividad enseña.
5 · robotLa cara de al iniciar no coincide con la del final.El robot no vuelve al reposo tras el primer aplauso. Arreglo: usar la cara del primer dibujo.
5 · robotLa melodía es Nyan Cat; en Protobject es una risa.La gracia del robot cosquilloso es la carcajada.
1 · corazónPausa anidada 10 ms contra 100; fotogramas en orden inverso.El «ritmo rápido dentro del lento» se percibe muy distinto.
17 · gritómetro200 ms/casilla sobre 25 LEDs contra 500 ms sobre 49.Llenar la pantalla: ~12,5 s contra ~24,5 s — dificultad distinta.

§6 Ilustraciones a revisar a ojo

167 SVG tienen el texto convertido en trazados: ninguna búsqueda los alcanza. Si se aceptan las correcciones, conviene mirar estos cuatro por si quedaron contradiciendo el texto nuevo:

§7 Qué se hizo y qué queda

Hecho (17-08-2026)

Pendiente: 3 arreglos en micro:bit — instrucciones para estudiantes

Por qué estos tres no se pudieron hacer automáticamente. Los proyectos Protobject viven en un archivo .ptj que es el código fuente: se puede corregir directo. El archivo .hex de micro:bit es distinto — contiene dos cosas pegadas: el programa ya compilado (los bytes que la placa ejecuta) y, al final, una copia del código fuente (lo que MakeCode muestra cuando lo abres). Si se editara el texto dentro del .hex a mano, esas dos partes quedarían en desacuerdo: MakeCode mostraría el código nuevo, pero la placa ejecutaría el viejo. Por eso los cambios de micro:bit se hacen en el editor MakeCode, que recompila todo junto al descargar.

El procedimiento, para cada uno de los tres archivos:

  1. Entra a makecode.microbit.orgImportarImportar archivo… y elige el .hex desde la carpeta microbit/ del repositorio.
  2. Haz solo el cambio indicado abajo. Nada más.
  3. Descargar → renombra el archivo descargado al nombre original exacto → reemplaza el archivo en microbit/ → commit y push.
  4. Avisa: con el .hex nuevo se regeneran los derivados y se re-verifica la equivalencia. (Los tres cambios son seguros: los comentarios no cuentan en el grafo, y una suma da lo mismo en los dos órdenes — el resultado seguirá siendo 17/17 con distancia 0.)
Tarea 1microbit/xilofono-inclinacion.hex — dos cosas en el mismo proyecto.
Cambiar(1) En el bloque tono de timbre (Hz), la suma dice aceleración (mg) x + 1000: intercambia los dos operandos para que quede 1000 + aceleración (mg) x — así las dos plataformas comparten la forma «valor de reposo + desviación» que la ficha enseña. (2) En el comentario del bloque para siempre, corrige la errata: «porgramada» → «programada».
Tarea 2microbit/despertador-por-la-manana.hex — el comentario del bloque si… si no menciona «la actividad anterior» dos veces, y la regla del proyecto es que ninguna actividad nombre a otra.
CambiarReemplaza el texto completo del comentario por este (es el mismo que ya quedó en Protobject):

«Este bloque es un condicional extendido: un condicional simple ejecuta su contenido si se cumple la condición; en este caso se extiende el bloque condicional y se le da la instrucción de que si se cumple la condición se ejecuta la primera parte del bloque, pero si no se cumple se ejecuta otra parte diferente.

Con un condicional simple, si no se cumplía la condición no pasaba nada más que no ejecutar lo de dentro, en este caso si no se cumple se ejecuta una serie de instrucciones específicas.»
Tarea 3microbit/flama-vela-con-soplo.hex — el comentario «Borra la punta de la llama anterior» está pegado a graficar x 2 y 0, que enciende la punta central: describe el bloque equivocado. (Quien borra de verdad es el mostrar LEDs de la vela, un bloque más arriba.)
CambiarReemplaza ese comentario por (igual que en Protobject):

«Dibuja la punta de la llama en el centro. (Quien borra la punta anterior es el redibujo de la vela, un bloque más arriba.)»

Aparte: decisiones abiertas del autor (no son tareas de estudiantes)