Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Следующие шаги представляют собой эксперименты, демонстрирующие, как работают светодиоды. Они показывают, как равномерно уменьшить яркость светодиода, а также как постепенно увеличивать и уменьшать яркость.
Тебе понадобится:
- Ардуино (я использовал дуэт)
- Макетная плата
- 5 мм красный светодиод
- Резистор 330 Ом (не критично, 330-560 Ом подойдет.)
- Сплошной монтажный провод 22 калибра
Детали, необходимые для этих экспериментов, включены во все стартовые комплекты Arduino.
Шаг 1: объяснение импульсной модуляции
Светодиоды всегда работают при одинаковом напряжении независимо от яркости. Яркость определяется прямоугольным осциллятором, и время, в течение которого напряжение высокое, определяет яркость. Это называется широтно-импульсной модуляцией (ШИМ). Это контролируется функцией Arduino analogWrite (pin, n), где n имеет значение от 0 до 255. AnalogWrite () выводит ШИМ, а не настоящий аналог. Если n = 2, светодиод будет вдвое ярче, чем n = 1. Яркость всегда удваивается, когда n удваивается. Таким образом, n = 255 будет вдвое ярче, чем n = 128.
Значение n часто выражается в процентах, называемых рабочим циклом. На рисунках показаны осциллограммы для рабочих циклов 25, 50 и 75%.
Шаг 2: неравномерное затемнение
Постройте схему, как показано на схеме. Это похоже на схему мигания светодиода. Он использует вывод 9, потому что вам нужно использовать вывод с включенной ШИМ.
Скопируйте / вставьте эскиз ниже в IDE Arduino и запустите его.
Вы заметите, что чем ярче светодиод, тем медленнее он гаснет. По мере приближения к самому тусклому свету он будет очень быстро тускнеть.
установка void ()
{pinMode (9, ВЫХОД); } void loop () {int pin = 9; для (int я = 255; я> -1; я--) {analogWrite (контакт, я); задержка (10); } для (int я = 0; я <256; я ++) {analogWrite (контакт, я); задержка (10); }}
}
На следующем шаге показано, как уменьшить яркость светодиода с постоянной скоростью и одним оператором for.
Шаг 3: вверх и вниз в одном For ()
Чтобы светодиод гаснул с постоянной скоростью, задержка () должна увеличиваться с экспоненциальной скоростью, потому что половина рабочего цикла всегда дает половину яркости. Моей первой мыслью было попробовать использовать функцию map (), но она линейна.
Линия:
int d = (16-я / 16) ^ 2;
вычисляет обратный квадрат яркости для определения длительности задержки.
Скопируйте / вставьте приведенный ниже эскиз в IDE Arduino, и вы увидите, что светодиод будет постепенно появляться и исчезать с постоянной скоростью.
установка void ()
{pinMode (9, ВЫХОД); } void loop () {int x = 1; int pin = 9; для (int я = 0; я> -1; я = я + х) {int d = (16-я / 16) ^ 2; analogWrite (контакт, я); задержка (d); если (я == 255) х = -1; // переключаем направление на пике}}