Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Když se jako malý učíte nový hudební nástroj, je tu tolik nových věcí, na které se musíte soustředit. Udržet tempo ve správném tempu je jedním z nich. Nenalezení funkčně úplného a pohodlného metronomu znamenalo nejlepší výmluvu, jak začít znovu stavět s mými dětmi. V tomto příspěvku Instructables najdete funkční popis, seznam dílů s odkazy a cenami na internetový obchod, schéma zapojení pro montáž a kompletní zdrojový kód Arduino.
Krok 1: Popis funkce
Bylo by hezké mít metronomové zařízení s následujícími funkcemi, abyste jej mohli pohodlně používat doma nebo v hudební škole.
- Kompaktní formát vhodný pro malá místa na hudebních nástrojích nebo vedle nich,
- Provoz na baterie, robustní a přenosný,
- Snadno nastavitelné i pro děti, hodnota BPM je vždy zobrazena,
- Nastavitelné údery za minutu pomocí otočného ovladače, až 240 BPM
- Zvukový takt s ovládáním hlasitosti,
- Tichý režim pro nácvik sluchátek přes noc,
- Vizuální zpětná vazba úderů (1/4, 2/4, 3/3, 4/4, 6/8 atd.) Až 8 LED diod,
- S nebo bez úvodního přízvuku, s vizuální a zvukovou zpětnou vazbou.
Po zapnutí začne režim metronomu při 60 BPM zobrazeném na malém displeji a nechá se ladit tempo otočným knoflíkem mezi 10 a 240. Neopixely ukazují rytmus v modrých LED diodách, zatímco bzučák tiká. Stisknutím knoflíku se přepnete do režimu nastavení rytmu a zelené LED diody indikují nastavenou strukturu rytmu. Otočný knoflík zvýší nebo sníží strukturu rytmu (2/2, 3/3, 4/4, 6/8 atd.). Nad 8 LED diodami, které se dále otáčejí ve směru hodinových ručiček, se rozsvítí hlavní akcent a první LED dioda to indikuje červeně. Vedoucí přízvuk bude mít také slyšitelnou zpětnou vazbu. Lze jej vypnout otáčením proti směru hodinových ručiček. Stisknutím knoflíku se přepnete zpět z režimu úpravy rytmu do režimu metronomu.
Krok 2: Seznam dílů
Budete potřebovat pouzdro. Lze koupit jakýkoli tvar nebo velikost, ale měli jsme pěkné černé kovové pouzdro starého ručního VGA přepínače zlikvidovaného přítelem. Zbývající části jsou uvedeny níže.
- 9V baterie, 1,50 USD
- Kabel konektoru baterie, USD 0, 16
- Arduino Nano se záhlavími pinů, 2,05 USD
- Nano IO Extension Shield, USD 1, 05
- Mini posuvný vypínač pro napájení, 0,15 USD
- Piezový bzučák, 0,86 USD
- Adafruit Neopixel WS2812 8bitový, 1 USD, 01
- OLED displej 128x64, 1 USD, 53
- Rotační kodér, USD 0, 50
- Dupont kabely F/F, USD 0, 49
Celková cena komponent je nižší než 10 USD -
Krok 3: Schéma zapojení
Použijte rozšiřující desku Nano IO, abyste se neobtěžovali s pájením více připojení GND a VCC. Minimální pájení bude zapotřebí pro konektory Nano pin a konektory modulu Neopixel. Použití vodičů Dupont umožňuje stabilní připojení zbytku kabeláže podle schématu. 9V baterie je připojena k GND a VIN, ta druhá pomocí přepínače napájení. Modul rotačního kodéru má integrované spínací tlačítko, které je pro snazší pochopení způsobu jejich připojení znázorněno samostatně na schématu. Rotační část (CLK a DT) je připojena k PIN2, respektive PIN3, protože to jsou jediné NANO piny schopné manipulace s přerušením. Rotary GND je samozřejmě připojen k Nano GND PIN. Integrované tlačítko přepínače je připojeno k PIN4. Piezo bzučák je připojen k PIN5 a GND. Modul Adafruit Neopixel je připojen k PIN7 a jeho VIN a GND k 5V a GND Nano. Malý OLED displej je připojen k rozhraní sběrnice I2C, což je PIN A4 a A5 pro SDA a SDL. VCC a GND jde samozřejmě na 5V a GND Nano. Tím naše Dupontova kabeláž končí.
Krok 4: Zdrojový kód Arduino
// Metronome, Leading Accent, Visual & Audible Tact - 2019 Peter Csurgay
#include #include #include #include #include "TimerOne.h" #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 // Reset pin #(or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display (SCREEN_WIDTH, SCREEN_H & Wire, 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 bpmFirst = 0; // LED nejprve zapnuto, zbytek zhasnuto … int tack = 4; bool vedoucíTack = false; int pos = 0; int curVal = 0; int prevVal = 0; neplatné nastavení () {pixely.begin (); pinMode (pin_buzzer, OUTPUT); Časovač 1. inicializace (10 000 000*60/tep/min/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)) {// Adresa 0x3D pro 128x64 pro (;;); // Nepokračujte, smyčka navždy} display.clearDisplay (); display.display (); } void loop () {if (digitalRead (pin_switch) == LOW) {delay (100); while (digitalRead (pin_switch) == LOW); zpoždění (100); Timer1.detachInterrupt (); showGreenTacks (); while (digitalRead (pin_switch) == HIGH) {if (curVal> prevVal) {tack+= 1; if (tack> 8) {if (chiefTack) tack = 8; else {vedoucíTack = true; lepivost = 1; }}} else if (curValprevVal) {bpm+= 2; if (bpm> 240) bpm = 240; } else if (curVal = 100) display.print (""); else display.print (""); display.print (bpm); display.display (); } void buzztick () {if (bpmFirst == 0) {int volume = 4; if (chiefTack && pos == 0) volume = 8; pro (int i = 0; i