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.
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
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.
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
/*
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);
}
}
/*
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;
}
Common Course Links
Common Course Files
Stvari koje bi vam mogle zatrebati
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Resursi i reference
-
DokumentacijaDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
EksternoPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Datoteke📁
Arduino biblioteke (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB