İçindekiler:

Arduino Metronom: 4 Adım
Arduino Metronom: 4 Adım

Video: Arduino Metronom: 4 Adım

Video: Arduino Metronom: 4 Adım
Video: ChatGPT with Arduino Nano #arduino #chatgpt #technology #openAI #electronic 2024, Kasım
Anonim
Image
Image

Çocukken yeni bir müzik aleti öğrenirken, üzerinde durulması gereken pek çok yeni şey vardır. Hızı doğru tempoda tutmak bunlardan biri. İşlevsel olarak eksiksiz ve kullanışlı bir metronom bulamamak, çocuklarımla yeniden inşa etmeye başlamak için en iyi bahane anlamına geliyordu. Bu Instructables gönderisinde, işlevsel açıklamayı, web mağazası bağlantıları ve fiyatları ile parça listesini, montaj için kablo şemasını ve eksiksiz Arduino kaynak kodunu bulacaksınız.

Adım 1: İşlevsel Açıklama

Parça listesi
Parça listesi

Evde veya müzik okulunda rahatlıkla kullanmak için aşağıdaki işlevlere sahip bir metronom cihazına sahip olmak güzel olurdu.

  • Müzik aletlerinin üstüne veya yanına küçük yerlere sığdırmak için kompakt form faktörü,
  • Pille çalışan, sağlam ve taşınabilir, taşıması kolay,
  • Çocuklar için bile kolayca kurulur, BPM değeri her zaman görüntülenir,
  • 240 BPM'ye kadar Döner düğme ile dakikada ayarlanabilir vuruşlar
  • Ses kontrolü ile sesli dokunuş,
  • Gece boyunca kulaklık alıştırması için sessiz mod,
  • 8 LED'e kadar vuruşların (1/4, 2/4, 3/3, 4/4, 6/8 vb.) görsel geri bildirimi,
  • Görsel ve sesli geri bildirim ile önde gelen vurgulu veya vurgusuz.

Açıldığında, metronom modu küçük ekranda gösterilen 60 BPM'de başlayacak ve hızın döner düğme ile 10 ile 240 arasında ayarlanmasına izin verecektir. Sesli uyarı çalarken Neopikseller ritmi mavi LED'lerde gösterir. Düğmeye basmak vuruş ayarlama moduna geçecektir ve yeşil LED'ler ayarlanan vuruş yapısını gösterecektir. Döner düğme vuruş yapısını artırır veya azaltır (2/2, 3/3, 4/4, 6/8, vb.). 8 LED'in üzerinde, saat yönünde daha fazla dönerek önde gelen vurgu açılacak ve ilk LED bunu kırmızı olarak gösterecektir. Önde gelen aksanın da sesli geri bildirimi olacaktır. Saat yönünün tersine çevirerek kapatılabilir. Düğmeye basıldığında vuruş ayarlama modundan metronom moduna geçilir.

Adım 2: Parça Listesi

Bir davaya ihtiyacınız olacak. Herhangi bir şekil veya boyut satın alınabilir, ancak bir arkadaşın elden çıkardığı eski bir manuel VGA anahtarının hoş bir siyah metal kasası vardı. Geri kalan parçalar aşağıda listelenmiştir.

  • 9V Pil, USD 1.50
  • Pil bağlantı kablosu, USD 0, 16
  • Pin başlıklı Arduino Nano, 2,05 USD
  • Nano IO Uzatma Kalkanı, USD 1, 05
  • Güç için mini sürgülü anahtar, 0.15 USD
  • Piezo zili, USD 0, 86
  • Adafruit Neopixel WS2812 8-bit, USD 1, 01
  • OLED Ekran 128x64, USD 1, 53
  • Döner kodlayıcı, USD 0, 50
  • Dupont kabloları F/F, USD 0, 49

Bileşenlerin toplam fiyatı 10 USD'den azdır, -

Adım 3: Kablo Şeması

Bağlantı şeması
Bağlantı şeması

Birden fazla GND ve VCC bağlantısını lehimlemekle uğraşmamak için Nano IO Uzatma Kartı kullanın. Nano pin başlıkları ve Neopixel modül konnektörleri için minimum lehimleme gerekecektir. Dupont kablolarının kullanılması, şemada gösterildiği gibi kabloların geri kalanı için sabit bağlantılar sağlar. 9V pil GND ve VIN'e bağlanır, ikincisi güç kaydırma anahtarı aracılığıyla. Döner kodlayıcı modülünde, bunların nasıl bağlanacağının daha kolay anlaşılması için şemada ayrıca gösterilen entegre bir anahtar düğmesi bulunur. Döner kısım (CLK ve DT) sırasıyla PIN2 ve PIN3'e bağlıdır, çünkü bunlar Kesinti işleme yeteneğine sahip tek NANO pinleridir. Döner GND, elbette Nano'nun GND PIN'ine bağlıdır. Entegre anahtar düğmesi PIN4'e bağlıdır. Piezo buzzer, PIN5 ve GND'ye bağlıdır. Adafruit Neopixel modülü PIN7'ye ve VIN'i ve GND'si sırasıyla Nano'nun 5V ve GND'sine bağlanır. Küçük OLED ekran, SDA ve SDL için PIN A4 ve A5 olan I2C veri yolu arayüzüne bağlanır. VCC ve GND elbette Nano'nun 5V ve GND'sine gider. Bu, Dupont kablolamamızı sonlandırıyor.

Adım 4: Arduino Kaynak Kodu

Arduino Kaynak Kodu
Arduino Kaynak Kodu

// Metronom, Öncü Vurgu, Görsel ve Sesli İncelik - 2019 Peter Csurgay

#include #include #include #include #include "TimerOne.h" #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 // Pin numarasını sıfırlayın (veya Arduino sıfırlama pinini paylaşıyorsanız -1) Adafruit_SSD1306 ekranı(EKRAN_GENİŞLİK, EKRAN_HEIGHT, &Tel, OLED_RESET); #define pin_neopixel 7 #define NUMPIXELS 8 #define PARLAKLIK 32 Adafruit_NeoPixel piksel = 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 durum = IDLE_11; #define CLK 2 #define DT 3 #define pin_switch 4 #define pin_buzzer 5 int bpm = 60; int bpmFirst = 0; // LED Başta Açık, Gerisi Kapalı… int tack = 4; bool liderTack = false; int konum = 0; int eğriVal = 0; int öncekiDeğer = 0; geçersiz kurulum() { piksel.begin(); pinMode(pin_buzzer, OUTPUT); Timer1.initialize(1000000*60/bpm/2); Timer1.attachInterrupt(vızıltı); pinMode(CLK, INPUT_PULLUP); pinMode(DT, INPUT_PULLUP); pinMode(pin_switch, INPUT_PULLUP); ataşeKesme(dijitalPinToInterrupt(CLK), rotaryCLK, CHANGE); ataşeKesme(dijitalPinToInterrupt(DT), rotaryDT, CHANGE); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 128x64 için 0x3D adresi for(;;); // Devam etmeyin, sonsuza kadar döngü yapın } display.clearDisplay(); display.display(); } void loop() { if (digitalRead(pin_switch)==LOW) { delay(100); while(digitalRead(pin_switch)==DÜŞÜK); gecikme(100); Timer1.detachInterrupt(); showGreenTacks(); while(digitalRead(pin_switch)==HIGH) { if (curVal>prevVal) { tack+=1; if (tack>8) { if (leadingTack) tack = 8; else { liderTack = true; tack = 1; } } } else if (curValprevVal) { bpm+=2; eğer (bpm>240) bpm = 240; } else if (curVal=100) display.print(" "); yoksa display.print(" "); display.print(bpm); display.display(); } void buzztick() { if (bpmFirst==0) { int hacim = 4; if (leadingTack && pos==0) hacim = 8; for (int i=0; ben

Önerilen: