Soek Kode

Les 22/31: Gebruik van Sewe-Segment Vertoning met Arduino en Elektroniese Dobbelsteen | SunFounder Robojax

Les 22/31: Gebruik van Sewe-Segment Vertoning met Arduino en Elektroniese Dobbelsteen | SunFounder Robojax

In hierdie les ondersoek ons hoe om 'n sewe-segment vertoning met 'n Arduino te beheer. In plaas daarvan om 'n dosyn of meer I/O-penne te gebruik om elke LED-segment direk aan te dryf, gebruik ons 'n slim truuk: 'n skuifregister. Hierdie klein, goedkoop chip laat ons toe om al sewe segmente (plus die desimale punt) te beheer met slegs drie drade van die Arduino. Dit is 'n fundamentele tegniek in elektronika wat jou toelaat om die aantal uitsette beskikbaar op jou mikrobeheerder uit te brei, wat dit moontlik maak om meer komplekse projekte te bou sonder om jou bord op te gradeer.

bedrading op broodbord vanaf video

Behalwe die basiese teller, sal ons 'n elektroniese dobbelsteen bou. Hierdie projek versterk nie net die vertoningbeheer nie, maar stel ook gebruikersinvoer via 'n drukknoppie en die konsep van onderbrekings bekend, wat 'n responsiewe en interaktiewe toestel skep. Hierdie gids is gebaseer op 'n les uit die Robojax Arduino-kursus, wat die SunFounder 3-in-1 Arduino-stel gebruik.

Hier is 'n paar praktiese idees wat jy met hierdie kennis kan bou:

  • Skep 'n eenvoudige telbord vir speletjies soos tafeltennis of basketbal.
  • Bou 'n digitale timer vir bordspeletjies of 'n kombuis-afteltydteller.
  • Maak 'n ewekansige nommergenerator vir speletjies of besluitneming.
  • Konstrueer 'n basiese digitale termometer deur 'n temperatuursensor by te voeg.

Hardeware en Komponente

Voordat ons begin, laat ons die nodige komponente bymekaarmaak. Die kern van hierdie projek is die 74HC595-skuifregister, wat die sleutel is om die aantal penne wat benodig word te minimaliseer. In plaas daarvan om elk van die sewe segmente direk aan die Arduino te koppel, koppel ons hulle aan die skuifregister. Die Arduino stuur dan die data vir 'n syfer serieel (een bis op 'n slag) na die chip, wat dan die korrekte patroon uitset om die segmente te laat brand.

  • Arduino Uno (of versoenbare bord)
  • Sewe-segment vertoning (model 5161AS, gemeenskaplike katode)
  • 74HC595-skuifregister IC
  • Drukknoppie
  • Weerstande (220Ω - 330Ω)
  • Springdrade
  • Broodbord

Die 5161AS-vertoning is 'n gemeenskaplike katode tipe. Dit beteken al die katodes (die negatiewe kante) van die interne LED's is saam verbind aan 'n gemeenskaplike grondpen. Om 'n segment te laat brand, verskaf jy 'n positiewe spanning aan sy spesifieke anode-pen. Die 74HC595 dien as 'n brug, wat serieel data van die Arduino neem en die parallelle seine uitset wat nodig is om hierdie anodes aan te dryf.

Bedradingsgids

circuit_6.5_segment_schematic
segment_wiring_sundounder_3-in-1-kit

Die bedrading van die skuifregister en vertoning kan moeilik lyk, maar om die diagram stap-vir-stap te volg is noodsaaklik. Die video (by 04:48) verskaf 'n gedetailleerde deurloop van hierdie proses. Die 74HC595-chip het 'n keep aan een kant om pen 1 te identifiseer. Die penne word anti-kloksgewys vanaf die keep genommer (1-8 aan een kant, 9-16 aan die ander kant).

Hier is die bedradingopsomming uit die video:

  • Krag en Grond: Koppel pen 8 en pen 13 van die 74HC595 aan die grondrail. Koppel pen 10 en pen 16 aan die 5V-rail.
  • Datallyne: Koppel die Arduino se digitale penne aan die skuifregister se datapenne: Pen 12 (STcp) aan chip pen 12, Pen 8 (SHcp) aan chip pen 11, en Pen 11 (DS) aan chip pen 14.
  • Vertoning aan Skuifregister: Dit is die mees komplekse deel. Die video (by 07:18) beskryf elke verbinding in detail. Byvoorbeeld, segment 'a' op die vertoning koppel aan chip pen 6, segment 'b' aan pen 5, en so aan. Die gemeenskaplike katode-penne van die vertoning word deur 'n weerstand aan grond gekoppel.

Vir 'n visuele en presiese gids, verwys asseblief na die amptelike bedradingdiagram:

Die presiese penverbindings is kritiek, en dit is maklik om 'n fout te maak. Neem jou tyd en kontroleer elke draad teen die diagram. Die video is 'n uitstekende hulpbron om saam te volg.

Dobbelsteen

Kode Verduideliking

Twee kodevoorbeelde word in hierdie les verskaf. Die eerste is 'n eenvoudige teller, en die tweede bou daarop voort om die elektroniese dobbelsteen te skep. Beide deel dieselfde kernlogika vir die beheer van die vertoning.

Hier is die kode vir die basiese teller:

const int STcp = 12;//Pen gekoppel aan ST_CP van 74HC595
const int SHcp = 8;//Pen gekoppel aan SH_CP van 74HC595 
const int DS = 11; //Pen gekoppel aan DS van 74HC595 

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

Boonop in die kode kan jy die drie penne wat aan die skuifregister gekoppel is, konfigureer. STcp, SHcp, en DS word toegewys aan Arduino-penne 12, 8, en 11, onderskeidelik. Die datArray[] is 'n deurslaggewende deel. Dit is 'n opsoektabel wat die heksadesimale waardes vir syfers 0 tot 9 bevat. Elke waarde verteenwoordig die patroon van segmente om te laat brand vir daardie spesifieke syfer.

Die loop()-funksie laat die teller loop. Dit gebruik 'n for-lus om van 0 tot 9 te tel. Binne die lus stuur die kode die data vir die huidige nommer na die skuifregister. Die delay(1000) aan die einde stel die spoed van die teller in millisekondes. Verander hierdie waarde na 100 vir 'n vinniger telling, of 500 vir 'n stadiger een.

Die elektroniese dobbelsteen-kode stel 'n nuwe element bekend: gebruikersinvoer via 'n knoppie. Die belangrikste konfigurasieveranderinge is:

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

Hier word buttonPin op digitale pen 2 gestel. Hierdie pen is spesiaal omdat dit as 'n onderbreking gebruik kan word. 'n Onderbreking laat die Arduino toe om onmiddellik op te hou wat dit doen wanneer die knoppie gedruk word, wat 'n vinnige en betroubare reaksie verseker. Die FALLING-modus aktiveer die onderbreking wanneer die knoppie gedruk word (die sein gaan van HOOG na LAAG).

Die rollDice-funksie word deur die onderbreking genoem. Dit wissel die state-veranderlike tussen 0 en 1. Wanneer state 0 is, "rol" die dobbelsteen, en die hoof-loop() sal ewekansig nommers vertoon. Wanneer die knoppie weer gedruk word, verander state na 1, wat die lus stop en die finale resultaat vertoon. Die showNumber()-funksie is dieselfde as die tellerlogika, maar dit neem 'n nommer as 'n argument om te vertoon.

Lewende Projek en Demonstrasie

Sodra die kode opgelaai is, sal die teller begin loop en nommers van 0 tot 9 vertoon met 'n een-sekonde vertraging (in video by 15:04). Die video demonstreer die verandering van die vertraging om die teller baie vinniger te laat loop.

Die elektroniese dobbelsteen-demonstrasie (in video by 20:15) wys die knoppie in aksie. Wanneer jy dit een keer druk, begin die vertoon vinnig deur nommers sirkuleer. Om dit weer te druk stop die sirkulasie, en laat 'n ewekansige nommer tussen 1 en 6 vertoon, net soos 'n regte dobbelsteen.

Hoofstukke

  • [00:00] Inleiding tot die Sewe-Segment Vertoonprojek
  • [01:25] Verstaan die Sewe-Segment Vertoon
  • [03:51] 5161AS Vertoon Datablad en Spesifikasies
  • [04:48] Bedrading van die Vertoon en Skuifregister
  • [12:24] Arduino-kode vir die 0-9 Teller
  • [15:04] Tellerdemonstrasie en Aanpassing van Spoed
  • [16:27] Bou van die Elektroniese Dobbelsteenprojek
  • [20:15] Elektroniese Dobbelsteen-demonstrasie en Ontbons

Beelde

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

Hulpbronne en verwysings

Lêers📁

Arduino Biblioteke (zip)