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

Arduino и NeoPixel-оптопары: эффективное управление множеством реле

Компоненты и материалы

LED-лента WS2812B (NeoPixel) 5В, 300 LED/м, 5050 RGB (кусок на 10 LED, используются 4)×1
Резистор 27 кОм (для каждого LDR)×4
Фоторезистор (LDR) — 4 шт.×4
Релейный модуль 5В (4 канала или 4 отдельных)×4
Лампа 230В (для демонстрации)×1
Arduino UNO / NodeMCU ESP32 (любая Arduino-совместимая плата)×1

Инструменты

Программное обеспечение

О проекте

Проект посвящён управлению множеством реле (или других исполнительных механизмов) с одного выходного пина Arduino.

Решение подходит для типовых ситуаций, когда доступных выходных пинов Arduino недостаточно, а нужно управлять несколькими реле параллельно.

Принцип работы: используется LED-лента с NeoPixel (SMD5050 с контроллерами WS2812B). Каждый пиксель соединяется с фоторезистором (LDR), образуя самодельный оптопар. Таким образом создаётся преобразователь «последовательный в параллельный» (из 1 пина — во много).

Каждый отдельный LED адресуется с того же самого пина Arduino. Каждый LDR (в последовательном соединении с резистором 27 кОм) подключён к 5В реле. Таким образом множество комбинаций NeoPixel/LDR можно управлять с одного пина через библиотеку Adafruit NeoPixel. Вместо реле можно подключать другие исполнительные устройства, используя LDR как вход для любой схемы.

В проекте использован ESP32 (NodeMCU), но подойдёт и обычный Arduino Uno (или почти любая другая модель).

Шаг 1: Изготовление NeoPixel-оптопар

Материалы:

Arduino и NeoPixel-оптопары: эффективное управление множеством реле
Arduino и NeoPixel-оптопары: эффективное управление множеством реле

Важно: расстояние между точками совпадает с расстоянием между LED.

Критически важно изолировать свет каждого LED от чужих LDR, чтобы избежать «оптического переговора» (light cross-talk). На практике это почти невозможно полностью, поэтому яркость LED в состоянии «вкл» установлена программно на низкий уровень.

Arduino и NeoPixel-оптопары: эффективное управление множеством реле

Лента на 10 LED, но используется только 4 пикселя с 4 LDR (для простоты).

Шаг 2: Электронная схема

На макетной плате использован ESP32s (NodeMCU), но подойдёт любой Arduino.

Arduino и NeoPixel-оптопары: эффективное управление множеством реле
Arduino и NeoPixel-оптопары: эффективное управление множеством реле

Только 1 выходной пин управляет 4 реле параллельно. Это число может достигать 300! (столько LED в 5-метровой ленте).

ESP32 работает на 3,3 В (встроенный стабилизатор), а LED-лента 5050 — на 5 В. ESP32 питается от 5 В (USB от адаптера или пауэрбанка). NeoPixel получают 5 В прямо с пина 5V ESP32, реле тоже 5В. В примере 4 оптопары управляют 4 реле, каждое коммутирует лампу 230В.

Выходной пин — GPIO 21, реле управляются через пиксели 1, 2, 3, 4.

Шаг 3: Программное обеспечение

Функция loop() содержит несколько циклов for для демонстрации разных паттернов включения ламп через реле.

Для управления конкретным реле вызывается функция:

void ControlRelais(int RelaisNo, bool RelaisState) {
  strip.setPixelColor(RelaisNo, RelaisState*15, RelaisState*15, RelaisState*15);
  strip.show();
  Serial.print(" RelaisNo ");
  Serial.print(RelaisNo);
  Serial.print(" = ");
  Serial.println(RelaisState);
}

Функция просто включает или выключает конкретный LED. Номер LED соответствует номеру реле. LED светят на низком уровне — достаточно для срабатывания реле через LDR, и это исключает «оптический переговор».

Результат работы показан в видео.

Код

/* Управление множеством реле с одного пина Arduino через самодельные NeoPixel-оптопары
   Автор: Pierre Pennings (декабрь 2018)
   Лицензия: GPL3+ */
#include 
#define NUM_LEDS 10

const int RelaisPin = 21; // GPIO 21 для ESP32
int RelaisNo = 0;
bool RelaisState = false;
int r = 0;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, RelaisPin, NEO_RGB + NEO_KHZ800);

void setup() {
  Serial.begin(115200);
  pinMode(RelaisPin, OUTPUT);
  strip.begin();
  for (int t = 0; t < 10; t++) {
    strip.setPixelColor(t, 15, 15, 15); // тест всех LED при включении
    strip.show();
    delay(500);
    strip.setPixelColor(t, 0, 0, 0);
  }
}

void loop() {
  for (int r = 1; r < 5; r++) { // включение реле 1→4
    delay(500);
    ControlRelais(r, true);
    delay(500);
    ControlRelais(r, false);
  }
  for (int k = 4; k > 0; k--) { // включение реле 4→1
    delay(500);
    ControlRelais(k, true);
    delay(500);
    ControlRelais(k, false);
  }
  for (int r = 1; r < 5; r++) { // кросс-паттерны
    for (int k = 4; k > 0; k--) {
      delay(500);
      ControlRelais(r, true);
      ControlRelais(k, true);
      delay(500);
      ControlRelais(r, false);
      ControlRelais(k, false);
    }
  }
}

void ControlRelais(int RelaisNo, bool RelaisState) {
  strip.setPixelColor(RelaisNo, RelaisState*15, RelaisState*15, RelaisState*15);
  strip.show();
  Serial.print(" RelaisNo ");
  Serial.print(RelaisNo);
  Serial.print(" = ");
  Serial.println(RelaisState);
}

Схемы

Файл проекта Fritzing (neopixel_optocoupler_relais.fzz) доступен в разделе Schematics.

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

  1. Создание аудио-эффектов, управляемых датчиками, с набором Satellite CCRMA
  2. Панель управления полётным симулятором 2020 на Arduino Nano: LCD и CDI-дисплеи
  3. Панель переключателей и LED для Microsoft Flight Simulator 2020 на Arduino
  4. Интерактивный гироскопический LED-дисплей на NeoPixel Ring и Arduino
  5. Умные шторы: автоматическое управление светом на Arduino с солнечной энергией
  6. Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
  7. Простой ИК-датчик препятствий на Arduino: ИК-светодиод и фотодиод
  8. Управление Roomba Create 2 через Arduino и Android: пошаговое руководство
  9. Пошаговое руководство: сборка умного четырёхногого робота на Arduino
  10. Точное управление сервоприводом через MPU6050 (Arduino, SG90, MG996R)