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.
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.
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
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.
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.
Agrega el botón
Pon un botón pequeño entre GP15 y GND, escondido bajo la visera.
Escribe tus mensajes
Edita la lista MESSAGES en code.py y guarda; la gorra se recarga al instante.
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)
breakCode 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.