A sua grande vantagem é a capacidade de podermos controlar um ou mais destes LED’s recorrendo a apenas um fio de sinal ou seja, com apenas 3 pinos sendo 2 da alimentação (+5V e GND) e um terceiro de comunicação (Din) podemos controlar um ou mais destes LED’s de forma autónoma, ou seja mesmo ligados em série podemos fazer com que cada um dos LED’s assuma uma cor ou estado distintos.
Este é hoje muito popular devido à sua grande facilidade de uso, brilho e efeitos que se conseguem gerar recorrendo uma biblioteca também muito popular escrita pela Adafruit.
A Adafruit - NeoPixel é uma biblioteca que nos permite controlar estes LED’s de uma forma muito simples, será esta que iremos utilizar nesta publicação.
Vamos agora demonstrar o
potencial destes LED’s, mas antes de começar vamos necessitar de fazer o download da biblioteca
Adafruit - NeoPixel, para isso basta acedermos ao Github da
Adafruit e realizar o download da versão mais recente desta biblioteca.
Montagem dos LED's
Antes de tudo temos de realizar ainda a montagem dos nossos LED’s, ou seja temos de ligar estes em série.
A forma de ligação do WS2812B é algo muito simples pois exige apenas 3 pinos “+5V”, “GND” e “Din” (entrada de sinal), e para se ligarem em série temos apenas que ligar a alimentação de todos em série e o pino Dout do primeiro LED ao pino Din do segundo LED e por ai em diante.
A forma de ligação do WS2812B é algo muito simples pois exige apenas 3 pinos “+5V”, “GND” e “Din” (entrada de sinal), e para se ligarem em série temos apenas que ligar a alimentação de todos em série e o pino Dout do primeiro LED ao pino Din do segundo LED e por ai em diante.
Mais à frente iremos ver como estes são ligados nos esquemas de montagem, mas aqui podemos ver uma sequência de imagem da forma como foram estes interligados em série.
Ensaios Práticos
Material necessário para a elaboração dos ensaios:
- 4 x LED’s WS2812B;
- Arduino Uno (ou outro);
- Breadboard;
- Vários jumpers (fios condutores para as ligações);
- Cabo USB;
- Computador com software do Arduino instalado;
Ensaio nº1
Para um primeiro ensaio iremos apenas trabalhar com um LED WS2812B, seguido o esquema abaixo representado.
Esquema
Para o ensaio, foi elaborado o seguinte esquemas de montagem, que ilustra a ligação de um LED ao nosso Arduino.
Para o ensaio, foi elaborado o seguinte esquemas de montagem, que ilustra a ligação de um LED ao nosso Arduino.
Atenção: A montagem dos componentes deve ser feita de acordo com o esquema.
Código desenvolvido e com o qual iremos programar o nosso arduino, este é o responsável pelo funcionamento do sistema de acordo com o pretendido.
/*----------------------------------------------*/
/* TecnoDomos 2018 */
/*----------------------------------------------*/
/* Teste LED - RGB WS2812B */
/* Ensaio nº1 */
/*----------------------------------------------*/
//includes
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
//Signal pin where we will connect the NeoPixels
#define PIN 8 //Signal pin
//Number of NeoPixels we have connected to the Arduino
#define NUMPIXELS 1 //Number of connected LED's
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int delayval = 333; //delay
void setup()
{
pixels.begin(); //Initializes the NeoPixel library
}
void loop()
{
/*For a set of NeoPixels the first NeoPixel is 0, second is 1,
all the way up to the count of pixels minus one*/
for(int i=0;i<NUMPIXELS;i++)
{
// pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
pixels.setPixelColor(i, pixels.Color(255,0,0)); //Red color.
pixels.show(); //Sends the updated pixel color to the hardware.
delay(delayval); //Delay for a period of time (in milliseconds).
pixels.setPixelColor(i, pixels.Color(0,255,0)); //Green color.
pixels.show(); //Sends the updated pixel color to the hardware.
delay(delayval); //Delay for a period of time (in milliseconds).
pixels.setPixelColor(i, pixels.Color(0,0,255)); //Blue color.
pixels.show(); //Sends the updated pixel color to the hardware.
delay(delayval); //Delay for a period of time (in milliseconds).
}
}
/* TecnoDomos 2018 */
/*----------------------------------------------*/
/* Teste LED - RGB WS2812B */
/* Ensaio nº1 */
/*----------------------------------------------*/
//includes
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
//Signal pin where we will connect the NeoPixels
#define PIN 8 //Signal pin
//Number of NeoPixels we have connected to the Arduino
#define NUMPIXELS 1 //Number of connected LED's
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int delayval = 333; //delay
void setup()
{
pixels.begin(); //Initializes the NeoPixel library
}
void loop()
{
/*For a set of NeoPixels the first NeoPixel is 0, second is 1,
all the way up to the count of pixels minus one*/
for(int i=0;i<NUMPIXELS;i++)
{
// pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
pixels.setPixelColor(i, pixels.Color(255,0,0)); //Red color.
pixels.show(); //Sends the updated pixel color to the hardware.
delay(delayval); //Delay for a period of time (in milliseconds).
pixels.setPixelColor(i, pixels.Color(0,255,0)); //Green color.
pixels.show(); //Sends the updated pixel color to the hardware.
delay(delayval); //Delay for a period of time (in milliseconds).
pixels.setPixelColor(i, pixels.Color(0,0,255)); //Blue color.
pixels.show(); //Sends the updated pixel color to the hardware.
delay(delayval); //Delay for a period of time (in milliseconds).
}
}
Resultado
Como podemos ver na seguinte imagem o resultado é a alternância entre as três cores vermelho, verde e azul (RGB).
Ensaio nº2
Para o segundo ensaio iremos agora trabalhar com quatro LED WS2812B, seguido o esquema abaixo representado.
Esquema
Para o ensaio, foi elaborado o seguinte esquemas de montagem, que ilustra a ligação dos quatro LED's ao nosso Arduino.
Para o ensaio, foi elaborado o seguinte esquemas de montagem, que ilustra a ligação dos quatro LED's ao nosso Arduino.
Atenção: A montagem dos componentes deve ser feita de acordo com o esquema.
Código FonteCódigo desenvolvido e com o qual iremos programar o nosso arduino, este é o responsável pelo funcionamento do sistema de acordo com o pretendido
/*----------------------------------------------*/
/* TecnoDomos 2018 */
/*----------------------------------------------*/
/* Teste LED - RGB WS2812B */
/* Ensaio nº2 */
/*----------------------------------------------*/
//includes
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
//Signal pin where we will connect the NeoPixels
#define PIN 8 //Signal pin
//Number of NeoPixels we have connected to the Arduino
#define NUMPIXELS 4 //Number of connected LED's
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int delayval = 555; //delay
int i = 0;
int j = 1;
int l = 2;
int k = 3;
void setup()
{
pixels.begin(); // This initializes the NeoPixel library.
}
void loop()
{
// pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
pixels.setPixelColor(i, pixels.Color(255,0,0)); //Red
pixels.setPixelColor(j, pixels.Color(0,255,0)); //Green
pixels.setPixelColor(l, pixels.Color(0,0,255)); //Blue
pixels.setPixelColor(k, pixels.Color(255,255,0)); //Yellow
pixels.show();
delay(delayval);
pixels.setPixelColor(i, pixels.Color(255,255,0)); //Yellow
pixels.setPixelColor(j, pixels.Color(255,0,0)); //Red
pixels.setPixelColor(l, pixels.Color(0,255,0)); //Green
pixels.setPixelColor(k, pixels.Color(0,0,255)); //Blue
pixels.show();
delay(delayval);
pixels.setPixelColor(i, pixels.Color(0,0,255)); //Blue
pixels.setPixelColor(j, pixels.Color(255,255,0)); //Yellow
pixels.setPixelColor(l, pixels.Color(255,0,0)); //Red
pixels.setPixelColor(k, pixels.Color(0,255,0)); //Green
pixels.show();
delay(delayval);
pixels.setPixelColor(i, pixels.Color(0,255,0)); //Green
pixels.setPixelColor(j, pixels.Color(0,0,255)); //Blue
pixels.setPixelColor(l, pixels.Color(255,255,0)); //Yellow
pixels.setPixelColor(k, pixels.Color(255,0,0)); //Red
pixels.show();
delay(delayval);
}
/* TecnoDomos 2018 */
/*----------------------------------------------*/
/* Teste LED - RGB WS2812B */
/* Ensaio nº2 */
/*----------------------------------------------*/
//includes
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
//Signal pin where we will connect the NeoPixels
#define PIN 8 //Signal pin
//Number of NeoPixels we have connected to the Arduino
#define NUMPIXELS 4 //Number of connected LED's
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int delayval = 555; //delay
int i = 0;
int j = 1;
int l = 2;
int k = 3;
void setup()
{
pixels.begin(); // This initializes the NeoPixel library.
}
void loop()
{
// pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
pixels.setPixelColor(i, pixels.Color(255,0,0)); //Red
pixels.setPixelColor(j, pixels.Color(0,255,0)); //Green
pixels.setPixelColor(l, pixels.Color(0,0,255)); //Blue
pixels.setPixelColor(k, pixels.Color(255,255,0)); //Yellow
pixels.show();
delay(delayval);
pixels.setPixelColor(i, pixels.Color(255,255,0)); //Yellow
pixels.setPixelColor(j, pixels.Color(255,0,0)); //Red
pixels.setPixelColor(l, pixels.Color(0,255,0)); //Green
pixels.setPixelColor(k, pixels.Color(0,0,255)); //Blue
pixels.show();
delay(delayval);
pixels.setPixelColor(i, pixels.Color(0,0,255)); //Blue
pixels.setPixelColor(j, pixels.Color(255,255,0)); //Yellow
pixels.setPixelColor(l, pixels.Color(255,0,0)); //Red
pixels.setPixelColor(k, pixels.Color(0,255,0)); //Green
pixels.show();
delay(delayval);
pixels.setPixelColor(i, pixels.Color(0,255,0)); //Green
pixels.setPixelColor(j, pixels.Color(0,0,255)); //Blue
pixels.setPixelColor(l, pixels.Color(255,255,0)); //Yellow
pixels.setPixelColor(k, pixels.Color(255,0,0)); //Red
pixels.show();
delay(delayval);
}
Resultado
Como podemos ver na seguinte imagem o resultado deste segundo ensaio passa por fazer piscar cada LED em quatro cores (vermelho, verde, azul e amarelo), alternado a caca 0,5 segundos dando a sensação que as cores estão "a correr" de um LED para o outro.
Nota: A imagem do LED WS2812B usado para a elaboração dos esquemas é diferente do que realmente utilizamos mas isto apenas se fica a dever ao componente disponibilizado na aplicação fritzing.
Vídeo
No seguinte video podemos ver alguns dos testes feitos com os LED's WS2812B, não sendo propriamente o video dos ensaios acima referidos mas outros.Links úteis
LED - RGB WS2812BConsiderações Finais
Tal como podemos verificar é muito fácil realizar montagens recorrendo ao LED WS2812B, pois é muito simples tanto ao nível das suas ligações como da sua utilização recorrendo à biblioteca Adafruit - NeoPixel.
Com o seu grande espectro de cores este permite criar efeitos muito interessantes com apenas um ou mais LED’s, este é um LED com grande potencialidade e que hoje apresenta um custo muito reduzido, sendo que em termos de custos beneficio este ganha sem dúvida a muitos dos outros LED's RGB que podemos encontrar no mercado.
Esperamos
que este artigo tenha sido útil e se gostaram comentem e partilhem.
Alguma dúvida ou questão deixem em comentário ou utilizem o formulário
de contatos.
Um bom dia em nome da TecnoDomos.
Um bom dia em nome da TecnoDomos.
Conteúdo redigido ao abrigo do novo Acordo Ortográfico.
Sem comentários:
Enviar um comentário