Pretraži kod

Lekcija 22/31: Korištenje sedmosegmentnog displeja s Arduinom i elektronske kocke | SunFounder Robojax

Lekcija 22/31: Korištenje sedmosegmentnog displeja s Arduinom i elektronske kocke | SunFounder Robojax

U ovoj lekciji istražujemo kako kontrolisati sedmosegmentni displej sa Arduinom. Umjesto da koristimo desetak ili više I/O pinova za direktno pokretanje svakog LED segmenta, koristimo pametan trik: pomični registar. Ovaj mali, jeftini čip nam omogućava da kontrolišemo svih sedam segmenata (plus decimalnu tačku) koristeći samo tri žice sa Arduina. Ovo je temeljna tehnika u elektronici koja vam omogućava da proširite broj izlaza dostupnih na vašem mikrokontroleru, čineći mogućim izgradnju složenijih projekata bez nadogradnje vaše ploče.

spajanje na breadboard-u iz videa

Osim osnovnog brojača, napravit ćemo elektronsku kockicu. Ovaj projekat ne samo da pojačava kontrolu displeja, već uvodi i korisnički unos putem tipke i koncept prekida, stvarajući responzivan i interaktivan uređaj. Ovaj vodič je zasnovan na lekciji iz Robojax Arduino kursa, koji koristi SunFounder 3-u-1 Arduino komplet.

Evo nekoliko praktičnih ideja koje možete napraviti sa ovim znanjem:

  • Napravite jednostavan semafor za igre poput stonog tenisa ili košarke.
  • Napravite digitalni tajmer za društvene igre ili kuhinjski odbrojavajući tajmer.
  • Napravite generator slučajnih brojeva za igre ili donošenje odluka.
  • Konstruišite osnovni digitalni termometar dodavanjem senzora temperature.

Hardver i komponente

Prije nego što počnemo, prikupimo potrebne komponente. Srž ovog projekta je 74HC595 pomični registar, koji je ključ za minimiziranje broja potrebnih pinova. Umjesto da povezujemo svaki od sedam segmenata direktno na Arduino, povezujemo ih na pomični registar. Arduino zatim šalje podatke za cifru serijski (jedan bit po jedan) na čip, koji zatim izlazi ispravan obrazac za osvjetljavanje segmenata.

  • Arduino Uno (ili kompatibilna ploča)
  • Sedmosegmentni displej (model 5161AS, zajednička katoda)
  • 74HC595 pomični registar IC
  • Tipka
  • Otpornici (220Ω - 330Ω)
  • Kratkospojne žice
  • Breadboard

5161AS displej je tipa zajednička katoda. To znači da su sve katode (negativne strane) unutrašnjih LED dioda povezane zajedno na zajednički uzemljeni pin. Da biste upalili segment, dovodite pozitivan napon na njegov specifični anodni pin. 74HC595 djeluje kao most, uzimajući serijske podatke sa Arduina i izlazeći paralelne signale potrebne za pokretanje ovih anoda.

Vodič za spajanje

circuit_6.5_segment_schematic
segment_wiring_sundounder_3-in-1-kit

Spajanje pomičnog registra i displeja može izgledati zeznuto, ali praćenje dijagrama korak po korak je ključno. Video (na 04:48) pruža detaljan vodič kroz ovaj proces. 74HC595 čip ima zarez na jednom kraju za identifikaciju pina 1. Pinovi su numerisani suprotno od kazaljke na satu od zareza (1-8 na jednoj strani, 9-16 na drugoj).

Ovdje je sažetak spajanja iz videa:

  • Napajanje i uzemljenje: Povežite pin 8 i pin 13 od 74HC595 na uzemljenu šinu. Povežite pin 10 i pin 16 na 5V šinu.
  • Podatkovne linije: Povežite digitalne pinove Arduina na podatkovne pinove pomičnog registra: Pin 12 (STcp) na čip pin 12, Pin 8 (SHcp) na čip pin 11, i Pin 11 (DS) na čip pin 14.
  • Displej na pomični registar: Ovo je najsloženiji dio. Video (na 07:18) detaljno opisuje svaku vezu. Na primjer, segment 'a' na displeju se povezuje na čip pin 6, segment 'b' na pin 5, i tako dalje. Zajednički katodni pinovi displeja su povezani na uzemljenje kroz otpornik.

Za vizuelni i precizan vodič, molimo pogledajte zvanični dijagram spajanja:

Tačne veze pinova su kritične i lako je napraviti grešku. Uzmite si vremena i provjerite svaku žicu prema dijagramu. Video je odličan resurs za praćenje.

Kockica

Objašnjenje koda

Dva primjera koda su data u ovoj lekciji. Prvi je jednostavan brojač, a drugi se nadograđuje na njega za kreiranje elektronske kockice. Oba dijele istu osnovnu logiku za kontrolu displeja.

Ovdje je kod za osnovni brojač:

const int STcp = 12;//Pin spojen na ST_CP od 74HC595
const int SHcp = 8;//Pin spojen na SH_CP od 74HC595 
const int DS = 11; //Pin spojen na DS od 74HC595 

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

Na vrhu koda možete konfigurisati tri pina spojena na pomični registar. STcp, SHcp i DS su dodijeljeni Arduino pinovima 12, 8 i 11, respektivno. datArray[] je ključni dio. To je tabela pretraživanja koja sadrži heksadecimalne vrijednosti za cifre od 0 do 9. Svaka vrijednost predstavlja obrazac segmenata koje treba upaliti za tu specifičnu cifru.

Funkcija loop() pokreće brojač. Koristi for petlju za brojanje od 0 do 9. Unutar petlje, kod šalje podatke za trenutni broj u pomični registar. delay(1000) na kraju postavlja brzinu brojača u milisekundama. Promijenite ovu vrijednost na 100 za brže brojanje, ili na 500 za sporije.

Kod za elektronske kockice uvodi novi element: unos od korisnika putem tipke. Ključne promjene u konfiguraciji su:

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

Ovdje je buttonPin postavljen na digitalni pin 2. Ovaj pin je poseban jer se može koristiti kao prekid. Prekid omogućava Arduinu da odmah prestane s onim što radi kada se tipka pritisne, osiguravajući brz i pouzdan odziv. FALLING način rada pokreće prekid kada se tipka pritisne (signal prelazi s HIGH na LOW).

Funkciju rollDice poziva prekid. Ona mijenja varijablu state između 0 i 1. Kada je state 0, kockice se "kotrljaju," i glavna loop() funkcija će nasumično prikazivati brojeve. Kada se tipka ponovno pritisne, state se mijenja u 1, zaustavljajući petlju i prikazujući konačni rezultat. Funkcija showNumber() je ista kao logika brojača, ali prima broj kao argument za prikaz.

Živi projekt i demonstracija

Nakon što se kod učita, brojač će početi raditi, prikazujući brojeve od 0 do 9 s odgodom od jedne sekunde (u videu na 15:04). Video demonstrira promjenu odgode kako bi brojač radio mnogo brže.

Demonstracija elektronskih kockica (u videu na 20:15) prikazuje tipku u akciji. Kada je pritisnete jednom, zaslon počinje brzo mijenjati brojeve. Ponovno pritiskanje zaustavlja mijenjanje, ostavljajući nasumični broj između 1 i 6 prikazan, baš kao prava kockica.

Poglavlja

  • [00:00] Uvod u projekt sa sedmosegmentnim zaslonom
  • [01:25] Razumijevanje sedmosegmentnog zaslona
  • [03:51] Tehnički list i specifikacije zaslona 5161AS
  • [04:48] Povezivanje zaslona i pomičnog registra
  • [12:24] Arduino kod za brojač od 0 do 9
  • [15:04] Demonstracija brojača i podešavanje brzine
  • [16:27] Izgradnja projekta elektronskih kockica
  • [20:15] Demonstracija elektronskih kockica i uklanjanje treperenja

Slike

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
Jezik: 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
Jezik: 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;
}

Resursi i reference

Datoteke📁

Arduino biblioteke (zip)