Índice:

Metrônomo Arduino: 4 etapas
Metrônomo Arduino: 4 etapas

Vídeo: Metrônomo Arduino: 4 etapas

Vídeo: Metrônomo Arduino: 4 etapas
Vídeo: Curso de Arduino para Iniciantes - Aula 01 - Primeiros Passos (Exemplo de um Vumeter) 2024, Julho
Anonim
Image
Image

Ao aprender um novo instrumento musical quando criança, há muitas coisas novas para manter o foco. Manter o ritmo no tempo certo é um deles. Não encontrar um metrônomo funcionalmente completo e conveniente significava a melhor desculpa para começar a construir novamente com meus filhos. Nesta postagem do Instructables, você encontrará a descrição funcional, a lista de peças com links e preços da loja virtual, o diagrama de fiação para montagem e o código-fonte completo do Arduino.

Etapa 1: Descrição funcional

Lista de Peças
Lista de Peças

Seria bom ter um dispositivo metrônomo com as seguintes funções para usá-lo em casa ou na escola de música convenientemente.

  • Fator de forma compacto para caber em pequenos lugares no topo ou ao lado de instrumentos musicais,
  • Operado por bateria, robusto e portátil para transportar,
  • Fácil de configurar, mesmo para crianças, o valor BPM sempre é exibido,
  • Batidas ajustáveis por minuto com botão giratório, até 240 BPM
  • Tato audível com controle de volume,
  • Modo silencioso para prática de fone de ouvido durante a noite,
  • Feedback visual de batidas (1/4, 2/4, 3/3, 4/4, 6/8, etc.) até 8 LEDs,
  • Com ou sem sotaque principal, com feedback visual e audível.

Ligando, o modo metrônomo começará em 60 BPM mostrando no pequeno display e deixando o ritmo ser ajustado pelo botão giratório entre 10 e 240. Neopixels mostram a batida em LEDs azuis enquanto a campainha toca. Pressionar o botão mudará para o modo de ajuste de batida e os LEDs verdes indicarão a estrutura de batida definida. O botão giratório aumentará ou diminuirá a estrutura da batida (2/2, 3/3, 4/4, 6/8, etc.). Acima de 8 LEDs, girando ainda mais no sentido horário, o acento principal será ativado e o primeiro LED indicará isso em vermelho. O sotaque principal também terá um feedback audível. Ele pode ser desligado girando no sentido anti-horário. Pressionar o botão giratório alternará do modo de ajuste de batida para o modo metrônomo.

Etapa 2: Lista de peças

Você vai precisar de um caso. Qualquer formato ou tamanho pode ser comprado, mas nós tínhamos uma bela caixa de metal preto de um velho switch VGA manual que descartamos de um amigo. O resto das peças estão listadas abaixo.

  • Bateria 9V, US $ 1,50
  • Cabo conector da bateria, US $ 0, 16
  • Arduino Nano com cabeçalhos de pino, US $ 2,05
  • Nano IO Extension Shield, US $ 1, 05
  • Mini interruptor deslizante para alimentação, US $ 0,15
  • Campainha piezo, US $ 0, 86
  • Adafruit Neopixel WS2812 8 bits, US $ 1, 01
  • Display OLED 128x64, US $ 1,33
  • Codificador giratório, US $ 0, 50
  • Cabos Dupont F / F, US $ 0, 49

O preço total dos componentes é inferior a US $ 10, -

Etapa 3: Diagrama de fiação

Diagrama de Fiação
Diagrama de Fiação

Use a placa de extensão Nano IO para não se preocupar em soldar várias conexões GND e VCC. Solda mínima será necessária para os cabeçotes de pino Nano e para os conectores do módulo Neopixel. O uso de fios Dupont permite conexões estáveis para o resto da fiação, conforme mostrado no diagrama. A bateria de 9 V é conectada ao GND e VIN, este último através do interruptor deslizante de alimentação. O módulo codificador rotativo possui um botão interruptor integrado, que é mostrado separadamente no diagrama para facilitar a compreensão de como conectá-los. A parte rotativa (CLK e DT) é conectada ao PIN2 e PIN3 respectivamente, porque esses são os únicos pinos NANO capazes de lidar com interrupções. O GND giratório está conectado ao PIN GND do Nano, é claro. O botão do interruptor integrado está conectado ao PIN4. A campainha Piezo está conectada ao PIN5 e GND. O módulo Adafruit Neopixel é conectado ao PIN7 e seu VIN e GND aos 5V e GND do Nano, respectivamente. Um pequeno display OLED é conectado à interface de barramento I2C, que é PIN A4 e A5 para SDA e SDL. VCC e GND vão para 5V e GND do Nano, é claro. Isso conclui nossa fiação Dupont.

Etapa 4: Código-fonte do Arduino

Código-fonte do Arduino
Código-fonte do 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 // Redefina o pino # (ou -1 se compartilhando o pino de redefinição do Arduino) Adafruit_SSD1306 display (SCREEN_WIDTH, SCREEN_WIDTH_ & 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 ligado na primeira, desligado no resto … int tack = 4; bool leaderTack = false; int pos = 0; int curVal = 0; int prevVal = 0; void setup () {pixels.begin (); pinMode (pin_buzzer, OUTPUT); Timer1.initialize (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)) {// Endereço 0x3D para 128x64 para (;;); // Não continue, faça um loop para sempre} display.clearDisplay (); display.display (); } void loop () {if (digitalRead (pin_switch) == LOW) {delay (100); while (digitalRead (pin_switch) == LOW); atraso (100); Timer1.detachInterrupt (); showGreenTacks (); while (digitalRead (pin_switch) == HIGH) {if (curVal> prevVal) {tack + = 1; if (tack> 8) {if (leadTack) tack = 8; else {leadTack = true; aderência = 1; }}} else if (curValprevVal) {bpm + = 2; se (bpm> 240) bpm = 240; } else if (curVal = 100) display.print (""); senão display.print (""); display.print (bpm); display.display (); } void buzztick () {if (bpmFirst == 0) {int volume = 4; if (leaderTack && pos == 0) volume = 8; para (int i = 0; i

Recomendado: