Daftar Isi:

Arduino Metronom: 4 Langkah
Arduino Metronom: 4 Langkah

Video: Arduino Metronom: 4 Langkah

Video: Arduino Metronom: 4 Langkah
Video: Работа с программатором USBAsp в Arduino IDE 2024, November
Anonim
Image
Image

Ketika mempelajari alat musik baru sebagai seorang anak, ada begitu banyak hal baru untuk tetap fokus. Menjaga kecepatan dalam tempo yang tepat adalah salah satunya. Tidak menemukan metronom yang lengkap dan nyaman secara fungsional berarti alasan terbaik untuk mulai membangun lagi bersama anak-anak saya. Dalam posting Instructables ini Anda akan menemukan deskripsi fungsional, daftar suku cadang dengan tautan dan harga toko web, diagram pengkabelan untuk perakitan, dan kode sumber Arduino lengkap.

Langkah 1: Deskripsi Fungsional

Daftar Suku Cadang
Daftar Suku Cadang

Akan menyenangkan memiliki perangkat metronom dengan fungsi berikut untuk menggunakannya di rumah atau di sekolah musik dengan nyaman.

  • Faktor bentuk yang ringkas agar sesuai dengan tempat kecil di atas atau di samping alat musik,
  • Dioperasikan dengan baterai, kuat dan portabel untuk dibawa-bawa,
  • Mudah diatur bahkan untuk anak-anak, nilai BPM selalu ditampilkan,
  • Ketukan yang dapat disesuaikan per menit dengan kenop Rotary, hingga 240 BPM
  • Kebijaksanaan terdengar dengan kontrol volume,
  • Mode senyap untuk latihan headphone semalaman,
  • Umpan balik visual ketukan (1/4, 2/4, 3/3, 4/4, 6/8, dll.) hingga 8 LED,
  • Dengan atau tanpa aksen utama, dengan umpan balik visual dan suara.

Saat diaktifkan, mode metronom akan dimulai pada 60 BPM yang ditampilkan di layar kecil dan membiarkan kecepatan disetel oleh tombol putar antara 10 dan 240. Neopiksel menampilkan ketukan dalam LED biru sementara bel berbunyi. Menekan kenop akan beralih ke mode penyesuaian ketukan dan LED hijau akan menunjukkan struktur ketukan yang disetel. Kenop putar akan menambah atau mengurangi struktur ketukan (2/2, 3/3, 4/4, 6/8, dll.). Di atas 8 LED, lebih lanjut berputar searah jarum jam, aksen utama akan dihidupkan, dan LED pertama akan menunjukkan ini dengan warna merah. Aksen utama akan memiliki umpan balik yang dapat didengar juga. Itu dapat dimatikan dengan memutar berlawanan arah jarum jam. Menekan kenop akan beralih kembali dari mode penyesuaian ketukan ke mode metronom.

Langkah 2: Daftar Bagian

Anda akan membutuhkan sebuah kasus. Bentuk atau ukuran apa pun dapat dibeli, tetapi kami memiliki kotak logam hitam yang bagus dari sakelar VGA manual lama yang dibuang teman. Sisa bagian tercantum di bawah ini.

  • Baterai 9V, USD 1,50
  • Kabel konektor baterai, USD 0, 16
  • Arduino Nano dengan pin header, USD 2,05
  • Perisai Ekstensi Nano IO, USD 1, 05
  • Sakelar geser mini untuk daya, USD 0,15
  • Buzzer piezo, USD 0, 86
  • Adafruit Neopixel WS2812 8-bit, USD 1, 01
  • Layar OLED 128x64, USD 1,53
  • Enkoder putar, USD 0, 50
  • Kabel Dupont F/F, USD 0, 49

Total harga komponen kurang dari USD 10,-

Langkah 3: Diagram Pengkabelan

Diagram pengkabelan
Diagram pengkabelan

Gunakan Papan Ekstensi Nano IO agar tidak repot menyolder beberapa sambungan GND dan VCC. Penyolderan minimal akan diperlukan untuk header pin Nano dan untuk konektor modul Neopixel. Menggunakan kabel Dupont memungkinkan koneksi yang stabil untuk sisa kabel seperti yang ditunjukkan pada diagram. Baterai 9V terhubung ke GND dan VIN, yang terakhir melalui sakelar penggeser daya. Modul rotary encoder memiliki tombol sakelar terintegrasi, yang ditampilkan secara terpisah dalam diagram untuk memudahkan pemahaman tentang cara menghubungkannya. Bagian putar (CLK dan DT) masing-masing terhubung ke PIN2 dan PIN3, karena ini adalah satu-satunya pin NANO yang mampu menangani Interrupt. Rotary GND terhubung ke PIN GND Nano tentunya. Tombol sakelar terintegrasi terhubung ke PIN4. Buzzer Piezo terhubung ke PIN5 dan GND. Modul Neopixel Adafruit terhubung ke PIN7 dan VIN dan GND-nya masing-masing ke 5V dan GND Nano. Layar OLED kecil terhubung ke antarmuka bus I2C, yaitu PIN A4 dan A5 untuk SDA dan SDL. VCC dan GND tentu saja masuk ke Nano 5V dan GND. Itu menyimpulkan kabel Dupont kami.

Langkah 4: Kode Sumber Arduino

Kode Sumber Arduino
Kode Sumber Arduino

// Metronom, Aksen Terkemuka, Kebijaksanaan Visual&Audible - 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 berbagi pin reset Arduino) Tampilan Adafruit_SSD1306(SCREEN_WIDTH, SCREEN_HEIGHT, &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 state = IDLE_11; #define CLK 2 #define DT 3 #define pin_switch 4 #define pin_buzzer 5 int bpm = 60; int bpmPertama = 0; // LED Nyala Pertama, Matikan selebihnya… int tack = 4; bool leadingTack = false; int pos = 0; int curVal = 0; int prevVal = 0; void setup() { piksel.begin(); pinMode(pin_buzzer, OUTPUT); Timer1.initialize(1000000*60/bpm/2); Timer1.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); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Alamat 0x3D untuk 128x64 untuk(;;); // Jangan lanjutkan, loop selamanya } display.clearDisplay(); tampilan.tampilan(); } void loop() { if (digitalRead(pin_switch)==LOW) { delay(100); while(digitalRead(pin_switch)==LOW); penundaan(100); Timer1.detachInterrupt(); showGreenTacks(); while(digitalRead(pin_switch)==HIGH) { if (curVal>prevVal) { tack+=1; if (tack>8) { if (leadingTack) tack = 8; else { leadingTack = benar; paku = 1; } } } else if (curValprevVal) { bpm+=2; jika (bpm>240) bpm = 240; } else if (curVal=100) display.print(" "); lain tampilan.print(" "); display.print(bpm); tampilan.tampilan(); } void buzztick() { if (bpmFirst==0) { int volume = 4; if (leadingTack && pos==0) volume = 8; untuk (int i=0; i

Direkomendasikan: