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

Датчик температури шкаралупи яєць інкубаторний WiFi

Пристрій призначений для 4-канального вимірювання та реєстрації температури поверхні шкарлупи 4-х яє..

4900.00грн.

Плата ESP32 DevKit

Плата ESP32 DevKit

Плата WiFi та Bluetooth контролера ESP-32 з програматором CP2102На платі вже встановлено у..

268.52грн.

Стойка роликова для вісі Y з кріпежем

Стойка роликова для вісі Y з кріпежем

Монтажна панель з МДФ для організації вісі Y автоматичного лазерного гравера.Отвори під кроковий дви..

116.75грн.

Модуль реле 2-канальний 5В 10А

Модуль реле 2-канальний 5В 10А

2-канальный модуль реле для підключення напряму до дискретного виходу контролера. Світлодіодна індик..

76.14грн.

AMS1117-5.0 мікросхема стабілізатор напруги

AMS1117-5.0 мікросхема стабілізатор напруги

Мікросхема - лінійний регулятор напруги застосовується для отримання стабілізованої напруги 5,0 ВВхі..

6.27грн.