На этом уроке мы разберёмся как с помощью микроконтроллера можно плавно изменять яркость светодиода. Светодиод на английском языке принято обозначать LED (light emitting diode – светоизлучающий диод). На светодиоде ниже картинке к катоду подсоединяют землю (GND или -), к аноду, подают напряжение, обычно 3в, 5в или 12в.
Для большинства светодиодов, через них должен идти ток около 20мА. При напряжении 5в приходится устанавливать сопротивление 220Ом, которое ограничивает силу тока, проходящего через светодиод. При большем напряжении, надо устанавливать большее сопротивление.
Чтобы светодиод светил ровным светом, через него надо пропускать ток постоянной силы. Изменяя величину тока, можно изменять яркость светодиода, правда, плавно понижать его яркость не получится. При увеличении силы тока светодиод в какой-то момент начнёт светиться, потом станет более ярким, но его срок службы в этом случае снижается.
Особенность нашего микроконтроллера в том, что мы не можем управлять силой тока на его выходах. Мы можем только «включать» или «выключать» выход, в результате чего на выходе появляется напряжение 3.3 вольта (для NodeMCU) или 0.
Решить вопрос с яркостью светодиода можно пользуясь инерцией человеческого глаза, который не замечает частых включений и выключений светодиода, они сливаются для него в картинку непрерывного свечения. Воспринимается это, как изменение яркости светодиода.
Подобный сигнал, его принято называть Широтно-Импульсной Модуляцией (ШИМ-сигналом), или по-английски PWM-сигналом (Pulse Width Modulation – пульсация с модуляцией) можно формировать почти на всех выходах, на картинках они помечены волнистой линией.
Любопытно, что таким образом можно даже изменять яркость встроенного на плату светодиода, подключённого к выходу D4.
Но как можно увидеть изменение частоты поступающего на выход сигнала? Сделать это можно с помощью самого простого осциллографа, поскольку частота колебаний ШИМ-сигнала около 1 кГц – 1000 колебаний в секунду.
Соберите следующую схему
Следующий скетч плавно увеличивает и затем плавно снижает яркость светодиода
`// Тестовый скетч для осциллографа
// Изменение яркости светодиода
#define LED_PIN D4
#define t_delay 20 // Время задержки для скорости изменение яркости
uint32_t work_t; // рабочая переменная для использования millis() вместо delay()
byte i_brightness = 0; //текущая яркость светодиода, меняется от 0 до 255
boolean b_increase = true; // увеличиваем или уменьшаем яркость
void setup() {
pinMode(LED_PIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (millis() - work_t > t_delay) { // пора менять яркость светодиода
if (b_increase) {
analogWrite(LED_PIN, i_brightness); // увеличиваем яркость
Serial.print(0);Serial.print(",");Serial.print(i_brightness);Serial.print(",");Serial.println(255);
} else {
analogWrite(LED_PIN, 255 - i_brightness); // уменьшаем яркость
Serial.print(0);Serial.print(",");Serial.print(255-i_brightness);Serial.print(",");Serial.println(255);
}
if (i_brightness < 255) {
i_brightness++;
} else {
i_brightness = 0;
b_increase = ! b_increase; // увеличение яркости теперь переходит в уменьшение
}
work_t = millis();
}
}
`На ролике видно, как изменяется скважность (длительность импульса внутри П-образного сигнала) и вместе с ней изменяется яркость светодиода.
VIDEO