4.01.8. Лабораторная работа №4.1.8.md


Адресная светодиодная матрица

Тема работы

Мы уже умеем управлять обычными и RGB-светодиодами. Но если мы хотим создать бегущую строку или анимированное изображение, нам понадобится много светодиодов, и для каждого потребуется свой пин. Или нет? В этой лабораторной работе мы познакомимся с адресными светодиодами и матрицей 8x8 на их основе. Мы научимся управлять каждым из 64 светодиодов индивидуально, используя всего один пин Рудирона, и выведем на матрицу флаг России.

Цель

  • Понять принцип работы адресных светодиодов и матриц.
  • Научиться работать с библиотекой Rudiron_NeoPixel для управления адресными устройствами.
  • Понять, как задавать цвет каждого пикселя и обновлять изображение на матрице.
  • Создать эффектный проект с выводом статического изображения.

Оборудование и материалы

  • Отладочная плата Рудирон.
  • Макетная плата.
  • Адресная светодиодная матрица 8x8.
  • Соединительные провода.
  • USB-кабель для подключения Рудирона.
  • Компьютер с Arduino IDE и установленной библиотекой Rudiron_NeoPixel.

Ход работы

  1. Как работают адресные светодиоды?

    Секрет адресных светодиодов (самые популярные — WS2812B или NeoPixel) в том, что каждый из них — это не просто RGB-светодиод, а маленькая система со встроенным микроконтроллером!

    • Последовательное соединение. Все светодиоды в матрице или ленте соединены в одну длинную цепочку. У каждого есть вход (DIN) и выход (DOUT). Сигнал от Рудирона приходит на вход первого светодиода, а выход первого соединён со входом второго, и так далее.
    • Протокол одного провода. Рудирон по одному проводу отправляет длинный «поезд» данных. В этом поезде — «вагоны» для каждого светодиода. В каждом «вагоне» лежит информация о цвете (24 бита: 8 на красный, 8 на зелёный, 8 на синий).
    • Адресация. Первый светодиод в цепочке «отцепляет» от поезда первый вагон, забирает из него свой цвет и зажигает свои кристаллы. Оставшийся поезд он передаёт дальше, на выход (DOUT). Второй светодиод забирает следующий вагон, и так до конца цепочки.

    Этот умный механизм позволяет управлять сотнями светодиодов, используя всего один пин микроконтроллера!

  2. Матрица 8x8 - подключение «змейкой»

    В матрице 64 светодиода расположены в виде сетки 8x8. Но для контроллера это всё та же одна длинная лента из 64 светодиодов. Они подключены «змейкой»: первая строка идёт слева направо (пиксели 0-7), вторая — справа налево (пиксели 8-15), третья — снова слева направо, и так далее. Это важно учитывать при программировании координат.

  3. Сборка схемы и установка библиотеки

    • Скачайте и установите библиотеку Rudiron_NeoPixel из репозитория: Rudiron Libraries.
    • Подключите матрицу:
      • 5V матрицы — к пину 5V Рудирона.
      • GND матрицы — к пину GND Рудирона.
      • DIN (вход данных) матрицы — к пину 2 Рудирона.
  4. Написание и загрузка кода

    Напишем программу, которая нарисует на матрице флаг России.

    • Установите перемычку PRG | RUN в положение PRG.
    • В Arduino IDE введите следующий код:

      #include <Rudiron_NeoPixel.h>
      
      #define PIN        2  // Пин, к которому подключена матрица
      #define NUMPIXELS 64 // Общее количество светодиодов (8x8)
      
      // Создаём объект для управления матрицей
      Rudiron_NeoPixel pixels;
      
      void setup() {
        // Инициализируем матрицу
        pixels.attach(PIN, NUMPIXELS);
      }
      
      void loop() {
        // Рисуем флаг России
      
        // Белая полоса (верхние 2 или 3 строки)
        for (int i = 0; i < 24; i++) {
        pixels.setPixelColor(i, pixels.Color(150, 150, 150)); // Неяркий белый
        }
      
        // Синяя полоса (средние 2 или 3 строки)
        for (int i = 24; i < 40; i++) {
        pixels.setPixelColor(i, pixels.Color(0, 0, 255));
        }
      
        // Красная полоса (нижние 2 или 3 строки)
        for (int i = 40; i < NUMPIXELS; i++) {
        pixels.setPixelColor(i, pixels.Color(255, 0, 0));
        }
      
        // ОБЯЗАТЕЛЬНО! Отправляем данные на матрицу, чтобы она обновилась
        pixels.show();
      
        // Больше ничего не делаем, флаг будет гореть постоянно
        while(true); 
      }
      
    • Нажмите кнопку «Upload», чтобы загрузить код на плату.
  5. Проверка работы

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

Результаты

Вы успешно взяли под контроль целую матрицу из 64-х RGB-светодиодов, используя всего один пин Рудирона! Вы научились программно задавать цвет каждому пикселю и выводить статичное изображение.

Анализ результатов

  • pixels.attach(PIN, NUMPIXELS). Инициализирует библиотеку, сообщая ей, на каком пине находятся светодиоды и сколько их всего в цепочке.
  • pixels.setPixelColor(n, color). Устанавливает цвет для светодиода с номером n. Важно, что в этот момент сам светодиод ещё не меняет цвет. Команда лишь записывает информацию в буфер в памяти микроконтроллера.
  • pixels.Color(r, g, b). Удобная функция для создания 24-битного значения цвета из трёх компонент.
  • pixels.show(). Это самая главная команда. Именно она отправляет весь «поезд» данных из буфера на матрицу, заставляя все светодиоды обновить свой цвет одновременно.

Выводы

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

Вопросы для самопроверки

  1. В чём главное преимущество адресных светодиодов перед обычными?
  2. Объясните своими словами, что такое «змеевидное» подключение в матрице.
  3. Какая команда физически отправляет данные на матрицу и заставляет её обновиться?
  4. Что произойдёт, если убрать команду pixels.show() из кода?
  5. Как изменить код, чтобы нарисовать флаг Беларуси?

Вы научились рисовать светом!