🛒
0 товаров
0 руб.

Интернет-магазин «Неглупый Дом»


🔆 Проект: диммер освещения на энкодере KY-040 и MOSFET

Энкодер KY-040 и MOSFET IRF520

Энкодер KY-040 вращением плавно меняет яркость LED-ленты или лампы 12В — MOSFET-модуль IRF520 управляет мощностью через ШИМ без потерь на резисторе, в отличие от простого потенциометра.

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

KY-040 — поворотный инкрементальный энкодер: внутри два контакта (CLK и DT), которые замыкаются по очереди со сдвигом фазы при вращении оси. Сравнивая, какой из двух контактов изменился первым на каждом "щелчке", можно точно определить направление вращения — по часовой стрелке или против, в отличие от простого потенциометра, который лишь показывает абсолютное положение оси без понятия "направление".

MOSFET-модуль IRF520 управляет яркостью через ШИМ (широтно-импульсную модуляцию): вместо того чтобы гасить часть напряжения на резисторе (как в простом реостатном диммере, где лишняя энергия превращается в тепло), транзистор быстро включает и выключает питание нагрузки тысячи раз в секунду, и именно соотношение времени включения к выключению (`analogWrite()`) определяет среднюю яркость — энергоэффективнее и без нагрева регулирующего элемента.

Пошаговая сборка

Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, что указаны ниже — сориентируйтесь по названиям контактов на своей плате.

  1. Подключите KY-040: CLK → D2, DT → D3, VCC → 5V, GND → GND (вывод SW/кнопку энкодера в этом проекте можно не использовать).
  2. Подключите MOSFET IRF520: сигнал (PWM) → D9, VCC/GND модуля — согласно его схеме.
  3. Подключите нагрузку (LED-лента или лампа 12В) и её отдельный источник питания к силовым контактам MOSFET-модуля, не к Arduino напрямую.
  4. При желании поменяйте шаг изменения яркости (`5`) на более крупный или мелкий.

Скетч

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.

const int clkPin = 2;
const int dtPin = 3;
const int pwmPin = 9;

int lastClk;
int brightness = 128;

void setup() {
  Serial.begin(9600);
  pinMode(clkPin, INPUT);
  pinMode(dtPin, INPUT);
  pinMode(pwmPin, OUTPUT);
  lastClk = digitalRead(clkPin);
}

void loop() {
  int clk = digitalRead(clkPin);

  if (clk != lastClk) {
    if (digitalRead(dtPin) != clk) {
      brightness = min(brightness + 5, 255);
    } else {
      brightness = max(brightness - 5, 0);
    }
    analogWrite(pwmPin, brightness);
    Serial.print("Яркость: ");
    Serial.println(brightness);
  }

  lastClk = clk;
}

Шаг изменения яркости за один щелчок энкодера (`5`) можно увеличить для более резкой регулировки или уменьшить для плавной подстройки.

Частые проблемы

Как улучшить проект

Товары по теме

Ещё модули для Arduino: Электронные модули.

← 🎹 сенсорное пианино на 4 кнопках TTP223📜 навигация по меню на LCD1602 энкодером KY-… →

🎁 Купить весь комплект со скидкой 10%

Все 2 товара сразу в корзину: 167 ₽ 150 ₽ (экономия 17 ₽)

Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина


Поиск



Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA