Talaan ng mga Nilalaman:

Arduino Metronome: 4 na Hakbang
Arduino Metronome: 4 na Hakbang

Video: Arduino Metronome: 4 na Hakbang

Video: Arduino Metronome: 4 na Hakbang
Video: Драм-секвенсор Arduino: 8 дорожек, 16 шагов на такт, 8 тактов на паттерн 2024, Hulyo
Anonim
Image
Image

Kapag natututo ng isang bagong instrumentong pangmusika bilang isang bata, maraming mga bagong bagay na dapat pagtuunan ng pansin. Ang pagpapanatili sa tamang tempo ay isa sa mga ito. Ang hindi paghanap ng kumpletong functionally at maginhawang metronome ay nangangahulugang ang pinakamahusay na dahilan upang simulan ang pagbuo muli sa aking mga anak. Sa post na ito ng Mga Tagubilin makikita mo ang gumagalaw na paglalarawan, listahan ng mga bahagi na may mga link sa webshop at presyo, diagram ng mga kable para sa pagpupulong, at kumpletuhin ang code ng mapagkukunan ng Arduino.

Hakbang 1: Functional na Paglalarawan

Listahan ng Mga Bahagi
Listahan ng Mga Bahagi

Masarap na magkaroon ng isang metronome device na may mga sumusunod na pagpapaandar upang magamit ito sa bahay o sa paaralan ng musika na maginhawa.

  • Compact form factor upang magkasya sa maliliit na lugar sa itaas o sa tabi ng mga instrumentong pangmusika,
  • Pinapatakbo ng baterya, matatag at portable na bitbit,
  • Madaling i-set up kahit para sa mga bata, palaging ipinapakita ang halaga ng BPM,
  • Naaayos na mga beats bawat minuto gamit ang isang Rotary knob, hanggang sa 240 BPM
  • Naririnig ang taktika na may kontrol sa dami,
  • Silent mode para sa magdamag na kasanayan sa headphone,
  • Ang visual feedback ng mga beats (1/4, 2/4, 3/3, 4/4, 6/8, atbp.) Hanggang sa 8 LEDs,
  • May o walang nangungunang accent, na may visual at maririnig na feedback.

Ang paglipat, ang mode ng metronome ay magsisimula sa 60 BPM na ipinapakita sa maliit na display at hinahayaan na ang tono ay mai-rotate ng rotary knob sa pagitan ng 10 at 240. Ipinapakita ng mga neopixel ang pagkatalo sa mga asul na LED habang ang buzzer ay nag-tick. Ang pagpindot sa knob ay lilipat upang talunin ang mode ng pagsasaayos at ang mga berdeng LEDs ay magpapahiwatig ng itinakdang istraktura ng beat. Ang rotary knob ay magpapalaki o magpapabawas sa istraktura ng beat (2/2, 3/3, 4/4, 6/8, atbp.). Sa itaas ng 8 LEDs, karagdagang umiikot na pakanan, ang nangungunang accent ay bubuksan, at ang unang LED ay ipahiwatig ito sa pula. Ang nangungunang accent ay magkakaroon din ng maririnig na feedback din. Maaari itong patayin sa pamamagitan ng pag-ikot ng counter-clockwise. Ang pagpindot sa knob ay babalik mula sa beat mode ng pagsasaayos sa metronome mode.

Hakbang 2: Listahan ng Mga Bahagi

Kakailanganin mo ng isang kaso. Maaaring mabili ang anumang hugis o sukat, ngunit nagkaroon kami ng isang magandang itim na metal na kaso ng isang lumang manu-manong switch ng VGA na itinapon sa isang kaibigan. Ang natitirang bahagi ng mga bahagi ay nakalista sa ibaba.

  • 9V Baterya, USD 1.50
  • Ang cable ng konektor ng baterya, USD 0, 16
  • Arduino Nano na may mga pin header, USD 2.05
  • Nano IO Extension Shield, USD 1, 05
  • Mini slide switch para sa lakas, USD 0.15
  • Piezo buzzer, USD 0, 86
  • Adafruit Neopixel WS2812 8-bit, USD 1, 01
  • OLED Display 128x64, USD 1, 53
  • Rotary encoder, USD 0, 50
  • Mga Dupont cable F / F, USD 0, 49

Ang kabuuang presyo ng mga bahagi ay mas mababa sa USD 10, -

Hakbang 3: Diagram ng Mga Kable

Diagram ng Kable
Diagram ng Kable

Gamitin ang Nano IO Extension Board upang hindi makagambala sa paghihinang ng maraming mga koneksyon ng GND at VCC. Kakailanganin ang minimum na paghihinang para sa mga header ng Nano pin at para sa mga konektor ng module ng Neopixel. Ang paggamit ng mga wire ng Dupont ay nagbibigay-daan sa mga matatag na koneksyon para sa natitirang mga kable tulad ng ipinakita sa diagram. Ang 9V na baterya ay nakakonekta sa GND at VIN, ang huli sa pamamagitan ng switch ng power slider. Ang module ng rotary encoder ay may isang integrated button na switch, na ipinakita nang magkahiwalay sa diagram para sa mas madaling pag-unawa sa kung paano ikonekta ang mga ito. Ang rotary part (CLK at DT) ay konektado sa PIN2 at PIN3 ayon sa pagkakabanggit, dahil ito lamang ang mga NANO na pin na may kakayahang makagambala sa paghawak. Ang Rotary GND ay konektado sa GND PIN ni Nano syempre. Ang pinagsamang pindutan ng switch ay konektado sa PIN4. Ang Piezo buzzer ay konektado sa PIN5 at GND. Ang module ng Adafruit Neopixel ay konektado sa PIN7 at ang VIN at GND nito sa 5V at GND ng Nano. Ang maliit na display na OLED ay konektado sa interface ng bus ng I2C, na kung saan ay PIN A4 at A5 para sa SDA at SDL. Ang VCC at GND ay pupunta sa 5V ng Nano at syempre. Tinatapos iyon ang aming mga kable ng Dupont.

Hakbang 4: Arduino Source Code

Source Code ng Arduino
Source Code ng Arduino

// Metronome, Leading Accent, Visual & Audible Tact - 2019 Peter Csurgay

#include #include #include #include #include "timer & Wire, OLED_RESET); #define pin_neopixel 7 #define NUMPIXELS 8 #define BRIGHTNESS 32 Adafruit_NeoPixel pixel = 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 # tukuyin ang DT 3 # tukuyin ang pin_switch 4 # tukuyin ang pin_buzzer 5 int bpm = 60; int bpmFirst = 0; // LED On at First, Off at the rest… int tack = 4; bool leadingTack = false; int pos = 0; int curVal = 0; int prevVal = 0; void setup () {pix.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); kung (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Address 0x3D para sa 128x64 para sa (;;); // Huwag magpatuloy, loop magpakailanman} display.clearDisplay (); display.display (); } void loop () {kung (digitalRead (pin_switch) == LOW) {pagkaantala (100); habang (digitalRead (pin_switch) == LOW); pagkaantala (100); Timer1.detachInterrupt (); showGreenTacks (); habang (digitalRead (pin_switch) == MATAAS) {kung (curVal> prevVal) {tack + = 1; kung (tack> 8) {kung (leadingTack) tack = 8; iba pa {leadingTack = true; tack = 1; }}} iba pa kung (curValprevVal) {bpm + = 2; kung (bpm> 240) bpm = 240; } iba pa kung (curVal = 100) display.print (""); iba pa ang display.print (""); display.print (bpm); display.display (); } void buzztick () {if (bpmFirst == 0) {int volume = 4; kung (nangungunangTack && pos == 0) dami = 8; para sa (int i = 0; i

Inirerekumendang: