Podešavanje jačine svjetla potenciometrom

Poveži potenciometar od 10 kΩ i LED diodu, očitaj analogni ulaz ESP32 i pretvori njegovo očitavanje u PWM kojim podešavaš svjetlinu.

Prvi koraci sa ESP32 i ArduinomPočetni nivo75 min

Ciljevi učenja

  • Povezati potenciometar kao djelitelj napona na 3V3.
  • Objasniti 12-bitno očitavanje, zasićenje na krajevima i ograničenja sirovih ADC podataka.
  • Skalirati ulaz 0–4095 u 8-bitni PWM opseg 0–255.
  • Koristiti pin-based LEDC API za Arduino-ESP32 3.x.
  • Provjeriti ponašanje na krajevima i u sredini opsega.

Prije početka

Završeni kursevi 01 i 02: učitavanje programa, Serial Monitor, polaritet LED i serijski otpornik.

Referentna postavka

Ploča u Arduino IDE-u
ESP32 Dev Module
Arduino-ESP32
3.3.12
Serial Monitor
115200 baud

Ovo je referentni profil, a ne identifikacija ploče sa fotografije. Za ESP32-C3/S2/S3 ili drugačije označenu ploču treba prilagoditi GPIO i provjeriti šemu prije spajanja.

Šta ćemo napraviti

Napravićemo regulator osvjetljenja: okretanjem potenciometra mijenjaćemo jačinu svjetla jedne LED diode. U Serial Monitoru pratićemo očitavanje potenciometra i vrijednost kojom upravljamo izlazom. Tako ćemo povezati fizički položaj dugmeta, broj u programu i vidljivi rezultat.

Šta ćeš naučiti

  • Povezati potenciometar kao djelitelj napona.
  • Očitati analogni ulaz i razlikovati sirovi broj od napona.
  • Pretvoriti opseg 0–4095 u opseg 0–255.
  • Upravljati LED diodom pomoću PWM signala.
  • Odvojiti učestalost očitavanja od učestalosti ispisa.

Predznanje

Prethodno završi kurseve 01 i 02. Potrebno je da znaš učitati program, otvoriti Serial Monitor i povezati LED sa serijskim otpornikom. Koristimo klasičnu razvojnu ploču ESP32 sa modulom ESP32-WROOM-32. Prikaz povezivanja nije profil za ESP32-C3, S2 ili S3. Na ploči traži oznake GPIO pinova; brojevi u ovom kursu nisu redni brojevi fizičkih izvoda.

Potrebna oprema

KomponentaKoličinaSpecifikacija i napomene
ESP32 razvojna ploča sa klasičnim ESP32-WROOM-32 modulom1GPIO nazivi moraju odgovarati referentnom profilu; fizički položaj izvoda provjeriti na ploči.
USB kabl za podatke i napajanje1Priključak prilagoditi ploči; komplet na slici navodi Micro-USB.
Eksperimentalna ploča1Komplet navodi 830 kontaktnih tačaka. Provjeriti eventualni prekid naponskih vodova.
Crvena LED dioda1Anoda A i katoda K; provjeriti polaritet stvarne komponente.
Otpornik 220 Ω1Po jedan otpornik za svaku LED granu; 220 Ω iz kompleta.
Potenciometar 10 kΩ1Dva krajnja izvoda i klizač W; raspored utvrditi prema stvarnoj komponenti.
Spojni kablovi6M-M ili F-M prema priključcima ploče.

Okvirna količina.

Potenciometar treba da ima otpor 10 kΩ. Prije povezivanja prepoznaj njegova dva krajnja priključka i klizač. Provjeri oznake ili dokumentaciju konkretnog dijela; klizač je priključak koji mijenja odnos otpora prema krajevima.

Kako regulator radi

Krajeve potenciometra povezujemo na 3V3 i GND. Klizač daje napon između njih, zavisno od položaja. ADC pretvara taj napon u broj. Program postavlja rezoluciju na 12 bita, odnosno 4096 mogućih vrijednosti od 0 do 4095.

analogRead() vraća nekalibrisano očitavanje. Za klasični ESP32 dokumentovani mjerni opseg sa ADC_11db približno je 0,15–3,1 V. Pošto potenciometar obuhvata i krajeve napajanja 0–3,3 V, očitavanje može dostići granicu prije kraja okretanja. To je očekivano u ovom regulatoru; broj ne predstavljamo kao precizno mjerenje napona. Espressif: ADC

PWM brzo uključuje i isključuje LED. Frekvencija u ovom programu je 5000 Hz, a 8-bitna upravljačka vrijednost je 0–255. Nula znači ugašeno; 255 predstavlja maksimalnu zadatu uključenost. Vrijednost 128 daje približno polovinu vremena uključenosti, ali ljudski doživljaj svjetline nije linearna skala.

Povezivanje

Šema povezivanja

Prikaz prikazuje električne veze po GPIO nazivima, a ne fizički raspored priključaka ploče. Napajanje ploče je preko USB kabla.

Šema povezivanja — električne veze navedene u tabeli ispod
Šema povezivanjaUvećajSVGPNG
Veze · Šema povezivanja
OdDoOpis veze
ESP32.GPIO25R1.1Upravljanje granom LED.
R1.2D1.AOtpornik 220 Ω prema anodi LED diode.
D1.KESP32.GNDKatoda prema zajedničkoj masi.
ESP32.3V3RV1.END_AJedan kraj potenciometra 10 kΩ.
ESP32.GNDRV1.END_BDrugi kraj potenciometra.
RV1.WESP32.GPIO34Klizač prema analognom ulazu ADC1.
  1. Isključi USB prije mijenjanja spojeva. Postavi LED i potenciometar tako da njihovi različiti priključci nisu slučajno spojeni istom grupom rupica.
  2. Poveži jedan kraj potenciometra sa 3V3, a drugi sa GND. Klizač poveži na GPIO34.
  3. Poveži GPIO25 sa otpornikom od 220 Ω, slobodni kraj otpornika sa anodom LED, a katodu sa GND.
  4. Provjeri zajedničku masu i kontinuitet korišćenih sabirnica eksperimentalne ploče. Sabirnica može biti prekinuta na sredini.
  5. Uporedi svaki spoj sa tabelom i šemom, pa uključi USB.

Ako smjer okretanja ne odgovara željenom smjeru promjene, zamjena dva krajnja priključka potenciometra obrće smjer. Klizač ostaje na GPIO34. Koristi isključivo 3V3 za ovo kolo; izlaz potenciometra ne povezuj na 5 V.

Priprema Arduino okruženja

U Arduino IDE-u 2.x instaliraj paket esp32 by Espressif Systems, ciljnu verziju 3.3.12, i izaberi ESP32 Dev Module te port svoje ploče. Postupak instalacije opisan je u zvaničnom uputstvu. Dodatne biblioteke nisu potrebne.

Preuzmi Arduino primjer (.zip) i raspakuj ga. Otvori potentiometer_pwm.ino iz istoimenog foldera. Prvo koristi Verify, zatim Upload. Otvori Serial Monitor na 115200 baud. Ciljna verzija je dio pripreme kursa, a rezultat kompajliranja i proba na opremi evidentiraju se zasebno.

Kompletan program

potentiometer_pwm.ino Arduino / C++
Preuzmi .ino

#include <Arduino.h>

constexpr uint8_t LED_PIN = 25;
constexpr uint8_t POT_PIN = 34;
constexpr uint32_t PWM_FREQUENCY_HZ = 5000;
constexpr uint8_t PWM_RESOLUTION_BITS = 8;
constexpr uint32_t SAMPLE_INTERVAL_MS = 20;
constexpr uint32_t REPORT_INTERVAL_MS = 200;

bool pwmReady = false;
uint32_t lastSampleMs = 0;
uint32_t lastReportMs = 0;
uint16_t rawValue = 0;
uint8_t duty = 0;

void setup() {
  Serial.begin(115200);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
  pinMode(POT_PIN, INPUT);
  analogReadResolution(12);
  analogSetPinAttenuation(POT_PIN, ADC_11db);

  // Arduino-ESP32 3.x uses the GPIO pin in ledcAttach() and ledcWrite().
  pwmReady = ledcAttach(LED_PIN, PWM_FREQUENCY_HZ, PWM_RESOLUTION_BITS);
  if (!pwmReady) {
    Serial.println("ERROR: PWM setup failed. Check the board and ESP32 core.");
    return;
  }

  ledcWrite(LED_PIN, 0);
  lastSampleMs = millis();
  lastReportMs = lastSampleMs;
  Serial.println("WB Maker Bridge - Turn the potentiometer to dim the LED.");
}

void loop() {
  if (!pwmReady) {
    delay(100);
    return;
  }

  const uint32_t now = millis();

  if (now - lastSampleMs >= SAMPLE_INTERVAL_MS) {
    lastSampleMs = now;
    rawValue = analogRead(POT_PIN);
    duty = (static_cast<uint32_t>(rawValue) * 255U) / 4095U;
    ledcWrite(LED_PIN, duty);
  }

  if (now - lastReportMs >= REPORT_INTERVAL_MS) {
    lastReportMs = now;
    Serial.print("ADC: ");
    Serial.print(rawValue);
    Serial.print(" | PWM: ");
    Serial.println(duty);
  }
}

Prikaz i preuzimanje koriste isti Arduino fajl. Sačuvaj svoju kopiju prije samostalnih izmjena.

Kako čitati program

U početnim konstantama pronađi ulaz GPIO34, izlaz GPIO25, frekvenciju 5000 Hz i rezoluciju od 8 bita. Podešavanje ADC-a i PWM-a obavlja se jednom u setup().

ledcAttach() povezuje PWM sa pinom, a ledcWrite() postavlja njegovu upravljačku vrijednost. Ovaj primjer koristi API za Arduino-ESP32 3.x, u kojem ovim pozivima prosljeđujemo pin. Stariji primjeri sa ledcSetup() i ledcAttachPin() zahtijevaju prilagođavanje. Espressif: LEDC · Prelazak na 3.x

Svakih približno 20 ms program uzima novo očitavanje i skalira ga: sirova vrijednost × 255 / 4095. Račun je cjelobrojan, pa se razlomljeni dio odbacuje. Za ulaz 2048 rezultat je 127. To je primjer računanja; srednji položaj potenciometra ne mora dati baš 2048.

Ispis se obavlja svakih približno 200 ms. Odvojeni intervali omogućavaju čest odziv regulatora i pregledan ispis. Vremena se provjeravaju pomoću millis(), pa između očitavanja nema dugog zaustavljanja programa.

Pokretanje i očekivani rezultat

Polako pomjeri potenciometar od jednog kraja do drugog. LED treba da prelazi od ugašenog ili vrlo slabog svjetla do maksimalnog intenziteta koji ovo kolo omogućava. Uporedi promjenu sa brojevima u Serial Monitoru. Zatim zadrži isti položaj desetak sekundi i zabilježi eventualna mala kolebanja.

ProvjeraŠta zabilježitiŠta provjeravaš
Najmanja vrijednostSirovo očitavanje i PWMDonju granicu regulatora
Približna sredinaOčitavanje, PWM i utisak svjetlineVezu mjerenja i skaliranja
Najveća vrijednostGdje se pojavi 4095Zasićenje pri vrhu opsega
Miran potenciometarNajmanji i najveći zabilježeni brojStabilnost očitavanja

Najčešći problemi

ProblemProvjera i korekcija
LED ne svijetli, a brojevi se mijenjajuProvjeri GPIO25, polaritet LED, otpornik i zajednički GND.
Stalno vidiš 0 ili 4095Provjeri klizač, GPIO34 i odvojene priključke potenciometra. Mali nepromjenjivi dio hoda pri kraju je očekivan.
Vrijednosti jako skačuProvjeri labave kablove i da li klizač stvarno dolazi do ulaza.
Greška da ledcAttach nije definisanProvjeri izbor ESP32 ploče i verziju paketa 3.3.12.
Nema ispisa ili je nečitljivProvjeri port i 115200 baud; po potrebi pritisni EN/RESET.

Samostalni izazov

Napravi dvije odvojene verzije: u prvoj svjetlina opada dok očitavanje raste; u drugoj maksimalna PWM vrijednost iznosi 128. Mijenjaj samo račun koji određuje izlaz, a zatim provjeri oba kraja hoda.

Kratka provjera znanja

  1. Zašto klizač povezujemo na analogni ulaz?
  2. Da li PWM vrijednost 128 znači stalnih 1,65 V na izlazu?
  3. Zašto je moguće dobiti 4095 prije krajnjeg položaja?

Smjernice za odgovore i rješenje

Klizač daje promjenjivi napon, a ADC ga pretvara u broj. PWM mijenja trajanje uključenosti digitalnog izlaza; 128 nije zahtjev za stalnim izlaznim naponom. Granica ADC-a može se dostići prije kraja potenciometra jer je njegov dokumentovani mjerni opseg uži od punog hoda do 3,3 V.

Za obrnut smjer od 255 oduzmi već izračunatu PWM vrijednost: ulaz 0 daje 255, a ulaz 4095 daje 0. Za drugi izazov skaliraj izrazom sirova vrijednost × 128 / 4095. Dobijaš granice 0 i 128, odnosno približno polovinu maksimalne uključenosti, bez tvrdnje da oko vidi tačno upola slabije svjetlo.

Preuzimanja

Preuzmi program i šemu prije rada. U svoje bilješke upiši model ploče, verziju paketa i opažene rezultate.

Primarni izvori