Isi kandungan:

Metronome Arduino: 4 Langkah
Metronome Arduino: 4 Langkah

Video: Metronome Arduino: 4 Langkah

Video: Metronome Arduino: 4 Langkah
Video: Make your own Arduino Metronome 2024, November
Anonim
Image
Image

Semasa belajar alat muzik baru semasa kecil, terdapat banyak perkara baru yang mesti diberi perhatian. Mengikuti tempo yang betul adalah salah satu daripadanya. Tidak menjumpai metronom yang berfungsi dan lengkap bermaksud alasan terbaik untuk mula membina semula dengan anak-anak saya. Dalam catatan Instructables ini, anda akan menemui penerangan fungsional, senarai bahagian dengan pautan dan harga kedai web, rajah pendawaian untuk pemasangan, dan kod sumber Arduino yang lengkap.

Langkah 1: Penerangan Berfungsi

Senarai Bahagian
Senarai Bahagian

Alangkah baiknya mempunyai alat metronom dengan fungsi berikut untuk menggunakannya di rumah atau di sekolah muzik dengan mudah.

  • Faktor bentuk padat agar sesuai dengan tempat kecil di atas atau di sebelah alat muzik,
  • Bateri dikendalikan, kuat dan mudah dibawa,
  • Siapkan dengan mudah walaupun untuk anak-anak, nilai BPM selalu dipaparkan,
  • Denyutan boleh laras per minit dengan tombol Rotary, hingga 240 BPM
  • Taktik yang boleh didengar dengan kawalan kelantangan,
  • Mod senyap untuk latihan fon kepala semalaman,
  • Maklum balas visual rentak (1/4, 2/4, 3/3, 4/4, 6/8, dll.) Hingga 8 LED,
  • Dengan atau tanpa aksen utama, dengan maklum balas visual dan didengar.

Dihidupkan, mod metronome akan bermula pada 60 BPM yang ditunjukkan pada paparan kecil dan membiarkan laju ditala oleh tombol putar antara 10 dan 240. Neopixels menunjukkan rentak dalam LED biru sementara buzzer berdetak. Menekan tombol akan beralih ke mod penyesuaian rentak dan LED hijau akan menunjukkan struktur rentak yang ditetapkan. Tombol putar akan menambah atau menurunkan struktur rentak (2/2, 3/3, 4/4, 6/8, dll.). Di atas 8 LED, berputar lebih jauh mengikut arah jam, aksen utama akan dihidupkan, dan LED pertama akan menunjukkan ini dengan warna merah. Aksen terkemuka juga mempunyai maklum balas yang dapat didengar. Ia boleh dimatikan dengan memutar lawan arah jam. Menekan tombol akan beralih dari mod penyesuaian rentak ke mod metronome.

Langkah 2: Senarai Bahagian

Anda akan memerlukan kes. Sebarang bentuk atau ukuran boleh dibeli, tetapi kami mempunyai kotak logam hitam yang bagus dari suis VGA manual lama yang dilucutkan rakan. Bahagian selebihnya disenaraikan di bawah.

  • Bateri 9V, USD 1.50
  • Kabel penyambung bateri, USD 0,16
  • Arduino Nano dengan header pin, USD 2.05
  • Nano IO Extension Shield, USD 1, 05
  • Suis slaid mini untuk kuasa, USD 0.15
  • Piezo buzzer, USD 0, 86
  • Adafruit Neopixel WS2812 8-bit, USD 1, 01
  • Paparan OLED 128x64, USD 1, 53
  • Pengekod putar, USD 0, 50
  • Kabel Dupont F / F, USD 0, 49

Jumlah harga komponen kurang dari USD 10, -

Langkah 3: Diagram Pendawaian

Gambarajah pendawaian
Gambarajah pendawaian

Gunakan Papan Sambungan Nano IO agar tidak terganggu dengan pematerian banyak sambungan GND dan VCC. Pematerian minimum diperlukan untuk header pin Nano dan untuk penyambung modul Neopixel. Menggunakan wayar Dupont membolehkan sambungan stabil untuk sisa pendawaian seperti yang ditunjukkan pada rajah. Bateri 9V disambungkan ke GND dan VIN, yang terakhir melalui suis slaid kuasa. Modul pengekod putar mempunyai butang suis bersepadu, yang ditunjukkan secara berasingan dalam rajah untuk pemahaman yang lebih mudah tentang cara menghubungkannya. Bahagian putar (CLK dan DT) masing-masing dihubungkan ke PIN2 dan PIN3, kerana ini adalah satu-satunya pin NANO yang mampu Mengendalikan gangguan. Rotary GND disambungkan ke PIN GND Nano sudah tentu. Butang suis bersepadu disambungkan ke PIN4. Piezo buzzer disambungkan ke PIN5 dan GND. Modul Adafruit Neopixel disambungkan ke PIN7 dan VIN dan GND masing-masing ke Nano's 5V dan GND. Paparan OLED kecil disambungkan ke antara muka bas I2C, iaitu PIN A4 dan A5 untuk SDA dan SDL. VCC dan GND tentu saja menuju Nano's 5V dan GND. Itu menyimpulkan pendawaian Dupont kami.

Langkah 4: Kod Sumber Arduino

Kod Sumber Arduino
Kod Sumber Arduino

// Metronome, Aksen Terkemuka, Taktik Visual & Terdengar - 2019 Peter Csurgay

#include #include #include #include #include "TimerOne.h" #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 // Reset pin # (atau -1 jika berkongsi pin reset Arduino) Paparan Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_WIDTH, SCREEN_WIDTH, SCREEN_WIDTH & Kawat, OLED_RESET); #define pin_neopixel 7 #define NUMPIXELS 8 #define BRIGHTNESS 32 Adafruit_NeoPixel pixels = Adafruit_NeoPixel (NUMPIXELS, pin_neopixel, NEO_GRB + NEO_KHZ800); #define IDLE_11 0 #define SCLK_01 1 #define SCLK_00 2 #define SCLK_10 3 #define SDT_10 4 #define SDT_00 5 #define SDT_01 6 int keadaan = IDLE_11; #define CLK 2 #define DT 3 #define pin_switch 4 #define pin_buzzer 5 int bpm = 60; int bpmFirst = 0; // LED Hidup pada Mula, Mati di selebihnya … int taktik = 4; bool terkemukaTack = salah; int pos = 0; int curVal = 0; int prevVal = 0; batal persediaan () {pixels.begin (); pinMode (pin_buzzer, OUTPUT); Pemasa1. inisialisasi (1000000 * 60 / bpm / 2); Pemasa1.attachInterrupt (buzztick); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); pinMode (pin_switch, INPUT_PULLUP); attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); jika (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Alamat 0x3D untuk 128x64 untuk (;;); // Jangan teruskan, gelung selamanya} display.clearDisplay (); paparan.display (); } gelung kosong () {if (digitalRead (pin_switch) == RENDAH) {kelewatan (100); sementara (digitalRead (pin_switch) == RENDAH); kelewatan (100); Pemasa1.detachInterrupt (); tunjukkanGreenTacks (); while (digitalRead (pin_switch) == TINGGI) {if (curVal> prevVal) {tack + = 1; if (tack> 8) {if (LeadTack) taktik = 8; lain {terkemukaTack = benar; tengkok = 1; }}} lain jika (curValprevVal) {bpm + = 2; jika (bpm> 240) bpm = 240; } lain jika (curVal = 100) display.print (""); display.print yang lain (""); display.print (bpm); paparan.display (); } batal buzztick () {if (bpmFirst == 0) {int volume = 4; jika (LeadTack && pos == 0) isipadu = 8; untuk (int i = 0; i

Disyorkan: