Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Selamat Ulang Tahun Melody di Arduino Nano dengan 3-Way Polyphony

Komponen dan persediaan

Arduino Nano R3
× 1

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Mainkan tema polifoni "Selamat ulang tahun" di Arduino Nano dengan tiga buzzer di satu papan tempat memotong roti mini.

Pertama-tama - demonstrasi

Colokkan benda ini ke sumber daya USB apa pun (tidak hanya komputer) dan alat ini akan memainkan melodi "Selamat ulang tahun" tanpa batas... seperti hampir... sampai Anda benar-benar muak =]

BTW, lampu berkedip dengan bijaksana dengan setiap perubahan nada di saluran/buzzer yang sesuai.

Skema

Idenya adalah untuk membuat perangkat super ringkas dengan (hampir) tanpa penyolderan.

Akhirnya saya berhasil memasukkan semua yang dibutuhkan di papan tempat memotong roti kecil seperti ini:

Lubang saling berhubungan di dalam papan tempat memotong roti dengan cara ini:

Triknya di sini adalah papan Arduino Nano cocok dengan papan tempat memotong roti seperti itu hanya SEMPURNA memungkinkan kita untuk menghubungkan beberapa komponen tambahan di kedua sisi papan tempat memotong roti.

Maaf, teman-teman... Saya terlalu malas untuk menggambar diagram apa pun di sini, tetapi kasus ini SANGAT sederhana sehingga saya yakin close-up ini akan lebih dari cukup untuk mengetahui semuanya =]

Seperti yang Anda lihat, saya menggunakan papan Arduino Nano v3.0 dari Gravitech di sini tetapi analog apa pun bisa digunakan. Buzzer dan LED di sini SANGAT biasa. Mereka sebenarnya tidak harus cocok dengan parameter khusus apa pun.

Resistor di sini adalah 100 Ohm... meskipun "standar" umum untuk perlindungan kelebihan beban LED adalah 220 Ohm... tapi siapa peduli... \_(ツ)_/¯

Satu-satunya hal yang mungkin tidak begitu jelas di foto-foto ini adalah bahwa pin buzzer dimasukkan ke papan tempat memotong roti dengan cara ini:

Perhatikan juga bahwa bagian tengah lebih besar dari yang lain - itu karena yang ini digunakan untuk saluran musik "bass"

... hanya bercanda! ^__^ Mereka semua mencicit seperti paduan suara tikus gila tanpa perbedaan sama sekali dalam kemampuan suara mereka =]

Jadi Anda dapat menggunakan tiga buzzer yang identik jika diinginkan tanpa masalah, namun Anda harus menempatkannya di posisi yang sedikit berbeda pada papan tempat memotong roti dan juga untuk mengubah nomor pin keluaran dalam kode program sesuai dengan penempatan buzzer baru Anda.

Juga, perhatikan "peretasan" kecil lainnya di sini... lagi pula, apakah kita sedang dalam Peretasan ster sini atau apa? =] Jadi saya menggunakan beberapa I/O Arduino sematkan di sini sebagai arde pin untuk buzzer dan led . Ya itu betul. Sebenarnya, jika Anda menetapkan status "RENDAH" untuk pin I/O Arduino apa pun di program Anda, maka Anda dapat menggunakan pin ini dengan cara yang sama seperti Anda menggunakan pin GND standar pada papan Arduino. Keren, kan?;)

Tentang programnya...

Daftar lengkap sketsa Arduino IDE disediakan di bawah ini. Namun, Anda harus menginstal pustaka "Nada" tambahan untuk dapat mengkompilasi sketsa yang dapat Anda unduh di sini:

https://www.dropbox.com/s/q1udxg4yi47emeo/Tone.zip?dl=0

(jika ada jendela pop-up dengan "proposal" pendaftaran, tutup saja dengan tombol "x" di sudut)

Cara termudah untuk menginstal perpustakaan ini adalah sebagai berikut:di menu utama Arduino IDE pilih Sketsa - Sertakan Perpustakaan - Tambahkan Perpustakaan .ZIP... lalu pilih file zip yang Anda unduh... easy \_(ツ)_/¯

Pustaka ini diperlukan untuk melakukan generasi simultan beberapa nada pada satu pengontrol (menggunakan beberapa pengatur waktu perangkat keras tambahan dan interupsi perangkat keras "di bawah tenda" untuk mencapai tujuan ini). Sederhananya, ini semacam "redneck-multitasking" pada satu inti prosesor tanpa OS apa pun =]

BTW, ini dia penulis perpustakaannya (thanks bro! =] ):

http://playground.arduino.cc/Profiles/Bhagman

... dan halaman GitHub dari perpustakaan:

https://github.com/bhagman/Tone

DISCLAIMER :
Terus terang, kode program saya di sini agak besar dan sulit dibaca. Itu sebagian besar karena kebutuhan untuk "menyulap" dengan tiga utas melodi "independen" secara bersamaan dari hanya satu aliran perintah linier. Saya benar-benar berpikir untuk memfaktorkan ulang kode nanti agar dapat memisahkan melodi satu sama lain dan menggunakannya di masa mendatang untuk memainkan lagu yang berbeda... tetapi saya mungkin tidak akan =]

Jadi semoga beruntung. Setiap umpan balik dihargai.

Terima kasih telah membaca sampai akhir =]

Kode

  • Selamat ulang tahun
Selamat_ulang tahunArduino
Jangan lupa untuk menginstal Tone library!!
#include Tone solo;Tone bass;Tone rythm;const int t =600; // quater note durasiconst int tt =t*2;const int t14 =bulat(t*1/4);const int t24 =bulat(t*2/4);const int t34 =bulat(t*3/4);const int bassLedPin =15; // pin sinyal led bass (alias A1)const int rythmLedPin =17; // pin sinyal rythm led (alias A3)const int soloLedPin =19; // pin sinyal led solo (alias A5) batal tunggu(Nada t){ while (t.isPlaying()) { } }int bassLedState =LOW;void switchBassLed(){ if (bassLedState ==LOW) bassLedState =HIGH; lain bassLedState =RENDAH; digitalWrite(bassLedPin, bassLedState);}int rythmLedState =LOW;void switchRythmLed(){ if (rythmLedState ==LOW) rythmLedState =HIGH; lain rythmLedState =RENDAH; digitalWrite(rythmLedPin, rythmLedState);}int soloLedState =LOW;void switchSoloLed(){ if (soloLedState ==LOW) soloLedState =HIGH; lain soloLedState =RENDAH; digitalWrite(soloLedPin, soloLedState);}pengaturan batal(void){ pinMode(14, OUTPUT); // pin ground led (alias A0) pinMode(16, OUTPUT); // pin ground led (alias A2) pinMode(18, OUTPUT); // pin ground led (alias A4) pinMode(bassLedPin, OUTPUT); // pin sinyal led bass pinMode(rythmLedPin, OUTPUT); // rythm pin sinyal pinMode(soloLedPin, OUTPUT); // solo pin sinyal led pinMode(2, OUTPUT); // solo buzzer ground pin pinMode(9, OUTPUT); // rythm buzzer ground pin solo.begin(6); // pin sinyal bel solo bass.begin(12); // pin sinyal bel bass rythm.begin(0); // pin sinyal rythm buzzer solo.play(NOTE_D4, t34); switchSoloLed(); tunggu (sendirian); solo.play(CATATAN_D4, t14); switchSoloLed(); wait(solo);}void loop(void){bass.play(CATATAN_G3, t); switchBassLed(); rythm.play(CATATAN_G4, t24); switchRythmLed(); solo.play(CATATAN_E4, t); switchSoloLed(); tunggu (ritme); rythm.play(CATATAN_B4, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_D5, t14); switchRythmLed(); tunggu(ritme);bass.play(CATATAN_B3, t); switchBassLed(); rythm.play(CATATAN_G4, t24); switchRythmLed(); solo.play(CATATAN_D4, t); switchSoloLed(); tunggu (ritme); rythm.play(CATATAN_B4, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_D5, t14); switchRythmLed(); tunggu(ritme);bass.play(CATATAN_D4, t); switchBassLed(); rythm.play(CATATAN_G4, t24); switchRythmLed(); solo.play(CATATAN_G4, t); switchSoloLed(); tunggu (ritme); rythm.play(CATATAN_B4, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_D5, t14); switchRythmLed(); tunggu(ritme);bass.play(CATATAN_D4, t); switchBassLed(); rythm.play(CATATAN_D5, t24); switchRythmLed(); solo.play(NOTE_FS4, tt); switchSoloLed(); tunggu (ritme); rythm.play(NOTE_FS5, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_A5, t14); switchRythmLed(); tunggu(ritme);bass.play(NOTE_FS4, t); switchBassLed(); rythm.play(CATATAN_D5, t24); switchRythmLed(); tunggu (ritme); rythm.play(NOTE_FS5, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_A5, t14); switchRythmLed(); tunggu(ritme);bass.play(NOTE_A4, t); switchBassLed(); rythm.play(CATATAN_D5, t24); switchRythmLed(); solo.play(CATATAN_D4, t34); switchSoloLed(); tunggu (ritme); rythm.play(NOTE_FS5, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_A5, t14); switchRythmLed(); solo.play(CATATAN_D4, t14); switchSoloLed(); tunggu(ritme);bass.play(CATATAN_D4, t); switchBassLed(); rythm.play(CATATAN_D5, t24); switchRythmLed(); solo.play(CATATAN_E4, t); switchSoloLed(); tunggu (ritme); rythm.play(NOTE_FS5, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_A5, t14); switchRythmLed(); tunggu (ritme); bass.play(CATATAN_FS4, t); switchBassLed(); rythm.play(CATATAN_D5, t24); switchRythmLed(); solo.play(CATATAN_D4, t); switchSoloLed(); tunggu (ritme); rythm.play(NOTE_FS5, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_A5, t14); switchRythmLed(); tunggu (ritme); bass.play(CATATAN_A4, t); switchBassLed(); rythm.play(CATATAN_D5, t24); switchRythmLed(); solo.play(CATATAN_A4, t); switchSoloLed(); tunggu (ritme); rythm.play(NOTE_FS5, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_A5, t14); switchRythmLed(); tunggu (ritme); bass.play(CATATAN_G3, t); switchBassLed(); rythm.play(CATATAN_G4, t24); switchRythmLed(); solo.play(CATATAN_G4, tt); switchSoloLed(); tunggu (ritme); rythm.play(CATATAN_B4, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_D5, t14); switchRythmLed(); tunggu(ritme);bass.play(CATATAN_B3, t); switchBassLed(); rythm.play(CATATAN_G4, t24); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_B4, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_D5, t14); switchRythmLed(); tunggu (ritme); bass.play(CATATAN_D4, t); switchBassLed(); rythm.play(CATATAN_G4, t24); switchRythmLed(); solo.play(CATATAN_D4, t34); switchSoloLed(); tunggu (ritme); rythm.play(CATATAN_B4, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_D5, t14); switchRythmLed(); solo.play(CATATAN_D4, t14); switchSoloLed(); tunggu(ritme);bass.play(CATATAN_G3, t); switchBassLed(); rythm.play(CATATAN_G4, t24); switchRythmLed(); solo.play(CATATAN_D5, t); switchSoloLed(); tunggu (ritme); rythm.play(CATATAN_B4, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_D5, t14); switchRythmLed(); tunggu (ritme); bass.play(CATATAN_B3, t); switchBassLed(); rythm.play(CATATAN_G4, t24); switchRythmLed(); solo.play(CATATAN_B4, t); switchSoloLed(); tunggu (ritme); rythm.play(CATATAN_B4, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_D5, t14); switchRythmLed(); tunggu (ritme); bass.play(CATATAN_D4, t); switchBassLed(); rythm.play(CATATAN_G4, t24); switchRythmLed(); solo.play(CATATAN_G4, t); switchSoloLed(); tunggu (ritme); rythm.play(CATATAN_B4, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_D5, t14); switchRythmLed(); tunggu (ritme); bass.play(CATATAN_C4, t); switchBassLed(); rythm.play(CATATAN_C5, t24); switchRythmLed(); solo.play(CATATAN_FS4, t); switchSoloLed(); tunggu (ritme); rythm.play(CATATAN_E5, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_G5, t14); switchRythmLed(); tunggu (ritme); bass.play(CATATAN_E4, t); switchBassLed(); rythm.play(CATATAN_C5, t24); switchRythmLed(); solo.play(CATATAN_E4, t); switchSoloLed(); tunggu (ritme); rythm.play(CATATAN_E5, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_G5, t14); switchRythmLed(); tunggu (ritme); bass.play(CATATAN_G4, t); switchBassLed(); rythm.play(CATATAN_C5, t24); switchRythmLed(); solo.play(CATATAN_C5, t34); switchSoloLed(); tunggu (ritme); rythm.play(CATATAN_E5, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_G5, t14); switchRythmLed(); solo.play(CATATAN_C5, t14); switchSoloLed(); tunggu(ritme);bass.play(CATATAN_G3, t); switchBassLed(); rythm.play(CATATAN_G4, t24); switchRythmLed(); solo.play(CATATAN_B4, t); switchSoloLed(); tunggu (ritme); rythm.play(CATATAN_B4, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_D5, t14); switchRythmLed(); tunggu (ritme); bass.play(CATATAN_D3, t); switchBassLed(); rythm.play(CATATAN_G4, t24); switchRythmLed(); solo.play(CATATAN_G4, t); switchSoloLed(); tunggu (ritme); rythm.play(CATATAN_B4, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_D5, t14); switchRythmLed(); tunggu (ritme); bass.play(CATATAN_FS3, t); switchBassLed(); rythm.play(CATATAN_D5, t24); switchRythmLed(); solo.play(CATATAN_A4, t); switchSoloLed(); tunggu (ritme); tunggu (ritme); rythm.play(NOTE_FS5, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_A5, t14); switchRythmLed(); tunggu (ritme); bass.play(CATATAN_G3, t); switchBassLed(); rythm.play(CATATAN_G4, t24); switchRythmLed(); solo.play(CATATAN_G4, tt); switchSoloLed(); tunggu (ritme); rythm.play(CATATAN_B4, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_D5, t14); switchRythmLed(); tunggu(ritme);bass.play(CATATAN_B3, t); switchBassLed(); rythm.play(CATATAN_G4, t24); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_B4, t14); switchRythmLed(); tunggu (ritme); rythm.play(CATATAN_D5, t14); switchRythmLed(); tunggu (ritme); solo.play(CATATAN_D4, t34); switchSoloLed(); tunggu (sendirian); solo.play(CATATAN_D4, t14); switchSoloLed(); tunggu(solo);}

Proses manufaktur

  1. Pemantauan CO2 dengan Sensor K30
  2. Komunikasi Tunarungu dengan 1Sheeld/Arduino
  3. Kontrol Penerima Koin dengan Arduino
  4. Bunga - Arduino Nano, CrazyCircuits, DFRobot
  5. Arduino dengan Bluetooth untuk Mengontrol LED!
  6. Sensor Sidik Jari Kapasitif dengan Arduino atau ESP8266
  7. Bermain Dengan Tampilan Berikutnya
  8. Lengan Robot Terkendali Nunchuk (dengan Arduino)
  9. Arduino Nano:Kontrol 2 Motor Stepper Dengan Joystick
  10. Penghitung Geiger Genggam dengan Arduino Nano