ESP32 PWM (analogWrite): керування світлодіодами та моторами

ESP32 підтримує широтно-імпульсну модуляцію (ШІМ, PWM), яка дозволяє регулювати яскравість світлодіодів, швидкість моторів, роботу вентиляторів та інших пристроїв. На відміну від Arduino Uno, де для PWM використовується стандартна функція analogWrite(), у ESP32 вона розширена та дозволяє налаштовувати частоту і роздільну здатність.

Основні можливості analogWrite на ESP32

  • Будь-який GPIO може працювати з PWM (крім вхідних пінів 34–39).
  • Частота ШІМ налаштовується від 1 Гц до 1 МГц.
  • Роздільна здатність задається від 1 до 16 біт (1–65535 значень duty cycle).

Налаштування PWM

В ESP32 перед використанням PWM можна змінювати частоту та роздільну здатність:


// Встановлення роздільної здатності (кількість бітів)
void analogWriteResolution(uint8_t pin, uint8_t resolution);

// Встановлення частоти PWM
void analogWriteFrequency(uint8_t pin, uint32_t freq);

Наприклад:


analogWriteResolution(5, 10);  // 10 біт = 0–1023
analogWriteFrequency(5, 5000); // 5 кГц

Приклад 1. Просте керування яскравістю світлодіода


const int ledPin = 5;

void setup() {
  analogWriteResolution(ledPin, 8);   // 0–255
  analogWriteFrequency(ledPin, 5000); // 5 кГц
}

void loop() {
  for (int i = 0; i <= 255; i++) {
    analogWrite(ledPin, i);
    delay(10);
  }
  for (int i = 255; i >= 0; i--) {
    analogWrite(ledPin, i);
    delay(10);
  }
}

Що відбувається: світлодіод плавно загоряється та гасне.

Приклад 2. Керування швидкістю двигуна


const int motorPin = 18;

void setup() {
  analogWriteResolution(motorPin, 10);  // 0–1023
  analogWriteFrequency(motorPin, 20000); // 20 кГц (поза чутним діапазоном)
}

void loop() {
  // 50% швидкості
  analogWrite(motorPin, 512);
  delay(3000);

  // Максимальна швидкість
  analogWrite(motorPin, 1023);
  delay(3000);

  // Зупинка
  analogWrite(motorPin, 0);
  delay(3000);
}

Що відбувається: двигун змінює швидкість залежно від значення PWM.

Приклад 3. RGB-світлодіод


const int redPin = 21;
const int greenPin = 22;
const int bluePin = 23;

void setup() {
  analogWriteResolution(redPin, 8);
  analogWriteResolution(greenPin, 8);
  analogWriteResolution(bluePin, 8);

  analogWriteFrequency(redPin, 5000);
  analogWriteFrequency(greenPin, 5000);
  analogWriteFrequency(bluePin, 5000);
}

void loop() {
  // Червоний
  analogWrite(redPin, 255);
  analogWrite(greenPin, 0);
  analogWrite(bluePin, 0);
  delay(1000);

  // Зелений
  analogWrite(redPin, 0);
  analogWrite(greenPin, 255);
  analogWrite(bluePin, 0);
  delay(1000);

  // Синій
  analogWrite(redPin, 0);
  analogWrite(greenPin, 0);
  analogWrite(bluePin, 255);
  delay(1000);
}

Що відбувається: RGB-світлодіод змінює колір від червоного до зеленого та синього.

Висновки

Використовуючи analogWrite() на ESP32, можна просто керувати світлодіодами, RGB-підсвіткою та моторами. Можливість налаштувати частоту та роздільну здатність робить ESP32 значно гнучкішим у порівнянні з Arduino Uno.

<< Проекти << Усі товари >> Статті, уроки >>

Написати відгук

Примітка: HTML размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Модуль підсилювача 2 х 3 Вт

Модуль підсилювача 2 х 3 Вт

Мініатюрний стерео підсилювач звукової частоти класу D на базі мікросхеми PAM8403Потужність 2 х 3 Вт..

29.19грн.

Джойстик шилд для Arduino UNO MEGA

Джойстик шилд для Arduino UNO MEGA

Шилд джойстика для контролерів Arduino UNO та MEGAМожна використовувати для саморобних ігор, а також..

176.49грн.

Твердотільне реле 10А

Твердотільне реле 10А

Реле без механічних контактів на 10 А. Силовим елементом даного реле є симистор.Гальванічна розв'язк..

281.48грн.

Світлодіод ультраяскравий 5мм

Світлодіод ультраяскравий 5мм

Над-яскравий світлодіод діаметром 5 мм Корпус прозорий в світлодіодів різного кольору світіння. Тоб..

5.75грн.

Кнопка металева герметична 16мм (латунь, IP65, 3A, без фіксації)

Кнопка металева герметична 16мм (латунь, IP65, 3A, без фіксації)

Надійна вологозахищена кнопка без фіксації діаметром 16 мм. Виготовлена з латуні з нікелевим покритт..

82.91грн.