Mundarija:

Arduino eshik qo'ng'irog'i: 4 qadam
Arduino eshik qo'ng'irog'i: 4 qadam

Video: Arduino eshik qo'ng'irog'i: 4 qadam

Video: Arduino eshik qo'ng'irog'i: 4 qadam
Video: avtomatik elektron qo'ng'iroq 2024, Iyul
Anonim
Arduino eshik qo'ng'irog'i
Arduino eshik qo'ng'irog'i

Bugun men sizga Arduino yordamida eshik qo'ng'irog'ini yasashni ko'rsataman. Bu eshik qo'ng'irog'i qo'shiqlar kutubxonasidan tasodifiy ohangni ijro etadi. Siz eshik qo'ng'irog'ini sozlashingiz va undan ham ko'proq qo'shiq qo'shishingiz mumkin. Uni yotoqxonangiz, sinfingiz, ofisingiz yoki hatto old eshigingizdan tashqariga o'rnating!

Ta'minot:

  • Arduino Uno (boshqa turlarning ko'pchiligi shunday qiladi)
  • Dasturlash uchun Arduino IDE o'rnatilgan kompyuter
  • Arduino dasturlash uchun USB-A-USB-B kabeli
  • Non paneli
  • 4x o'tish simlari
  • Tugma yoki boshqa tugma
  • 10 kOhm qarshilik
  • Passiv signal (masalan, piezoelektrik karnay)
  • Doimiy o'rnatish uchun:

    • Arduino -ni quvvatlantirish uchun 9V shahar quvvat manbai yoki 9V batareya
    • Tashqi eshikni ulash tugmasi uchun 2x uzun simlar

1 -qadam: Uskuna sozlamalari

Uskunani sozlash
Uskunani sozlash
Uskunani sozlash
Uskunani sozlash
Uskunani sozlash
Uskunani sozlash

Birinchidan, biz uskunani o'rnatamiz. Biz passiv signal signalidan (ya'ni karnay) boshlaymiz. Biz passiv buzzerning ijobiy uchini ("+" belgisi bilan belgilanadi) Arduino -dagi raqamli 8 -pin bilan bog'lamoqchimiz. Biz passize signalining ikkinchi uchini erga ulaymiz.

Keyinchalik, biz eshik qo'ng'irog'i uchun tugmachani o'rnatamiz. Biz kalit uchun 10 kOhm tashqi ochiladigan qarshilikdan foydalanamiz, shuning uchun Arduino kirishiga suzuvchi kuchlanish yoki beqaror holat yo'q. Ochiladigan rezistor yordamida Arduino tugma bosilmasa, kuchlanish 0V, tugma bosilganda 5V bo'ladi. Yuk ko'taruvchi yoki ochiladigan rezistorlar haqida ko'proq ma'lumot olish uchun siz ushbu maqolani o'qishingiz mumkin:

Biz tugmachaning bir tomonini 5V ga ulaymiz. Tugmachaning boshqa tomoni erga 10 kOm kuchlanishli rezistor orqali ulanadi. Esingizda bo'lsin: tugmachalar gorizontal ravishda ichkariga ulanadi. Ular faqat bosilganda vertikal ravishda ulanadi. Qo'shimcha ma'lumot ushbu maqolada keltirilgan:

2 -qadam: dasturiy ta'minotni sozlash

Barcha kod biriktirilgan. Quyida kodning oniy tasvirlari bilan har bir funksiyaning tavsifi berilgan.

sozlash:

Setup () funktsiyasida biz tugmachamiz va karnayimiz uchun raqamli pinlarni sozlamoqchimiz. Biz 2 -pinni tugmachamiz uchun kirish sifatida, 8 -pinni dinamik uchun chiqish sifatida sozlamoqchimiz.

Shuningdek, biz kimdir eshik qo'ng'irog'ini chalganda tasodifiy ohangni tanlash uchun tasodifiy sonlar generatorini "urug'lantirmoqchimiz". Bizning tasodifiy sonlar generatorini ekish, uni tasodifiy kiritishni anglatadi. Biz tasodifiy raqamlar generatorini analog kirish 0 ga kuchlanish qiymati bilan joylashtiramiz. Bu kirishga hech narsa ulanmaganligi uchun, bu tasmada tasodifiy sonlar generatorini har xil qiymatlarga ega bo'lgan "tasodifiy" o'zgaruvchan kuchlanish bo'ladi. Bu bizning eshik qo'ng'irog'imiz uchun qo'shiq tanlashning boshqa tartibiga ega bo'lishimizni ta'minlaydi. Arduino random () funktsiyasi haqida qo'shimcha ma'lumot olish uchun bu erga kiring:

#"pitch.h" ni qo'shing

#include "songs.h" #deutine BUTTON_PIN 2 #deffine SPEAKER_PIN 8/ * funktsiyani sozlash */void setup () {// pinMode kirish/chiqish pinlarini yoqish (BUTTON_PIN, INPUT); pinMod (SPEAKER_PIN, OUTPUT); // urug 'random () funktsiyasi, shuning uchun biz boshqa tartibni olamiz randomSeed (analogRead (0)); }

pastadir:

Loop () funktsiyasida biz tugma bosilganligini tekshiramiz (raqamli pin 2 baland). Agar pin baland bo'lsa, biz 50 ms kutamiz va u hali ham balandligini tekshirish uchun yana tekshiramiz. Bu tugma bosilishini ta'minlaydi va raqamli kirish pinidagi noto'g'ri shovqin noto'g'ri pozitivlikni keltirib chiqaradi.

Tugma bosilganligini tasdiqlaganimizdan so'ng, biz tasodifiy sonlar generatoridan foydalanib, switch iborasi yordamida 5 ta qo'shiqdan birini tanlaymiz. Bu qo'shiqlar haqidagi ma'lumotlar "songs.h" da saqlanadi va "pitches.h" da ovoz haqidagi ma'lumotlar saqlanadi. Qo'shiqni tanlagandan so'ng, biz bu ma'lumotni play_song () funktsiyasiga o'tkazamiz.

/ * main while loop funktsiyasi */

void loop () {// tugmasi bosilganligini tekshiring, agar (digitalRead (BUTTON_PIN) == HIGH) {// 50 ms kechiktirilsa, u hali ham bosilganligiga ishonch hosil qiling // har qanday adashib o'qishni kechiktirishdan saqlaydi (50); if (digitalRead (BUTTON_PIN) == HIGH) {// tasodifiy qo'shiqni tanlang int song_choice = tasodifiy (5); // qaysi qo'shiqni ijro etishini tanlang (song_choice) {0 holat: play_song (haircutLength, haircut, haircutDurations, haircutTTEMO); tanaffus; 1 -holat: play_song (marioLength, mario, marioDurations, marioTempo); tanaffus; 2 -holat: play_song (miiLength, mii, miiDurations, miiTempo); tanaffus; 3 -holat: play_song (hpLength, hp, hPDurations, hpTempo); tanaffus; 4 -holat: play_song (takeonmeLength, takeonme, takeonmeDurations, takeonmeTempo); tanaffus; standart: play_song (miiLength, mii, miiDurations, miiTempo); tanaffus; }}}}

play_song:

play_song () 4 ta dalilni oladi: qo'shiqdagi notalarning butun soni, ohangdagi tovushlarning butun soni, davomiylikning butun sonli massivi va o'sha qo'shiq uchun butun sonli temp. Siz ijro etishni xohlagan har bir qo'shiq uchun ularning har birini belgilashingiz kerak. Arduino ohang funksiyalaridan foydalanish haqida qo'shimcha ma'lumot olish uchun siz ushbu qo'llanmani ko'rishingiz mumkin: https://www.arduino.cc/en/Tutorial/ToneMelody. Men nuqta qo'yilgan yozuvlar uchun ushbu qo'llanmaning ustiga ba'zi funktsiyalarni qo'shdim. Agar eslatma davomiyligidagi qiymat manfiy bo'lsa, demak u nuqta (uzunlik 1,5 barobar katta).

/ * qo'shiqni ijro etadi */

void play_song (int num_notes, int melodiya , int noteDurations , int temp) {// o'tish va barcha yozuvlarni ijro etish (int i = 0; i 0) {muddati = temp / noteDurations ; } // agar bu manfiy son bo'lsa, nuqta yozilgan degan ma'noni anglatadi // boshqa nuqtali yozuvlar uchun davomiylikni ikki baravar oshiradi, agar (noteDurations <0) {duration = temp / abs (noteDurations ) * 1.5; } ohang (SPEAKER_PIN, ohang , davomiyligi); // eslatmalarni farqlash uchun ular orasidagi minimal vaqtni belgilang. // eslatmaning davomiyligi + 30% yaxshi ishlayotganga o'xshaydi: int pauseBetweenNotes = muddati * 1.30; kechikish (pauseBetweenNotes); // ohang ijro etilishini to'xtatish: noTone (SPEAKER_PIN); }}

Qo'shiqlar namunasi: h:

Quyida "songs.h" dagi qo'shiqlardan birining namunasi keltirilgan. Eslatmalar "pitches.h" da aniqlangan makrolardir. Raqamlar gerts (Hz) dagi yozuvlarning chastotalariga mos keladi. Notalarning davomiyligi quyidagicha aniqlanadi: 1 = butun nota, 2 = yarim nota, 4 = chorak eslatma, 8 = sakkizinchi eslatma, -4 = nuqta chorakli eslatma va boshqalar. Uzunlik qo'shiqdagi yozuvlarning umumiy soni. Temp - bu qo'shiq tezligini ajratuvchi (yuqori raqam sekinroq tempni bildiradi). Sizga yoqqan tempni olmaguningizcha, bu raqam bilan o'ynashingiz kerak bo'ladi.

/* Garri Potter */

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 hpLength = 14; int hpTempo = 1050;

3 -qadam: Tiking

Yana qo'shiqlar qo'shing! "Songs.h" da ko'rsatilgan formatga rioya qiling va yordam uchun o'quv qo'llanmasidan foydalaning: https://www.arduino.cc/en/Tutorial/ToneMelody. Siz qo'shgan har bir yangi qo'shiq uchun switch iborasiga yangi harf qo'shishni va tasodifiy () funktsiyangiz yaratishi mumkin bo'lgan maksimal sonni ko'paytirishni unutmang. Baxtli kodlash!

4 -qadam: Boshqa loyihalar

Boshqa loyihalar uchun sahifalarimga tashrif buyuring:

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

Tavsiya: