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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Arduino уроки масиви

Arduino уроки масиви

Привіт друзі! Радий вас усіх бачити! Пропоную ознайомитись з наступною темою навчального циклу – Ard..

Мотор безщіточний A2212 1000KV

Мотор безщіточний A2212 1000KV

Мотор трьохфазний безколекторний для мультикоптерів 1000KVKV: 1000 обертів на вольтМаксимальна ..

360.40грн.

Ультразвуковий датчик відстані HC-SR04 для Arduino, ESP32, STM32

Ультразвуковий датчик відстані HC-SR04 для Arduino, ESP32, STM32

HC-SR04 — популярний ультразвуковий сенсор для точного вимірювання відстані в діапазоні від 2 до 450..

62.06грн.

Змінний резистор багатообертовий

Змінний резистор багатообертовий

Потенціометр для надточного налаштування опору.Потужність 2 ВтКут обертання 3600°Розміри вказані на ..

73.09грн.

АЦП ADS1115 огляд мікросхеми

АЦП ADS1115 огляд мікросхеми

Привіт, друзі! У нас на огляді дуже корисна мікросхема – ADS1115. Це 16-бітний аналогово-цифровий пе..