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

Как управлять светодиодами WS2812B с индивидуальной адресацией с помощью Arduino

<основной класс="главный сайт" id="главный">

В этом уроке мы узнаем, как управлять светодиодами RGB с индивидуальной адресацией или светодиодной лентой WS2812B с помощью Arduino. Вы можете посмотреть следующее видео или прочитать письменное руководство ниже для получения более подробной информации.

Обзор

Сначала мы объясним принцип работы на нескольких основных примерах, а затем взглянем на действительно классный проект Arduino, использующий эти светодиоды, — интерактивный журнальный столик со светодиодами, сделанный своими руками. Журнальный столик оснащен светодиодами WS2812B, инфракрасными датчиками приближения для обнаружения объектов и модулем Bluetooth HC-05 для управления цветами с помощью специального приложения для Android. Этот проект на самом деле является результатом сотрудничества между мной и Марией из YouTube-канала Creativity Hero.

Как работают светодиоды WS2812B

Начнем с более подробного рассмотрения светодиодной ленты. Он состоит из RGB-светодиодов типа 5050, в которые встроена очень компактная ИС драйвера светодиодов WS2812B.

В зависимости от интенсивности трех отдельных красных, зеленых и синих светодиодов мы можем имитировать любой желаемый цвет.

Что хорошего в этих светодиодах, так это то, что мы можем управлять даже всей светодиодной лентой с помощью всего одного контакта на нашей плате Arduino. Каждый светодиод имеет три разъема на каждом конце, два для питания и один для данных. Стрелка указывает направление потока данных. Контактная площадка вывода данных предыдущего светодиода подключена к контактной площадке ввода данных следующего светодиода. Мы можем отрезать полосу любого размера, а также развести светодиоды с помощью проводов.

Что касается питания, они работают от 5 В, и каждый красный, зеленый и синий светодиод потребляет около 20 мА, или всего 60 мА для каждого светодиода при полной яркости. Обратите внимание, что когда Arduino питается от USB, контакт 5 В может обрабатывать только около 400 мА, а при питании от цилиндрического разъема питания контакт 5 В может обрабатывать около 900 мА.

Если вы используете больше светодиодов и потребляемый ими ток превышает пределы, указанные выше, вы должны использовать отдельный источник питания 5 В. В таком случае вам также необходимо соединить две линии заземления друг с другом. Кроме того, рекомендуется использовать резистор около 330 Ом между Arduino и выводом данных светодиодной ленты, чтобы уменьшить шум в этой линии, а также конденсатор около 100 мкФ между 5 В и землей, чтобы сгладить источник питания. .

Примеры светодиодов Arduino и WS2812B

Пример 1

Теперь в качестве примера я буду использовать длинную ленту из 20 светодиодов, подключенную к Arduino через резистор 330 Ом и питаемую от отдельного источника питания 5 В, как описано выше. Для программирования Arduino мы будем использовать библиотеку FastLED. Это превосходная и хорошо документированная библиотека, позволяющая легко управлять светодиодами WS2812B.

Компоненты, необходимые для этого примера, можно получить по ссылкам ниже:

Вот исходный код Arduino для первого примера:

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

Описание:  Итак, сначала нам нужно включить библиотеку FastLED, определить пин, к которому подключены данные светодиодной ленты, определить количество светодиодов, а также определить массив типа CRGB. Этот тип содержит светодиоды с тремя однобайтовыми элементами данных для каждого из трех каналов красного, зеленого и синего цветов.

В разделе настройки нам просто нужно инициализировать FastLED с параметрами, определенными выше. Теперь это основной цикл, которым мы можем управлять нашими светодиодами так, как мы хотим. Используя функцию CRGB, мы можем настроить любой светодиод на любой цвет, используя три параметра красного, зеленого и синего цвета. Чтобы изменение произошло на светодиодах, нам нужно вызвать функцию FastLED.show().

Пример 2

Используя несколько циклов for, мы можем легко создать анимацию.

Вот исходный код Arduino для второго примера:

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

Здесь первый цикл for зажигает синим цветом все 20 светодиодов, от первого до последнего с задержкой в ​​40 миллисекунд. В следующем цикле for снова загораются все 20 светодиодов, но уже красным цветом и в обратном порядке, от последнего светодиода к первому.

В библиотеке FastLED есть много других функций, которые можно использовать для создания действительно интересных анимаций и световых шоу, так что только ваше воображение может сделать ваш следующий светодиодный проект сияющим.

Интерактивный кофейный столик со светодиодами на основе светодиодов WS2812B

Теперь давайте взглянем на проект интерактивного журнального столика со светодиодной подсветкой своими руками, о котором я упоминал в начале. Так что это был наш совместный проект с Марией из Creativity Hero.

Вы можете проверить ее статью на сайте, где она объясняет весь процесс изготовления стола, начиная с резки и сборки деревянной конструкции, заканчивая пайкой и соединением всех электронных частей вместе. Здесь я объясню, как работает электронная часть, как создать пользовательское приложение для Android и запрограммировать плату Arduino.

Вот полная принципиальная схема этого проекта.

Таким образом, таблица состоит из 45 адресуемых светодиодов, 45 инфракрасных датчиков приближения и модуля Bluetooth HC-05, все они подключены к плате Arduino Mega. Схема питается от блока питания 5В 6А.

Компоненты, необходимые для этого примера, можно получить по ссылкам ниже:

Связанный: Как использовать светодиод RGB с Arduino | Учебник

Исходные коды

Вот код 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);
  // 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)

Описание: Сначала нам нужно определить основные параметры, как объяснялось ранее, и установить 45 контактов датчиков приближения в качестве входных данных.

В основном цикле с помощью одного цикла «for» мы устанавливаем все светодиоды на определенный цвет, а также проверяем, обнаружил ли датчик приближения объект. Если это правда, или в данном случае логическое состояние LOW, конкретный реактивный цвет будет установлен для конкретного светодиода. В конце с помощью функции FastLED.show() мы обновляем цвета светодиодов.

Для включения функции управления цветом Bluetooth нам нужно добавить еще несколько строк кода, а также сделать приложение для Android. У меня уже есть отдельные руководства о том, как использовать Bluetooth-модуль HC-05 с Arduino и как создать собственное приложение для Android с помощью онлайн-приложения MIT App Inventor, так что вы всегда можете просмотреть их для получения дополнительной информации.

Вот как работает приложение для Android. Он состоит из изображения цветовой палитры, из которого мы можем выбрать цвета, двух кнопок проверки, из которых мы можем выбрать, будет ли выбранный цвет применяться к реактивным или фоновым светодиодам, и ползунка для регулировки яркости.

Если мы посмотрим на блоки приложения, мы увидим, что происходит, когда мы касаемся холста, на котором размещено изображение цветовой палитры. С помощью блоков .GetPixelColor мы получаем значения красного, зеленого и синего для выбранного цвета, а с помощью блока Bluetooth SendText мы отправляем эту информацию в Arduino в виде текста.

В зависимости от установленного флажка мы отправляем другой первый символ или маркер, который помогает при получении текста в Arduino. То же самое происходит, когда мы меняем положение ползунка, значение от 10 до 100 отправляется в Arduino в виде текста с маркером «3» впереди.

Вы можете скачать приложение для Android ниже, а также файл проекта MIT App Inventor:

DIY_Reactive_LED_Table_Control

1 файл(ы) 0,00 КБ Скачать

DIY_Reactive_LED_Table_Control Файл проекта MIT App Inventor

1 файл(ы) 208,06 КБ Скачать

Вот код 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)

Описание: Сначала нам нужно определить последовательную связь между Arduino и модулем Bluetooth HC-05 или контакты, к которым подключен модуль. В разделе настройки нам нужно установить скорость передачи данных, на которой работает этот модуль. Затем в основном цикле с помощью функции Bluetooth.available() мы проверяем, есть ли входящие данные со смартфона. Если это так, с помощью функции Bluetooth.readString() мы получаем данные в виде строки. Затем с помощью функции .startsWith() мы проверяем первый символ или маркер и таким образом знаем, хотим ли мы изменить реактивный цвет, фон или яркость.

С помощью функции .substring() мы извлекаем значения Red, Green и Blue из полученного текста и конвертируем их в целые числа. Эти значения затем используются в цикле «for», описанном ниже, который устанавливает цвет и зажигает светодиоды, как объяснялось ранее. Таким же образом настраиваем яркость светодиодов.

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


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

  1. Как взломать ИК-пульты
  2. Универсальный пульт дистанционного управления с использованием Arduino, 1Sheeld и Android
  3. Центр управления Arduino
  4. Использование Интернета вещей для удаленного управления манипулятором
  5. Arduino с Bluetooth для управления светодиодом!
  6. Управление Arduino Rover с помощью Firmata и контроллера Xbox One
  7. Как измерить массу Земли с помощью Arduino
  8. Четвероногий Arduino
  9. Управление яркостью светодиода с помощью Bolt и Arduino
  10. Как сделать компас с помощью Arduino и Processing IDE