Tabla de contenido:

Metrónomo Arduino: 4 pasos
Metrónomo Arduino: 4 pasos

Video: Metrónomo Arduino: 4 pasos

Video: Metrónomo Arduino: 4 pasos
Video: Metrónomo con arduino 2024, Noviembre
Anonim
Image
Image

Al aprender un nuevo instrumento musical cuando era niño, hay muchas cosas nuevas en las que mantenerse enfocado. Mantener el ritmo en el tempo correcto es uno de ellos. No encontrar un metrónomo funcionalmente completo y conveniente significó la mejor excusa para empezar a construir de nuevo con mis hijos. En esta publicación de Instructables encontrará la descripción funcional, la lista de piezas con enlaces y precios de la tienda web, el diagrama de cableado para el ensamblaje y el código fuente completo de Arduino.

Paso 1: Descripción funcional

Lista de partes
Lista de partes

Sería bueno tener un dispositivo de metrónomo con las siguientes funciones para usarlo en casa o en la escuela de música cómodamente.

  • Factor de forma compacto para adaptarse a lugares pequeños encima o al lado de instrumentos musicales,
  • Funciona con pilas, robusto y portátil para llevar,
  • Se configura fácilmente incluso para niños, el valor de BPM siempre se muestra,
  • Latidos por minuto ajustables con un botón giratorio, hasta 240 BPM
  • Tacto audible con control de volumen,
  • Modo silencioso para practicar con auriculares durante la noche,
  • Retroalimentación visual de ritmos (1/4, 2/4, 3/3, 4/4, 6/8, etc.) hasta 8 LED,
  • Con o sin acento principal, con retroalimentación visual y audible.

Al encenderlo, el modo de metrónomo comenzará a 60 BPM que se mostrará en la pantalla pequeña y dejará que el ritmo se sintonice con el botón giratorio entre 10 y 240. Los neopíxeles muestran el ritmo en LED azules mientras suena el zumbador. Al presionar la perilla se cambiará al modo de ajuste de ritmo y los LED verdes indicarán la estructura de ritmo establecida. La perilla giratoria aumentará o disminuirá la estructura del tiempo (2/2, 3/3, 4/4, 6/8, etc.). Por encima de 8 LED, girando más en el sentido de las agujas del reloj, el acento principal se encenderá y el primer LED lo indicará en rojo. El acento principal también tendrá retroalimentación audible. Se puede apagar girando en sentido antihorario. Al presionar la perilla, se volverá a cambiar del modo de ajuste de tiempo al modo de metrónomo.

Paso 2: Lista de piezas

Necesitarás un estuche. Se puede comprar cualquier forma o tamaño, pero teníamos una bonita caja de metal negro de un viejo conmutador VGA manual que desechó un amigo. El resto de las piezas se enumeran a continuación.

  • Batería de 9 V, 1,50 USD
  • Cable conector de batería, USD 0, 16
  • Arduino Nano con encabezados de clavija, 2,05 USD
  • Escudo de extensión Nano IO, USD 1, 05
  • Mini interruptor deslizante para energía, USD 0.15
  • Zumbador piezoeléctrico, USD 0, 86
  • Adafruit Neopixel WS2812 de 8 bits, USD 1, 01
  • Pantalla OLED 128x64, USD 1, 53
  • Codificador rotatorio, USD 0, 50
  • Cables Dupont F / F, USD 0, 49

El precio total de los componentes es inferior a USD 10, -

Paso 3: diagrama de cableado

Diagrama de cableado
Diagrama de cableado

Utilice la placa de extensión Nano IO para no molestarse en soldar múltiples conexiones GND y VCC. Se necesitará una soldadura mínima para los conectores Nano pin y para los conectores del módulo Neopixel. El uso de cables Dupont permite conexiones estables para el resto del cableado como se muestra en el diagrama. La batería de 9V está conectada a GND y VIN, este último a través del interruptor deslizante de encendido. El módulo del codificador rotatorio tiene un botón de interruptor integrado, que se muestra por separado en el diagrama para comprender mejor cómo conectarlos. La parte giratoria (CLK y DT) está conectada a PIN2 y PIN3 respectivamente, porque estos son los únicos pines NANO capaces de interrumpir el manejo. Rotary GND está conectado al PIN GND de Nano, por supuesto. El botón de interruptor integrado está conectado al PIN4. El zumbador piezoeléctrico está conectado a PIN5 y GND. El módulo Adafruit Neopixel está conectado a PIN7 y su VIN y GND a 5V y GND de Nano respectivamente. La pequeña pantalla OLED está conectada a la interfaz de bus I2C, que es PIN A4 y A5 para SDA y SDL. VCC y GND van a 5V y GND de Nano, por supuesto. Eso concluye nuestro cableado Dupont.

Paso 4: Código fuente de Arduino

Código fuente de Arduino
Código fuente de Arduino

// Metrónomo, acento principal, tacto visual y audible - 2019 Peter Csurgay

#include #include #include #include #include "TimerOne.h" #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 // Reinicia el pin # (o -1 si comparte el pin de reinicio de Arduino) Pantalla Adafruit_SSD1306 (SCREEN_WIDTHE & Cable, 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 encendido al principio, apagado en el resto … int tack = 4; bool leadTack = falso; int pos = 0; int curVal = 0; int prevVal = 0; configuración vacía () {píxeles.begin (); pinMode (pin_buzzer, SALIDA); Timer1.initialize (1000000 * 60 / bpm / 2); Timer1.attachInterrupt (buzztick); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); pinMode (interruptor_pin, INPUT_PULLUP); attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Dirección 0x3D para 128x64 para (;;); // No continúes, repite indefinidamente} display.clearDisplay (); display.display (); } bucle vacío () {if (digitalRead (pin_switch) == LOW) {delay (100); while (digitalRead (pin_switch) == BAJO); retraso (100); Timer1.detachInterrupt (); showGreenTacks (); while (digitalRead (pin_switch) == HIGH) {if (curVal> prevVal) {tachuela + = 1; if (tachuela> 8) {if (tachuela principal) tack = 8; else {leadTack = true; tachuela = 1; }}} else if (curValprevVal) {bpm + = 2; si (lpm> 240) lpm = 240; } else if (curVal = 100) display.print (""); else display.print (""); display.print (bpm); display.display (); } void buzztick () {if (bpmFirst == 0) {int volumen = 4; if (leadTack && pos == 0) volumen = 8; para (int i = 0; i

Recomendado: