Taula de continguts:

Metrònom Arduino: 4 passos
Metrònom Arduino: 4 passos

Vídeo: Metrònom Arduino: 4 passos

Vídeo: Metrònom Arduino: 4 passos
Vídeo: Драм-секвенсор Arduino: 8 дорожек, 16 шагов на такт, 8 тактов на паттерн 2024, Juliol
Anonim
Image
Image

Quan s’aprèn un nou instrument musical de petit, hi ha tantes coses noves sobre les quals cal centrar-se. Un d’ells és mantenir el ritme en el ritme adequat. No trobar un metrònom funcionalment complet i convenient significava la millor excusa per començar a construir de nou amb els meus fills. En aquest post d’Instructables trobareu la descripció funcional, la llista de peces amb enllaços i preus de la botiga web, el diagrama de cablejat per al muntatge i el codi font complet d’Arduino.

Pas 1: descripció funcional

Llista de peces
Llista de peces

Estaria bé tenir un dispositiu metrònom amb les funcions següents per utilitzar-lo còmodament a casa o a l’escola de música.

  • Factor de forma compacte per adaptar-se a llocs petits a la part superior o al costat d’instruments musicals,
  • Funcionat amb bateria, robust i portàtil per transportar-lo,
  • Configuració fàcil fins i tot per a nens, sempre es mostra el valor BPM,
  • Bats ajustables per minut amb un botó giratori de fins a 240 BPM
  • Tacte audible amb control de volum,
  • Mode silenciós per a la pràctica d’auriculars durant la nit,
  • Retroalimentació visual de ritmes (1/4, 2/4, 3/3, 4/4, 6/8, etc.) fins a 8 LED,
  • Amb accent principal o sense, amb comentaris visuals i sonors.

En activar-se, el mode de metrònom s'iniciarà a 60 BPM a la pantalla petita i permetrà ajustar el ritme mitjançant el botó rotatiu entre 10 i 240. Els Neopíxels mostren el ritme dels LED blaus mentre el zumbador marca. En prémer el botó es canviarà al mode d’ajust del batec i els LED verds indicaran l’estructura del batec configurada. El botó rotatiu incrementarà o disminuirà l'estructura del batec (2/2, 3/3, 4/4, 6/8, etc.). Per sobre de 8 LEDs, que giren més en sentit horari, s'activa l'accent principal i el primer LED ho indicarà en vermell. L’accent principal també tindrà comentaris audibles. Es pot apagar girant en sentit antihorari. En prémer el botó es tornarà del mode d’ajust del batec al mode metrònom.

Pas 2: llista de peces

Necessitareu un cas. Es pot comprar qualsevol forma o mida, però teníem una bonica caixa de metall negre d’un antic interruptor manual VGA que va deixar un amic. La resta de parts es detallen a continuació.

  • Bateria de 9 V, 1,50 USD
  • Cable del connector de la bateria, 0 USD, 16 USD
  • Arduino Nano amb capçaleres de pin, 2,05 USD
  • Escut d'extensió Nano IO, USD 1, 05
  • Mini interruptor lliscant per alimentar, 0,15 USD
  • Zumbador piezoelèctric, 0,86 USD
  • Adafruit Neopixel WS2812 de 8 bits, USD 1, 01
  • Pantalla OLED de 128 x 64, 1, 53 USD
  • Codificador rotatiu, 0 USD, 50 USD
  • Cables Dupont F / F, 0 USD, 49 USD

El preu total dels components és inferior a 10 USD, -

Pas 3: Esquema de cablejat

Esquema de cablejat
Esquema de cablejat

Utilitzeu la placa d’extensió Nano IO per no molestar-vos a soldar diverses connexions GND i VCC. Es necessitarà una soldadura mínima per a les capçaleres de pin Nano i per als connectors del mòdul Neopixel. L'ús de cables Dupont permet connexions estables per a la resta de cablejat, tal com es mostra a l'esquema. La bateria de 9V està connectada a GND i VIN, aquest darrer mitjançant el botó lliscant d’alimentació. El mòdul de codificador rotatiu té un botó d’interruptor integrat, que es mostra per separat al diagrama per facilitar la comprensió de com connectar-los. La part rotativa (CLK i DT) està connectada a PIN2 i PIN3 respectivament, ja que són els únics pins NANO capaços de manejar la interrupció. El GND rotatiu està connectat al PIN GND de Nano, per descomptat. El botó de commutador integrat està connectat al PIN4. El brunzidor piezo està connectat a PIN5 i GND. El mòdul Adafruit Neopixel està connectat a PIN7 i el seu VIN i GND als 5V i GND de Nano respectivament. Una petita pantalla OLED està connectada a la interfície del bus I2C, que és PIN A4 i A5 per a SDA i SDL. VCC i GND van a Nano's 5V i GND, per descomptat. Això conclou el cablejat de Dupont.

Pas 4: codi font Arduino

Codi font Arduino
Codi font Arduino

// Metronome, Accent líder, Tacte visual i audible - Peter Csurgay 2019

#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_HEIGHT & 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 encès al principi, apagat a la resta … int tack = 4; booling LeadTack = fals; int pos = 0; int curVal = 0; int prevVal = 0; void setup () {pixels.begin (); pinMode (pin_buzzer, OUTPUT); Temporitzador1.inicialitzar (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)) {// Adreça 0x3D per 128x64 per (;;); // No continueu, bucleu per sempre} display.clearDisplay (); display.display (); } bucle buit () {if (digitalRead (pin_switch) == BAIX) {delay (100); while (digitalRead (pin_switch) == BAIX); retard (100); Timer1.detachInterrupt (); showGreenTacks (); while (digitalRead (pin_switch) == HIGH) {if (curVal> prevVal) {tack + = 1; if (tack> 8) {if (leadingTack) tack = 8; else {leadingTack = true; taca = 1; }}} else if (curValprevVal) {bpm + = 2; si (ppm> 240) ppm = 240; } else if (curVal = 100) display.print (""); else display.print (""); display.print (ppm); display.display (); } void buzztick () {if (bpmFirst == 0) {int volum = 4; if (leadingTack && pos == 0) volum = 8; per a (int i = 0; i

Recomanat: