Tafuta Msimbo

Somo la 22/31: Kutumia Seven Segment Display na Arduino na Kete za Kielektroniki | SunFounder Robojax

Somo la 22/31: Kutumia Seven Segment Display na Arduino na Kete za Kielektroniki | SunFounder Robojax

Katika somo hili, tunachunguza jinsi ya kudhibiti skrini ya sehemu saba (seven-segment display) kwa kutumia Arduino. Badala ya kutumia pini zaidi ya dazeni za I/O kuendesha kila sehemu ya LED moja kwa moja, tunatumia mbinu ya busara: shift register. Chip hii ndogo na ya bei nafuu inaturuhusu kudhibiti sehemu zote saba (pamoja na nukta ya desimali) kwa kutumia nyaya tatu tu kutoka kwa Arduino. Hii ni mbinu ya msingi katika umeme inayokuwezesha kupanua idadi ya matokeo yanayopatikana kwenye microcontroller yako, na kufanya iwezekane kujenga miradi ngumu zaidi bila kubadilisha bodi yako.

wiring kwenye breadboard kutoka kwenye video

Zaidi ya counter ya msingi, tutaunda kete ya elektroniki. Mradi huu sio tu unaimarisha udhibiti wa skrini bali pia unatanguliza pembejeo kutoka kwa mtumiaji kupitia kitufe cha kushinikiza na dhana ya interrupts, na kuunda kifaa kinachoitikia na kinachoshirikiana. Mwongozo huu unatokana na somo kutoka kwa Kozi ya Arduino ya Robojax, ambayo inatumia kit cha Arduino cha SunFounder 3-in-1.

Hapa kuna mawazo machache ya vitendo unayoweza kujenga kwa kutumia maarifa haya:

  • Unda ubao wa alama rahisi kwa michezo kama vile tenisi ya meza au mpira wa kikapu.
  • Jenga timer ya dijiti kwa michezo ya bodi au timer ya kuhesabu dakika jikoni.
  • Tengeneza jenereta ya nambari nasibu kwa michezo au kufanya maamuzi.
  • Jenga thermometer ya dijiti ya msingi kwa kuongeza sensor ya joto.

Vifaa na Vipengele

Kabla ya kuanza, hebu tukusanye vipengele muhimu. Kiini cha mradi huu ni shift register ya 74HC595, ambayo ni ufunguo wa kupunguza idadi ya pini zinazohitajika. Badala ya kuunganisha kila sehemu kati ya saba moja kwa moja kwenye Arduino, tunaziunganisha kwenye shift register. Arduino kisha hutuma data ya tarakimu kwa mfuatano (biti moja kwa wakati) kwenye chip, ambayo kisha hutoa muundo sahihi wa kuwasha sehemu.

  • Arduino Uno (au bodi inayooana)
  • Skrini ya sehemu saba (modeli 5161AS, cathode ya kawaida)
  • IC ya shift register ya 74HC595
  • Kitufe cha kushinikiza
  • Resistors (220Ω - 330Ω)
  • Nyaya za jumper
  • Breadboard

Skrini ya 5161AS ni aina ya cathode ya kawaida. Hii inamaanisha kwamba cathodes zote (pande hasi) za LED za ndani zimeunganishwa pamoja kwenye pini moja ya ardhi ya kawaida. Ili kuwasha sehemu, unatoa voltage chanya kwenye pini yake maalum ya anode. 74HC595 hufanya kama daraja, ikichukua data ya mfuatano kutoka kwa Arduino na kutoa ishara sambamba zinazohitajika kuendesha anodes hizi.

Mwongozo wa Wiring

circuit_6.5_segment_schematic
segment_wiring_sundounder_3-in-1-kit

Kuunganisha shift register na skrini kunaweza kuonekana kuwa gumu, lakini kufuata mchoro hatua kwa hatua ni muhimu. Video (saa 04:48) inatoa maelezo ya kina ya mchakato huu. Chip ya 74HC595 ina notch kwenye mwisho mmoja ili kutambua pini 1. Pini zinahesabiwa kinyume cha saa kutoka kwenye notch (1-8 upande mmoja, 9-16 upande mwingine).

Hapa kuna muhtasari wa wiring kutoka kwenye video:

  • Nguvu na Ardhi: Unganisha pini 8 na pini 13 ya 74HC595 kwenye reli ya ardhi. Unganisha pini 10 na pini 16 kwenye reli ya 5V.
  • Nyaya za Data: Unganisha pini za dijiti za Arduino kwenye pini za data za shift register: Pini 12 (STcp) kwenye pini 12 ya chip, Pini 8 (SHcp) kwenye pini 11 ya chip, na Pini 11 (DS) kwenye pini 14 ya chip.
  • Skrini kwa Shift Register: Hii ndiyo sehemu ngumu zaidi. Video (saa 07:18) inaelezea kila uunganisho. Kwa mfano, sehemu 'a' kwenye skrini inaunganishwa kwenye pini 6 ya chip, sehemu 'b' kwenye pini 5, na kadhalika. Pini za cathode ya kawaida za skrini zinaunganishwa kwenye ardhi kupitia resistor.

Kwa mwongozo wa kuona na sahihi, tafadhali rejea mchoro rasmi wa wiring:

Uunganisho halisi wa pini ni muhimu, na ni rahisi kufanya makosa. Chukua muda wako na uangalie mara mbili kila nyaya dhidi ya mchoro. Video ni rasilimali bora ya kufuata.

Kete

Maelezo ya Msimbo

Mifano miwili ya msimbo imetolewa katika somo hili. Ya kwanza ni counter rahisi, na ya pili inajenga juu yake kuunda kete ya elektroniki. Zote mbili zinashiriki mantiki sawa ya msingi ya kudhibiti skrini.

Hapa kuna msimbo wa counter ya msingi:

const int STcp = 12;//Pini iliyounganishwa kwenye ST_CP ya 74HC595
const int SHcp = 8;//Pini iliyounganishwa kwenye SH_CP ya 74HC595 
const int DS = 11; //Pini iliyounganishwa kwenye DS ya 74HC595 

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

Juu ya msimbo, unaweza kusanidi pini tatu zilizounganishwa kwenye shift register. STcp, SHcp, na DS zimepewa pini za Arduino 12, 8, na 11, mtawalia. datArray[] ni sehemu muhimu. Ni jedwali la kuangalia linalo na thamani za hexadecimal za tarakimu 0 hadi 9. Kila thamani inawakilisha muundo wa sehemu za kuwasha kwa tarakimu hiyo maalum.

Kitendaji cha loop() huendesha kihesabu. Kinatumia kitanzi cha for kuhesabu kutoka 0 hadi 9. Ndani ya kitanzi, msimbo hutuma data ya nambari ya sasa kwa rejista ya mabadiliko. delay(1000) mwishoni huweka kasi ya kihesabu kwa millisekunde. Badilisha thamani hii kuwa 100 kwa hesabu ya haraka, au 500 kwa ile ya polepole.

Msimbo wa kete ya elektroniki unaleta kipengele kipya: pembejeo ya mtumiaji kupitia kitufe. Mabadiliko muhimu ya usanidi ni:

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

Hapa, buttonPin imewekwa kwenye pini ya dijiti 2. Pini hii ni maalum kwa sababu inaweza kutumika kama usumbufu. Usumbufu huruhusu Arduino kusimamisha kile kinachofanya mara moja wakati kitufe kinapobonyezwa, kuhakikisha mwitikio wa haraka na wa kuaminika. Hali ya FALLING huanzisha usumbufu wakati kitufe kinapobonyezwa (ishara inapita kutoka HIGH hadi LOW).

Kitendaji cha rollDice huitwa na usumbufu. Kinabadilisha kigezo cha state kati ya 0 na 1. Wakati state ni 0, kete "inazunguka," na loop() kuu itaonyesha nambari kwa nasibu. Wakati kitufe kinapobonyezwa tena, state inabadilika kuwa 1, ikisimamisha kitanzi na kuonyesha matokeo ya mwisho. Kitendaji cha showNumber() ni sawa na mantiki ya kihesabu, lakini kinachukua nambari kama hoja ya kuonyesha.

Mradi wa Moja kwa Moja na Maonyesho

Mara tu msimbo unapopakiwa, kihesabu kitaanza kufanya kazi, kikionyesha nambari kutoka 0 hadi 9 kwa kuchelewa kwa sekunde moja (katika video saa 15:04). Video inaonyesha kubadilisha kuchelewa ili kufanya kihesabu kiendeshe haraka zaidi.

Maonyesho ya kete ya elektroniki (katika video saa 20:15) yanaonyesha kitufe kikifanya kazi. Unapokibonyeza mara moja, onyesho huanza kupitia nambari kwa haraka. Kubonyeza tena kunasimamisha mzunguko, na kuacha nambari ya nasibu kati ya 1 na 6 ikionyeshwa, kama kete halisi.

Sura

  • [00:00] Utangulizi wa Mradi wa Onyesho la Sehemu Saba
  • [01:25] Kuelewa Onyesho la Sehemu Saba
  • [03:51] Datasheet na Vipimo vya Onyesho la 5161AS
  • [04:48] Kuunganisha Onyesho na Rejista ya Mabadiliko
  • [12:24] Msimbo wa Arduino kwa Kihesabu cha 0-9
  • [15:04] Maonyesho ya Kihesabu na Kurekebisha Kasi
  • [16:27] Kujenga Mradi wa Kete ya Elektroniki
  • [20:15] Maonyesho ya Kete ya Elektroniki na Uondoaji wa Mwangwi

Bilder

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
Språk: 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
Språk: 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;
}

Resurser och referenser

Filer📁

Arduino-bibliotek (zip)