Indholdsfortegnelse:

Arduino Metronome: 4 trin
Arduino Metronome: 4 trin

Video: Arduino Metronome: 4 trin

Video: Arduino Metronome: 4 trin
Video: Make your own Arduino Metronome 2024, November
Anonim
Image
Image

Når man lærer et nyt musikinstrument som barn, er der så mange nye ting at holde fokus på. At holde tempoet i det rigtige tempo er en af dem. Ikke at finde en funktionelt komplet og praktisk metronom betød den bedste undskyldning for at begynde at bygge igen med mine børn. I dette Instructables -indlæg finder du den funktionelle beskrivelse, deleliste med webshop -links og priser, ledningsdiagram til samling og komplet Arduino -kildekode.

Trin 1: Funktionel beskrivelse

Liste over dele
Liste over dele

Det ville være rart at have en metronom -enhed med følgende funktioner til bekvemt at bruge den hjemme eller på musikskolen.

  • Kompakt formfaktor til at passe små steder ovenpå eller ved siden af musikinstrumenter,
  • Batteridrevet, robust og bærbar at bære rundt på,
  • Let opsat selv for børn, BPM -værdi vises altid,
  • Justerbare slag i minuttet med en drejeknap, op til 240 BPM
  • Hørbar takt med lydstyrkekontrol,
  • Lydløs tilstand til øvelse med hovedtelefoner natten over,
  • Visuel feedback af takter (1/4, 2/4, 3/3, 4/4, 6/8 osv.) Op til 8 lysdioder,
  • Med eller uden ledende accent, med visuel og hørbar feedback.

Tændes, vil metronomtilstand starte ved 60 BPM, der vises på det lille display og lade tempoet indstilles af drejeknappen mellem 10 og 240. Neopixels viser takten i blå lysdioder, mens summeren tikker. Ved at trykke på knappen skifter til beat -justeringstilstand, og grønne lysdioder angiver den indstillede beat -struktur. Drejeknap øger eller formindsker taktstrukturen (2/2, 3/3, 4/4, 6/8 osv.). Over 8 lysdioder, der yderligere roterer med uret, vil den fremhævede accent blive tændt, og den første lysdiode angiver dette med rødt. Førende accent vil også have hørbar feedback. Det kan slukkes ved at dreje mod uret. Et tryk på knappen skifter tilbage fra beatjusteringstilstand til metronomtilstand.

Trin 2: Deleliste

Du skal bruge en sag. Enhver form eller størrelse kan købes, men vi havde et flot sort metalhus med en gammel manuel VGA -switch, der blev bortskaffet af en ven. Resten af delene er angivet nedenfor.

  • 9V batteri, 1,50 USD
  • Batterikonnektorkabel, USD 0, 16
  • Arduino Nano med benhoveder, 2,05 USD
  • Nano IO Extension Shield, USD 1, 05
  • Mini skydekontakt til strøm, 0,15 USD
  • Piezo -summer, 0 USD, 86
  • Adafruit Neopixel WS2812 8-bit, USD 1, 01
  • OLED -skærm 128x64, USD 1, 53
  • Rotary encoder, USD 0, 50
  • Dupont kabler F/F, USD 0, 49

Samlet pris på komponenterne er mindre end USD 10, -

Trin 3: Ledningsdiagram

Ledningsdiagram
Ledningsdiagram

Brug Nano IO -udvidelseskortet for ikke at bekymre dig om lodning af flere GND- og VCC -forbindelser. Minimal lodning vil være nødvendig for Nano -benhovederne og for Neopixel -modulets stik. Brug af Dupont -ledninger tillader stabile forbindelser til resten af ledningerne som vist på diagrammet. 9V -batteriet er tilsluttet GND og VIN, sidstnævnte via afbryderkontakten. Det roterende encodermodul har en integreret switch -knap, der er vist separat i diagrammet for lettere at forstå, hvordan de tilsluttes. Roterende del (CLK og DT) er forbundet til henholdsvis PIN2 og PIN3, fordi disse er de eneste NANO -ben, der kan afbryde håndteringen. Rotary GND er naturligvis forbundet med Nano's GND PIN. Den integrerede switch -knap er forbundet til PIN4. Piezo -summer er forbundet til PIN5 og GND. Adafruit Neopixel -modul er forbundet til PIN7 og dets VIN og GND til henholdsvis Nano's 5V og GND. Lille OLED -display er forbundet til I2C -busgrænsefladen, som er PIN A4 og A5 til SDA og SDL. VCC og GND går naturligvis til Nanos 5V og GND. Det afslutter vores Dupont -ledninger.

Trin 4: Arduino kildekode

Arduino kildekode
Arduino kildekode

// Metronom, 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_WIDH, SCRE_ & 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 tændt først, slukket i resten… int tack = 4; bool leadingTack = falsk; int pos = 0; int curVal = 0; int prevVal = 0; ugyldig opsætning () {pixels.begin (); pinMode (pin_buzzer, OUTPUT); Timer1.initialisere (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); hvis (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Adresse 0x3D for 128x64 for (;;); // Fortsæt ikke, loop for evigt} display.clearDisplay (); display.display (); } void loop () {if (digitalRead (pin_switch) == LOW) {delay (100); mens (digitalRead (pin_switch) == LOW); forsinkelse (100); Timer1.detachInterrupt (); showGreenTacks (); mens (digitalRead (pin_switch) == HIGH) {if (curVal> prevVal) {tack+= 1; if (tack> 8) {if (leadingTack) tack = 8; ellers {leadingTack = true; tack = 1; }}} ellers hvis (curValprevVal) {bpm+= 2; hvis (bpm> 240) bpm = 240; } ellers hvis (curVal = 100) display.print (""); ellers display.print (""); display.print (bpm); display.display (); } void buzztick () {if (bpmFirst == 0) {int volume = 4; hvis (leadingTack && pos == 0) volumen = 8; for (int i = 0; i

Anbefalede: