Kako se programira 7 Segment Ekran sa ESP32 i Arduino Mikrokontrolerom
U prethodnoj lekciji objasnili smo šta je to ESP32 mikrokontroler, koje su njegove karakteristike, kao i postavke za programiranje ESP32 sa Arduino IDE-om. Za sve one koji su preskočili pročitati, lekciju mogu naći na ovome LINK-u.
Sigurno su svi koji čitaju ovu lekciju negdje vidjeli 7 segmenti ekran. Neki su ga možda vidjeli u starijim modelima liftova kako pokazuje spratnost, neki možda na autobuskim ili željezničkim stanicama kako porikazuje vrijeme, neki ekran vidjeli na košarkaškim utakmicama, dok su ljubiteljima akcionih filmova definitivno najpoznatije scene one kada sat odbrojava zadnjih 10 sekundi prije eksplozije bombe.
U ovoj lekciji ćemo objasniti:
- Šta je to 7 segmentni ekran i od čega se sastoji
- Šema povezivanja i kod za kontrolu 7 segmentnog ekrana Arduino mikrokontrolerom
- Šema povezivanja i kod za kontrolu 7 segmentnog ekrana ESP32 mikrokontrolerom
- Specifikacija materijala
Šta je to 7 segmentni ekran i od čega se sastoji
Kako bi povećali efikasnost lekcija, najbolje bi bilo da se odma bacimo na ono glavno, a to je odgovor na pitanje sta je to sedam segmentni ekran. Najjednostavniji odgovor na prethodno postavljeno pitanje bi bio da je sedam semgentni ekran ništa drugo nego 8 led lampica. Većina čitaoca će se zapitati zašto se zove 7 segmentni ekran, a ima 8 ledica. Odgovor na to pitanje možete naći na slici ispod:

Na slici iznad, pored svakog segmenta (led diode) možete vidjeti slova a,b,c,d,e,f,g (7 segmenata), dok u desnom donjem ćošku možete vidjeti osmu led diodu koja se zove DP. DP je oznaka tačku i po potrebi možemo i nju koristiti na isti način kao i brojeve. Također, na slici iznad možete vidjeti da postoje dva tipa segmenata. sa Zajedničkom anodom (commond anode) i sa zajedničkom katodom (common catode). Zajednička anode znači da je zajedinčki VCC ili +, dok zajednička katoda znači da je zajednički GND ili -.
U slučaju da niste siguri da li je Vaš ekran sa zajedničkom anodom ili katodom, to možemo provjeriti na dva jednostavna načina.
Prvi način je da uzmete multimetar i prebacite na polje za ispitvanje dioda kao na slici ispod.

Nakon što prebacimo na ispitivanje dioda pogledajte sliku ispod.

Na slici iznad možete vidjeti da kabl sa multimetra koji ima crni završetkak stavimo u sredinu tj. na polje GND, dok drugi kraj kabla crveni stavimo na bilo koji od segmenata. U slučaju da jedna lampica proradi tj. da segment koji ste povezali proradi, to znači da je GND zajednički i da imate ekran sa zajedničkom katodom (Common Cathode). U slučaju da ni jedna led dioda ne svijetli prebacite crveni kraj kabla na multimetru u sredinu, dok crni kraj kabla treba da ide na neki od segmenata. U tom slučaju očekujemo da proradi lampica, jer trećeg tipa ekrana nema. Jedino što može da se desi kao opcija tri je da su lampice crkle u ekranu.
Drugi način je da ispitamo ispravnost LED dioda u 7 segmentnom ekranu je Arduino mikrokontrolerom. GND sa arduina dovedite na srednji GND pin i koristite 3.3V izlaz. Preporučujemo da na kraj kabla stavite otpornik od 50 do 100Ω i da naslonite na neki od segmenata. U slučaju da ne svijetli ni jedna lampica stavite otpornik sa VCC (3.3V) kabla i ubodite u sredinu, dok GND direktno vodite na neki od segmenata. Također, u slučaju da koristite mikrokontroler koji nema 3.3V, možete koristiti i 5V izlaz samo što u tom slučaju koristite od 200 do 300Ω otpornik.

Sve do sada što smo obrazložili vrijedi i za Arduino i za ESP32 mikrokontroler, samo što ESP32 nema izlaz od 5V, pa ćemo koristiti 3.3V sa otpornikom od 50 do 100Ω.
U nastavku ćemo lekciju podijeliti na 2 primjera. Prvi primjer će biti šema i kod za Arduino, dok će se drugi primjer odnositi na ESP32.
Šema povezivanja i kod za kontrolu 7 segmentnog ekrana Arduino mikrokontrolerom
U slučaju da ne želite prepisivati kod sa slike, kliknite na ovaj GITHUB link i preuzmite kod iz ovog tutorijala, kao i od ostalih Tutorijala.
Obzirom da Arduino radi na 5V, a da su svi segmenti samo “obične” led diode, za rad istih je potrebno postaviti odgovarajući otpornik. Otpornik koji ćemo koristiti u našem primjeru je 220Ω (ožete koristiti bilo koji od 200-300Ω). Za one koji žele znati kako se računa odgovarajući otpornik mogu pročitati na lekciji sa linka : https://starmotech.com/led-diode-otpornici-i-eksperimentalna-ploca/, kao i pogledati na našem YouTube kanalu: LINK KANALA.
Šema povezivanja Arduina sa 7 segmentnim ekranom:

Na šemi iznad možete vidjeti da koritimo 7 segmentni ekran sa zajedničkom Anodom.
Tabla pinova – veza arduina sa ekranom:
Sedan Segmentni pinovi | Arduino pinovi |
a | 2 |
b | 3 |
c | 4 |
d | 5 |
e | 6 |
f | 7 |
g | 8 |
Zajedniča / Common | GND / VCC |
dp | – |
Kod za upravljanje 7 segmentnim ekranom sa Arduino Uno mikrokontrolerom:
Naravno da postoji dosta elegantniji i kraći način za programiranje ekrana kroz nizove, ali naš kod je prilagođen svim uzrastima kako bi hobistima bio što jasniji proces izvršavanja koda.
// Definicija pinova za segmente (A, B, C, D, E, F, G)
int A = 2;
int B = 3;
int C = 4;
int D = 5;
int E = 6;
int F = 7;
int G = 8;
void setup() {
// Postavi sve segmente kao outpute - izlaze
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
}
void loop() {
prikaziBroj(0); // pozovi funkiju i ispisi broj 0
delay(500); // čelaj 0,5 sec
prikaziBroj(1);
delay(500);
prikaziBroj(2);
delay(500);
}
// Funkcija za prikaz brojeva od 0 do 9
void prikaziBroj(int broj) {
if (broj == 0) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
}
if (broj == 1) {
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}
if (broj == 2) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(G, LOW);
digitalWrite(E, LOW);
digitalWrite(D, LOW);
digitalWrite(C, HIGH);
digitalWrite(F, HIGH);
}
if (broj == 3) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(G, LOW);
digitalWrite(E, HIGH);
digitalWrite(D, LOW);
digitalWrite(C, LOW);
digitalWrite(F, HIGH);
}
if (broj == 4) {
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(A, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
}
if (broj == 5) {
digitalWrite(A, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(B, HIGH);
digitalWrite(E, HIGH);
}
if (broj == 5) {
digitalWrite(A, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(B, HIGH);
digitalWrite(E, HIGH);
}
if (broj == 6) {
digitalWrite(A, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(E, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(B, HIGH);
}
if (broj == 7) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}
if (broj == 8) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
if (broj == 9) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(E, HIGH);
}
}
Obzirom da smo koristili kod sa zajedničkom Anodom, to znači da smo VCC (+) doveli na zajednički pin, dok smo sa stanjem LOW palili segmente, a sa stanjem HIGH gasili segmente.
U slučaju da koristite zajedničku katodu, sve što trebate uraditi je da na sredinu dovedemo GND (-) i u kodu zamijenimo gdje je LOW staviti HIGH i obrnuto.
Šema povezivanja i kod za kontrolu 7 segmentnog ekrana ESP32 mikrokontrolerom
Prije samog povezivanja ESP32 mikrokontrolera, bitno je naglasiti da ne smijete ploču spuštati na metalnu podlogu, jer pinovi nisu izolovani. U slučaju da navedeni kontroler spustimo na metalnu podlogu, možemo izazvati kratki spoj između pinova i oštetiti mikrokontroler, a nismo ni počeli sa projekom.
Napomena: Većina ESP32 i ESP8266 mikrokontrolera ne odgovara breadboardima, pa se često prepolovi breadboard po sredini kako bi se dobilo na prostoru. Naš savjet Vam je kupiti ESP32 Screw Shield i ne patiti se sa pilanjem breadboard-a nožem ili pilom. Screw Shield će Vam omogućiti čvršću vezu između kablova i mikrokontrolera, jer se sve veze “stegnu” šarafima.

Kao na šemi iznad, otpornik se preporučuje između 50 i 100Ω, ali veliki led dioda će raditi i bez otpornika jer ESP32 radi na izlaznom naponu od 3.3V, a ne kao Arduino 5V. Naša preporuka da se defenitivno staviti otpornik! Nakon što smo sve povezali kao na šemi iznad, vrijeme je za kod. Ako ne želite prepisivati kod sa slike, kliknite na ovaj GITHUB link i preuzmite kod iz ovog tutorijala, kao i od ostalih Tutorijala.
// Definicija pinova za segmente (A, B, C, D, E, F, G)
int A = 32;
int B = 33;
int C = 25;
int D = 26;
int E = 27;
int F = 14;
int G = 12;
void setup() {
// Postavi sve segmente kao outpute - izlaze
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
}
void loop() {
prikaziBroj(0); // pozovi funkiju i ispisi broj
delay(500);
prikaziBroj(1);
delay(500);
prikaziBroj(2);
delay(500);
}
// Funkcija za prikaz brojeva od 0 do 9
void prikaziBroj(int broj) {
if (broj == 0) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
}
if (broj == 1) {
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}
if (broj == 2) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(G, LOW);
digitalWrite(E, LOW);
digitalWrite(D, LOW);
digitalWrite(C, HIGH);
digitalWrite(F, HIGH);
}
if (broj == 3) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(G, LOW);
digitalWrite(E, HIGH);
digitalWrite(D, LOW);
digitalWrite(C, LOW);
digitalWrite(F, HIGH);
}
if (broj == 4) {
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(A, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
}
if (broj == 5) {
digitalWrite(A, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(B, HIGH);
digitalWrite(E, HIGH);
}
if (broj == 5) {
digitalWrite(A, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(B, HIGH);
digitalWrite(E, HIGH);
}
if (broj == 6) {
digitalWrite(A, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(E, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(B, HIGH);
}
if (broj == 7) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}
if (broj == 8) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
if (broj == 9) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(E, HIGH);
}
}
U slučaju da imate bilo kakvo pitanje vezano za mikrokontrolere, senzore i ostalu IoT opremu, naš tim Vam stoji na raspolaganju!
Zadatak za kraj:
- Povežite dugme (push button) na digitalni pin i napravite kod tako da kada držite dugme brojevi se nasumično mjenjaju – koristiti funkciju random. Kada dugme pustite zadnji broj ostane prikazan. Brzina promjena brojeva je 2 broja u sekundi ili 0,5sec.
Specifikacija materijala:
- 1x Espressif ESP32 mikrokontroler ili Arduino (Uno)
- 1x Breadboard
- 1x 7 segmentni ekran 1 broj
- 8x otpornik (220Ω ili 100Ω)
- 8x Komunikacijski kablovi
Napomena: Nakon što pročitate bilo koji Tutorijal na internetu, uvijek pogledajte Datasheet bilo koje komponente ili senzora, jer se tu nalaze svi bitni fabrički detalji!
Komentariši