Innholdsfortegnelse:

Arduino metronom: 4 trinn
Arduino metronom: 4 trinn

Video: Arduino metronom: 4 trinn

Video: Arduino metronom: 4 trinn
Video: Метроном на ардуино! #arduino #электроника #метроном 2024, November
Anonim
Image
Image

Når du lærer et nytt musikkinstrument som barn, er det så mange nye ting å holde fokus på. Å holde tempoet i riktig tempo er en av dem. Å ikke finne en funksjonelt komplett og praktisk metronom betydde den beste unnskyldningen for å begynne å bygge igjen med barna mine. I dette Instructables -innlegget finner du den funksjonelle beskrivelsen, delelisten med webshop -lenker og priser, koblingsskjema for montering og komplett Arduino -kildekode.

Trinn 1: Funksjonell beskrivelse

Deleliste
Deleliste

Det ville være fint å ha en metronom -enhet med følgende funksjoner for å bruke den hjemme eller på musikkskolen.

  • Kompakt formfaktor for å passe små steder på toppen eller ved siden av musikkinstrumenter,
  • Batteridrevet, robust og bærbar å bære rundt,
  • Enkelt konfigurert selv for barn, BPM -verdi vises alltid,
  • Justerbare slag per minutt med en dreieknapp, opptil 240 BPM
  • Hørbar takt med volumkontroll,
  • Stille modus for øvelse med hodetelefoner over natten,
  • Visuell tilbakemelding på slag (1/4, 2/4, 3/3, 4/4, 6/8, etc.) opptil 8 lysdioder,
  • Med eller uten ledende aksent, med visuell og hørbar tilbakemelding.

Slå på, vil metronom -modus starte med 60 BPM som vises på den lille skjermen og la tempoet justeres med dreieknappen mellom 10 og 240. Neopixels viser takten i blå LED mens summeren tikker. Ved å trykke på knappen vil du bytte til taktjusteringsmodus og grønne lysdioder indikerer den angitte taktstrukturen. Dreieknappen vil øke eller redusere taktstrukturen (2/2, 3/3, 4/4, 6/8, etc.). Over 8 lysdioder, ytterligere rotasjon med klokken, vil ledende aksent slås på, og den første lysdioden indikerer dette med rødt. Ledende aksent vil også ha hørbar tilbakemelding. Den kan slås av ved å rotere mot klokken. Trykk på knappen for å bytte tilbake fra taktjusteringsmodus til metronom -modus.

Trinn 2: Deleliste

Du trenger en sak. Enhver form eller størrelse kan kjøpes, men vi hadde en fin svart metallkasse med en gammel manuell VGA -bryter som ble avhendt av en venn. Resten av delene er listet opp nedenfor.

  • 9V batteri, 1,50 dollar
  • Batterikontaktkabel, USD 0, 16
  • Arduino Nano med pinnehoder, USD 2,05
  • Nano IO Extension Shield, USD 1, 05
  • Mini skyvebryter for strøm, 0,15 USD
  • Piezo -summer, 0 USD, 86
  • Adafruit Neopixel WS2812 8-bit, USD 1, 01
  • OLED -skjerm 128x64, USD 1, 53
  • Rotary encoder, USD 0, 50
  • Dupont -kabler F/F, USD 0, 49

Totalpris på komponentene er mindre enn USD 10, -

Trinn 3: Koblingsskjema

Koblingsskjema
Koblingsskjema

Bruk Nano IO Extension Board for ikke å bry deg med lodding av flere GND- og VCC -tilkoblinger. Minimal lodding vil være nødvendig for Nano -pinnehodene og for Neopixel -modulkontaktene. Ved bruk av Dupont -ledninger tillates stabile tilkoblinger for resten av ledningene som vist på diagrammet. 9V -batteriet er koblet til GND og VIN, sistnevnte via strømbryteren. Den roterende kodermodulen har en integrert bryterknapp, som er vist separat i diagrammet for lettere forståelse av hvordan du kobler dem til. Roterende del (CLK og DT) er koblet til henholdsvis PIN2 og PIN3, fordi disse er de eneste NANO -pinnene som kan avbryte håndteringen. Rotary GND er selvfølgelig koblet til Nanos GND -PIN. Den integrerte bryterknappen er koblet til PIN4. Piezo -summer er koblet til PIN5 og GND. Adafruit Neopixel -modulen er koblet til PIN7 og VIN og GND til henholdsvis Nanos 5V og GND. Liten OLED -skjerm er koblet til I2C -bussgrensesnittet, som er PIN A4 og A5 for SDA og SDL. VCC og GND går selvfølgelig til Nanos 5V og GND. Det avsluttes våre Dupont -ledninger.

Trinn 4: Arduino kildekode

Arduino kildekode
Arduino kildekode

// Metronom, ledende aksent, visuell og hørbar takt - 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_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 på først, av i resten … int tack = 4; bool leadingTack = false; int pos = 0; int curVal = 0; int prevVal = 0; ugyldig oppsett () {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)) {// Adresse 0x3D for 128x64 for (;;); // Ikke fortsett, loop for alltid} display.clearDisplay (); display.display (); } void loop () {if (digitalRead (pin_switch) == LOW) {delay (100); mens (digitalRead (pin_switch) == LOW); forsinkelse (100); Timer1.detachInterrupt (); showGreenTacks (); while (digitalRead (pin_switch) == HIGH) {if (curVal> prevVal) {tack+= 1; if (tack> 8) {if (leadingTack) tack = 8; annet {leadingTack = true; tack = 1; }}} annet hvis (curValprevVal) {bpm+= 2; hvis (bpm> 240) bpm = 240; } annet hvis (curVal = 100) display.print (""); annet display.print (""); display.print (bpm); display.display (); } void buzztick () {if (bpmFirst == 0) {int volume = 4; if (leadingTack && pos == 0) volume = 8; for (int i = 0; i

Anbefalt: