Ciljevi učenja
- Razlikovati napajanje i ulaze relejnog modula od njegovih kontakata.
- Povezati NPN tranzistor između GPIO komande i aktivno-niskog ulaza modula.
- Objasniti zašto GPIO HIGH u ovoj šemi uključuje relej.
- Preklapati samo LED demonstracioni krug od 3,3 V preko COM i NO.
- Provjeriti obradu jednog pritiska, držanje tastera i početno isključeno stanje.
Prije početka
Kursevi 03 i 13: taster kao prekidač, uklanjanje odskakivanja, LED sa otpornikom i tranzistorski izlazni stepen.
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 upravljanje relejem pomoću tastera. Jedan pritisak uključuje relej, sljedeći ga isključuje. Preko njegovih kontakata uključivaćemo LED napajanu sa 3,3 V, pa ćeš vidjeti razliku između upravljačkog signala i stvarno zatvorenog strujnog kola.
Vježba koristi dvokanalni modul, ali samo kanal 1. Tranzistor prevodi komandu sa ESP32 na ulaz referentnog modula od 5 V. Tako nadograđujemo poznato upravljanje LED diodom na elektromehanički prekidač, uz jasno odvojene uloge njegovih priključaka.
Šta ćeš naučiti
- Razlikovati upravljački ulaz relejnog modula od njegovih kontakata.
- Objasniti funkcije COM, NO i NC.
- Prilagoditi logičku komandu pomoću NPN tranzistora.
- Obraditi jedan događaj po pritisku tastera.
- Provjeriti početno isključeno stanje i stvaran rad kontakta.
Predznanje
Završi kurs 03 o tasteru kao prekidaču i kurs 13 o tranzistorskom izlazu. Potrebno je prepoznati anodu i katodu LED diode, zajednički GND i razliku između 3,3 V logike i izvoda napajanja od 5 V.
Potrebna oprema
| Komponenta | Količina | Specifikacija i napomene |
|---|---|---|
| ESP32 razvojna ploča sa klasičnim ESP32-WROOM-32 modulom | 1 | GPIO nazivi moraju odgovarati referentnom profilu; fizički položaj izvoda provjeriti na ploči. |
| USB kabl za podatke i napajanje | 1 | Priključak prilagoditi ploči; komplet na slici navodi Micro-USB. |
| Eksperimentalna ploča | 1 | Komplet navodi 830 kontaktnih tačaka. Provjeriti eventualni prekid naponskih vodova. |
| Dvokanalni relejski modul 5 V — aktivno LOW | 1 | Referentni modul ima povlačenje IN na HIGH, ugrađene drajvere i diode zavojnica. Tačne osobine provjeri; na fotografiji je potvrđena samo kategorija 5 V/dva kanala. Koristi se jedan kanal. |
| Dodatni NPN tranzistor PN2222A | 1Obavezno dodatno — nije na slici kompleta | DODATNO, nije naveden u kompletu. Identifikuj B/C/E prema tačnom proizvođaču; PN2222A i P2N2222A mogu imati različit raspored. DODATNO: tranzistor nije naveden na fotografiji kompleta. |
| Otpornik 1 kΩ | 1 | Otpornik baze; u kursu 14 i paralelni otpornik piezo elementa. Količina ove vrijednosti u kompletu nije potvrđena. |
| Otpornik 10 kΩ | 1 | R2 je pull-down od baze Q1 prema GND; baza ostaje nisko dok GPIO ne upravlja. |
| Trenutni taster | 1 | Koristiti par priključaka koji se spaja pritiskom; ista strana četvoronožnog tastera može već biti spojena. |
| Crvena LED dioda | 1 | Anoda A i katoda K; provjeriti polaritet stvarne komponente. |
| Otpornik 220 Ω | 1 | Po jedan otpornik za svaku LED granu; 220 Ω iz kompleta. |
| Spojni kablovi | 13 | M-M ili F-M prema priključcima ploče. Okvirna količina; zavisi od fizičkog rasporeda. |
PN2222A tranzistor dodatna je komponenta koja nije prikazana u fotografisanom kompletu. Tačan raspored B/C/E provjeri u dokumentaciji svog primjerka. Zaštita zavojnice u ovoj vježbi već pripada odgovarajućem relejnom modulu; ne dodajemo diodu preko njegovog upravljačkog ulaza.
Fotografija ne potvrđuje električnu izvedbu modula. Referentni modul mora imati napajanje 5 V, aktivno-niske ulaze, ugrađene upravljačke tranzistore i zaštitu zavojnica, kao i ulaz koji ostaje HIGH kada ga naš tranzistor ne povlači prema GND. Provjeri dokumentaciju stvarnog modula prije povezivanja. Modul koji zahtijeva drugačije upravljanje nije zamjenjiv samo zato što izgleda slično.
Upravljački dio i kontakti
VCC i GND napajaju elektroniku i zavojnice modula. IN1 prima komandu za kanal 1. COM1 je zajednički kontakt; NO1 je otvoren kada je relej isključen, a NC1 tada povezan sa COM1. Kada se relej uključi, COM1 prelazi na NO1. Oznake „normalno otvoren” i „normalno zatvoren” odnose se na stanje bez aktivirane zavojnice.
Kontakt ne proizvodi napon. Zato naš LED krug ima svoj izvod od 3,3 V, otpornik i povratak na GND. U ovoj vježbi kontakti preklapaju isključivo taj LED krug; ne priključujemo mrežni napon, grijač, pumpu ili drugi potrošač.
Zašto koristimo tranzistor
Ulaz referentnog modula aktivira relej kada padne na LOW. Direktna veza nepoznatog ulaza od 5 V sa GPIO nije prihvatljiva. NPN Q1 omogućava da GPIO komanduje bazom kroz otpornik, dok kolektor povlači IN1 prema GND. Kada se Q1 isključi, ugrađeni pull-up ulaza vraća IN1 na visok nivo.
| GPIO25 | Q1 | IN1 | Relej i kontaktna LED |
|---|---|---|---|
LOW | Isključen. | HIGH. | Isključeni; COM1–NO1 otvoreno. |
HIGH | Uključen. | LOW. | Uključeni; COM1–NO1 zatvoreno. |
Dvije promjene logičkog smisla daju jednostavno pravilo programa: HIGH na GPIO25 znači uključen relej. Q1 ovdje preklapa ulaz modula, a ne golu zavojnicu. Ugrađeni izlazni stepen i dioda modula obavljaju upravljanje i zaštitu zavojnice.
Šema i povezivanje
Šema povezivanja
Referentni modul je aktivno-LOW na 5 V, sa ugrađenim drajverima zavojnica, zaštitnim diodama i povlačenjem IN na HIGH. Dodatni Q1 upravlja samo IN1, ne golom zavojnicom. IN2 je HIGH, kanal 2 isključen. COM1/NO1 prekidaju samo LED krug na 3,3 V; NC1 je nepovezan.
| Od | Do | Opis veze |
|---|---|---|
ESP32.GPIO25 | R1.1 | Otpornik R1 od 1 kΩ ograničava struju baze. |
R1.2 | Q1.B | Baza dodatnog PN2222A tranzistora. |
Q1.B | R2.1 | R2 od 10 kΩ drži bazu nisko dok GPIO ne upravlja. |
R2.2 | ESP32.GND | Drugi kraj pull-down otpornika. |
Q1.E | ESP32.GND | Emiter prema zajedničkoj masi; provjeriti stvarni B/C/E raspored. |
Q1.C | K1.IN1 | Kolektor obara IN1 na LOW kada je GPIO25 HIGH. |
ESP32.USB5V | K1.VCC | Napajanje referentnog modula 5 V; JD-VCC kratkospojnik ako postoji prema dokumentaciji. |
ESP32.GND | K1.GND | Zajednička masa modula i upravljačkog tranzistora. |
ESP32.USB5V | K1.IN2 | Neiskorišćeni aktivno-LOW ulaz drugog kanala drži se HIGH, odnosno isključeno. |
ESP32.3V3 | K1.COM1 | Zajednički kontakt prenosi samo 3,3 V LED krug. |
K1.NO1 | R3.1 | Normalno otvoreni kontakt prema R3 od 220 Ω. |
R3.2 | D1.A | Serijski otpornik prema anodi LED. |
D1.K | ESP32.GND | Katoda indikacione LED prema masi; NC1 ostaje nepovezan. |
ESP32.GPIO27 | SW1.CONTACT_A | Taster na ulaz sa INPUT_PULLUP. |
SW1.CONTACT_B | ESP32.GND | Drugi izvod odabranog para kontakata, koji se spaja pritiskom. |
- Isključi USB. Potvrdi oznake i karakteristike modula, raspored tranzistora i kapacitet USB izvora i ploče za njegovo napajanje.
- Spoji modul GND, ESP32 GND i emiter Q1 na zajednički GND.
- Spoji GPIO25 preko R1 od 1 kΩ na bazu Q1. Dodaj R2 od 10 kΩ između baze i GND.
- Spoji kolektor Q1 na IN1. Ne spajaj IN1 direktno na GPIO25.
- Spoji VCC modula na dokumentacijom potvrđeni USB izvod od 5 V na ESP32 ploči. Ne zaključuj funkciju nepoznatog priključka samo iz oznake VIN.
- Spoji nekorišćeni IN2 na isti izvod od 5 V da kanal 2 referentnog aktivno-niskog modula ostane isključen. Ako postoji JD-VCC, koristi dokumentovanu vezu VCC/JD-VCC sa istim izvorom od 5 V.
- Poveži 3V3 sa COM1. Poveži NO1 preko R3 od 220 Ω sa anodom LED D1, a katodu sa GND. NC1 i kontakte kanala 2 ostavi nepovezane.
- Spoji GPIO27 preko tastera na GND. Provjeri prekidanje na pravom paru kontakata tastera, pregledaj cijelo kolo i tek tada poveži USB.
Koristi samo USB napajanje. Ne dodaj nezavisni izvor od 5 V paralelno sa njim. Na IN1 ne postavlja se zaštitna dioda kao preko zujalice iz kursa 13: taj priključak nije zavojnica.
Priprema Arduino okruženja
U Arduino IDE-u 2.x koristi esp32 by Espressif Systems 3.3.12, ploču ESP32 Dev Module i odgovarajući port. Dodatne biblioteke nisu potrebne. Otvori relay_switch/relay_switch.ino. Provjeri RELAY_DRIVER_PIN kao GPIO25 i BUTTON_PIN kao GPIO27. Serial Monitor podesi na 115200 baud.
Kompletan Arduino program
#include <Arduino.h>
constexpr uint8_t RELAY_DRIVER_PIN = 25;
constexpr uint8_t BUTTON_PIN = 27;
constexpr uint32_t DEBOUNCE_MS = 30;
// Each event is accepted once after 30 ms of stable input.
// If held during reset, a stable release is required before the first press.
struct DebouncedButton {
bool rawHigh = true;
bool stableHigh = true;
bool armed = true;
bool pressed = false;
bool released = false;
uint32_t rawChangedAt = 0;
uint32_t pressStartedAt = 0;
void begin(uint32_t now) {
rawHigh = stableHigh = digitalRead(BUTTON_PIN) == HIGH;
armed = rawHigh;
rawChangedAt = now;
pressed = released = false;
}
void update(uint32_t now) {
pressed = released = false;
const bool readingHigh = digitalRead(BUTTON_PIN) == HIGH;
if (readingHigh != rawHigh) {
rawHigh = readingHigh;
rawChangedAt = now;
}
if (rawHigh != stableHigh && static_cast<uint32_t>(now - rawChangedAt) >= DEBOUNCE_MS) {
stableHigh = rawHigh;
if (stableHigh) {
armed = true;
released = true;
} else if (armed) {
pressed = true;
pressStartedAt = rawChangedAt;
}
}
}
};
DebouncedButton button;
bool relayOn = false;
void setRelay(bool on) {
relayOn = on;
// HIGH turns the NPN on, pulling the active-LOW module input LOW.
digitalWrite(RELAY_DRIVER_PIN, relayOn ? HIGH : LOW);
Serial.print("Relay="); Serial.println(relayOn ? "ON" : "OFF");
}
void setup() {
Serial.begin(115200);
pinMode(RELAY_DRIVER_PIN, OUTPUT);
digitalWrite(RELAY_DRIVER_PIN, LOW);
pinMode(BUTTON_PIN, INPUT_PULLUP);
button.begin(millis());
setRelay(false);
}
void loop() {
button.update(millis());
if (button.pressed) setRelay(!relayOn);
}
Počni bez izmjene pinova ili polariteta. Prikazano pravilo važi za cijeli definisani lanac GPIO–Q1–IN1–relej.
Kako program radi
Logička promjenljiva relayOn pamti da li relej treba da bude uključen. Funkcija setRelay() povezuje tu vrijednost sa GPIO izlazom. Pri pokretanju izlaz i zapamćeno stanje postavljaju se na isključeno; prethodno uključivanje ne čuva se kroz reset.
Taster koristi INPUT_PULLUP: otpušten znači HIGH, a pritisnut LOW. Program prihvata promjenu tek kada novi nivo traje najmanje 30 ms. Novi prihvaćeni pritisak mijenja stanje jednom. Držanje dugmeta ne stvara niz komandi.
Ako je taster već pritisnut pri resetu, prvo ga treba otpustiti pa ponovo pritisnuti. Time početni položaj tastera ne uključuje relej. R2 dodatno drži tranzistor isključenim dok GPIO još nije podešen; ispravan modul sa ulaznim pull-upom važan je dio tog ponašanja.
Pokretanje i provjera kontakta
Klikni Verify, zatim Upload. Poslije reseta kontaktna LED mora biti ugašena. Pritisni taster i provjeri zajedno izvještaj programa, moguće čujno preklapanje i LED koja se napaja kroz COM1–NO1.
Indikatorska LED na modulu može pokazivati ulaznu komandu bez dokaza da je kontakt ispravno povezan. Zato je zasebna kontaktna LED važna provjera cijelog puta. Nemoj brzo nasumično pritiskati taster; razmakni probe da jasno vidiš svako pojedinačno stanje.
Eksperiment i opažanja
| Postupak | Očekivani rezultat |
|---|---|
| Reset sa otpuštenim tasterom. | Relej i kontaktna LED isključeni. |
| Jedan pritisak i otpuštanje. | Relej i kontaktna LED uključeni. |
| Drži taster tri sekunde. | Jedna promjena; nema ponavljanja tokom držanja. |
| Novi pritisak poslije otpuštanja. | Stanje se ponovo promijeni. |
| Reset dok je taster pritisnut. | Ostaje isključen; za uključivanje su potrebni otpuštanje i novi pritisak. |
Zabilježi rezultate sa svoje ploče. Ova tabela opisuje očekivanja i ne predstavlja unaprijed izvršeno mjerenje.
Najčešći problemi
| Simptom | Provjera i postupak |
|---|---|
| Program prijavi ON, LED ne svijetli. | Provjeri napajanje modula, stvarni kontakt COM1/NO1, otpornik i LED polaritet. |
| LED svijetli dok je relej isključen. | Vjerovatno je povezana na NC1; isključi USB i provjeri oznake. |
| Relej se ne uključuje. | Provjeri aktivno-niski režim, zajednički GND, Q1 B/C/E i vezu IN1. |
| Kanal 2 se neočekivano uključuje. | Provjeri da je IN2 vezan na 5 V i da specifikacija odgovara referentnom modulu. |
| ESP32 se resetuje pri preklapanju. | Isključi napajanje i provjeri spojeve, ukupnu struju i mogućnosti USB izvora. |
Samostalni zadatak i rješenje
Promijeni ponašanje tako da relej radi samo dok se taster drži. Zadrži obradu odskakivanja, početno isključeno stanje i zahtjev za otpuštanjem tastera držanog pri resetu.
Zadrži button.update(millis()) u petlji, a uslov koji prebacuje stanje zamijeni ovim kratkim blokom:
const bool requestedOn = button.armed && !button.stableHigh;
if (requestedOn != relayOn) setRelay(requestedOn);
Stabilni LOW znači uključeno tek kada button.armed dozvoli upravljanje poslije otpuštanja. Stabilni HIGH isključuje. Poređenje sprečava nepotrebno ponavljanje iste komande i ispisa. Sirovi digitalRead() zanemario bi filtriranje i pravilo početka rada.
Zašto koristimo NO1? Želimo otvoren LED krug kada je zavojnica isključena. Da li IN1 od 5 V znači da kontakte moramo napajati sa 5 V? Ne: komanda modula i izvor LED kruga imaju različite uloge. Šta reset mijenja? Program ponovo postavlja relej na OFF, bez pamćenja prethodnog stanja.
Preuzimanja
Primarni izvori
- SunFounder: primjer dvokanalnog modula od 5 V sa aktivno-niskim ulazima.
- SunFounder: princip releja i NO/NC kontakata.
- onsemi: PN2222A, priključci i električne karakteristike.
- Espressif: ESP32-DevKitC i izvori napajanja.
- Espressif: digitalni ulazi, izlazi i pull-up.
- Arduino: uklanjanje odskakivanja tastera.
Električne osobine i oznake relejnog modula potvrdi njegovim tehničkim listom; fotografija kompleta nije zamjena za tu provjeru.
