Orodha ya maudhui:

Arduino Mlango: 4 Hatua
Arduino Mlango: 4 Hatua

Video: Arduino Mlango: 4 Hatua

Video: Arduino Mlango: 4 Hatua
Video: Lesson 25: HT16K33 4 digit display | Arduino Step By Step Course 2024, Julai
Anonim
Kengele ya mlango wa Arduino
Kengele ya mlango wa Arduino

Leo, nitakuonyesha jinsi ya kutengeneza kengele ya mlango kwa kutumia Arduino. Kengele hii ya mlango hucheza tune kutoka kwa maktaba ya nyimbo. Unaweza kubadilisha kengele ya mlango wako na uongeze nyimbo zaidi. Isakinishe nje ya chumba chako cha kulala, darasa, ofisi, au hata mlango wako wa mbele!

Ugavi:

  • Arduino Uno (aina nyingine nyingi zitafanya)
  • Kompyuta na Arduino IDE ya programu
  • USB-A kwa kebo ya USB-B kwa programu ya Arduino
  • Bodi ya mkate
  • Waya 4 za kuruka
  • Pushbutton au swichi nyingine
  • 10 kOhm Resistor
  • Buzzer ya kupita (i.e. spika ya umeme)
  • Kwa usanikishaji wa kudumu:

    • Ugavi wa Nguvu ya 9V DC au 9V betri kuwezesha Arduino
    • Waya 2x ndefu kwa kifungo cha wiring nje ya mlango

Hatua ya 1: Usanidi wa vifaa

Usanidi wa Vifaa
Usanidi wa Vifaa
Usanidi wa Vifaa
Usanidi wa Vifaa
Usanidi wa Vifaa
Usanidi wa Vifaa

Kwanza, tutaanzisha vifaa. Tutaanza na buzzer ya kupita (i.e. spika). Tunataka kuunganisha mwisho mzuri wa buzzer isiyo na maana (iliyoashiria "" "ishara) kwa pini ya dijiti 8 kwenye Arduino. Tutaunganisha mwisho mwingine wa buzzer ya kupita kwenye ardhi.

Ifuatayo, tutaweka kitufe cha kushinikiza kwa kengele ya mlango. Tutatumia kontena ya nje ya chini ya 10 kOhm kwa swichi, kwa hivyo hakuna voltage inayoelea au hali isiyo na msimamo kwenye pembejeo kwa Arduino. Kwa kutumia kontena la kusukuma chini, Arduino inasoma voltage kama 0V wakati kitufe hakijabanwa na 5V wakati kitufe kinabanwa. Kwa habari zaidi juu ya vidhibiti vya pullup au pulldown, unaweza kusoma nakala hii:

Tutaunganisha upande mmoja wa kitufe cha kusukuma hadi 5V. Upande wa pili wa kitufe cha kushinikiza utaunganishwa ardhini kupitia kontena la 10 kOhm. Kumbuka: vifungo vya kushinikiza vimeunganishwa kwa usawa ndani. Wao ni kushikamana tu kwa wima wakati wa kushinikizwa. Habari zaidi imetolewa katika nakala hii:

Hatua ya 2: Usanidi wa Programu

Nambari yote imeambatanishwa. Chini ni maelezo ya kila moja ya kazi na picha za nambari.

kuanzisha:

Katika kazi ya kuanzisha (), tunataka kusanidi pini za dijiti kwa kitufe chetu na spika yetu. Tunataka kusanidi pini 2 kama pembejeo kwa kitufe chetu, na tunataka kusanidi pini 8 kama pato kwa spika yetu.

Tunataka pia "kuzaa" jenereta yetu ya nambari ya nasibu kwa kuchagua nasibu tune wakati mtu anapiga kengele ya mlango wetu. Kupanda jenereta yetu ya nambari isiyo na maana inamaanisha kulisha pembejeo bila mpangilio. Tutapanda jenereta yetu ya nambari bila mpangilio na thamani ya voltage kwenye pembejeo ya Analog 0. Kwa kuwa hakuna kitu kinachounganishwa na pembejeo hii, kutakuwa na "nasibu", inayobadilika kwa voltage kwenye pini hii ikitoa jenereta yetu ya nambari isiyo ya kawaida na maadili mengi tofauti. Hii inahakikisha kwamba tutakuwa na mpangilio tofauti wa nyimbo za kuchagua kengele yetu ya mlango. Kwa habari zaidi juu ya kazi ya Arduino bila mpangilio (), nenda hapa:

# pamoja na "viwanja."

#jumuisha nyimbo. pinMode (SPEAKER_PIN, OUTPUT); // mbegu random () kazi ili tupate mpangilio tofauti randomSeed (analogRead (0)); }

kitanzi:

Katika kazi yetu ya kitanzi (), tutaendelea kuangalia ikiwa kitufe kinabanwa (pini 2 ya dijiti iko juu). Ikiwa pini iko juu, tunasubiri ms ms 50 na uangalie tena ili kuhakikisha kuwa bado iko juu. Hii inahakikisha kuwa kitufe kimeshinikizwa na haikuwa kelele iliyopotea kwenye pini ya pembejeo ya dijiti inayosababisha chanya bandia.

Mara tu tutakapothibitisha kuwa kitufe kilibonyezwa, tunatumia jenereta ya nambari ya nasibu kuchagua moja ya nyimbo 5 kwa kutumia taarifa ya kubadili. Takwimu za nyimbo hizi zimehifadhiwa katika "songs.h" na habari ya lami imehifadhiwa kwenye "pitches.h". Mara tu tunapochagua wimbo, tunapitisha habari hii kwenye kazi play_song ().

/ * kuu wakati kazi ya kitanzi * /

kitanzi batili () {// angalia ikiwa kitufe kinabanwa ikiwa (digitalRead (BUTTON_PIN) == JUU) {// kuchelewesha ms ms 50 ili kuhakikisha bado imebanwa // inaepuka ucheleweshaji wowote wa upotovu wa kusoma (50); ikiwa (digitalRead (BUTTON_PIN) == JUU) {// nasibu chagua wimbo int song_choice = nasibu (5); // chagua wimbo upi wa kucheza switch (song_choice) {kesi 0: play_song (kukata nyweleLength, kukata nywele, kukata nyweleDurations, kukata nyweleTempo); kuvunja; kesi 1: play_song (marioLength, mario, marioDurations, marioTempo); kuvunja; kesi 2: play_song (miiLength, mii, miiDurations, miiTempo); kuvunja; kesi 3: play_song (hpLength, hp, hpDurations, hpTempo); kuvunja; kesi 4: play_song (takeonmeLength, takeonme, takeonmeDurations, takeonmeTempo); kuvunja; chaguo-msingi: play_song (miiLength, mii, miiDurations, miiTempo); kuvunja; }}}}

cheza_song:

play_song () inachukua hoja 4: idadi kamili ya noti kwenye wimbo, safu kamili ya viunga kwenye wimbo, safu kamili ya muda, na tempo kamili ya wimbo huo. Lazima ueleze kila moja ya haya kwa kila wimbo unayotaka kucheza. Kwa habari zaidi juu ya jinsi ya kutumia kazi za toni za Arduino, unaweza kuangalia mafunzo haya: https://www.arduino.cc/en/Tutorial/ToneMelody. Niliongeza utendakazi juu ya mafunzo haya kwa maelezo yenye doti. Ikiwa thamani katika safu ya muda wa dokezo ni hasi, hiyo inamaanisha kuwa ni dokezo lenye nukta (urefu ni mara 1.5 zaidi).

/ * anacheza wimbo * /

batili play_song (int num_notes, int melody , int noteDurations , int tempo) {// pitia na ucheze noti zote za (int i = 0; i 0) {duration = tempo / noteDurations ; } // ikiwa ni nambari hasi, inamaanisha dokezo lenye nukta toni (SPEAKER_PIN, wimbo , muda); // kutofautisha maelezo, weka muda wa chini kati yao. // muda wa dokezo + 30% unaonekana kufanya kazi vizuri: int pauseBetweenNotes = duration * 1.30; kuchelewesha (pauseBetweenNotes); // simamisha sauti ikicheza: hakuna Toni (SPEAKER_PIN); }}

Mfano wa nyimbo.h:

Chini ni sampuli ya moja ya nyimbo katika "songs.h". Vidokezo ni macros hufafanuliwa katika "pitches.h". Nambari zinahusiana na masafa ya maelezo kwenye hertz (Hz). Muda wa madokezo hufafanuliwa kama: 1 = dokezo zima, 2 = dokezo la nusu, 4 = noti ya robo, 8 = noti ya nane, -4 = noti ya nukta, n.k Urefu ni jumla ya noti kwenye wimbo. Tempo ni mgawanyiko kwa kasi ya wimbo (nambari ya juu inamaanisha tempo polepole). Itabidi ucheze karibu na nambari hii mpaka upate tempo ambayo unapenda.

/ * harry mfinyanzi * /

int hp = {NOTE_D4, NOTE_G4, NOTE_AS4, NOTE_A4, NOTE_G4, NOTE_D5, NOTE_C5, NOTE_A4, NOTE_G4, NOTE_AS4, NOTE_A4, NOTE_F4, NOTE_GS4, NOTE_D4}; int hpDurations = {4, -4, 8, 4, 2, 4, -2, -2, -4, 8, 4, 2, 4, 1}; int hpUrefu = 14; int hpTempo = 1050;

Hatua ya 3: Tweaks

Ongeza nyimbo zaidi! Fuata fomati iliyoonyeshwa kwenye "songs.h" na utumie mafunzo kwa msaada: https://www.arduino.cc/en/Tutorial/ToneMelody. Kwa kila wimbo mpya unaongeza, kumbuka kuongeza kesi mpya kwenye taarifa ya kubadili na kuongeza idadi kubwa ambayo inaweza kuzalishwa na kazi yako ya nasibu (). Furaha ya kuweka alama!

Hatua ya 4: Miradi zaidi

Kwa miradi zaidi, tembelea kurasa zangu:

  • https://dargen.io/
  • https://github.com/mjdargen
  • https://www.instructables.com/member/mjdargen/

Ilipendekeza: