Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Cómo controlar los LED direccionables individualmente WS2812B usando Arduino

En este tutorial, aprenderemos a controlar LED RGB direccionables individualmente o una tira de LED WS2812B usando Arduino. Puede ver el siguiente video o leer el tutorial escrito a continuación para obtener más detalles.

Resumen

Primero explicaremos el principio de funcionamiento a través de algunos ejemplos básicos y luego echaremos un vistazo al proyecto Arduino realmente genial que usa estos LED, una mesa de café LED interactiva de bricolaje. La mesa de café cuenta con LED WS2812B, sensores de proximidad infrarrojos para detectar objetos y un módulo Bluetooth HC-05 para controlar los colores a través de una aplicación de Android personalizada. Este proyecto es en realidad una colaboración entre Marija y yo del canal de YouTube Creativity Hero.

Cómo funcionan los LED WS2812B

Comencemos por echar un vistazo más de cerca a la tira de LED. Consta de LED RGB tipo 5050 en los que está integrado el IC controlador de LED WS2812B muy compacto.

Dependiendo de la intensidad de los tres LED individuales rojo, verde y azul, podemos simular cualquier color que queramos.

Lo bueno de estos LED es que podemos controlar incluso toda la tira de LED con un solo pin de nuestra placa Arduino. Cada LED tiene tres conectores en cada extremo, dos para la alimentación y uno para los datos. La flecha indica la dirección del flujo de datos. El pad de salida de datos del LED anterior está conectado al pad de entrada de datos del siguiente LED. Podemos cortar la tira al tamaño que queramos, así como distanciar los leds mediante unos hilos.

En cuanto a la alimentación, funcionan con 5 V y cada LED rojo, verde y azul consume alrededor de 20 mA, o eso es un total de 60 mA para cada LED a pleno brillo. Tenga en cuenta que cuando el Arduino se alimenta a través del USB, el pin de 5 V solo puede manejar alrededor de 400 mA, y cuando se alimenta con el conector de alimentación de barril, el pin de 5 V puede manejar alrededor de 900 mA.

Si está usando más LED y la cantidad de corriente que consumirían excede los límites mencionados anteriormente, debe usar una fuente de alimentación de 5V separada. En tal caso, también necesita conectar las dos líneas de tierra entre sí. Además, se recomienda utilizar una resistencia de alrededor de 330 ohmios entre el Arduino y el pin de datos de la tira de LED para reducir el ruido en esa línea, así como un condensador de alrededor de 100 uF en los 5 V y tierra para suavizar la fuente de alimentación. .

Ejemplos de LED Arduino y WS2812B

Ejemplo 1

Ahora, como ejemplo, usaré una tira larga de 20 LED, conectada al Arduino a través de una resistencia de 330 ohmios y alimentada con una fuente de alimentación separada de 5V, tal como se explicó anteriormente. Para programar el Arduino, utilizaremos la librería FastLED. Esta es una biblioteca excelente y bien documentada que permite un fácil control de los LED WS2812B.

Puede obtener los componentes necesarios para este ejemplo en los siguientes enlaces:

  • Tira LED WS2812B  ………………….. 
  • Placa Arduino ………………………………
  • Fuente de alimentación de CC de 5 V y 6 A ……………… 

Aquí está el código fuente de Arduino para el primer ejemplo:

#include <FastLED.h>

#define LED_PIN     7
#define NUM_LEDS    20

CRGB leds[NUM_LEDS];

void setup() {

  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  
}

void loop() {
  
  leds[0] = CRGB(255, 0, 0);
  FastLED.show();
  delay(500);  
  leds[1] = CRGB(0, 255, 0);
  FastLED.show();
  delay(500);
  leds[2] = CRGB(0, 0, 255);
  FastLED.show();
  delay(500);
  leds[5] = CRGB(150, 0, 255);
  FastLED.show();
  delay(500);
  leds[9] = CRGB(255, 200, 20);
  FastLED.show();
  delay(500);
  leds[14] = CRGB(85, 60, 180);
  FastLED.show();
  delay(500);
  leds[19] = CRGB(50, 255, 20);
  FastLED.show();
  delay(500);
}Code language: Arduino (arduino)

Descripción:  Entonces, primero debemos incluir la biblioteca FastLED, definir el pin al que se conectan los datos de la tira de LED, definir la cantidad de LED y definir una matriz de tipo CRGB. Este tipo contiene los LED, con tres miembros de datos de un byte para cada uno de los tres canales de color rojo, verde y azul.

En la sección de configuración, solo necesitamos inicializar el FastLED con los parámetros definidos anteriormente. Ahora, en el bucle principal, podemos controlar nuestros LED como queramos. Usando la función CRGB podemos configurar cualquier LED a cualquier color usando tres parámetros de color rojo, verde y azul. Para que el cambio suceda en los LED, debemos llamar a la función FastLED.show().

Ejemplo 2

Usando algunos bucles "for" podemos hacer fácilmente algunas animaciones.

Aquí está el código fuente de Arduino para el segundo ejemplo:

#include <FastLED.h>

#define LED_PIN     7
#define NUM_LEDS    20

CRGB leds[NUM_LEDS];

void setup() {

  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);

}

void loop() {

  for (int i = 0; i <= 19; i++) {
    leds[i] = CRGB ( 0, 0, 255);
    FastLED.show();
    delay(40);
  }
  for (int i = 19; i >= 0; i--) {
    leds[i] = CRGB ( 255, 0, 0);
    FastLED.show();
    delay(40);
  }
}Code language: Arduino (arduino)

Aquí, el primer bucle "for" enciende los 20 LED en azul, desde el primero hasta el último LED con un retraso de 40 milisegundos. El siguiente bucle "for" vuelve a encender los 20 LED, pero esta vez en color rojo y en orden inverso, desde el último LED hasta el primero.

La biblioteca FastLED presenta muchas otras funciones que se pueden usar para crear animaciones y espectáculos de luces realmente interesantes, por lo que solo depende de su imaginación hacer que su próximo proyecto LED brille.

Mesa de centro LED interactiva con los LED WS2812B

Ahora echemos un vistazo al proyecto de mesa de café LED interactivo de bricolaje que mencioné al principio. Así que este fue un proyecto de colaboración conmigo y Marija de Creativity Hero.

Puede consultar el artículo de su sitio web donde explica todo el proceso de fabricación de la mesa, desde cortar y ensamblar la construcción de madera hasta soldar y conectar todas las partes electrónicas. Aquí explicaré cómo funciona la parte electrónica, cómo construir la aplicación Android personalizada y cómo programar la placa Arduino.

Aquí está el esquema completo del circuito de este proyecto.

Así, la mesa consta de 45 LED direccionables, 45 sensores de proximidad infrarrojos y un módulo Bluetooth HC-05, todos ellos conectados a una placa Arduino Mega. El circuito se alimenta con una fuente de alimentación de 5V 6A.

Puede obtener los componentes necesarios para este ejemplo en los siguientes enlaces:

  • Tira LED WS2812B  ………………….. 
  • Sensor de proximidad IR …………………… 
  • Módulo Bluetooth HC-05 …….…… 
  • Placa Arduino ………………………………
  • Fuente de alimentación de CC de 5 V y 6 A ……………… 

Relacionado: Cómo usar un LED RGB con Arduino | Tutoría

Códigos fuente

Aquí está el código Arduino para este proyecto y si excluimos la función de control de color de Bluetooth, podemos notar que el código es realmente muy simple.

#include "FastLED.h"

#define NUM_LEDS 45
#define LED_PIN 2
#define COLOR_ORDER GRB

CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds<WS2812, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.setBrightness(brightness);
  // Set the 45 proximity sensors pins as inputs, from digital pin 3 to pin 48
  for (int pinNo = 0 + 3; pinNo <= 45 + 3; pinNo++) {
    pinMode(pinNo, INPUT);
  }
}

void loop() {
  for (int pinNo = 0; pinNo <= NUM_LEDS-1; pinNo++) {
    leds[pinNo] = CRGB( 0, 255, 0);    // Set all 45 LEDs to green color 
    // If an object is detected on top of the particular sensor, turn on the particular led
    if ( digitalRead(pinNo + 3) == LOW ) {
      leds[pinNo] = CRGB( 0, 0, 255); // Set the reactive LED to bluee
    }
  }
  FastLED.show(); // Update the LEDs
  delay(20);
}Code language: Arduino (arduino)

Descripción: Primero, debemos definir los parámetros básicos como se explicó anteriormente y configurar los 45 pines de los sensores de proximidad como entradas.

En el ciclo principal, usando un solo ciclo "for", configuramos todos los LED en un color particular y también verificamos si el sensor de proximidad ha detectado un objeto. Si eso es cierto, o un estado lógico BAJO en este caso, el color reactivo en particular se establecerá en el LED en particular. Al final usando la función FastLED.show() actualizamos los colores de los LEDs.

Para incluir la función de control de color de Bluetooth, necesitamos agregar algunas líneas de código más y crear la aplicación de Android. Ya tengo tutoriales separados sobre cómo usar el módulo Bluetooth HC-05 con Arduino y cómo crear su propia aplicación de Android usando la aplicación en línea MIT App Inventor, por lo que siempre puede consultarlos para obtener más detalles.

Así es como funciona la aplicación de Android. Consiste en una imagen de paleta de colores desde donde podemos elegir colores, dos botones de verificación desde donde podemos seleccionar si el color elegido se aplicará a los LED reactivos o de fondo y un control deslizante para ajustar el brillo.

Si echamos un vistazo a los bloques de la aplicación, podemos ver lo que sucede cuando tocamos el lienzo donde se coloca la imagen de la paleta de colores. Usando los bloques .GetPixelColor obtenemos los valores rojo, verde y azul para el color seleccionado y usando el bloque Bluetooth SendText enviamos esta información al Arduino en forma de texto.

Dependiendo de la casilla de verificación seleccionada, enviamos un primer carácter o marcador diferente que ayuda cuando se recibe el texto en el Arduino. Lo mismo sucede cuando cambiamos la posición del control deslizante, se envía un valor de 10 a 100 al Arduino en forma de texto, con el marcador "3" al frente.

Puede descargar la aplicación de Android a continuación, así como el archivo del proyecto MIT App Inventor:

DIY_Reactive_LED_Table_Control

1 archivo(s) 0.00 KB Descargar

Archivo de proyecto de inventor de la aplicación MIT DIY_Reactive_LED_Table_Control

1 archivo(s) 208.06 KB Descargar

Aquí está el código de Arduino:

#include <SoftwareSerial.h>

#include "FastLED.h"

#define NUM_LEDS 45
#define LED_PIN 2
#define COLOR_ORDER GRB

CRGB leds[NUM_LEDS];

SoftwareSerial Bluetooth(53, 52); // Arduino(RX, TX) - Bluetooth (TX, RX)

// Initial background color 
int backR = 100;
int backG = 50;
int backB = 10;

// Initial reactive color 
int reactiveR = 10;
int reactiveG = 50;
int reactiveB = 100;

int brightness = 50; // Initial brightness

String dataIn = "";

void setup() {
  FastLED.addLeds<WS2812, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.setBrightness(brightness);
  Serial.begin(38400);
  Bluetooth.begin(38400); // Default baud rate of the Bluetooth module

  for (int pinNo = 0 + 3; pinNo <= 45 + 3; pinNo++) {
    pinMode(pinNo, INPUT);
  }
}

void loop() {
  if (Bluetooth.available() > 0) {
    dataIn = Bluetooth.readString();
    delay(20);
    if (dataIn.startsWith("1")) {
      delay(10);
      String stringR = dataIn.substring(dataIn.indexOf("R") + 1, dataIn.indexOf("G"));
      reactiveR = stringR.toInt();
      String stringG = dataIn.substring(dataIn.indexOf("G") + 1, dataIn.indexOf("B"));
      reactiveG = stringG.toInt();
      String stringB = dataIn.substring(dataIn.indexOf("B") + 1, dataIn.indexOf("E"));
      reactiveB = stringB.toInt();
    }
    else if (dataIn.startsWith("2")) {
      String stringR = dataIn.substring(dataIn.indexOf("R") + 1, dataIn.indexOf("G"));
      backR = stringR.toInt();
      String stringG = dataIn.substring(dataIn.indexOf("G") + 1, dataIn.indexOf("B"));
      backG = stringG.toInt();
      String stringB = dataIn.substring(dataIn.indexOf("B") + 1, dataIn.indexOf("E"));
      backB = stringB.toInt();
    }
    else if (dataIn.startsWith("3")) {
      String stringBrightness = dataIn.substring(dataIn.indexOf("3") + 1, dataIn.length());
      brightness = stringBrightness.toInt();
      FastLED.setBrightness(brightness);
    }
  }

  for (int pinNo = 0; pinNo <= NUM_LEDS-1; pinNo++) {
    leds[pinNo] = CRGB( backR, backG, backB);
    if ( digitalRead(pinNo + 3) == LOW ) {
      leds[pinNo] = CRGB( reactiveR, reactiveG, reactiveB);
    }
  }
  FastLED.show();
  delay(20);
}Code language: Arduino (arduino)

Descripción: Primero debemos definir la comunicación serial entre el Arduino y el módulo Bluetooth HC-05, o los pines a los que se conecta el módulo. En la sección de configuración, debemos establecer la velocidad en baudios a la que funciona este módulo. Luego, en el ciclo principal, usando la función Bluetooth.available(), verificamos si hay datos entrantes desde el teléfono inteligente. Si eso es cierto, usando la función Bluetooth.readString() recibimos los datos como una cadena. Luego, usando la función .startsWith(), verificamos el primer carácter o el marcador y de esa manera sabemos si queremos cambiar el color reactivo, el fondo o el brillo.

Usando la función .substring() extraemos los valores rojo, verde y azul del texto recibido y los convertimos en números enteros. Estos valores luego se usan en el bucle "for" a continuación, que establece el color y enciende los LED como se explicó anteriormente. De la misma manera ajustamos el brillo de los LEDs.

Así que eso es todo por este tutorial. No dude en hacer cualquier pregunta en la sección de comentarios a continuación.


Proceso de manufactura

  1. Cómo piratear mandos a distancia por infrarrojos
  2. Control remoto universal usando Arduino, 1Sheeld y Android
  3. Centro de control de Arduino
  4. Uso de IoT para controlar de forma remota un brazo robótico
  5. ¡Arduino con Bluetooth para controlar un LED!
  6. Controla Arduino Rover usando Firmata y el controlador Xbox One
  7. Cómo medir la masa de la Tierra usando Arduino
  8. Arduino Cuadrúpedo
  9. Control del brillo del LED usando Bolt y Arduino
  10. Control total de su televisor con Alexa y Arduino IoT Cloud
  11. Cómo hacer una brújula usando Arduino y Processing IDE