Cuprins:

Arduino Metronome: 4 pași
Arduino Metronome: 4 pași

Video: Arduino Metronome: 4 pași

Video: Arduino Metronome: 4 pași
Video: Метроном на ардуино! #arduino #электроника #метроном 2024, Iulie
Anonim
Image
Image

Când învățați un nou instrument muzical în copilărie, există atât de multe lucruri noi pe care să vă concentrați. Ținerea ritmului în ritmul potrivit este una dintre ele. A nu găsi un metronom complet funcțional și convenabil a însemnat cea mai bună scuză pentru a începe să construiesc din nou împreună cu copiii mei. În această postare Instructables veți găsi descrierea funcțională, lista de piese cu link-uri și prețuri de webshop, schema de cablare pentru asamblare și codul sursă Arduino complet.

Pasul 1: Descriere funcțională

Lista de componente
Lista de componente

Ar fi frumos să aveți un dispozitiv metronom cu următoarele funcții pentru al utiliza acasă sau la școala de muzică convenabil.

  • Factor de formă compact pentru a se potrivi cu locuri mici deasupra sau lângă instrumentele muzicale,
  • Acționat pe baterie, robust și portabil de transportat,
  • Configurare ușoară chiar și pentru copii, valoarea BPM afișată întotdeauna,
  • Bătăi reglabile pe minut cu un buton rotativ, până la 240 BPM
  • Tact sonor cu control al volumului,
  • Mod silențios pentru practicarea căștilor peste noapte,
  • Feedback vizual al ritmurilor (1/4, 2/4, 3/3, 4/4, 6/8 etc.) până la 8 LED-uri,
  • Cu sau fără accent principal, cu feedback vizual și sonor.

Pornind, modul metronom va începe la 60 BPM afișat pe afișajul mic și lăsând ritmul să fie reglat de butonul rotativ între 10 și 240. Neopixelii arată ritmul în LED-uri albastre în timp ce buzzerul bifează. Apăsarea butonului va comuta la modul de reglare a bătăilor, iar LED-urile verzi vor indica structura setată a bătăilor. Butonul rotativ va crește sau micșora structura bătăii (2/2, 3/3, 4/4, 6/8 etc.). Peste 8 LED-uri, rotind în continuare în sensul acelor de ceasornic, accentul principal va fi activat, iar primul LED va indica acest lucru cu roșu. Accentul de frunte va avea și feedback sonor. Poate fi oprit rotind în sens invers acelor de ceasornic. Apăsarea butonului va comuta înapoi de la modul de ajustare a ritmului la modul metronom.

Pasul 2: Lista pieselor

Veți avea nevoie de un caz. Orice formă sau dimensiune poate fi cumpărată, dar am avut o carcasă frumoasă din metal negru, cu un vechi comutator manual VGA, eliminat de un prieten. Restul pieselor sunt enumerate mai jos.

  • Baterie de 9V, 1,50 USD
  • Cablu conector baterie, USD 0, 16
  • Arduino Nano cu anteturi pin, 2,05 USD
  • Extensie Nano IO, 1 USD, 05 USD
  • Mini comutator glisant pentru alimentare, 0,15 USD
  • Buzzer piezo, 0, 86 USD
  • Adafruit Neopixel WS2812 pe 8 biți, 1 USD, 01
  • Afișaj OLED 128x64, 1, 53 USD
  • Codificator rotativ, 0, 50 USD
  • Cabluri Dupont F / F, USD 0, 49

Prețul total al componentelor este mai mic de 10 USD, -

Pasul 3: Schema de cablare

Schema de conexiuni
Schema de conexiuni

Utilizați placa de extensie Nano IO pentru a nu vă deranja cu lipirea mai multor conexiuni GND și VCC. Va fi necesară lipirea minimă pentru anteturile Nano pin și pentru conectorii modulului Neopixel. Utilizarea cablurilor Dupont permite conexiuni stabile pentru restul cablajelor, așa cum se arată în diagramă. Bateria de 9V este conectată la GND și VIN, acesta din urmă prin comutatorul glisant. Modulul codificatorului rotativ are un buton de comutare integrat, care este prezentat separat în diagramă pentru o înțelegere mai ușoară a modului de conectare a acestora. Piesa rotativă (CLK și DT) este conectată la PIN2 și respectiv la PIN3, deoarece acestea sunt singurele pini NANO capabili să manipuleze întreruperea. Rotary GND este conectat la PIN-ul GND al lui Nano, desigur. Butonul de comutare integrat este conectat la PIN4. Buzzer-ul piezo este conectat la PIN5 și GND. Modulul Adafruit Neopixel este conectat la PIN7 și VIN și GND la 5V și respectiv GND ale Nano. Afișajul mic OLED este conectat la interfața magistralei I2C, care este PIN A4 și A5 pentru SDA și SDL. VCC și GND merg la Nano's 5V și GND, desigur. Asta încheie cablarea noastră Dupont.

Pasul 4: Codul sursă Arduino

Cod sursă Arduino
Cod sursă Arduino

// Metronome, Accent principal, Tact vizual și audibil - 2019 Peter Csurgay

#include #include #include #include #include "TimerOne.h" #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 // Reset pin # (sau -1 dacă se partajează pinul de resetare Arduino) Afișaj Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT & 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-ul Aprins la început, Off la rest … int tack = 4; bool leadingTack = 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)) {// Adresă 0x3D pentru 128x64 pentru (;;); // Nu continuați, buclați pentru totdeauna} display.clearDisplay (); display.display (); } void loop () {if (digitalRead (pin_switch) == LOW) {delay (100); while (digitalRead (pin_switch) == LOW); întârziere (100); Timer1.detachInterrupt (); showGreenTacks (); while (digitalRead (pin_switch) == HIGH) {if (curVal> prevVal) {tack + = 1; if (tack> 8) {if (leadingTack) tack = 8; else {leadingTack = adevărat; tac = 1; }}} else if (curValprevVal) {bpm + = 2; dacă (bpm> 240) bpm = 240; } else if (curVal = 100) display.print (""); else display.print (""); display.print (bpm); display.display (); } void buzztick () {if (bpmFirst == 0) {int volum = 4; if (leadingTack && pos == 0) volume = 8; pentru (int i = 0; i

Recomandat: