#03 Почетник ⏱ 25 мин
ESP32: Димер со потенциометар
Вртиш копче → LED-та постепено свети посилно. Два нови концепта: аналоген влез (ADC, 0–4095) и аналоген излез преку PWM (0–255).
Отвори го интерактивно во 3D →Што учиш
analogRead и 12-битен ADCPWM со ledcAttach / ledcWriteФункцијата map()Зошто ADC1 (GPIO 32–39)
Потребно
- ESP32 DevKit V1 — микроконтролер со WiFi и Bluetooth
- Breadboard (протоплоча) — поврзување без лемење
- Jumper жици — M–M, M–F, F–F
- LED диода — светлечка диода 5 mm
- Отпорник — 220 Ω, 1 kΩ, 10 kΩ…
- Потенциометар — 10 kΩ променлив отпорник
Како работи
Влез: ESP32 нема „аналогно око“, но има ADC — коло што го мери напонот и го претвора во број. 12 бита → 4096 нивоа: 0 V = 0, 3.3 V = 4095. analogRead(34) го враќа тој број.
Излез: дигитален пин знае само 0 или 3.3 V. Но ако го палиш и гасиш многу брзо (5 kHz), окото гледа средна вредност. 25 % вклучено → слаб сјај, 100 % → полн. Тоа е PWM (Pulse Width Modulation). Со ledcAttach(pin, 5000, 8) велиме: 5000 Hz, 8 бита (0–255). map() ги претвора 0–4095 во 0–255.
Поврзување
| Од | До | Зошто |
|---|---|---|
| ESP32 · 3V3 | Потенциометар, краен пин (колона 26) | Горен крај на отпорникот на 3.3 V. НИКОГАШ 5 V — ADC трпи макс 3.3 V. |
| Потенциометар, краен пин (колона 24) | − шина | Долен крај на 0 V. Низ целиот потенциометар тече 3.3 V / 10 kΩ = 0.33 mA. |
| Потенциометар, среден пин (колона 25) | ESP32 · D34 (GPIO 34, ADC1) | Лизгачот „зема“ напон 0–3.3 V според положбата. GPIO 34 е само-влез ADC1 пин — идеален. |
| ESP32 · D18 (PWM) | LED → 220 Ω → − шина | PWM: пинот се пали/гаси 5000 пати во секунда; процентот на „вклучено“ време = сјај. |
| ESP32 · GND | − шина | Заедничка маса. |
Чекор по чекор
- LED (19c, 20c) + отпорник 20a → − шина.
- Потенциометар со три пина во 24c, 25c, 26c.
- 3V3 → 26a (црвена), 24a → − шина (црна), 25a → D34 (зелена).
- D18 → 19a за LED-та. GND → − шина.
- Качи код, отвори Serial Monitor. Вртиш → броевите се менуваат 0…4095 и LED-та го следи.
Код (Arduino IDE)
// Проект 3: Димер — ADC влез + PWM излез
const int POT_PIN = 34; // ADC1_CH6, само влез
const int LED_PIN = 18;
void setup() {
Serial.begin(115200);
// PWM: пин, фреквенција 5 kHz, резолуција 8 бита (0–255)
ledcAttach(LED_PIN, 5000, 8);
// За Arduino-ESP32 core 2.x наместо горниот ред:
// ledcSetup(0, 5000, 8); ledcAttachPin(LED_PIN, 0); и ledcWrite(0, duty)
}
void loop() {
int raw = analogRead(POT_PIN); // 0 … 4095
int duty = map(raw, 0, 4095, 0, 255); // 0 … 255
ledcWrite(LED_PIN, duty);
Serial.printf("ADC: %4d -> PWM: %3d\n", raw, duty);
delay(50);
}Типични проблеми
Вредноста трепери за ±20? Нормално за ESP32 ADC. Просечувај 10 читања.
Крајни 3 % се „лепат“ на 0 и 4095 — ADC-то не е линеарно таму.
Ако подоцна додадеш WiFi — ADC2 пиновите (0,2,4,12–15,25–27) престануваат да работат. Затоа GPIO 34.
Отвори го интерактивно во 3D →
Повеќе проекти (уште 7) со бесплатна најава во курсот. Проекти →