Search Code

Cashar 22/31: Isticmaalka Muujinta Toddoba Qaybood ee Arduino iyo Dice Elektaroonik | SunFounder Robojax

Cashar 22/31: Isticmaalka Muujinta Toddoba Qaybood ee Arduino iyo Dice Elektaroonik | SunFounder Robojax

Casharka this, waxaanu sahaminaynaa sida loo xakameeyo shaashadda toddobo-qaybood (seven-segment display) iyadoo la isticmaalayo Arduino. Halkii aan u isticmaali lahayn laba iyo toban ama ka badan oo I/O pins si toos ah u wado qayb kasta oo LED ah, waxaanu adeegsanaynaa khiyaano caqli gal ah: shift register. Chipp-gan yar oo aan qaali ahayn wuxuu noo ogolaanayaa inaanu xakameyno dhammaan toddobada qaybood (iyo barta jajab tobanle) iyadoo la isticmaalayo saddex fiilo oo keliya oo ka yimid Arduino. Tani waa farsamo aasaasi ah oo ku jirta elektaroonigga taasoo kuu ogolaanaysa inaad balaadhiso tirada wax soo saarka (outputs) ee laga heli karo microcontroller-kaaga, taasoo suurtogal ka dhigaysa inaad dhisto mashaariic ka sii adag iyada oo aan loo baahnayn inaad cusboonaysiiso board-kaaga.

fiilooyinka ku yaal breadboard-ka laga soo qaaday fiidiyowga

Marka laga soo tago tiriyaha aasaasiga ah, waxaanu dhisi doonnaa dice elektaroonik ah. Mashruucani ma xoojiyayo oo kaliya xakamaynta shaashadda, laakiin wuxuu sidoo kale soo bandhigayaa gelinta isticmaalaha iyada oo loo marayo button-ka riixista iyo fikradda interrupts-ka, taasoo abuuraysa qalab jawaab celin leh oo is dhexgal ah. Hagahan wuxuu ku salaysan yahay cashar ka mid ah Robojax Arduino Course, kaasoo isticmaalaya SunFounder 3-in-1 Arduino kit.

Halkan waxaa ah dhawr fikradood oo wax ku ool ah oo aad ku dhisi karto aqoontan:

  • Samee scoreboard fudud oo loogu talagalay ciyaaraha sida table tennis ama basketball.
  • Dhis timer dijitaal ah oo loogu talagalay ciyaaraha sabuuradda ama timer-ka jikada ee tirinta hoos u dhaca.
  • Samee nambar soo saare random ah oo loogu talagalay ciyaaraha ama go'aan qaadashada.
  • Dhis heerkulbeeg dijitaal oo aasaasi ah adoo ku daraya sensor heerkulka.

Qalabka iyo Qaybaha

Ka hor inta aanu bilaabin, aynu soo ururinno qaybaha lagama maarmaanka ah. Xudunta mashruucan waa 74HC595 shift register, kaasoo ah furaha yaraynta tirada pins-ka ee loo baahan yahay. Halkii aad ku xiri lahayd mid kasta oo ka mid ah toddobada qaybood si toos ah Arduino-ga, waxaanu ku xirnaa shift register-ka. Arduino-ga ayaa markaas u soo dira xogta lambarka si taxane ah (hal bit mar) chip-ka, kaasoo markaas soo saara qaabka saxda ah si uu u iftiimiyo qaybaha.

  • Arduino Uno (ama board la jaan qaadi karo)
  • Shaashadda toddobo-qaybood (model 5161AS, common cathode)
  • 74HC595 shift register IC
  • Button-ka riixista
  • Resistors (220Ω - 330Ω)
  • Fiilooyinka jumper-ka
  • Breadboard

Shaashadda 5161AS waa nooc common cathode ah. Tani waxay ka dhigan tahay in dhammaan cathodes-ka (dhinacyada taban) ee LED-yada gudaha ah ay ku xiran yihiin pin-ka dhulka (ground) ee wadaaga. Si aad u iftiimiso qayb, waxaad siisaa danab togan pin-keeda anode-ga ee gaarka ah. 74HC595 wuxuu u dhaqmaa sidii buundh, isagoo ka qaadaya xogta taxanaha ah ee Arduino-ga oo soo saaraya signallada isbarbar socda ee loo baahan yahay si loo wado anodes-yadan.

Hagaha Fiilooyinka

circuit_6.5_segment_schematic
segment_wiring_sundounder_3-in-1-kit

Ku xirista shift register-ka iyo shaashadda waxay u ekaan kartaa mid adag, laakiin raacista jaantuska tallaabo-tallaabo ayaa muhiim ah. Fiidiyowga (marka 04:48) wuxuu bixiyaa sharaxaad faahfaahsan oo ku saabsan habkan. Chipp-ka 74HC595 wuxuu leeyahay jeex (notch) dhammaadkiisa si loo aqoonsado pin 1. Pins-yada waxaa lagu tiriyaa si ka soo horjeeda saacadda laga bilaabo jeexa (1-8 dhinac, 9-16 dhinaca kale).

Waa kuwan soo koobida fiilooyinka laga soo qaaday fiidiyowga:

  • Koronto iyo Dhul: Ku xir pin 8 iyo pin 13 ee 74HC595-ka raylka dhulka. Ku xir pin 10 iyo pin 16 raylka 5V.
  • Khadadka Xogta: Ku xir pins-yada dijitaalka ah ee Arduino-ga pins-yada xogta ee shift register-ka: Pin 12 (STcp) chip-ka pin 12, Pin 8 (SHcp) chip-ka pin 11, iyo Pin 11 (DS) chip-ka pin 14.
  • Shaashadda ilaa Shift Register: Kani waa qaybta ugu adag. Fiidiyowga (marka 07:18) wuxuu faahfaahinayaa xiriir kasta. Tusaale ahaan, qaybta 'a' ee shaashadda waxay ku xiran tahay chip-ka pin 6, qaybta 'b' pin 5, iyo wixii la mid ah. Pins-yada common cathode ee shaashadda waxay ku xiran yihiin dhulka iyada oo loo marayo resistor.

Hagaha muuqaalka ah iyo kan saxda ah, fadlan tixraac jaantuska rasmiga ah ee fiilooyinka:

Xiriirrada saxda ah ee pins-yada ayaa muhiim ah, wayna fudud tahay in qalad lagu sameeyo. Qaado waqtigaaga oo laba jeer hubi fiilo kasta marka loo eego jaantuska. Fiidiyowgu waa ilo aad u fiican oo aad raaci karto.

Dice

Sharaxaadda Koodhka

Laba tusaale oo koodh ah ayaa lagu bixiyay casharkan. Midka hore waa tiriyaha fudud, kan labaadna wuxuu ku dhisayaa si uu u abuuro dice elektaroonik ah. Labaduba waxay wadaagaan macnaha guud ee isku midka ah ee xakamaynta shaashadda.

Waa kan koodhka tiriyaha aasaasiga ah:

const int STcp = 12;//Pin ku xiran ST_CP ee 74HC595
const int SHcp = 8;//Pin ku xiran SH_CP ee 74HC595 
const int DS = 11; //Pin ku xiran DS ee 74HC595 

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

Dusha koodhka, waxaad ku habayn kartaa saddexda pin ee ku xiran shift register-ka. STcp, SHcp, iyo DS waxaa loo qoondeeyay Arduino pins 12, 8, iyo 11, siday u kala horreeyaan. datArray[] waa qayb muhiim ah. Waa shax raadin (lookup table) oo ka kooban qiimayaasha hexadecimal ee lambarrada 0 ilaa 9. Qiimaha kastaa wuxuu u taagan yahay qaabka qaybaha si loo iftiimiyo lambarkaas gaarka ah.

Shaqada loop() waxay wadaa tiriyaha. Waxay isticmaashaa for loop si ay uga tiri 0 ilaa 9. Gudaha loop-ka, koodhku wuxuu u diraa xogta nambarka hadda jira kaydiyaha wareega (shift register). delay(1000) ee dhamaadka wuxuu dejiyaa xawaaraha tiriyaha millisekenyo. U beddel qiimahan 100 si aad u tirisid degdeg ah, ama 500 mid gaabis ah.

Koodhka saxarada elektarooniga ah wuxuu soo bandhigayaa cunsur cusub: gelinta isticmaalaha iyada oo loo marayo batoon. Isbeddellada ugu muhiimsan ee qaabaynta waa:

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

Halkan, buttonPin waxaa loo dejiyay pin-ka dhijitaalka ah ee 2. Pin-kani waa mid gaar ah sababtoo ah waxaa loo isticmaali karaa sidii interrupt. Interrupt-ku wuxuu u oggolaanayaa Arduino inuu isla markiiba joojiyo waxa uu sameynayo marka batoonka la riixo, isagoo hubinaya jawaab degdeg ah oo lagu kalsoonaan karo. Qaabka FALLING wuxuu kiciyaa interrupt-ka marka batoonka la riixo (calamaduhu wuxuu ka tagayaa HIGH una tagayaa LOW).

Shaqada rollDice waxaa u yeera interrupt-ku. Waxay u beddeshaa doorsoome state inta u dhaxaysa 0 iyo 1. Marka state uu yahay 0, saxaradu waa "rogrogmaysaa," iyo loop() ugu weyni wuxuu si kadis ah u soo bandhigi doonaa nambarada. Marka batoonka mar kale la riixo, state wuxuu isu beddelaa 1, isagoo joojinaya loop-ka oo soo bandhigaya natiijada kama dambaysta ah. Shaqada showNumber() waxay la mid tahay caqliga tiriyaha, laakiin waxay qaadataa nambar dood ahaan si ay u soo bandhigto.

Mashruuc Toos ah iyo Bandejis

Marka koodhka la soo geliyo, tiriyuhu wuxuu bilaabi doonaa inuu shaqeeyo, isagoo soo bandhigaya nambarada 0 ilaa 9 daqiiqad dib u dhac ah (fiidiyowga 15:04). Fiidiyowgu wuxuu muujinayaa beddelka dib u dhaca si tiriyaha uu uga sii dhakhso badnaado.

Bandejiska saxarada elektarooniga ah (fiidiyowga 20:15) wuxuu muujinayaa batoonka shaqadiisa. Markaad hal mar riixdo, bandhigu wuxuu si degdeg ah u bilaabaa inuu ku wareego nambarada. Mar kale riixista waxay joojinaysaa wareegga, iyada oo looga tagayo nambar kadis ah oo u dhaxaysa 1 iyo 6 oo la soo bandhigay, sida saxarada dhabta ah oo kale.

Cutubyada

  • [00:00] Hordhaca Mashruuca Bandhiga Toddoba Qaybood
  • [01:25] Fahamka Bandhiga Toddoba Qaybood
  • [03:51] Xogta iyo Qeexitaanka Bandhiga 5161AS
  • [04:48] Ku xirista Bandhiga iyo Kaydiyaha Wareega
  • [12:24] Koodhka Arduino ee Tiriyaha 0-9
  • [15:04] Bandejiska Tiriyaha iyo Hagaajinta Xawaaraha
  • [16:27] Dhismaha Mashruuca Saxarada Elektarooniga ah
  • [20:15] Bandejiska Saxarada Elektarooniga ah iyo Debouncing

Sawirro

wiring on breadoard from video
wiring on breadoard from video
circuit_6.5_segment_schematic
circuit_6.5_segment_schematic
Dice
Dice
segment_wiring_sundounder_3-in-1-kit
segment_wiring_sundounder_3-in-1-kit
segments of segment display
segments of segment display
seven_segment_pins-common cathod
seven_segment_pins-common cathod
seven_segment_pins-DP decimal pin
seven_segment_pins-DP decimal pin
seven_segment_pins-common cathod
seven_segment_pins-common cathod
902-Lesson 23/31: Arduino code Using Seven Segment Display
Luqadda: 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
Luqadda: 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;
}

Kheyraadka & Tixraacyada

Faylasha📁

Arduino Libraries (zip)