Эксперимент № 3. ШИМ. Управление яркостью светодиода

Введение. Понятие ШИМ

Широко-импульсная модуляция (сокращенно ШИП) – это техника, используемая для преобразования аналогового сигнала в цифровой. Ведь компьютер не может выдавать аналоговый сигнал: выходы цифровой техники могут принимать только одно из двух значений – например, 0V или 5V. Поэтому используется счетчик высокой точности для кодирования аналогового сигнала в ШИМ-сигнал, которые – уже цифровой, поскольку в любой момент времени он принимает значение либо 5V (ВКЛ), либо 0V (ВЫКЛ). Напряжение подается на аналоговую нагрузку (например, светодиод, или сервопривод) в виде повторяющейся последовательности ВКЛ и ВЫКЛ. Получаемое выходное напряжение вычисляется по продолжительности сигналов ВКЛ и ВЫКЛ, по следующей формуле:

Выходное напряжение = (Время ВКЛ / время импульса) * максимальное напряжение.

Взгляните на рисунок ниже для лучшего понимания.

ШИМ имеет множество применений, например:

  • регулирование яркость свечения ламп,
  • скорости вращения мотора,
  • генерация звука и т.д.

ШИМ имеет 3 параметра:

  • Период
  • Скважность
  • Величина

У Ардуино 6 портов, поддерживающие ШИМ: это цифровые пины 3, 5, 6, 9, 10 и 11.

В предыдущем примере мы подключили LED к цифровому пину. Теперь мы будем менять его яркость с помощью ШИМ-сигнала.

Часть 1. Управление яркостью светодиода

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

  • LED M5
  • 220R

Схема

Соберем вот эту схему:

Обратите внимание, что мы подключаем LED к цифровому пину 11, которые поддерживает ШИМ. Если подключить к пину 12, то желаемого результата мы не получим.

Скетч

/*******************************************************
 * (C) jarduino.ru 2019
 * Изучение ардуино через опыты.
 *
 * Опыт №3.1. Управление яркостью светодиода
 *
 * ****************************************************/

// Глобальные константы и переменные
const int pinLed = 11; // порт для светодиода

const int nDelay = 2; // задержка в мсек. между изменением яркости
const int nLedMin = 0; // минимальная яркость

// настройка платы
void setup()
{
  pinMode(pinLed, OUTPUT);
}

// основной цикл
void loop()
{
  static int i = nLedMin; // статическая переменная для хранения текущей яркости светодиода

  // постепенной увеличиваем яркость светодиода:
  while (i < 255)
  {
    analogWrite(pinLed, i);
    delay(nDelay);
    ++i;
  }

  // постепенно уменьшаем яркость светодиода:
  while (i > nLedMin)
  {
    analogWrite(pinLed, i);
    delay(nDelay);
    --i;
  }
}

Результат

Часть 2. Управление яркостью с помощью потенциометра

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

  • Дополнительно на понадобится потенциометр

Схема

Добавим на схему потенциометр:

Управление яркостью светодиода с помощью потенциометра
Управление яркостью светодиода с помощью потенциометра

Среднюю ногу потенциометра мы подключаем к аналоговому входу A0.

Скетч

/*******************************************************
 * (C) jarduino.ru 2019
 * Изучение ардуино через опыты.
 *
 * Опыт №3.2 Управление яркостью светодиода с помощью потенциометра
 *
 * ****************************************************/

// Глобальные константы и переменные
const int pinLed = 11; // порт для светодиода
const int pinPot = A0; // порт для светодиода

// настройка платы
void setup()
{
  Serial.begin(9600); // инициализировать последовательные порт
  pinMode(pinLed, OUTPUT); // установть пин светодиода в режим вывода

  // аналоговые пины по умолчанию уже стоят в режиме ввода.
}

// основной цикл
void loop()
{
  static int nValOld = 0;
  static int nVal; // статическая переменная для хранения текущей яркости светодиода

  nVal = analogRead(pinPot);

  // выведем значение nVal в окно отладки, а чтобы 
  // не реагировать на помехи, будет выводить значение только если оно изменилось хотя бы на 3:
  if (abs(nValOld - nVal) > 3) {
    Serial.println(nVal);
    nValOld = nVal;
  }

  analogWrite(pinLed, nVal / 4);

  delay(10); // пауза в 0.01 сек.
}

Результат

Когда вы вращаете ручку потенциометра, вы видите в мониторе последовательно порта как меняется напряжение и яркость светодиода в соответствии с ним.

Объяснение

В программе мы считываем аналоговое значение, задаваемое потенциометром, и применяем его к цифровому ШИМ порту, к которому подключен светодиод. В соответствии с изменением ШИМ-сигналом, меняется и яркость светодиода.

Обратите внимание, что максимальное значение для порта ШИМ  – это 255, а аналогового порта – 1024. Поэтому считанное значение приходится делить на 4.

Заключение

В этом примере мы показали как использовать ШИМ, изменять напряжение на цифровом выходе, использовать потенциометр для управления нагрузкой.

2 Replies to “Эксперимент № 3. ШИМ. Управление яркостью светодиода”

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