La Astra-7 quedó atrapada en una zona a oscuras y no encuentra la salida. En algún
punto del cuarto hay una fuente de luz —una grieta hacia la superficie, un faro, el
sol— y tú tienes que encontrarla.
La nave tiene un sensor de luz escondido en la placa. En esta misión vas a
encenderle los ojos y convertirla en un rastreador con dos modos: primero la vas a
calibrar (enseñarle cómo es la luz de tu cuarto) y luego la usarás para buscar la
fuente de luz, cambiando de color y de ritmo según se acerque.
Cuando la nave encuentre la luz, sus paneles solares podrán recargarse y por fin
podremos pensar en volver a casa.
🧭 ¿Qué es calibrar?
Antes de buscar, la nave necesita calibrarse. Pero… ¿qué significa eso?
🧭 Calibrar es enseñarle a un aparato cuáles son los extremos de lo que va a
medir, para que después entienda todo lo que hay en medio.
Imagina que llegas a un cuarto nuevo y a oscuras. Todavía no sabes qué tan oscuro puede
ponerse ni qué tan brillante. Calibrar es justo eso: le muestras a la nave lo más oscuro
(tapando el sensor) y lo más brillante (apuntándola a la lámpara) de este lugar. La
nave guarda esos dos extremos —el menor y el mayor— y con ellos arma su regla.
Piénsalo así:
- Es como el velocímetro de una bici: cuenta las vueltas de la rueda, pero para
saber la distancia hay que enseñarle cuánto avanza en una vuelta. Eso es calibrar; si
le das mal ese dato, marca una velocidad equivocada. - Es como cuando alguien te da a probar el dulce más dulce y el limón más agrio:
después ya puedes juzgar si algo está "a la mitad". - Las básculas se ponen en cero antes de pesar. Las pantallas táctiles se calibran
para saber dónde tocas. ¡Hasta los robots de Marte se calibran al llegar!
Lo mejor: como cada salón tiene su propia luz, calibrar hace que la nave funcione en
cualquier lado sin que tú tengas que cambiar números a mano.
🎯 Tu misión
Hacer una nave con dos modos: con el botón A entra en calibración (mueves la
placa y aprende el menor y mayor nivel de luz), y con el botón B entra en búsqueda
(usa esos dos valores para cambiar de color y de ritmo según cuánta luz encuentre). Además,
la nave muestra sus números en la consola todo el tiempo.
🕹️ Los dos modos
- 🅰️ Botón A — Calibrar: la placa se pone blanca tenue y da bips suaves. Mientras,
muévela: tápala con el dedo (para el valor más oscuro) y acércala a una linterna
(para el más brillante). La nave guarda el menor (luz_min) y el mayor
(luz_max) que vea. - 🅱️ Botón B — Buscar: la nave usa
luz_minyluz_maxcomo los extremos de su
regla. Calcula en qué punto (de 0 a 1) está la luz de ahora y elige color y ritmo.
🎨 Ficha técnica (valores exactos)
Ajustes generales
- Brillo:
0.2 - Lectura estable: promedio de
20lecturas en~100 ms+ suavizado con memoria (así
no titila).
🅰️ Modo CALIBRAR (Botón A)
- Guarda:
luz_min(el valor menor) yluz_max(el mayor). - Señal de que está calibrando: luces blanco tenue
(60, 60, 60)+ bip de700Hz.
🅱️ Modo BUSCAR (Botón B)
- Calcula el nivel (de
0= lo más oscuro a1= lo más brillante):
nivel = (luz - luz_min) / (luz_max - luz_min)
- Según el nivel, elige color, tono y ritmo (cada pulso dura
0.04s):
| Nivel | Color | Tono | Pausa | Cómo se oye |
|---|---|---|---|---|
< 0.25 |
🔴 Rojo (255,0,0) |
300 Hz |
0.9 s |
ti......ti......ti |
< 0.5 |
🟡 Amarillo (255,255,0) |
500 Hz |
0.45 s |
ti...ti...ti |
< 0.75 |
🟢 Verde (0,255,0) |
800 Hz |
0.18 s |
ti.ti.ti |
≥ 0.75 |
🔵 Azul (0,0,255) |
1200 Hz |
0.04 s |
titititit |
🖥️ Mira los números en la consola
Tu programa va a imprimir lo que siente, para que veas por dentro cómo piensa la nave.
Esos mensajes aparecen en la consola serie de tu editor (en Mu, el botón Serial; en
Thonny, la Shell).
- En calibración verás cómo suben o bajan el mínimo y el máximo.
- En búsqueda verás la luz, el
nivel(de 0 a 1) y el color elegido.
🛠️ Lo que tiene que hacer tu programa (obligatorio)
Empieza en modo "calibrando", con luz_min = 1000 y luz_max = 0. Dentro de unwhile True:, cada vuelta:
- Revisa los botones: A → calibrar (y reinicia min/max); B → buscar.
- Lee luz estable: promedia 20 lecturas en ~100 ms y suaviza con memoria.
- Si calibras: actualiza
luz_minyluz_max, pon blanco tenue e imprime los
valores. - Si buscas: calcula
nivel, elige color/tono/pausa, muéstralo, da el pulso e
imprime la luz y el nivel.
👉 Primero pulsa A y pasea la placa (tápala y acércala a la luz) unos segundos. Luego
pulsa B: ahora la nave rastrea usando lo que aprendió, ¡y funciona en tu salón sin
tocar ningún número!
🧱 Dale cuerpo a la nave: la cacería de luz
El sensor de luz es "el ojo" de la nave. Vas a usarlo para cazar una fuente de luz
escondida en un cuarto a oscuras, guiándote por el color y el ritmo del pitido.
🔎 Primero localiza el sensor de luz en la placa: está marcado con un dibujito de un
ojo 👁️ junto a uno de los agujeritos. Ese es el ojo que hay que "apuntar".
💡 Ideas de material (elige una)
- Una linterna o la lámpara del celular como fuente de luz (el "sol").
- Un palito, regla o tubo de cartón para montar la placa y moverla como una sonda.
- Un cuarto que puedas oscurecer (cierra cortinas o apaga la luz).
🛠️ Cómo hacerlo (paso a paso)
- Oscurece el cuarto lo más que puedas.
- Pulsa A y calibra: tapa el sensor y luego acércalo a la linterna un par de veces.
- Pide a alguien que esconda la fuente de luz apuntando a una pared o esquina.
- Pulsa B y barre el cuarto: rojo y lento = frío; conforme te acercas pasa a
amarillo → verde → azul y el pitido se acelera = caliente. - Gana cuando la nave se ponga azul con un
tititititrapidísimo: ¡la encontraste!
- Calibras con A, buscas con B y encuentras la fuente de luz por el color y el ritmo.
🧰 Tips para que lo hagas tú solo/a
🧩 Cómo usar esta sección: no te damos el programa de golpe. Aquí está partido en
pasos para que lo escribas tú, pieza por pieza. Al final tienes el código
completo por si te atoras o quieres compararlo. ¡Intenta armarlo antes de mirarlo!
Paso 1 — Preparar (antes del bucle):
import time
from adafruit_circuitplayground import cp
cp.pixels.brightness = 0.2
modo = "calibrando"
luz_min = 1000
luz_max = 0
luz = cp.light # valor inicial para suavizar
Paso 2 — Cambiar de modo con los botones:
if cp.button_a:
modo = "calibrando"
luz_min = 1000 # reinicia la calibración
luz_max = 0
if cp.button_b:
modo = "buscando"
Paso 3 — Leer la luz estable (apaga, promedia y suaviza):
cp.pixels.fill((0, 0, 0)) # apaga: no medirte a ti mismo
time.sleep(0.02)
suma = 0
for _ in range(20):
suma = suma + cp.light
time.sleep(0.005) # 20 lecturas en ~100 ms
promedio = suma / 20
luz = luz * 0.6 + promedio * 0.4
Paso 4 — Modo CALIBRAR (botón A): guarda el menor y el mayor:
if luz < luz_min:
luz_min = luz
if luz > luz_max:
luz_max = luz
cp.pixels.fill((60, 60, 60)) # blanco tenue = calibrando
Paso 5 — Modo BUSCAR (botón B): calcula el nivel, elige color/tono/pausa y responde:
rango = luz_max - luz_min
if rango < 1:
rango = 1 # evita dividir entre cero
nivel = (luz - luz_min) / rango
if nivel < 0.25: # oscuro
color = (255, 0, 0) # rojo
tono = 300
pausa = 0.9
elif nivel < 0.5:
color = (255, 255, 0) # amarillo
tono = 500
pausa = 0.45
elif nivel < 0.75:
color = (0, 255, 0) # verde
tono = 800
pausa = 0.18
else: # mucha luz
color = (0, 0, 255) # azul
tono = 1200
pausa = 0.04
cp.pixels.fill(color) # muestra el color del nivel
cp.play_tone(tono, 0.04) # da un pulso
time.sleep(pausa) # la pausa marca el ritmo
💻 Código completo (todo junto)
Junta los pasos así. Fíjate en los letreros que marcan qué código es de cada modo:
import time
from adafruit_circuitplayground import cp
cp.pixels.brightness = 0.2
modo = "calibrando" # empieza calibrando
luz_min = 1000
luz_max = 0
luz = cp.light # valor inicial para suavizar
while True:
# --- cambiar de modo con los botones ---
if cp.button_a:
modo = "calibrando"
luz_min = 1000 # reinicia la calibración
luz_max = 0
if cp.button_b:
modo = "buscando"
# --- leer la luz estable (apagar, promediar, suavizar) ---
cp.pixels.fill((0, 0, 0)) # apaga: no medirte a ti mismo
time.sleep(0.02)
suma = 0
for _ in range(20):
suma = suma + cp.light
time.sleep(0.005) # 20 lecturas en ~100 ms
promedio = suma / 20
luz = luz * 0.6 + promedio * 0.4
if modo == "calibrando":
# ===== MODO CALIBRAR (botón A) =====
if luz < luz_min:
luz_min = luz
if luz > luz_max:
luz_max = luz
print("CALIBRA min", int(luz_min), "max", int(luz_max))
cp.pixels.fill((60, 60, 60)) # blanco tenue = calibrando
cp.play_tone(700, 0.03)
time.sleep(0.08)
else:
# ===== MODO BUSCAR (botón B) =====
rango = luz_max - luz_min
if rango < 1:
rango = 1 # evita dividir entre cero
nivel = (luz - luz_min) / rango
if nivel < 0:
nivel = 0
if nivel > 1:
nivel = 1
if nivel < 0.25:
color = (255, 0, 0) # rojo
tono = 300
pausa = 0.9 # ti......ti......ti
nombre = "rojo"
elif nivel < 0.5:
color = (255, 255, 0) # amarillo
tono = 500
pausa = 0.45 # ti...ti...ti
nombre = "amarillo"
elif nivel < 0.75:
color = (0, 255, 0) # verde
tono = 800
pausa = 0.18 # ti.ti.ti
nombre = "verde"
else:
color = (0, 0, 255) # azul
tono = 1200
pausa = 0.04 # titititit
nombre = "azul"
print("BUSCA luz", int(luz), "nivel", round(nivel, 2), nombre)
cp.pixels.fill(color)
cp.play_tone(tono, 0.04)
time.sleep(pausa)
🌟 Si quieres ir más allá (reto opcional)
- Fuente encontrada: en búsqueda, si
nivel > 0.9(ya casi encima de la lámpara), en
vez del traqueteo haz un tono fijo y largocp.play_tone(1200, 0.6)como señal de
"¡encontrada!".
✅ Misión cumplida cuando…
- Con A la nave calibra (aprende el menor y el mayor nivel de luz de tu salón).
- Con B la nave busca: cambia de color por niveles y el pitido se acelera
con más luz. - La consola muestra los números en los dos modos, y la nave no titila quieta.
🏅 Insignia: "Sensores en línea".
Valentina Tech