Innehållsförteckning:

Arduino Metronom: 4 steg
Arduino Metronom: 4 steg

Video: Arduino Metronom: 4 steg

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

När man lär sig ett nytt musikinstrument som barn finns det så många nya saker att hålla fokus på. Att hålla tempot i rätt tempo är en av dem. Att inte hitta en funktionellt komplett och bekväm metronom innebar den bästa ursäkten att börja bygga igen med mina barn. I detta Instructables -inlägg hittar du funktionsbeskrivningen, listan med webbshoppslänkar och priser, kopplingsschema för montering och komplett Arduino -källkod.

Steg 1: Funktionsbeskrivning

Reservdelar
Reservdelar

Det skulle vara trevligt att ha en metronom med följande funktioner för att använda den hemma eller på musikskolan bekvämt.

  • Kompakt formfaktor för att passa små platser ovanpå eller bredvid musikinstrument,
  • Batteridriven, robust och bärbar att bära med sig,
  • Enkelt att konfigurera även för barn, BPM -värde visas alltid,
  • Justerbara slag per minut med en vridknapp, upp till 240 BPM
  • Hörbar takt med volymkontroll,
  • Tyst läge för övning med hörlurar över natten,
  • Visuell återkoppling av slag (1/4, 2/4, 3/3, 4/4, 6/8, etc.) upp till 8 lysdioder,
  • Med eller utan ledande accent, med visuell och hörbar feedback.

Om man slår på, börjar metronomläget vid 60 BPM som visas på den lilla displayen och låter tempot justeras med vridknappen mellan 10 och 240. Neopixlar visar takten i blå lysdioder medan summern tickar. Genom att trycka på vredet växlas till taktjusteringsläge och gröna lysdioder indikerar den inställda taktstrukturen. Vridratten ökar eller minskar slagstrukturen (2/2, 3/3, 4/4, 6/8, etc.). Över 8 lysdioder, ytterligare roterande medurs, kommer den främre accenten att tändas, och den första lysdioden indikerar detta med rött. Ledande accent kommer också att ha hörbar feedback. Den kan stängas av genom att vrida moturs. Genom att trycka på knappen växlar du tillbaka från taktjusteringsläge till metronomläge.

Steg 2: Dellista

Du behöver ett fall. Vilken form eller storlek som helst kan köpas, men vi hade ett snyggt svart metallhölje med en gammal manuell VGA -omkopplare som hanterade en vän. Resten av delarna listas nedan.

  • 9V batteri, 1,50 USD
  • Batterikontaktkabel, 0 USD, 16
  • Arduino Nano med stifthuvuden, 2,05 USD
  • Nano IO Extension Shield, USD 1, 05
  • Mini -skjutbrytare för ström, 0,15 USD
  • Piezo -summer, 0 USD, 86
  • Adafruit Neopixel WS2812 8-bitars, USD 1, 01
  • OLED -skärm 128x64, USD 1, 53
  • Roterande pulsgivare, USD 0, 50
  • Dupont -kablar F/F, USD 0, 49

Komponenternas totala pris är mindre än USD 10, -

Steg 3: Anslutningsdiagram

Kopplingsschema
Kopplingsschema

Använd Nano IO -förlängningskortet för att inte krångla till att löda flera GND- och VCC -anslutningar. Minimal lödning kommer att behövas för Nano -stifthuvuden och för Neopixel -modulkontakterna. Användning av Dupont -ledningar möjliggör stabila anslutningar för resten av ledningarna enligt diagrammet. 9V -batteriet är anslutet till GND och VIN, det senare via strömbrytaren. Den roterande givarmodulen har en integrerad omkopplare, som visas separat i diagrammet för att lättare förstå hur man ansluter dem. Roterande del (CLK och DT) är ansluten till PIN2 respektive PIN3, eftersom dessa är de enda NANO -stiften som kan avbryta hanteringen. Rotary GND är naturligtvis ansluten till Nanos GND -PIN. Den integrerade omkopplarknappen är ansluten till PIN4. Piezo -summer är ansluten till PIN5 och GND. Adafruit Neopixel -modul är ansluten till PIN7 och dess VIN och GND till Nanos 5V respektive GND. Liten OLED -display är ansluten till I2C -bussgränssnittet, som är PIN A4 och A5 för SDA och SDL. VCC och GND går naturligtvis till Nanos 5V och GND. Det avslutar vår Dupont -ledning.

Steg 4: Arduino -källkod

Arduino källkod
Arduino källkod

// Metronom, ledande accent, visuell och 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, SCREEN_ & 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, släckt i resten … int tack = 4; bool leadingTack = false; int pos = 0; int curVal = 0; int prevVal = 0; void setup () {pixels.begin (); pinMode (pin_buzzer, OUTPUT); Timer1.initialisera (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)) {// Adress 0x3D för 128x64 för (;;); // Fortsätt inte, loop för alltid} display.clearDisplay (); display.display (); } void loop () {if (digitalRead (pin_switch) == LOW) {delay (100); medan (digitalRead (pin_switch) == LOW); fördröjning (100); Timer1.detachInterrupt (); showGreenTacks (); medan (digitalRead (pin_switch) == HIGH) {if (curVal> prevVal) {tack+= 1; if (tack> 8) {if (leadingTack) tack = 8; annars {leadingTack = true; tack = 1; }}} annars if (curValprevVal) {bpm+= 2; om (bpm> 240) bpm = 240; } annars if (curVal = 100) display.print (""); annars display.print (""); display.print (bpm); display.display (); } void buzztick () {if (bpmFirst == 0) {int volume = 4; if (leadingTack && pos == 0) volume = 8; för (int i = 0; i

Rekommenderad: