#03 Začetnik ⏱ 25 min
ESP32: Zatemnilnik s potenciometrom
Vrtiš gumb → LED postopoma sveti močneje. Dva nova pojma: analogni vhod (ADC, 0–4095) in analogni izhod prek PWM (0–255).
Odpri interaktivno v 3D →Kaj se naučiš
analogRead in 12-bitni ADCPWM z ledcAttach / ledcWriteFunkcija map()Zakaj ADC1 (GPIO 32–39)
Potrebuješ
- ESP32 DevKit V1 — mikrokrmilnik z WiFi in Bluetooth
- Breadboard (preizkusna plošča) — povezovanje brez spajkanja
- Jumper žice — M–M, M–F, F–F
- LED dioda — svetleča dioda 5 mm
- Upor — 220 Ω, 1 kΩ, 10 kΩ …
- Potenciometer — 10 kΩ spremenljivi upor
Kako deluje
Vhod: ESP32 nima »analognega očesa«, ima pa ADC — vezje, ki meri napetost in jo pretvori v število. 12 bitov → 4096 stopenj: 0 V = 0, 3,3 V = 4095. analogRead(34) vrne to število.
Izhod: digitalni pin pozna samo 0 ali 3,3 V. A če ga prižigaš in ugašaš zelo hitro (5 kHz), oko vidi povprečje. 25 % vklopljeno → šibek sij, 100 % → poln. To je PWM (Pulse Width Modulation). Z ledcAttach(pin, 5000, 8) povemo: 5000 Hz, 8 bitov (0–255). map() pretvori 0–4095 v 0–255.
Vezava
| Od | Do | Zakaj |
|---|---|---|
| ESP32 · 3V3 | Potenciometer, skrajni pin (stolpec 26) | Zgornji konec upora na 3,3 V. NIKOLI 5 V — ADC prenese največ 3,3 V. |
| Potenciometer, skrajni pin (stolpec 24) | letev − | Spodnji konec na 0 V. Skozi cel potenciometer teče 3,3 V / 10 kΩ = 0,33 mA. |
| Potenciometer, srednji pin (stolpec 25) | ESP32 · D34 (GPIO 34, ADC1) | Drsnik »pobere« napetost 0–3,3 V glede na položaj. GPIO 34 je samo-vhodni ADC1 pin — idealen. |
| ESP32 · D18 (PWM) | LED → 220 Ω → letev − | PWM: pin se prižiga/ugaša 5000-krat na sekundo; odstotek »vklopljenega« časa = svetlost. |
| ESP32 · GND | letev − | Skupna masa. |
Korak za korakom
- LED (19c, 20c) + upor 20a → letev −.
- Potenciometer s tremi pini v 24c, 25c, 26c.
- 3V3 → 26a (rdeča), 24a → letev − (črna), 25a → D34 (zelena).
- D18 → 19a za LED. GND → letev −.
- Naloži kodo, odpri Serial Monitor. Vrtiš → številke se spreminjajo 0 … 4095 in LED jim sledi.
Koda (Arduino IDE)
// Projekt 3: Zatemnilnik — ADC vhod + PWM izhod
const int POT_PIN = 34; // ADC1_CH6, samo vhod
const int LED_PIN = 18;
void setup() {
Serial.begin(115200);
// PWM: pin, frekvenca 5 kHz, ločljivost 8 bitov (0–255)
ledcAttach(LED_PIN, 5000, 8);
// Za Arduino-ESP32 core 2.x namesto zgornje vrstice:
// ledcSetup(0, 5000, 8); ledcAttachPin(LED_PIN, 0); in 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);
}Tipične težave
Vrednost trepeta za ±20? Normalno za ADC ESP32. Povpreči 10 branj.
Skrajni 3 % se »lepijo« na 0 in 4095 — ADC tam ni linearen.
Če pozneje dodaš WiFi — ADC2 pini (0,2,4,12–15,25–27) nehajo delovati. Zato GPIO 34.
Več projektov (še 7) z brezplačno prijavo v tečaju. Projekti →