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 Nano

Автоматичне управління озонатором води на Arduino Nano

В цьому проекті займемося чистою автоматикою. В даному випадку озонатор буде очищувати питну воду ві..

Універсальна монтажна плата на 400 отворів

Універсальна монтажна плата на 400 отворів

Макетна плата на 400 отворів для макетування любительських схемотехнічних проектів. Містить 4 лінії ..

85.85грн.

Стійка нейлонова М3 12мм + 6мм

Стійка нейлонова М3 12мм + 6мм

Стійка для кріплення усіляких електронних модулів до корпусу пристроюВисота стійки 12 ммДовжина зовн..

3.67грн.

Аудіо штекер 3,5мм папа

Аудіо штекер 3,5мм папа

Аудіоштекер 3,5 мм використовується для подовжувачів аудіосигналу, для передачі сигналу з аудіороз'є..

20.98грн.