Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Управление адресными светодиодами WS2812B на Arduino: от основ к интерактивному столу

Как работают WS2812B

Каждый светодиод 5050 содержит встроенный драйвер WS2812B. Три кристалла (R, G, B) дают любой цвет. Управление всей лентой — один пин Arduino. Питание 5 В, ~60 мА на светодиод при макс. яркости. Для длинных лент — отдельный 5 В источник, общий GND, резистор 330 Ом на линии данных, конденсатор 100 мкФ на питании.

Управление адресными светодиодами WS2812B на Arduino: от основ к интерактивному столу
Управление адресными светодиодами WS2812B на Arduino: от основ к интерактивному столу
Управление адресными светодиодами WS2812B на Arduino: от основ к интерактивному столу

Базовые примеры (библиотека FastLED)

Лента 20 светодиодов, питание 5 В 6 А, резистор 330 Ом.

Пример 1: поочерёдное зажигание

#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);
}

Пример 2: бегущая волна

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); }
}

FastLED предлагает множество эффектов — полет фантазии.

Проект: Интерактивный LED-кофейный стол

Коллаборация с Marija (Creativity Hero). 45 WS2812B, 45 ИК-датчиков приближённости, HC-05 Bluetooth, Arduino Mega, БП 5 В 6 А.

Управление адресными светодиодами WS2812B на Arduino: от основ к интерактивному столу
Управление адресными светодиодами WS2812B на Arduino: от основ к интерактивному столу

Код без Bluetooth (реакция на датчики)

#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);
  for (int pinNo=3; pinNo<=48; pinNo++) pinMode(pinNo, INPUT); // 45 датчиков
}
void loop() {
  for (int pinNo=0; pinNo<=NUM_LEDS-1; pinNo++) {
    leds[pinNo] = CRGB(0,255,0); // фон — зелёный
    if (digitalRead(pinNo+3) == LOW) // датчик сработал
      leds[pinNo] = CRGB(0,0,255); // реактивный — синий
  }
  FastLED.show(); delay(20);
}

Android-приложение (MIT App Inventor)

Палитра цветов, выбор «фон/реактив», слайдер яркости. При касании палитры отправляется строка вида 1R255G100B50E (маркер 1 — реактивный цвет). Слайдер шлёт 3<значение>.

Управление адресными светодиодами WS2812B на Arduino: от основ к интерактивному столу
Управление адресными светодиодами WS2812B на Arduino: от основ к интерактивному столу

Скачать APK и исходник проекта (.aia) можно по ссылкам в статье.

Код с Bluetooth

#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); // RX, TX

int backR=100, backG=50, backB=10;
int reactiveR=10, reactiveG=50, reactiveB=100;
int brightness=50;
String dataIn="";

void setup() {
  FastLED.addLeds<WS2812, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.setBrightness(brightness);
  Serial.begin(38400); Bluetooth.begin(38400);
  for (int pinNo=3; pinNo<=48; pinNo++) pinMode(pinNo, INPUT);
}
void loop() {
  if (Bluetooth.available() > 0) {
    dataIn = Bluetooth.readString(); delay(20);
    if (dataIn.startsWith("1")) { // реактивный цвет
      reactiveR = dataIn.substring(dataIn.indexOf("R")+1, dataIn.indexOf("G")).toInt();
      reactiveG = dataIn.substring(dataIn.indexOf("G")+1, dataIn.indexOf("B")).toInt();
      reactiveB = dataIn.substring(dataIn.indexOf("B")+1, dataIn.indexOf("E")).toInt();
    } else if (dataIn.startsWith("2")) { // фоновый цвет
      backR = dataIn.substring(dataIn.indexOf("R")+1, dataIn.indexOf("G")).toInt();
      backG = dataIn.substring(dataIn.indexOf("G")+1, dataIn.indexOf("B")).toInt();
      backB = dataIn.substring(dataIn.indexOf("B")+1, dataIn.indexOf("E")).toInt();
    } else if (dataIn.startsWith("3")) { // яркость
      brightness = dataIn.substring(dataIn.indexOf("3")+1, dataIn.length()).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);
}

Заключение

WS2812B открывают огромные возможности для световых инсталляций. FastLED упрощает программирование, а Bluetooth + кастомное приложение делают проект интерактивным. Все файлы для стола (код, приложение, схемы) доступны для скачивания.

Производственный процесс

  1. Создание универсального ИК-пульта на Arduino: пошаговое руководство
  2. Универсальный Android-пульт на Arduino, 1Sheeld и ИК-управлении
  3. Arduino Power Control Center: N-FET, P-FET, реле и RTC
  4. Удаленное IoT-управление самодельной манипулятором
  5. Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
  6. Управление Arduino-роботом через Firmata и геймпад Xbox One
  7. Измерение массы Земли с Arduino: пошаговое руководство по DIY
  8. Пошаговое руководство: сборка умного четырёхногого робота на Arduino
  9. Бесшовное управление яркостью светодиодов с помощью Bolt IoT и Arduino UNO
  10. Цифровой компас в реальном времени на Arduino и Processing