Magos do Arduino

NeoPixels

Aprenda a utilizar NeoPixels com o Arduino

Magos do Arduino

NeoPixels

NeoPixels são LEDs RGB controlados por apenas uma conexão com um microcontrolador.

NeoPixel

Eles trabalham com dados seriais que devem ser enviados via microcontrolador no formato correto, controlando assim um ou mais NeoPixels.

Matriz NeoPixel de 16x16

Quando conectados em série ou matriz, eles formam uma cadeia de LEDs que podem ser controlados individualmente.

Controlar esses LEDs necessita de um driver, mas felizmente existem alguns já criados para Arduino, como o que utilizaremos e que pode ser encontrado em:

https://github.com/adafruit/Adafruit_NeoPixel

Matriz NeoPixel de 16x16

Neste projeto você criará um circuito que faz o uso uma matriz NeoPixel de 16x16 com o Arduino.

Para a criação deste circuito serão necessários os seguintes componentes:

  • 1x Arduino UNO
  • 1x Matriz de NeoPixels de 16x16
  • Jumpers

Circuito Matriz NeoPixel de 16x16

Para montar o circuito, visualize na imagem a seguir como conectar os componentes entre a placa Arduino e a breadboard.

Circuito Matriz NeoPixel de 16x16

Código fonte para o circuito da Matriz NeoPixel de 16x16

Uma vez criado o circuito, use o código fonte a seguir no Arduino IDE para fazer o upload dele na placa Arduino e assim ver o resultado do circuito em funcionamento.

/**
* Código do curso Magos do Arduino para utilizar uma matriz de LEDs RGB (NeoPixel) com o Arduino
* e exibir uma imagem em pixel art.
*
* (c) Copyright KazaleIT
* @kazaleitoficial no YouTube
**/

#include <Adafruit_NeoPixel.h>

#define PINO_DATA_LEDS 6 
#define NUMERO_PIXELS 256

#define PRETO pixels.Color(0, 0, 0)
#define LARANJA pixels.Color(255, 140, 0)
#define VERDE pixels.Color(0, 150, 0)
#define BRANCO pixels.Color(255, 255, 255)
#define ROXO pixels.Color(128, 0, 128)
#define AZUL pixels.Color(0, 0, 255)
#define VERMELHO pixels.Color(255, 0, 0)

Adafruit_NeoPixel pixels(NUMERO_PIXELS, PINO_DATA_LEDS, NEO_GRB + NEO_KHZ800);

void setup() {
    pixels.begin();
}

int imagemDragao[16][16] = {
    { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0 },
    { 0, 0, 0, 0, 0, 2, 2, 2, 2, 3, 3, 2, 3, 2, 0, 0 },
    { 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 0, 2, 0, 3, 0, 0 },
    { 0, 0, 0, 1, 2, 2, 2, 2, 3, 3, 0, 2, 0, 3, 0, 0 },
    { 0, 0, 0, 0, 2, 2, 2, 2, 3, 3, 0, 2, 0, 3, 2, 0 },
    { 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 0, 2, 0, 3, 2, 0 },
    { 0, 0, 0, 1, 2, 2, 2, 2, 2, 3, 3, 2, 3, 2, 2, 0 },
    { 0, 0, 0, 0, 2, 1, 2, 2, 0, 0, 0, 3, 0, 0, 0, 0 },
    { 0, 0, 0, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 0, 0 },
    { 2, 0, 0, 2, 1, 1, 1, 2, 2, 3, 3, 3, 3, 0, 0, 0 },
    { 2, 1, 1, 2, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 0, 0 },
    { 0, 2, 2, 2, 2, 2, 2, 1, 1, 3, 3, 3, 3, 3, 0, 0 },
    { 0, 0, 2, 2, 2, 2, 1, 1, 1, 1, 3, 3, 3, 1, 1, 1 }
};

int paletaCores[4][4] = {
    { PRETO, LARANJA, VERDE, BRANCO }, // 0,1,2,3
    { PRETO, ROXO, AZUL, BRANCO },
    { PRETO, VERMELHO, LARANJA, BRANCO },
    { PRETO, ROXO, VERMELHO, LARANJA }
};

void loop() {
    int indice = 0; // restaura o valor inicial dos leds/pixels
    int idxPaleta = random(4); // 0-3
    pixels.clear(); // define os leds como desligado
    pixels.setBrightness(10); // define a intensidade dos leds

    for (int i=0; i<16; i++) { // itera nas linhas da imagem
    if (i % 2 == 0) { // caso linha par itera do fim para o início
        for (int j=15; j>=0; j--) {
        int cor = imagemDragao[i][j];
        pixels.setPixelColor(indice++, paletaCores[idxPaleta][cor]);
        }

    } else { // ou do início da linha para o fim
        for (int j=0; j<16; j++) {
        int cor = imagemDragao[i][j];
        pixels.setPixelColor(indice++, paletaCores[idxPaleta][cor]);
        }
    }
    }

    pixels.show();
    delay(5000);
}