Главная chevron_right Уроки chevron_right Встроенные примеры chevron_right Аналоговые примеры chevron_right Analog Write с 12 светодиодами на Arduino Mega

Analog Write с 12 светодиодами на Arduino Mega

Плавное поочерёдное включение и выключение 12 светодиодов с помощью ШИМ-выходов Arduino Mega.

Этот урок показывает, как плавно зажигать и гасить 12 LEDs поочерёдно на плате Arduino Mega, используя увеличенное количество PWM-совместимых цифровых пинов этой платы.

Arduino Mega отличается от стандартного Arduino Uno именно тем, что предоставляет значительно больше ШИМ-выходов. Это позволяет управлять большим количеством светодиодов или сервоприводов без дополнительных микросхем.

Необходимые компоненты

  • 12 красных LEDs
  • 12 резисторов 220 Ом
  • соединительные провода
  • макетная плата

Схема подключения

Схема подключения 12 светодиодов к Arduino Mega на макетной плате. Длинные ноги (аноды) светодиодов подключены к пинам 2–13 через резисторы 220 Ом, короткие ноги (катоды) — к GND.

Подключите длинные положительные ноги (аноды) 12 LEDs к цифровым пинам 2–13 через ограничивающие ток резисторы 220 Ом. Короткие отрицательные ноги (катоды) соедините с землёй.

Важно: не забывайте про резисторы! Без них светодиоды получат слишком большой ток и могут сгореть или повредить пин микроконтроллера.

Принципиальная схема

Принципиальная схема подключения 12 светодиодов через резисторы 220 Ом к Arduino Mega. На схеме обозначены: резисторы 220 Ом и светодиоды (LEDs).

Как это работает

Программа использует analogWrite() — функцию, которая управляет яркостью светодиода через ШИМ (PWM). Значение яркости меняется от 0 (полностью выключен) до 255 (максимальная яркость). Светодиоды перебираются поочерёдно: каждый сначала плавно разгорается, а затем плавно гаснет, после чего программа переходит к следующему.

Код

В функции setup() цикл for() настраивает цифровые пины 2–13 платы Mega как выходы (OUTPUT).

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

Внешний цикл:

for (int thisPin =lowestPin; thisPin <= highestPin; thisPin++)

последовательно перебирает все светодиоды — от пина с наименьшим номером до наибольшего. Прежде чем перейти к следующему пину, программа выполняет два действия.

Первое — плавное увеличение яркости через следующие строки:

for (int brightness = 0; brightness < 255; brightness++) { analogWrite(thisPin, brightness); delay(2); }

С каждой итерацией переменная brightness увеличивается на единицу, и это значение передаётся в analogWrite() для текущего пина. Когда яркость достигает максимума (255), включается второй цикл:

for (int brightness = 255; brightness >= 0; brightness--) { analogWrite(thisPin, brightness); delay(2); }

Второе — плавное уменьшение яркости: переменная brightness уменьшается на единицу с каждым шагом, пока не достигнет нуля. После этого внешний цикл for() переходит к следующему светодиоду, и весь процесс повторяется.

/*

  Тест analogWrite() на Mega

  Этот скетч поочерёдно плавно включает и выключает светодиоды на цифровых пинах со 2 по 13.

  Скетч написан для Arduino Mega и не будет работать на других платах.

  Схема:

  - Светодиоды подключены от пинов 2–13 к земле.

  Создан 8 февраля 2009 г.

  Автор: Tom Igoe

  Код примера находится в открытом доступе.

  https://www.arduino.cc/en/Tutorial/AnalogWriteMega

*/

// Эти константы не изменяются. Они задают имена используемых пинов:

const int lowestPin = 2;

const int highestPin = 13;

void setup() {

  // Настроить пины со 2 по 13 как выходы:

  for (int thisPin = lowestPin; thisPin <= highestPin; thisPin++) {

    pinMode(thisPin, OUTPUT);

  }
}

void loop() {

  // Перебираем пины:

  for (int thisPin = lowestPin; thisPin <= highestPin; thisPin++) {

    // Плавно увеличиваем яркость светодиода на thisPin от нуля до максимума:

    for (int brightness = 0; brightness < 255; brightness++) {

      analogWrite(thisPin, brightness);

      delay(2);

    }

    // Плавно уменьшаем яркость светодиода на thisPin от максимума до нуля:

    for (int brightness = 255; brightness >= 0; brightness--) {

      analogWrite(thisPin, brightness);

      delay(2);

    }

    // Пауза между переключением светодиодов:

    delay(100);

  }
}

Типичные ошибки

  • Светодиод не светится — проверьте полярность: анод (длинная нога) должен быть подключён к пину, катод (короткая нога) — к GND.
  • Светодиод светит, но не меняет яркость — убедитесь, что используете пины с поддержкой PWM. На Arduino Mega это пины 2–13 и ряд других.
  • Все светодиоды мигают одновременно — скорее всего, перепутаны пины в коде или схеме. Проверьте соответствие физических соединений и переменных lowestPin / highestPin.
  • Резистор пропущен — светодиод может работать, но долго не проживёт. Всегда используйте токоограничивающий резистор.

Как проверить результат

После загрузки скетча светодиоды должны поочерёдно плавно разгораться и гаснуть, создавая эффект «бегущей волны». Если все 12 светодиодов работают корректно — урок выполнен успешно.

Дополнительные материалы

Больше базовых примеров вы найдёте в разделе built-in examples.

Также изучите language reference — подробный справочник по языку программирования Arduino.

Последнее обновление: 28.07.2015, SM