Hľadať kód

Lekcia 22/31: Použitie sedemsegmentového displeja s Arduinom a elektronickou kockou | SunFounder Robojax

Lekcia 22/31: Použitie sedemsegmentového displeja s Arduinom a elektronickou kockou | SunFounder Robojax

V tej lekcii preskúmame, ako ovládať sedemsegmentový displej s Arduinom. Namiesto použitia tucta alebo viacerých I/O pinov na priame napájanie každého LED segmentu použijeme šikovný trik: posuvný register. Tento malý, lacný čip nám umožní ovládať všetkých sedem segmentov (plus desatinnú bodku) pomocou iba troch vodičov z Arduina. Toto je základná technika v elektronike, ktorá vám umožní rozšíriť počet výstupov dostupných na vašom mikrokontroléri, čo umožňuje stavať zložitejšie projekty bez nutnosti inovácie dosky.

zapojenie na breadboarde z videa

Okrem základného počítadla postavíme elektronickú kocku. Tento projekt nielen posilňuje ovládanie displeja, ale tiež predstavuje vstup od používateľa cez tlačidlo a koncept prerušení, čím vytvára responzívne a interaktívne zariadenie. Táto príručka je založená na lekcii z kurzu Robojax Arduino, ktorý používa súpravu SunFounder 3-v-1 Arduino.

Tu je niekoľko praktických nápadov, ktoré môžete postaviť s týmito znalosťami:

  • Vytvorte jednoduchú tabuľu skóre pre hry ako stolný tenis alebo basketbal.
  • Postavte digitálny časovač pre spoločenské hry alebo kuchynský odpočítavací časovač.
  • Vytvorte generátor náhodných čísel pre hry alebo rozhodovanie.
  • Zostavte základný digitálny teplomer pridaním teplotného senzora.

Hardvér a komponenty

Pred začiatkom si zhromaždime potrebné komponenty. Jadrom tohto projektu je posuvný register 74HC595, ktorý je kľúčom k minimalizácii počtu potrebných pinov. Namiesto pripojenia každého zo siedmich segmentov priamo k Arduinu ich pripojíme k posuvnému registru. Arduino potom posiela dáta pre číslicu sériovo (bit po bite) do čipu, ktorý potom vydá správny vzor na rozsvietenie segmentov.

  • Arduino Uno (alebo kompatibilná doska)
  • Sedemsegmentový displej (model 5161AS, spoločná katóda)
  • Integrovaný obvod posuvného registra 74HC595
  • Tlačidlo
  • Rezistory (220Ω - 330Ω)
  • Prepojovacie vodiče
  • Breadboard

Displej 5161AS je typu so spoločnou katódou. To znamená, že všetky katódy (záporné strany) vnútorných LED sú spojené dohromady na spoločný uzemňovací pin. Na rozsvietenie segmentu privediete kladné napätie na jeho špecifický anódový pin. 74HC595 funguje ako most, ktorý prijíma sériové dáta z Arduina a vydáva paralelné signály potrebné na napájanie týchto anód.

Sprievodca zapojením

schéma zapojenia circuit_6.5_segment
zapojenie segmentu súprava sundounder 3-v-1

Zapojenie posuvného registra a displeja sa môže zdať zložité, ale nasledovanie schémy krok za krokom je kľúčové. Video (v čase 04:48) poskytuje podrobný návod na tento proces. Čip 74HC595 má zárez na jednom konci na identifikáciu pinu 1. Piny sú číslované proti smeru hodinových ručičiek od zárezu (1-8 na jednej strane, 9-16 na druhej).

Tu je súhrn zapojenia z videa:

  • Napájanie a uzemnenie: Pripojte pin 8 a pin 13 čipu 74HC595 na uzemňovaciu lištu. Pripojte pin 10 a pin 16 na lištu 5V.
  • Dátové linky: Pripojte digitálne piny Arduina na dátové piny posuvného registra: Pin 12 (STcp) na pin čipu 12, Pin 8 (SHcp) na pin čipu 11 a Pin 11 (DS) na pin čipu 14.
  • Displej na posuvný register: Toto je najzložitejšia časť. Video (v čase 07:18) podrobne popisuje každé spojenie. Napríklad segment 'a' na displeji sa pripája na pin čipu 6, segment 'b' na pin 5 atď. Spoločné katódové piny displeja sú pripojené na uzemnenie cez rezistor.

Pre vizuálny a presný návod sa prosím obráťte na oficiálnu schému zapojenia:

Presné pripojenia pinov sú kritické a je ľahké urobiť chybu. Nájdite si čas a skontrolujte každý vodič podľa schémy. Video je vynikajúcim zdrojom na sledovanie.

Kocka

Vysvetlenie kódu

V tejto lekcii sú poskytnuté dva príklady kódu. Prvý je jednoduché počítadlo a druhý na ňom stavia na vytvorenie elektronickej kocky. Oba zdieľajú rovnakú základnú logiku na ovládanie displeja.

Tu je kód pre základné počítadlo:

const int STcp = 12;//Pin pripojený na ST_CP z 74HC595
const int SHcp = 8;//Pin pripojený na SH_CP z 74HC595 
const int DS = 11; //Pin pripojený na DS z 74HC595 

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

Na začiatku kódu môžete nakonfigurovať tri piny pripojené na posuvný register. STcp, SHcp a DS sú priradené k Arduino pinom 12, 8 a 11. datArray[] je kľúčová časť. Je to vyhľadávacia tabuľka obsahujúca hexadecimálne hodnoty pre číslice 0 až 9. Každá hodnota predstavuje vzor segmentov, ktoré sa majú rozsvietiť pre danú číslicu.

Funkcia loop() spúšťa počítadlo. Používa cyklus for na počítanie od 0 do 9. Vnútri cyklu kód posiela dáta pre aktuálne číslo do posuvného registra. delay(1000) na konci nastavuje rýchlosť počítadla v milisekundách. Zmeňte túto hodnotu na 100 pre rýchlejšie počítanie alebo na 500 pre pomalšie.

Kód elektronickej kocky prináša nový prvok: vstup od používateľa cez tlačidlo. Kľúčové zmeny v konfigurácii sú:

const int buttonPin = 2;
//...
pinMode(buttonPin, INPUT);
attachInterrupt(digitalPinToInterrupt(buttonPin), rollDice, FALLING);

Tu je buttonPin nastavený na digitálny pin 2. Tento pin je špeciálny, pretože ho možno použiť ako prerušenie. Prerušenie umožňuje Arduinu okamžite zastaviť to, čo práve robí, keď je tlačidlo stlačené, čo zaručuje rýchlu a spoľahlivú odozvu. Režim FALLING spustí prerušenie pri stlačení tlačidla (signál prechádza z HIGH na LOW).

Funkciu rollDice volá prerušenie. Prepína premennú state medzi 0 a 1. Keď je state 0, kocka sa „kotúľa“ a hlavná funkcia loop() náhodne zobrazuje čísla. Keď sa tlačidlo stlačí znova, state sa zmení na 1, čím sa cyklus zastaví a zobrazí sa konečný výsledok. Funkcia showNumber() je rovnaká ako logika počítadla, ale ako argument prijíma číslo, ktoré sa má zobraziť.

Živý projekt a ukážka

Po nahratí kódu začne počítadlo bežať a zobrazovať čísla od 0 do 9 s oneskorením jednej sekundy (vo videu v čase 15:04). Video ukazuje zmenu oneskorenia, aby počítadlo bežalo oveľa rýchlejšie.

Ukážka elektronickej kocky (vo videu v čase 20:15) ukazuje tlačidlo v akcii. Keď ho stlačíte raz, displej začne rýchlo prechádzať číslami. Opätovné stlačenie zastaví prechádzanie a zobrazí náhodné číslo medzi 1 a 6, presne ako skutočná kocka.

Kapitoly

  • [00:00] Úvod do projektu so sedemsegmentovým displejom
  • [01:25] Pochopenie sedemsegmentového displeja
  • [03:51] Datasheet a špecifikácie displeja 5161AS
  • [04:48] Zapojenie displeja a posuvného registra
  • [12:24] Arduino kód pre počítadlo 0-9
  • [15:04] Ukážka počítadla a úprava rýchlosti
  • [16:27] Tvorba projektu elektronickej kocky
  • [20:15] Ukážka elektronickej kocky a ošetrenie zákmitov

Obrázky

Wiring on breadboard from video
Wiring on breadboard from video
Circuit 6.5 segment schematic
Circuit 6.5 segment schematic
Dice
Dice
Segment wiring for Sunfounder 3-in-1 kit
Segment wiring for Sunfounder 3-in-1 kit
Segments of segment display
Segments of segment display
Seven segment pins - common cathode
Seven segment pins - common cathode
Seven segment pins - DP decimal pin
Seven segment pins - DP decimal pin
Seven segment pins - common cathode
Seven segment pins - common cathode
902-Lesson 23/31: Arduino code Using Seven Segment Display
Jazyk: C++
/*
Lesson 23/31: Using Seven Segment Display 
Get this code and watch video Download and resource page https://robojax.com/RJT605
YouTube video https://www.youtube.com/watch?v=3qoGAYh0lbc

*/
const int STcp = 12;//Pin connected to ST_CP of 74HC595
const int SHcp = 8;//Pin connected to SH_CP of 74HC595 
const int DS = 11; //Pin connected to DS of 74HC595 

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);
  }
}
903-Lesson 23/31: Electronic dice
Jazyk: C++
/*
Lesson 23/31: Electronic Dice
Get this code and watch video Download and resource page https://robojax.com/RJT605
YouTube video https://www.youtube.com/watch?v=3qoGAYh0lbc

*/
const int STcp = 12;//Pin connected to ST_CP of 74HC595
const int SHcp = 8;//Pin connected to SH_CP of 74HC595
const int DS = 11; //Pin connected to DS of 74HC595
const int buttonPin = 2;
int datArray[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f,  0x6f};
int number = 0;
int state = 0;

void setup ()
{
  //set pins to output
  pinMode(STcp, OUTPUT);
  pinMode(SHcp, OUTPUT);
  pinMode(DS, OUTPUT);
  pinMode(buttonPin, INPUT);

  attachInterrupt(digitalPinToInterrupt(buttonPin), rollDice, FALLING);
}

void loop()
{
  if (state == 0) {
    showNumber((int)random(1, 7));
    delay(50);
  }
}

void showNumber(int num) {
  digitalWrite(STcp, LOW); //ground ST_CP and hold low for as long as you are transmitting
  shiftOut(DS, SHcp, MSBFIRST, datArray[num]);
  //return the latch pin high to signal chip that it
  //no longer needs to listen for information
  digitalWrite(STcp, HIGH); //pull the ST_CPST_CP to save the data
}


void rollDice() {
  state = !state;
}

Zdroje a referencie

Súbory📁

Knižnice Arduino (zip)