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.
Спортивне табло таймер своїми руками
Постановка задачі Задачею проекту є виготовлення спортивного таймеру для міні-футбольного турні..
Автоматичне управління озонатором води на Arduino Nano
В цьому проекті займемося чистою автоматикою. В даному випадку озонатор буде очищувати питну воду ві..
Універсальна монтажна плата на 400 отворів
Макетна плата на 400 отворів для макетування любительських схемотехнічних проектів. Містить 4 лінії ..
85.85грн.
Стійка нейлонова М3 12мм + 6мм
Стійка для кріплення усіляких електронних модулів до корпусу пристроюВисота стійки 12 ммДовжина зовн..
3.67грн.
Аудіо штекер 3,5мм папа
Аудіоштекер 3,5 мм використовується для подовжувачів аудіосигналу, для передачі сигналу з аудіороз'є..
20.98грн.





