Search Code

Výukový program ESP32 10/55 - Digitálny počítadlo pomocou sedemsegmentového displeja 74HC595 - ESP32 IoT výučbová súprava

Výukový program ESP32 10/55 - Digitálny počítadlo pomocou sedemsegmentového displeja 74HC595 - ESP32 IoT výučbová súprava

V tomto návode si vytvoríme digitálny počítadlo pomocou sedemsegmentového displeja ovládaného mikrokontrolérom ESP32. Počítadlo sa bude zvyšovať od 0 do 9 a potom sa znižovať späť na 0, čo poskytne jasnú vizualizáciu procesu počítania. Tiež preskúmame, ako zapnúť jednotlivé segmenty a zobraziť písmená na sedemsegmentovom displeji.

ESP32_Animte7Segment-segments

Tento projekt využíva posuvný register 74HC595 na ovládanie displeja, čo nám umožňuje efektívne spravovať segmenty bez použitia príliš mnoho GPIO pinov na ESP32. Odosielaním binárnych hodnôt do posuvného registra môžeme rozsvietiť príslušné segmenty na zobrazenie čísel a písmen. Pre hlbšie pochopenie procesu si môžete pozrieť video (vo videu o 03:15).

ESP32_Animte7Segment-letters

Vysvetlenie hardvéru

Hlavné komponenty tohto projektu zahŕňajú mikrokontrolér ESP32, posuvný register 74HC595 a sedemsegmentový displej. ESP32 je výkonný mikrokontrolér so vstavanými funkciami Wi-Fi a Bluetooth, čo ho robí vhodným pre IoT projekty. 74HC595 je posuvný register, ktorý nám umožňuje ovládať viacero výstupov pomocou iba niekoľkých vstupných pinov. Funguje tak, že prijíma sériové dáta a konvertuje ich na paralelný výstup, čo je ideálne na ovládanie sedemsegmentového displeja.

Sedemsegmentový displej pozostáva zo siedmich jednotlivých LED diód usporiadaných do vzoru osmičky. Každý segment môže byť zapnutý alebo vypnutý odoslaním príslušnej binárnej hodnoty do posuvného registra. Napríklad na zobrazenie čísla 0 musia byť rozsvietené všetky segmenty okrem stredného (G).

ESP32_Animte7Segment-counter-up-down
ESP32_Animte7Segment-counter-1

Podrobnosti z datasheetu

Výrobca Texas Instruments
Označenie súčiastky 74HC595
Logické/IO napätie 2 V až 6 V
Napájacie napätie 2 V až 6 V
Výstupný prúd (na kanál) 6 mA
Špičkový prúd (na kanál) 35 mA
Odporúčaná PWM frekvencia Do 1 kHz
Vstupné logické prahy 0,3 VCC až 0,7 VCC
Napäťový úbytok / RDS(on) / saturácia Max. 0,2 V
Tepelné limity 125 °C
Puzdro DIP-16
Poznámky / varianty Dostupné v rôznych puzdrách

 

  • Zabezpečte správne napájacie napätie (2 V až 6 V).
  • Obmedzte výstupný prúd, aby ste zabránili prehriatiu.
  • Použite samostatné rezistory pre každý segment pre optimálny jas.
  • Buďte opatrní pri zapájaní, aby ste predišli skratom a nesprávnym pripojeniam.
  • Starostlivo dodržiavajte pinout, aby ste predišli nesprávnej konfigurácii.

Pokyny na zapojenie

ESP32-10-seven-segment-wiring

Začnite prípravou svojej breadboard. Pripojte uzemňovaciu lištu (modrý pruh) a napájaciu lištu (červený pruh). Uzemnenie by malo byť pripojené k modrému pruhu na jednej strane breadboard, zatiaľ čo napájanie by malo byť pripojené k červenému pruhu na opačnej strane. Použite čierny vodič na pripojenie uzemnenia ESP32 k uzemňovacej lište a červený vodič na pripojenie pinu 3,3V ESP32 k napájacej lište.

Ďalej vložte posuvný register 74HC595 do breadboard, pričom sa uistite, že zárez je správne orientovaný. Pripojte pin 11 (DS) k pinu 25 na ESP32, pin 12 (SH_CP) k pinu 26 a pin 14 (ST_CP) k pinu 27. Pripojte uzemnenie (pin 8) posuvného registra k uzemňovacej lište a pin 10 (MR) k napájacej lište pre aktiváciu.

Pre sedemsegmentový displej pripojte piny zodpovedajúce segmentom (a-g) k výstupným pinom posuvného registra. Použite rezistor (220 ohmov) v sérii pre každý segment na obmedzenie prúdu. Uistite sa, že máte správne pripojenia pre spoločný pin, ktorý môže byť buď spoločná anóda alebo katóda v závislosti od typu vášho displeja.

Príklady kódu a vysvetlenie

Vo funkcii setup začneme definovaním pinov pripojených k posuvnému registru ako výstupov. To zabezpečí, že náš ESP32 môže ovládať dáta odosielané na displej.

void setup ()
{
  //nastaviť piny ako výstup
  pinMode(STcp,OUTPUT);
  pinMode(SHcp,OUTPUT);
  pinMode(DS,OUTPUT);
}

Tu definujeme STcp, SHcp a DS ako piny pripojené k ST_CP, SH_CP a DS posuvného registra. Nastavenie týchto pinov ako výstupov nám umožňuje ovládať posuvný register.

Hlavná slučka programu počíta od 0 do 9 a odosiela príslušné hodnoty na displej pomocou funkcie shiftOut.

for(int num = 0; num <10; num++)
{
    digitalWrite(STcp,LOW); //uzemni ST_CP a drž ho nízko, pokiaľ vysielaš
    shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
    digitalWrite(STcp,HIGH); //potiahni ST_CP vysoko, aby sa uložili dáta
    delay(1000);
}

Táto slučka inkrementuje premennú num a každú sekundu posiela zodpovedajúcu hodnotu z datArray na displej. Funkcia shiftOut prenáša dáta do posuvného registra, ktorý následne rozsvieti príslušné segmenty.

Demonštrácia / Čo očakávať

Po dokončení zapojenia a nahraní kódu by si mal vidieť, ako sedemsegmentový displej počíta od 0 do 9, krátko sa zastaví a potom počíta späť dole na 0. Každé číslo sa zobrazí na jednu sekundu. Ak chceš zrýchliť počítanie, môžeš upraviť oneskorenie v slučke (vo videu v čase 15:30).

Pri manipulácii so segmentmi jednotlivo nezabudni posielať správne binárne hodnoty na zobrazenie písmen alebo konkrétnych segmentov. Ak sa displej zdá byť slabý, zváž pridanie jednotlivých rezistorov pre každý segment, aby si zabezpečil konzistentný jas na celom displeji.

Časové značky videa

  • 00:00 Začiatok
  • 1:53 Úvod do sedemsegmentového displeja
  • 4:38 Vysvetlenie zapojenia
  • 13:15 Arduino kód-1
  • 17:01 Výber COM portu a dosky ESP32
  • 18:43 Demonštrácia-1
  • 20:13 Zobrazenie iba jednej číslice
  • 21:38 Počítadlo hore a dole
  • 23:07 Zapínanie/vypínanie každého segmentu
  • 24:53 Zobrazenie A, B, C, D, E a F

Images

ESP32_Animte7Segment-counter-1
ESP32_Animte7Segment-counter-1
ESP32_Animte7Segment-counter-up-down
ESP32_Animte7Segment-counter-up-down
ESP32_Animte7Segment-letters
ESP32_Animte7Segment-letters
ESP32_Animte7Segment-segments
ESP32_Animte7Segment-segments
ESP32-10-seven-segment-schematic
ESP32-10-seven-segment-schematic
ESP32-10-seven-segment-wiring
ESP32-10-seven-segment-wiring
809-ESP32 Tutorial 10/55 - Arduino code for 2.5 7 segment
Language: C++
const int STcp = 27;//ST_CP
const int SHcp = 26;//SH_CP 
const int DS = 25; //DS 

int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void setup ()
{
  //set pins to output
  pinMode(STcp,OUTPUT);
  pinMode(SHcp,OUTPUT);
  pinMode(DS,OUTPUT);
}
void loop()
{
  for(int num = 0; num <10; num++)
  {
    digitalWrite(STcp,LOW); //ground ST_CP and hold low for as long as you are transmitting
    shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
    digitalWrite(STcp,HIGH); //pull the ST_CPST_CP to save the data
    delay(1000);
  }
}

Resources & references

Files📁

No files available.