Найти в Дзене

Гирлянда на неопикселях

Привет! Сегодня мы посмотрим на умные светодиоды. Они же адресные светодиоды и они же неопиксели (NeoPixel). Они могут быть как в виде ленты, так и в виде, представленном на фото ниже.

Квадрат 8 на 8 светодиодов
Квадрат 8 на 8 светодиодов
Кольцо на 24 светодиода
Кольцо на 24 светодиода
Квадрат 4 на 4 светодиода
Квадрат 4 на 4 светодиода

Светодиоды обычно маркируются WS2812B.

Неопиксели в Тинкеркаде
Неопиксели в Тинкеркаде

Перейдем к самому проекту. Попробуем сделать радугу в Тинкеркаде. Там есть готовый набор и мы этим воспользуемся.

Стартовые наборы - Все
Стартовые наборы - Все
NeoPixel
NeoPixel

Перетащим NeoPixel на рабочее пространство. Код будет создан автоматически, но мы напишем свой.

В этом проекте нам потребуется подключить библиотеку Adafruit NeoPixel, которая применяется для управления адресной светодиодной лентой. Библиотеки нужны для упрощения как кода, так и программного подключения датчиков и модулей. Пока это выглядит сложно, но будем разбираться по порядку.

Наш код:

#include <Adafruit_NeoPixel.h> //подключение библиотеки
#define PIN 2 //пин, к которому подключена лента
#define NUMPIXELS 12 //количество светодиодов
int r=0;
int g=0;
int b=0;
//в следующей строке "передаем" значения библиотеке
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); //создаем переменную
pixels и передаем NUMPIXELS и PIN

void setup() {
pixels.begin(); //запускаем подключение
}

void loop() {
for (int color = 0; color < 8; color++) { //цикл смены цвета

switch(color){
case 0: r=255; g=0; b=0; break; //красный
case 1: r=255; g=125; b=0; break; //оранжевый
case 2: r=255; g=255; b=0; break; //желтый
case 3: r=0; g=255; b=0; break; //зеленый
case 4: r=0; g=255; b=255; break; //голубой
case 5: r=0; g=0; b=255; break; //синий
case 6: r=255; g=0; b=255; break; //фиолетовый
case 7: r=0; g=0; b=0; break; //выключить
}

for (int i = 0; i < NUMPIXELS; i++) { //цикл для неопикселей

pixels.setPixelColor(i, pixels.Color(r, g, b));

}

pixels.show();
delay(1000); //ждем секунду

}
}

В строке pixels.setPixelColor(i, pixels.Color(r, g, b)) мы передаем значение цвета для каждого светодиода (i от 0 до 23). Примерно так: "Нулевой, на тебе красный. Первый, а тебе... тоже красный" и так далее. RGB (аббревиатура английских слов red, green, blue — красный, зелёный, синий) - аддитивная цветовая модель, описывающая способ кодирования цвета для цветовоспроизведения с помощью трёх цветов, которые принято называть основными. Соответственно, r - это количество красного от 0 до 255, g - это количество зеленого от 0 до 255, b - это количество синего от 0 до 255.

pixels.show() - эту строчку можно воспринимать как "Выполни!" или "Покажи!". Когда мы раздали каждому светодиоду (Нулевому, Первому, Второму... Двадцать Четвертому) тот цвет, который хотим, мы говорим всем им: "Покажи!". Следует обратить внимание, что эта строчка у нас вынесена за цикл (for (int i = 0; i < NUMPIXELS; i++)), что означает, что лента будет окрашена в цвет вся целиком. Если мы добавим 2 строчки (pixels.show() и delay(1000)) в цикл, то мы увидим как каждый светодиод будет загораться нужным цветом.

Все светодиоды разом загораются красным
Все светодиоды разом загораются красным
Светодиоды загораются последовательно
Светодиоды загораются последовательно

В следующих статьях мы разберем код, который в проекте появляется по умолчанию (он немножко сложненький!), и соберем проект "в железе" (он ооочень яркий!).

Так выглядит проект "в железе"
Так выглядит проект "в железе"

До новых встреч!