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 уроки масиви
Привіт друзі! Радий вас усіх бачити! Пропоную ознайомитись з наступною темою навчального циклу – Ard..
Мотор безщіточний A2212 1000KV
Мотор трьохфазний безколекторний для мультикоптерів 1000KVKV: 1000 обертів на вольтМаксимальна ..
360.40грн.
Ультразвуковий датчик відстані HC-SR04 для Arduino, ESP32, STM32
HC-SR04 — популярний ультразвуковий сенсор для точного вимірювання відстані в діапазоні від 2 до 450..
62.06грн.
Змінний резистор багатообертовий
Потенціометр для надточного налаштування опору.Потужність 2 ВтКут обертання 3600°Розміри вказані на ..
73.09грн.
АЦП ADS1115 огляд мікросхеми
Привіт, друзі! У нас на огляді дуже корисна мікросхема – ADS1115. Це 16-бітний аналогово-цифровий пе..





