RGB светодиод, i2c (Metro-модуль)

Общие сведения:

Модуль Metro - RGB светодиод - является цветным светодиодом с подключением по шине I2C.

К одной шине I2C можно подключить более 100 модулей.

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

Видео:

Редактируется...

Спецификация:

  • Напряжение питания: 5 В (постоянного тока)
  • Потребляемый ток: до 20 мА.
  • Угол свечения: 120°.
  • Световой поток: до 7 лм.
  • Длина волны: «R» 625-630 нм, «G» 525-530 нм, «B» 465-470 нм.
  • Разрядность ШИМ: 8 бит (для каждого цвета).
  • Интерфейс: I2C.
  • Скорость шины I2C: 100 кбит/с.
  • Адрес на шине I2C: устанавливается программно (по умолчанию 0x09).
  • Уровень логической 1 на линиях шины I2C: 3,3 В (толерантны к 5 В).
  • Уровень логической 1 на выводах ADR: 3,3 В (толерантны к 5 В).
  • Рабочая температура: от -40 до +65 °C.
  • Габариты: 35,56 х 25,40 мм (1400 x 1000 mil).
  • Вес: 4 г.

Подключение:

У модуля имеются две колодки выводов: IN (вход) - штыревой разъем и OUT (выход) гнездовой разъем. Все модули подключаются друг к другу соединяя выход предыдущего модуля со входом следующего, образуя состав из модулей Metro в котором первым «вагоном» является плата управления Metro Leonardo или Metro ESP.

Подключение к управляющей плате Metro Leonardo:

К плате Metro Leonardo можно подключить только RGB светодиоды, или чередовать их с другими модулями Metro в любой последовательности.

Подключение к управляющей плате Metro ESP:

К плате Metro ESP можно подключить только RGB светодиоды, или чередовать их с другими модулями Metro в любой последовательности.

Модуль не поддерживает горячее подключение: Подключайте модуль только при отсутствии питания и данных на шине I2C. В противном случае потребуется отключить питание при уже подключённом модуле.

Вместо платы управления Metro Leonardo или Metro ESP можно использовать платы Arduino или Piranha, у которых будут задействованы 2 вывода шины I2C (SCL и SDA), 2 вывода питания (5V и GND) и один вывод установки адреса ADR, по умолчанию используется вывод D12 (можно менять в скетче).

Питание:

Входное напряжение питания 5 В постоянного тока, подаётся на выводы 5V и GND модуля.

Модуль сохраняет работоспособность при снижении напряжения питания до 3,3 В, при незначительном снижении яркости светодиода, и сдвиге цветового спектра в сторону красного.

Подробнее о модуле:

Модуль Metro - RGB светодиод построен на базе микроконтроллера STM32F030F4 и снабжен собственный стабилизатором напряжения. Модуль управляет яркостью каждого канала цвета (красный, зелёный, синий) при помощи сигналов ШИМ. Смешиваясь, указанные цвета могут создать любой цвет и оттенок с заданной яркостью.

Модуль позволяет:

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

Специально для работы с модулями Metro нами разработана библиотека iarduino_Metro, одна библиотека для всех модулей линейки Metro. Библиотека сама определяет наличие и тип модулей на шине I2C, присваивает им адреса и создаёт массив объектов для работы с найденными модулями. Стоит отметить что пользователю даже не обязательно знать адреса присвоенные модулям, так как для обращения к любому модулю достаточно знать его номер по порядку от платы управления Metro Leonardo или Metro ESP.

    Количество элементов массива Metro совпадает с количеством найденных модулей:
  • Metro[0] - объект для управления первым модулем (ближайшим к управляющей плате);
  • Metro[1] - объект для управления вторым модулем (следующим после первого);
  • Metro[2] - объект для управления третьим модулем (и т.д. до последнего модуля).

Подробнее про установку библиотеки читайте в нашей инструкции.

Примеры:

Включение и выключение светодиода без указания цвета:

#include <Wire.h>                            // Подключаем библиотеку Wire.
#include <iarduino_Metro.h>                  // Подключаем библиотеку iarduino_Metro.
                                             //
void setup(){                                //
    iarduino_Metro_Start();                  // Определяем подключённые модули.
}                                            //
                                             //
void loop(){                                 //
    Metro[0].on();  delay(3000);             // Включаем  светодиод и ждём 3 секунды.
    Metro[0].off(); delay(1000);             // Выключаем светодиод и ждём 1 секунду.
}                                            //

В данном примере светодиод будет включаться белым цветом (используется по умолчанию) а через 3 секунды выключаться на 1 секунду.

Включение и выключение светодиода с указанием цвета:

#include <Wire.h>                            // Подключаем библиотеку Wire.
#include <iarduino_Metro.h>                  // Подключаем библиотеку iarduino_Metro.
                                             //
void setup(){                                //
    iarduino_Metro_Start();                  // Определяем подключённые модули.
}                                            //
                                             //
void loop(){                                 //
    Metro[0].on(0xff0000); delay(3000);      // Включаем  светодиод красным   цветом и ждём 3 секунды.
    Metro[0].on(0x00ff00); delay(3000);      // Включаем  светодиод зелёным   цветом и ждём 3 секунды.
    Metro[0].on(0x0000ff); delay(3000);      // Включаем  светодиод синим     цветом и ждём 3 секунды.
    Metro[0].on(0xffff00); delay(3000);      // Включаем  светодиод жёлтым    цветом и ждём 3 секунды.
    Metro[0].on(0xff7f00); delay(3000);      // Включаем  светодиод оранжевым цветом и ждём 3 секунды.
    Metro[0].off();        delay(1000);      // Выключаем светодиод                  и ждём 1 секунду.
}                                            //

В данном примере светодиод включается указанными цветами.

Включение светодиода указанным цветом на указанное время:

#include <Wire.h>                            // Подключаем библиотеку Wire.
#include <iarduino_Metro.h>                  // Подключаем библиотеку iarduino_Metro.
                                             //
void setup(){                                //
    iarduino_Metro_Start();                  // Определяем подключённые модули.
}                                            //
                                             //
void loop(){                                 //
    Metro[0].on(0xff0000,2000); delay(3000); // Включаем светодиод красным цветом на 2 секунды и ждём 3 секунды.
    Metro[0].on(0x00ff00,2000); delay(3000); // Включаем светодиод зелёным цветом на 2 секунды и ждём 3 секунды.
}                                            //

В данном примере функция on() вызывается с двумя параметрами, где первый определяет цвет светодиода, а второй длительность его свечения. Так как после каждого включения светодиода выдерживается пауза в 3 секунды (delay(3000);), значит светодиод будет включаться на 2 секунды и выключаться на 1 секунду.

Непрерывное мигание светодиодом:

#include <Wire.h>                            // Подключаем библиотеку Wire.
#include <iarduino_Metro.h>                  // Подключаем библиотеку iarduino_Metro.
                                             //
void setup(){                                //
    iarduino_Metro_Start();                  // Определяем подключённые модули.
    Metro[0].on(0x0000ff, 2000, 1000);       // Светодиод постоянно включается синим цветом на 2 секунды и выключается на 1 секунду.
}                                            //
                                             //
void loop(){                                 //
}                                            //

В данном примере функция on() вызывается с тремя параметрами, где первый определяет цвет светодиода, второй длительность его свечения, а третий длительность его выключения. Не смотря на то, что команда отправляется модулю всего один раз (в коде setup), светодиод будет мигать постоянно и самостоятельно.

Мигание светодиодом указанное количество раз (вариант 1):

#include <Wire.h>                            // Подключаем библиотеку Wire.
#include <iarduino_Metro.h>                  // Подключаем библиотеку iarduino_Metro.
                                             //
void setup(){                                //
    iarduino_Metro_Start();                  // Определяем подключённые модули.
}                                            //
                                             //
void loop(){                                 //
    Metro[0].on(0xff00ff, 100, 200, 3);      // Светодиод трижды мигает фиолетовым цветом, включаясь на 100 мс и выключаясь на 200 мс.
    delay(2000);                             // Ждём 2 секунды.
}                                            //

В данном примере функция on() вызывается с четырьмя параметрами, где первый определяет цвет светодиода, второй длительность свечения, третий длительность выключения, а четвертый параметр задаёт количество повторов. Так как функция on() вызывается в коде loop, то светодиод трижды мигнёт фиолетовым цветом (затратив на это 900 мс), далее пройдёт оставшаяся часть ожидания 1,1 сек, после чего всё повторится...

Мигание светодиодом указанное количество раз (вариант 2):

#include <Wire.h>                            // Подключаем библиотеку Wire.
#include <iarduino_Metro.h>                  // Подключаем библиотеку iarduino_Metro.
                                             //
void setup(){                                //
    iarduino_Metro_Start();                  // Определяем подключённые модули.
}                                            //
                                             //
void loop(){                                 //
    Metro[0].on(RGB(255,0,255), 100, 200, 3);// Светодиод трижды мигает фиолетовым цветом, включаясь на 100 мс и выключаясь на 200 мс.
    delay(2000);                             // Ждём 2 секунды.
}                                            //

Данный скетч выполняется так же как и предыдущий. Отличие заключается лишь в способе указания цвета. Здесь так же указан фиолетовый цвет, но он задан не одним шестнадцатеричным числом, а через дополнительную функцию RGB( красный , зелёный , синий ). В качестве аргументов функции RGB() указывается яркость красного, зелёного и синего канала цвета, как целые числа от 0 до 255. Данный способ задания цвета можно применить и ко всем предыдущим примерам.

Функция автоперелива цвета:

#include <Wire.h>                            // Подключаем библиотеку Wire.
#include <iarduino_Metro.h>                  // Подключаем библиотеку iarduino_Metro.
                                             //
void setup(){                                //
    iarduino_Metro_Start();                  // Определяем подключённые модули.
    Metro[0].on( RGB(1) );                   // Светодиод запустит встроенную функцию автоперелива №1.
}                                            //
                                             //
void loop(){                                 //
}                                            //

Если в качестве первого параметра функции on() указана функция RGB() с одним параметром в виде целого числа, то такая конструкция не включает цвет, а запускает автоперелив. В памяти модуля есть несколько разных функций автоперелива, их номер и указывается функцией RGB(). Не смотря на то, что команда отправляется модулю всего один раз (в коде setup), светодиод запустит функцию автоперелива и будет выполнять её постоянно.

Описание функций библиотеки:

В данном разделе описаны функции библиотеки iarduino_Metro для работы с RGB светодиодом, при работе с другими модулями те же функции могут иметь другое назначение.

Подключение библиотеки:

#include <Wire.h>           // Подключаем библиотеку Wire. Для работы с Arduino, Piranha или Metro Leonardo, библиотеку Wire можно не подключать.
#include <iarduino_Metro.h> // Подключаем библиотеку iarduino_Metro.

После подключения библиотеки iarduino_Metro создавать объекты не требуется, вместо этого необходимо однократно вызвать функцию iarduino_Metro_Start(); в коде setup. Эта функция обнаружит все модули Metro, назначит им адреса на шине I2C и создаст массив объектов Metro, количество элементов которого будет совпадать с количеством найденных модулей Metro.

Определение подключённых модулей Metro:

iarduino_Metro_Start();     // В качестве аргумента функции можно указать вывод Arduino к которому подключен вход ADR модуля Metro (по умолчанию используется вывод D12).

Определение подключённых модулей Metro с возвращением их количества:

i = iarduino_Metro_Start(); // Определить все модули и записать их количество в переменную i.

После определения подключенных модулей станет доступен массив Metro, каждый элемент которого является объектом подключенного модуля Metro и предназначен для управления им.

    Например, если к управляющей плате подключено 3 любых модуля Metro, то массив Metro будет содержать 3 элемента:
  • Metro[0] - объект для управления первым модулем (ближайшим к управляющей плате);
  • Metro[1] - объект для управления вторым модулем (следующим после первого);
  • Metro[2] - объект для управления третьим модулем (дальним от управляющей платы).

Сторонние модули ша шине I2C: На шине I2C могут присутствовать сторонние модули* (не принадлежащие линейке Metro) со своими библиотеками. Это не повлияет на корректность обнаружения модулей Metro, не приведёт к присвоению неуникального адреса модулю и не нарушит очерёдность следования элементов массива Metro.
* Кроме сторонних модулей с адресом 0x09.

Функция off();

  • Назначение: Выключение светодиода.
  • Синтаксис: Metro[ индекс ].off();
  • Параметры: Нет.
  • Возвращаемые значения: Нет.
  • Пример:
Metro[0].off(); // Выключить светодиод.

Функция on();

  • Назначение: Включить светодиод.
  • Синтаксис:
    • Metro[ индекс ].on( [ ЦВЕТ [ , ДЛИТЕЛЬНОСТЬ [ , ПАУЗА [ , КОЛИЧЕСТВО ]]]] );
    • Metro[ индекс ].on( [ RGB(красный,зелёный,синий) [ , ДЛИТ-ТЬ [ , ПАУЗА [ , КОЛ-ВО ]]]] );
    • Metro[ индекс ].on( [ RGB( ФУНКЦИЯ ) [ , ДЛИТЕЛЬНОСТЬ [ , ПАУЗА ]]] );
  • Параметры:
    • ЦВЕТ - Можно задать одним числом в шестнадцатеричной системе счисления (как в программе Photoshop), например, 0xff5500 - красный 0xff / зелёный 0x55 / синий 0x00. А можно задать через функцию RGB(), см. ниже.
      Если цвет не указан, то будет установлен белый (0xffffff).
    • ДЛИТЕЛЬНОСТЬ - Целочисленное значение определяющее время свечения светодиода в миллисекундах от 0 до 25500. Если длительность не казана, то светодиод будет светиться постоянно.
    • ПАУЗА - Целочисленное значение определяющее время паузы между свечениями в миллисекундах от 0 до 25500. Если указан цвет и длительность, а пауза не указана, то светодиод включится однократно на указанное время длительности (без повторов).
    • КОЛИЧЕСТВО - Целое количество миганий светодиодом от 1 до 255. Если указаны цвет, длительность и пауза, а количество миганий не указано, то светодиод будет мигать постоянно.
    • RGB(красный,зелёный,синий) - Альтернативный способ задания цвета. Цвет указывается через дополнительную функцию RGB() разделяющую цвет на яркость красного, зелёного и синего как целое значение от 0 до 255. Например, RGB( 255 , 85 , 0 ) - красный 255 (макс) / зелёный 85 / синий 0x00 (мин.).
    • RGB( ФУНКЦИЯ ) - Включение функции автоперелива цвета, где параметр ФУНКЦИЯ является номером функции автоперелива, целое число от 1 до 255.
  • Возвращаемые значения: Нет.
  • Примечание:
    • Все параметры функции on() являются необязательными.
    • Если в качестве цвета указать RGB() с тремя параметрами, то они будут являться яркостью красного, зелёного и синего канала цвета от 0 до 255 для каждого.
    • Если в качестве цвета указать RGB() с одним параметром, то он будет являться номером от 1 до 255 функции автоперелива цвета, а параметры ДЛИТЕЛЬНОСТЬ и ПАУЗА (если они указаны) будут влиять на скорость автоперелива.
  • Пример:
Metro[0].on();                         // Включить светодиод (светодиод включит белый цвет).
Metro[0].on( 0x00ff00               ); // Включить светодиод зелёным цветом.
Metro[0].on( RGB(0,255,0)           ); // Включить светодиод зелёным цветом.
Metro[0].on( 0xff0000, 5000         ); // Включить светодиод красным цветом на 5 секунд.
Metro[0].on( 0xffffff, 500, 1000    ); // Мигать белым цветом. Светодиод будет постоянно включаться на 0,5 сек и выключаться на 1 сек.
Metro[0].on( 0x0000ff, 500, 1000, 3 ); // Мигнуть синим цветом 3 раза. Светодиод будет трижды включаться на 0,5 сек и выключаться на 1 сек.
Metro[0].on( RGB(2)                 ); // Включить функцию автоперелива №2 - «Смена цветов радуги».

Функция frequency();

  • Назначение: Функция устанавливает частоту ШИМ светодиода.
  • Синтаксис: Metro[ индекс ].frequency( ЧАСТОТА );
  • Параметры:
    • ЧАСТОТА - Задаётся целым числом Гц от 10 до 255.
  • Возвращаемые значения: Нет.
  • Примечание:
    • Яркость цветов определяется коэффициентом заполнения ШИМ, частоту которого можно менять в пределах от 10 до 255 Гц.
    • По умолчанию используются сигналы ШИМ с частотой 100 Гц. Это оптимальное значение для корректной работы модуля.
  • Пример:
Metro[0].frequency(25); // Использовать ШИМ с частотой 25 Гц.

Переменная address:

  • Тип: uint8_t.
  • Данные: Адрес модуля на шине I2C.
  • Примечание: Адрес формируется и присваивается во время определения модулей функцией iarduino_Metro_Start(); Не меняйте адрес, так как он используется библиотекой.
  • Пример чтения адреса модуля:
Serial.print  ( "Адрес модуля на шине I2C = " );
Serial.println( Metro[0].address              );

Переменная model:

  • Тип: uint8_t.
  • Данные: Идентификатор типа модуля.
  • Примечание: Тип модуля считывается во время определения модулей функцией iarduino_Metro_Start(); Не меняйте тип модуля, так как он используется библиотекой.
  • Пример определения типа модуля:
switch( Metro[0].model ){
    case MOD_KEY: Serial.println( "кнопка"                         ); break;
    case MOD_RGB: Serial.println( "светодиод"                      ); break;
    case MOD_RES: Serial.println( "потенциометр"                   ); break;
    case MOD_BUZ: Serial.println( "звукоизлучатель"                ); break;
    case MOD_DHT: Serial.println( "датчик влажности и температуры" ); break;
    case MOD_DSL: Serial.println( "датчик освещённости"            ); break;
    case MOD_8X8: Serial.println( "светодиодная матрица 8х8"       ); break;
    default:      Serial.println( "неизвестный модуль"             ); break;
}

Переменная version:

  • Тип: uint8_t.
  • Данные: Версия прошивки модуля.
  • Примечание: Версия прошивки считывается во время определения модулей функцией iarduino_Metro_Start(); Изменение значения переменной не изменит версию модуля и не повлияет на работу модуля, и библиотеки.
  • Пример чтения версии прошивки модуля:
Serial.print  ( "Версия прошивки модуля = " );
Serial.println( Metro[0].version            );

Переменная size:

  • Тип: uint8_t.
  • Данные: Объем памяти ОЗУ в байтах, используемый библиотекой для данного модуля.
  • Примечание: Библиотека создаёт массив объектов Metro с помощью функции iarduino_Metro_Start(); в коде setup (при старте скетча), значит и память ОЗУ для работы с модулями выделяется там же, а не во время компиляции скетча. Зная объем выделенной памяти можно определить объем свободной и рассчитать, какое количество модулей Metro ещё можно подключить. Изменение значения переменной не изменит объём выделенной памяти и не повлияет на работу модуля, и библиотеки.
  • Пример чтения объема памяти ОЗУ выделенного для работы с модулем:
Serial.print  ( "Для работы данного модуля выделено " );
Serial.print  ( Metro[0].size                         );
Serial.println( " байт памяти ОЗУ."                   );

Применение:

Модуль Metro - RGB светодиод можно использовать в любых проектах где требуется светодиод, например, для подачи световых и цветовых сигналов, индикации состояний устройств, создания гирлянд, декоративной подсветки и т.д.

Ссылки:

Обсуждение