Digitálny metronóm je elektronické zariadenie, ktoré umožňuje v pravidelných intervaloch simulovať kyvadlo a vykonávať pravidelný pulz. Každý pulz reprezentuje jednu dobu, čo štandardne reprezentuje jednu štvrťovú notu (v 4/4 takte). Digitálny metronóm definuje aj rytmus vykonaním dôrazu (prízvuku) na určitú dobu, čím je možné rytmus v ktorom metronóm tiká ihneď aj počuteľne zistiť. Využíva sa predovšetkým pri nácvikoch s rytmickými hudobnými nástrojmi, napríklad husle, harmonika.
Metronóm, ktorý som navrhrol pre platformu Arduino v minimálnej konfigurácii umožňuje modifikovať (tempo) - počet pulzov za minútu - BPM (Beats per minute) a štvrťové takty prostredníctvom používateľského vstupu tlačidlami. Metronóm využíva výpis na UART v prípade zmeny niektorého z nastavení, neobsahuje displej ani inú vizualizačnú perifériu.
Z hľadiska BPM môžeme rozdeliť tempo podľa rozsahov:
- do 40 - Grave
- 40 do 50 BPM - Largo
- 52 až 63 BPM - Larghetto
- 66 až 76 BPM - Adagio
- 80 až 100 BPM - Andante
- 104 až 116 BPM - Moderato
- 120 až 152 BPM - Allegro
- 160 až 200 BPM - Presto
Z hľadiska taktov poznáme (zvýraznené obsiahnuté v implementácii pre Arduino):
- 2/4
- 3/4
- 4/4 (natívne predvolené po štarte)
- 5/4
- 2/2
- 6/8
- 7/8
- 9/8
Osminové a pólové takty nie sú obsiahnuté v implementácii. Po stránke ovládania implementácia využíva päť hardvérových tlačidiel zapojených v režime INPUT_PULLUP (active LOW). Štyri z tlačidiel ovládajú hodnotu BPM (-10, -1, +1, +10), posledné tlačidlo slúži na zvolenie taktu 3/4, 4/4, 5/4. Nakoľko sú takty štvrťové, každý impulz (beep) z buzzera reprezentuje jednu štvrťovú dobu (notu).
Ukážkový výstup UART (Serial) monitoru z prevádzky:
Každé tlačidlo je ošetrené voči zákmitom testovaním stavu s dĺžkou 50ms, počas ktorých musí byť stav ustálený, rovnaká časová hodnota sa používa aj na dĺžku beepu z buzzera. Časovanie pulzov, tlačidiel využíva funkciu interného časovača - millis(), pričom dokážu fungovať nezávisle na sebe. Nakoľko je doba beepu 50 ms, je metronóm obmedzený na max. 200 BPM pre počuteľný impulzy s prestávkami, pre vyššie BPM je nutné skrátiť dĺžku beepu v programe. Posledná doba každého nastaveného taktu (s prízvukom) je reprezentovaná frekvenciou 1500 Hz, každá iná (neprízvučná) doba 1700 Hz. Buzzer dokáže prehrať signál do 20 kHz, nižšie frekvencie sú príjemnejšie na počúvanie.
Schéma zapojenia (kompatibilná pre Arduino Uno):
Programová implementácia: https://pastebin.com/sujDNTMg
Projekt viete vyskúšať už aj v simulátore Wokwi: https://wokwi.com/projects/410991809324096513