Algo golpeó a la nave: la Astra-7 tembló entera ahí en el fondo del océano de K-342, y el
casco quedó dañado. En la computadora tienes la consola de daños: una pantalla con
el modelo 3D de la nave que se puede girar para revisarla por todos lados… pero el
impacto dejó los mandos bloqueados.
Aquí entra tu placa. Vas a convertir tu Circuit Playground en el mando de la nave: lo
inclinas y el modelo 3D gira en la pantalla. ¿El truco? Programarás el CPX para que
se haga pasar por un teclado y "teclee" las flechas él solito según cómo lo muevas.
🎯 Tu misión
Programar el CPX para que, al inclinarlo, envíe las flechas del teclado (← → ↑ ↓) y
así gire el modelo 3D de la nave para inspeccionar los daños.
🎮 Esto es de verdad: los controles de videojuegos, los volantes de carreras y los
mandos que ayudan a personas con discapacidad son placas como la tuya que fingen ser un
teclado o un ratón. A esto se le llama HID (dispositivo de interfaz humana). Hoy tu
CPX se une al club.
📦 Antes de empezar (una sola vez): para que el CPX pueda "teclear", necesita la carpeta
adafruit_hiddentro delib/en tu CIRCUITPY. Tu instructor/a seguramente ya la
copió; si no, se saca del bundle de CircuitPython. Sin esa carpeta, el programa marcará
error al arrancar.
🧠 La idea (usa lo del Lab 5)
Esto es puro acelerómetro, el sensor del Lab 5:
- Con el CPX plano sobre la mesa, los ejes
xyyvalen casi 0 (la gravedad se va
toda al ejez). Esa es su posición de reposo. - Al inclinarlo, uno de esos números crece. Si pasa cierto umbral, apretamos la
flecha de ese lado; cuando lo enderezas, la soltamos.
La traducción es directa:
inclina a la DERECHA → flecha DERECHA (la nave gira)
inclina a la IZQUIERDA → flecha IZQUIERDA (la nave gira)
inclina al FRENTE → flecha ARRIBA (levanta el morro)
inclina hacia TI → flecha ABAJO (baja el morro)
💻 El programa completo
Es cortito y sin funciones. Cópialo tal cual; abajo lo explicamos.
import time
from adafruit_circuitplayground import cp
import usb_hid
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keycode import Keycode
teclado = Keyboard(usb_hid.devices)
UMBRAL = 3 # cuánto hay que inclinar (más alto = menos sensible)
tecla = None # flecha que está apretada ahora
while True:
x, y, z = cp.acceleration
nueva = None
if x > UMBRAL:
nueva = Keycode.RIGHT_ARROW
elif x < -UMBRAL:
nueva = Keycode.LEFT_ARROW
elif y > UMBRAL:
nueva = Keycode.DOWN_ARROW
elif y < -UMBRAL:
nueva = Keycode.UP_ARROW
if nueva != tecla: # solo si cambió
teclado.release_all()
if nueva is not None:
teclado.press(nueva)
tecla = nueva
time.sleep(0.05)
Cómo lo lee el programa:
teclado = Keyboard(...)convierte al CPX en un teclado.- Cada vuelta lee
x, y, ze decide qué flecha toca (o ninguna) según la inclinación. teclarecuerda qué flecha está apretada. Solo tocamos el teclado cuando cambia
(nueva != tecla): así la flecha se mantiene apretada y la nave gira suave, sin
brincos.
🎮 Pruébalo con la nave (paso a paso)
- Carga tu programa en el CPX: guárdalo como
code.pyen el CIRCUITPY. - En la computadora, abre la consola de daños: doble clic en
nave.bat(opython nave.py). Verás la nave en 3D. - Haz clic en la ventana de la nave para que reciba las teclas.
- Deja el CPX plano sobre la mesa (su reposo) y luego inclínalo despacio: la nave
debe girar hacia el lado que lo ladeas. - ¿Una flecha sale al revés? Cambia
RIGHT_ARROWporLEFT_ARROW(oUPporDOWN)
en esa línea. - Inspecciona: gira la nave por todos lados y busca las zonas dañadas (manchas de
rojo oscuro sobre el casco). Márcalas en tu hoja de "Reporte de Daños" conforme las
vayas encontrando. ¿Cuántas descubres?
⚠️ ¿La nave gira sola? Seguramente el CPX no estaba plano al arrancar (o la mesa
está inclinada). Ponlo bien plano y vuelve a intentar.
🎚️ Ajusta la sensibilidad
La sensibilidad la decides tú con UMBRAL:
- ¿Tienes que inclinar demasiado para que gire? Baja el
UMBRAL(por ejemplo a2). - ¿Gira con cualquier temblorcito? Súbelo (por ejemplo a
5).
🌟 Si quieres ir más allá (reto opcional)
- Freno de emergencia: haz que, al apretar el botón A, se suelten todas las flechas
para parar la nave en seco. Pista: al inicio del bucle,if cp.button_a:→teclado.release_all()ytecla = None.
✅ Misión cumplida cuando…
- Tu
code.pyarranca sin error (con la carpetaadafruit_hiden su lugar). - Al inclinar el CPX, la nave de la consola gira en esa dirección (las 4 flechas).
- Con el mando, encuentras las zonas dañadas girando el modelo 3D y las marcas en tu
hoja de Reporte de Daños.
🏅 Insignia: "Piloto de inclinación".
Valentina Tech