Lekcja 22/31: Użycie wyświetlacza siedmiosegmentowego z Arduino i elektroniczna kostka | SunFounder Robojax
W tej lekcji odkrywamy, jak sterować wyświetlaczem siedmiosegmentowym za pomocą Arduino. Zamiast używać kilkunastu lub więcej pinów I/O do bezpośredniego sterowania każdym segmentem LED, stosujemy sprytny trik: rejestr przesuwny. Ten mały, niedrogi układ pozwala nam kontrolować wszystkie siedem segmentów (plus przecinek dziesiętny) za pomocą zaledwie trzech przewodów z Arduino. Jest to podstawowa technika w elektronice, która pozwala zwiększyć liczbę wyjść dostępnych na mikrokontrolerze, umożliwiając budowanie bardziej złożonych projektów bez konieczności wymiany płyty.
Poza podstawowym licznikiem zbudujemy elektroniczną kostkę do gry. Ten projekt nie tylko utrwala sterowanie wyświetlaczem, ale także wprowadza obsługę wejścia użytkownika za pomocą przycisku oraz koncepcję przerwań, tworząc responsywne i interaktywne urządzenie. Ten przewodnik oparty jest na lekcji z kursu Robojax Arduino, który wykorzystuje zestaw SunFounder 3-in-1 Arduino.
Oto kilka praktycznych pomysłów, które możesz zbudować, wykorzystując tę wiedzę:
- Stwórz prosty tablicę wyników do gier takich jak tenis stołowy czy koszykówka.
- Zbuduj cyfrowy minutnik do gier planszowych lub kuchenny minutnik odliczający.
- Zrób generator liczb losowych do gier lub podejmowania decyzji.
- Skonstruuj podstawowy termometr cyfrowy, dodając czujnik temperatury.
Sprzęt i komponenty
Zanim zaczniemy, zgromadźmy niezbędne komponenty. Rdzeniem tego projektu jest rejestr przesuwny 74HC595, który jest kluczem do zminimalizowania liczby potrzebnych pinów. Zamiast podłączać każdy z siedmiu segmentów bezpośrednio do Arduino, podłączamy je do rejestru przesuwnego. Arduino następnie wysyła dane dla cyfry szeregowo (po jednym bicie na raz) do układu, który następnie wyprowadza odpowiedni wzorzec, aby zapalić segmenty.
- Arduino Uno (lub kompatybilna płyta)
- Wyświetlacz siedmiosegmentowy (model 5161AS, wspólna katoda)
- Układ scalony rejestru przesuwnego 74HC595
- Przycisk
- Rezystory (220Ω - 330Ω)
- Przewody połączeniowe
- Płytka stykowa
Wyświetlacz 5161AS jest typu wspólna katoda. Oznacza to, że wszystkie katody (strony ujemne) wewnętrznych diod LED są połączone razem do wspólnego pinu masy. Aby zapalić segment, należy podać dodatnie napięcie na jego konkretny pin anody. 74HC595 działa jak most, pobierając dane szeregowe z Arduino i wyprowadzając sygnały równoległe potrzebne do sterowania tymi anodami.
Schemat połączeń
Okablowanie rejestru przesuwnego i wyświetlacza może wydawać się skomplikowane, ale kluczowe jest dokładne śledzenie schematu krok po kroku. Wideo (o czasie 04:48) zawiera szczegółowy instruktaż tego procesu. Układ 74HC595 ma nacięcie na jednym końcu, aby zidentyfikować pin 1. Piny są ponumerowane przeciwnie do ruchu wskazówek zegara od nacięcia (1-8 po jednej stronie, 9-16 po drugiej).
Oto podsumowanie okablowania z wideo:
- Zasilanie i masa: Podłącz pin 8 i pin 13 układu 74HC595 do szyny masy. Podłącz pin 10 i pin 16 do szyny 5V.
- Linie danych: Podłącz piny cyfrowe Arduino do pinów danych rejestru przesuwnego: Pin 12 (STcp) do pinu 12 układu, Pin 8 (SHcp) do pinu 11 układu oraz Pin 11 (DS) do pinu 14 układu.
- Wyświetlacz do rejestru przesuwnego: To najbardziej skomplikowana część. Wideo (o czasie 07:18) szczegółowo opisuje każde połączenie. Na przykład segment „a” na wyświetlaczu łączy się z pinem 6 układu, segment „b” z pinem 5 i tak dalej. Wspólne piny katody wyświetlacza są podłączone do masy przez rezystor.
Aby uzyskać wizualny i precyzyjny przewodnik, zapoznaj się z oficjalnym schematem połączeń:
Dokładne połączenia pinów są krytyczne i łatwo o pomyłkę. Nie spiesz się i sprawdź każdy przewód dwukrotnie względem schematu. Wideo jest doskonałym źródłem do śledzenia krok po kroku.
Wyjaśnienie kodu
W tej lekcji podano dwa przykłady kodu. Pierwszy to prosty licznik, a drugi opiera się na nim, tworząc elektroniczną kostkę. Oba mają tę samą podstawową logikę sterowania wyświetlaczem.
Oto kod podstawowego licznika:
const int STcp = 12;//Pin podłączony do ST_CP układu 74HC595
const int SHcp = 8;//Pin podłączony do SH_CP układu 74HC595
const int DS = 11; //Pin podłączony do DS układu 74HC595
int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
Na górze kodu można skonfigurować trzy piny podłączone do rejestru przesuwnego. STcp, SHcp i DS są przypisane do pinów Arduino 12, 8 i 11. datArray[] to kluczowa część. Jest to tabela przeglądowa zawierająca wartości szesnastkowe dla cyfr od 0 do 9. Każda wartość reprezentuje wzorzec segmentów, które mają się zapalić dla danej cyfry.
Funkcja loop() uruchamia licznik. Używa pętli for do liczenia od 0 do 9. Wewnątrz pętli kod wysyła dane dla bieżącej liczby do rejestru przesuwnego. delay(1000) na końcu ustawia szybkość licznika w milisekundach. Zmień tę wartość na 100, aby liczyć szybciej, lub na 500, aby wolniej.
Kod elektronicznej kostki wprowadza nowy element: wprowadzanie danych przez użytkownika za pomocą przycisku. Kluczowe zmiany w konfiguracji to:
const int buttonPin = 2;
//...
pinMode(buttonPin, INPUT);
attachInterrupt(digitalPinToInterrupt(buttonPin), rollDice, FALLING);
Tutaj buttonPin jest ustawiony na pin cyfrowy 2. Ten pin jest wyjątkowy, ponieważ może być używany jako przerwanie. Przerwanie pozwala Arduino natychmiast zatrzymać to, co robi, gdy przycisk jest wciśnięty, zapewniając szybką i niezawodną reakcję. Tryb FALLING wyzwala przerwanie, gdy przycisk jest wciśnięty (sygnał przechodzi z HIGH na LOW).
Funkcja rollDice jest wywoływana przez przerwanie. Przełącza zmienną state między 0 a 1. Gdy state wynosi 0, kostka „się kręci”, a główna pętla loop() będzie losowo wyświetlać liczby. Gdy przycisk zostanie wciśnięty ponownie, state zmienia się na 1, zatrzymując pętlę i wyświetlając końcowy wynik. Funkcja showNumber() jest taka sama jak logika licznika, ale przyjmuje liczbę jako argument do wyświetlenia.
Projekt na żywo i demonstracja
Po wgraniu kodu licznik zacznie działać, wyświetlając liczby od 0 do 9 z jednosekundowym opóźnieniem (na wideo w 15:04). Film pokazuje zmianę opóźnienia, aby licznik działał znacznie szybciej.
Demonstracja elektronicznej kostki (na wideo w 20:15) pokazuje przycisk w akcji. Po naciśnięciu go raz wyświetlacz zaczyna szybko przewijać liczby. Ponowne naciśnięcie zatrzymuje przewijanie, pozostawiając losową liczbę od 1 do 6, dokładnie jak prawdziwa kostka.
Rozdziały
- [00:00] Wprowadzenie do projektu wyświetlacza siedmiosegmentowego
- [01:25] Zrozumienie wyświetlacza siedmiosegmentowego
- [03:51] Karta katalogowa i specyfikacje wyświetlacza 5161AS
- [04:48] Podłączanie wyświetlacza i rejestru przesuwnego
- [12:24] Kod Arduino dla licznika 0-9
- [15:04] Demonstracja licznika i regulacja szybkości
- [16:27] Budowa projektu elektronicznej kostki
- [20:15] Demonstracja elektronicznej kostki i eliminacja drgań styków
/*
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
Rzeczy, których możesz potrzebować
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Zasoby i odniesienia
-
DokumentacjaDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
ZewnętrznyPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Pliki📁
Biblioteki Arduino (zip)
-
Kod źródłowy zestawu edukacyjnego inteligentnego samochodu SunFounder 3-w-1
3in1-kit-main-v2.zip12.80 MB