Hacklab ASU logo Hacklab ASUHacer, reparar, aprender juntos
Proyectos

Cómo controlar una tira LED WS2812B con Arduino

Conectas la tira, cargas el ejemplo y los LED parpadean en colores aleatorios, o se encienden solo los tres primeros, o no pasa nada. Casi siempre el fallo no está en el código, sino en la alimentación o en la línea de datos.

Arduino Uno on a workbench connected to a glowing rainbow LED strip and a small power supply

Conectas la tira, cargas el ejemplo y los LED parpadean en colores aleatorios, o se encienden solo los tres primeros, o no pasa nada. Casi siempre el fallo no está en el código, sino en la alimentación o en la línea de datos.

En esta guía montamos una tira LED WS2812B con Arduino paso a paso: qué fuente necesitas, cómo cablearla para no quemar el primer LED, qué librería usar y cómo escribir tus primeros efectos. Lo probamos en el taller con una tira de 60 LED por metro y un Arduino Uno, pero sirve igual para un Nano.

Cada LED de una WS2812B lleva dentro un pequeño chip controlador. Eso significa que puedes elegir el color y el brillo de cada LED por separado usando un solo pin del Arduino. Los datos entran por un extremo, el primer LED se queda con su parte y pasa el resto al siguiente.

Las tiras se venden en densidades de 30, 60 y 144 LED por metro, y funcionan a 5 V. Un metro de 60 LED cuesta entre 6 y 12 euros, lo que las hace perfectas para lámparas, relojes, decoración del escritorio o efectos para un proyecto como nuestro reloj con Arduino y DS3231.

Material para montar la tira LED WS2812B con Arduino

  • Arduino Uno, Nano o compatible
  • Tira WS2812B de 5 V, en este ejemplo 1 metro con 60 LED
  • Fuente de alimentación de 5 V y al menos 3 A
  • Resistencia de 330 a 470 ohmios para la línea de datos
  • Condensador electrolítico de 1000 µF y 6,3 V o más
  • Cables, protoboard o regleta de bornes

Cuánta corriente necesita de verdad

Este es el punto que más proyectos estropea. Cada LED tiene tres diodos, rojo, verde y azul, y cada uno consume hasta 20 mA a pleno brillo. Un LED en blanco total puede pedir unos 60 mA.

Número de LEDConsumo máximo en blancoFuente recomendada
80,5 AUSB del Arduino, con brillo bajo
301,8 A5 V 2 A
603,6 A5 V 4 A
1448,6 A5 V 10 A con inyección de corriente

El puerto USB de un ordenador da unos 500 mA y el regulador del Arduino no está pensado para más. Nunca alimentes una tira de 60 LED desde el pin de 5 V del Arduino.

Conexión paso a paso

  1. Identifica la entrada. La tira tiene flechas impresas. Conecta siempre en el extremo donde empiezan las flechas, marcado DIN.
  2. Alimentación. Conecta el positivo de la fuente al pad de 5 V de la tira y el negativo al pad GND.
  3. Condensador. Coloca el condensador de 1000 µF entre 5 V y GND, justo en la entrada de la tira, respetando la polaridad. Absorbe el pico de corriente al encender la fuente.
  4. Tierra común. Une el GND de la fuente con un pin GND del Arduino. Sin esta tierra compartida, la señal de datos no tiene referencia y verás colores aleatorios.
  5. Línea de datos. Conecta el pin 6 del Arduino a DIN pasando por la resistencia de 330 a 470 ohmios. Colócala cerca de la tira, no cerca del Arduino.

Si vas a usar la tira en un sitio fijo, suelda los cables en lugar de usar los clips de presión. Los clips baratos fallan con la vibración y provocan parpadeos difíciles de diagnosticar.

El código: librería y primeros efectos

Las dos librerías más usadas son Adafruit NeoPixel y FastLED. Para empezar, recomendamos Adafruit NeoPixel porque su sintaxis es muy directa. Instálala desde el gestor de librerías del IDE de Arduino buscando "NeoPixel".

Configuración básica

En el programa defines tres cosas: el pin de datos, que es el 6, el número de LED, que es 60, y el tipo de tira, que para la WS2812B es NEO_GRB más NEO_KHZ800. En la función setup llamas a begin, ajustas el brillo con setBrightness y llamas a show para apagar todos los LED al arrancar.

Encender un color

Para pintar un LED usas setPixelColor con el número del LED, empezando en 0, y los valores de rojo, verde y azul entre 0 y 255. Nada cambia en la tira hasta que llamas a show. Un error muy común es llamar a show dentro de un bucle por cada LED, lo que hace que una animación de 60 LED vaya muy lenta. Pinta todos primero y llama a show una sola vez.

Un efecto arcoíris

El ejemplo "strandtest" que viene con la librería incluye un efecto arcoíris con la función ColorHSV. Cambiar el tono poco a poco en cada vuelta del bucle, por ejemplo sumando 256 cada 10 milisegundos, crea un degradado suave que recorre toda la tira.

No subas el brillo al máximo

Muchos tutoriales dejan setBrightness en 255 para que la tira luzca más en el vídeo. En el taller hacemos lo contrario y empezamos en 50 o 60, que es aproximadamente un 20 por ciento.

Hay tres razones. Primero, a corta distancia el ojo apenas distingue entre un 40 y un 100 por ciento de brillo, pero la fuente sí lo nota. Segundo, a pleno brillo la tira se calienta y el adhesivo de la parte trasera se despega con el tiempo, sobre todo si no está pegada a un perfil de aluminio. Tercero, una tira de 60 LED al 20 por ciento consume menos de 1 A, lo que permite usar una fuente más pequeña y barata. Si después de un rato te parece poco, súbelo de 20 en 20.

Problemas frecuentes y cómo resolverlos

  • Colores aleatorios o parpadeo: casi siempre falta la tierra común o la resistencia en la línea de datos.
  • Solo funciona el primer LED o ninguno: revisa que estés conectado a DIN y no a DOUT, y que el número de LED en el código sea correcto.
  • Los colores cambian hacia el final: el blanco se vuelve amarillento por caída de tensión. Inyecta 5 V también en el otro extremo de la tira.
  • Rojo y verde intercambiados: cambia NEO_GRB por NEO_RGB en la configuración.

Si quieres combinar la tira con un sensor, encaja muy bien con el sensor PIR con Arduino para encender una luz de pasillo al detectar movimiento, o con la estación meteorológica con ESP32 para mostrar la temperatura con colores.

Preguntas frecuentes

¿Se puede alimentar una tira WS2812B desde el Arduino?

Solo si son muy pocos LED, unos 8 como máximo, y con el brillo bajo. Para más, usa una fuente externa de 5 V y une su GND con el del Arduino. Así evitas dañar el regulador de la placa.

¿Qué diferencia hay entre WS2812B y WS2811?

La WS2812B lleva el chip dentro de cada LED y funciona a 5 V. La WS2811 usa un chip externo que suele controlar grupos de tres LED y muchas versiones trabajan a 12 V. Para control individual de cada LED, la WS2812B es la opción más sencilla.

¿Por qué mi tira LED WS2812B parpadea?

Lo más habitual es una tierra no compartida entre fuente y Arduino, la falta de resistencia en la línea de datos o una fuente demasiado débil. Comprueba primero la tierra común. Si la tira es larga, añade alimentación también en el extremo final.

LB
Lucía Benítez

Lucía empezó reparando radios viejas en la mesa de la cocina y hoy escribe sobre circuitos, Arduino y radiofrecuencia sin dar nada por sabido.

More posts by Lucía

More in Proyectos

01doorganico 084goad 3hot8 4465456 after5internprogram ahandfulofblessings ahmadpc ahomcybersecurity allodialresources annodex antiquesandperiodcollectibles aotc asianworldkashmir beedlectrics bloggertemplatefree bluefeatheragency bodyweightsolution campaign08blog carfixadvisor catstreetcollective cbstvsports cnfanspurchasing committeeof500yearsofdignityandresistance covertopsdjs cs-kaiyuangame cuestacomunicaciontotal cxoutlet dancebetgame deskgearhub destinyvillastay detectmagazine di33 diamondsteelbuildings donmo dyanadropship emarsysfinance emimattl escapechan eskitarih evautoplay everythingweddings-orlando farmzone feedviewerapp foxstudiosscratch gamevui123 gleasongrade greetingsday haskell iw-kaiyun jagoanproperti jilidskripsi joltbusinessfinance juegodepokergratis juegospucca kaeru-festival latestmehndidesigns lestanzediottaviano litemagazines localcommunityhero lustrsazan mariashebets menswheels newwebstechs1 nikkit ootheday oxigenvpn plurfitness prefetial probudgetcarpetcleaning psychicmrsmartin pyaten qvantor rejoignezlogis rexzbot riselayouts ruchin rwxqsgd5 sakaltime shibiaowang shop-bot skrtips strcoding tetapatrium topselller uneplanteartificielle vipertechcr webtech1223411 wo-kygaming yamaha-mekar yeknava yoybuysheets zenunwa yamaha-mekar jilidskripsi ankertoto ankertoto ankertoto ankertoto