17:46 - Admin

Подключение светодиода к Ардуино

Светодиод и ардуино

Наверное, самое первое, что пробуют новички при знакомстве с Ардуино - это подключить к нему светодиод и написать программу, которая этим светодиодом мигает. В данной статье мы остановимся на особенностях подключения светодиодов к плате Ардуино: от простейшего скетча до более сложных моментов. Таких, как расчёт ограничивающего резистора или подключения RGB-светодиода.

Содержание

Мигание встроенным светодиодом

На большинстве плат Ардуино есть встроенный светодиод. Тот самый, который мигает при включении или перезагрузке микроконтроллера. Обычно он соединён с пином №13 (но не всегда; например, на микроконтроллерах серии MKR1000 это будет пин №6). На плате встроенный светодиод обозначен буквой L от английского слова led (светодиод):

встроенный светодиод на плате Ардуино UNO

Встроенный светодиод на плате Arduino UNO

Этим светодиодом можно управлять программно. Хороший способ проверить, что программа (скетч) успешно загружается в Ардуино и работает, не подключая к плате дополнительных деталей.

Ниже приведён простейший пример скетча:

void setup(){
  pinMode(LED_BUILTIN, OUTPUT); // переключаем встроенный пин в режим выхода
}

void loop(){
  digitalWrite(LED_BUILTIN, HIGH); // зажигаем светодиод
  delay(1000); // ждём 1 секунду
  digitalWrite(LED_BUILTIN, LOW); // гасим светодиод
  delay(1000); // ждём ещё секунду
}

Некоторые пояснения для новичков в языке программирования Ардуино. Первый блок скетча начинается с конструкции void setup(). Внутри фигурных скобок - те команды, которые выполнятся один раз на старте Ардуино. В данном случае, мы переключаем пин LED_BUILTIN в режим выхода. LED_BUILTIN - константа, прописанная во встроенной библиотеке Ардуино, её значение как раз указывает на пин встроенного светодиода (13 или 6, как говорилось выше).

Далее идёт блок loop() - это цикл, который будет выполнятся до бесконечности, пока работает скетч. В нём мы зажигаем светодиод на 1 секунду, потом гасим на одну секунду. Получается мигание с частотой 0.5 Гц.

Подключение внешнего светодиода

В наборах Ардуино обычно идут 5мм светодиоды разных цветов с рабочим током около 20 мА. В принипе, подойдёт любой маломощный светодиод.

Первый момент, который нужно учесть при подключении внешнего светодиода к Ардуино - то, что для светодиода важна полярность. Длинная ножка, анод, должна быть подключена к "плюсу" - то есть, к пину Ардуино. Короткая, соответственно, к "минусу" или к "земле" (GND).

Полярность светодиода

Полярность светодиода. Длинная ножка - анод, плюс. Короткая - катод, минус.

Второй момент более сложный - правильно задать рабочую точку.  Обычно на выводе Ардуино будет напряжение 5 В (на некоторых платах 3.3 В). Для светодиода это много - он и сам выйдет из строя, и может вывести из строя плату микроконтроллера из-за слишком большого тока. Поэтому, последовательно со светодиодом ставят ограничивающий резистор - не важно, со стороны анода или катода.

Подключение светодиода к Ардуино

Подключение светодиода к Ардуино. Светодиод подключён к цифровому пину 7 через ограничивающий резистор

Но как правильно выбрать номинал этого резистора? Это зависит от характеристик светодиода. Чтобы рассчитать резистор, необходимо знать рабочий ток светодиода и падение напряжения на нём. Причём напряжение может быть разное даже у одного типа светодиодов разных цветов: на красном светодиоде падает порядка 2 В, на синем или белом - 3 В, на зелёном - что-то среднее.

Я обычно поступаю так: подключаю к светодиоду регулируемый блок питания и начанию плавно увеличивать напряжение. Когда светодиод начинает светиться достаточно ярко - запоминаю напряжение и силу тока. После этого несложно рассчитать номинал резистора.

Расчёт ограничивающего резистора

Пример: светодиод требует 3 В, 20 мА. Напряжение на пине 5 В. Светодиод и резистор образуют делитель напряжения, следовательно, на резисторе должно падать 5 - 3 = 2 вольта. А ток через резистор такой же, как через светодиод - 20 мА. Значит, по закону Ома его сопротивление составит 100 Ом.

Расчёт ограничивающего резистора

Расчёт ограничивающего резистора

А что делать, если нет возможности узнать/измерить параметры светодиода? Можно экспериментально подобрать резистор, начиная с самого большого номинала. Сначала поставить резистор 330 Ом. Если светодиод светится тускло - заменить на резистор 220 Ом и так далее.

Скетч для управления внешним светодиодом

Скетч для мигания внешним светодиодом. Он почти не отличается от программы для мигания встроенным светодиодом, приведённой выше, поэтому подробно разбирать подробно его нет смысла.


const int LED_PIN = 7 // здесь нужно задать пин, к которому подключён наш светодиод
void setup(){
  pinMode(LED_PIN, OUTPUT);
}

void loop(){
  digitalWrite(LED_PIN, HIGH);
  delay(500);
  digitalWrite(LED_PIN, LOW); 
  delay(500);
}

Плавное изменение яркости. ШИМ

Что, если мы хотим плавно менять яркость горения светодиода? В этом нам поможет ШИМ - широтно-импульсная модуляция (на английском PWM). В этом режиме Ардуино выводит на пин прямоугольные импульсы высокой частоты - такой, что глаз не замечает очень быстрого мигания светодиода. При этом программно можно регулировать соотношение длительности импульсов и пауз - так называемое заполнение.

ШИМ-сигнал с различным заполнением

ШИМ-сигнал с одинаковой частотой, но разным заполнением: 20% (верхний график) и 50% (нижний график)

Обратите внимание, что ШИМ-сигнал можно получить не на любом пине, а только на отмеченном знаком ~ (тильда). Для Arduino UNO это пины 3,5,6,9,10,11. Заполнение ШИМ задаётся через вызов метода analogWrite, в который вторым параметром передаётся значение от 0 (нулевое заполнение, нет сигнала) до 255 (максимальное заполнение, 100%. Вот как может выглядеть скетч для плавного изменения яркости:

const int LED_PIN = 9; // подключаем светодиод к пину с ШИМ

void setup(){
  pinMode(LED_PIN, OUTPUT);
}

void loop(){
  for (int b=0; b<=255; b+=5){ // цикл, в котором переменная b проходит значения от 0 до 255 с шагом 5
    analogWrite(LED_PIN, b);
    delay(10);
  }
  for (int b=255; b>=0; b-=5){ // здесь, наоборот, значение переменной уменьшается, яркость светодиода падает
    analogWrite(LED_PIN, b);
    delay(10);
  }
}

Подключение RGB-светодиода к Ардуино

RGB-светодиод - это объединение в одном корпусе трёх светодиодов красного, зелёного и синего цвета. Отсюда и аббревиатура RGB - названия цветов на английском: Red, Green, Blue.

Этими светодиодами можно управлять по-отдельности, и различные сочетания их яркостей дают разные цвета. Например, если зажечь одновременно синий и красный - получится фиолетовый.

Для экономии часто у таких светодиодов делают общий вывод. Поэтому, встречаются RGB-светодиоды с общим катодом и общим анодом. Но иногда можно встретить и полностью независимую сборку с шестью выводами.

Также для Ардуино выпускают RGB-светодиоды в виде готового модуля. Там уже встроены ограничивающие резисторы.

RGB-светодиод и светодиодный модуль

RGB-светодиод и светодиодный модуль

Пример подключения RGB-светодиода к плате Ардуино:

Подключение RGB-светодиода к плате Ардуино

Подключение RGB-светодиода с общим катодом к плате Ардуино

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

Управлять соотношением яркостей всех трёх цветных диодов можно через ШИМ-сигнал, как описано выше.

Библиотеки для светодиодов

Для одиночного светодиода хватает стандартных функций. Но если хочется «вау‑эффектов» и адресной ленты — пригодятся библиотеки:

  • FastLED — десятки эффектов, палитры, коррекция цвета, управление сотнями пикселей.
  • Adafruit NeoPixel — простое API для адресных лент WS2812/NeoPixel, примеры эффектов.
Поделиться в соцсетях:

Добавить комментарий