Wearables e IoTTécnico

Gorra inteligente con mensajes LED que se desplazan

Cose una matriz LED flexible a una gorra y desplaza tus propios mensajes, cambiándolos con un botón escondido.

NivelTécnico
Tiempo2.5 h
Costo est.~$78
Pasos5

Una matriz WS2812 flexible de 16×16 se dobla alrededor del frente de una gorra. La librería de framebuffer de píxeles de CircuitPython te deja dibujar texto como en una pantalla diminuta, y una batería USB en el bolsillo la mantiene encendida por horas con brillo bajo.

⚠ SEGURIDAD
Mantén el brillo bajo: ahorra batería y es más cómodo para los ojos. Asegúrate de que la batería y los cables no se calienten contra tu cabeza, y no la uses mientras manejas.

Pasos de la misión

  1. Graba CircuitPython

    Instala CircuitPython para el Pico 2 W y copia neopixel.mpy, las librerías adafruit_pixel_framebuf y adafruit_framebuf y font5x8.bin a la unidad CIRCUITPY.

  2. Conecta la matriz

    DIN de la matriz a GP0, 5 V y GND directo del cable USB de la batería; comparte tierra con el Pico.

  3. Agrega el botón

    Pon un botón pequeño entre GP15 y GND, escondido bajo la visera.

  4. Escribe tus mensajes

    Edita la lista MESSAGES en code.py y guarda; la gorra se recarga al instante.

  5. Móntala

    Cose o pega con Velcro la matriz a la gorra y pasa el cable por detrás hasta tu bolsillo.

Código

# code.py (CircuitPython)
import board, neopixel, digitalio, time
from adafruit_pixel_framebuf import PixelFramebuffer

W, H = 16, 16
MESSAGES = ['HOLA!', 'MAKER', 'PI 4 LIFE']
pixels = neopixel.NeoPixel(board.GP0, W * H, brightness=0.08, auto_write=False)
fb = PixelFramebuffer(pixels, W, H, alternating=True)
btn = digitalio.DigitalInOut(board.GP15)
btn.switch_to_input(pull=digitalio.Pull.UP)
i = 0

while True:
    msg = MESSAGES[i]
    for x in range(W, -len(msg) * 6, -1):
        fb.fill(0)
        fb.text(msg, x, 4, 0x00A0FF)
        fb.display()
        time.sleep(0.06)
        if not btn.value:                 # pressed: next message
            i = (i + 1) % len(MESSAGES)
            time.sleep(0.3)
            break

Code comments are in English, like most libraries and docs — a good habit for makers.

Preguntas

El texto sale al revés o en zigzag.

Las matrices vienen cableadas distinto. Prueba alternating=False o reverse_x=True / reverse_y=True en PixelFramebuffer.