Turinys:

„Arduino“metronomas: 4 žingsniai
„Arduino“metronomas: 4 žingsniai

Video: „Arduino“metronomas: 4 žingsniai

Video: „Arduino“metronomas: 4 žingsniai
Video: Arduino Drum Sequencer: 8 takeliai, 16 žingsnių vienam žingsniui, 8 žingsniai vienam modeliui 2024, Liepa
Anonim
Image
Image

Vaikystėje mokantis naujo muzikos instrumento, yra tiek daug naujų dalykų, į kuriuos reikia sutelkti dėmesį. Laikytis tempo tinkamu tempu yra vienas iš jų. Neradus funkcionaliai užbaigto ir patogaus metronomo reiškė geriausią pasiteisinimą vėl pradėti kurti su savo vaikais. Šiame „Instructables“įraše rasite funkcinį aprašymą, dalių sąrašą su internetinių parduotuvių nuorodomis ir kainomis, surinkimo schemą ir visą „Arduino“šaltinio kodą.

1 žingsnis: funkcinis aprašymas

Dalių sąrašas
Dalių sąrašas

Būtų malonu turėti metronomo įrenginį su šiomis funkcijomis, kad galėtumėte patogiai jį naudoti namuose ar muzikos mokykloje.

  • Kompaktiškas formos faktorius, tinkantis mažoms vietoms ant muzikos instrumentų arba jų viršuje,
  • Maitinamas baterijomis, tvirtas ir nešiojamas nešiotis
  • Lengvai nustatomas net vaikams, BPM vertė visada rodoma,
  • Reguliuojamas smūgis per minutę su sukamąja rankenėle, iki 240 BPM
  • Girdimas taktiškumas su garsumo valdymu,
  • Tylus režimas, skirtas praktikuotis per naktį ausinėmis,
  • Vizualus smūgių grįžtamasis ryšys (1/4, 2/4, 3/3, 4/4, 6/8 ir tt) iki 8 šviesos diodų,
  • Su pagrindiniu akcentu arba be jo, su vaizdiniu ir garsiniu grįžtamuoju ryšiu.

Įjungus, metronomo režimas prasidės esant 60 BPM, rodomam mažame ekrane ir leidžiantį tempu reguliuoti sukamąja rankenėle nuo 10 iki 240. Neopikseliai rodo ritmą mėlynais šviesos diodais, kol skamba garsinis signalas. Paspaudus rankenėlę, bus perjungtas ritmo reguliavimo režimas, o žalios šviesos diodai parodys nustatytą ritmo struktūrą. Sukamoji rankenėlė padidins arba sumažins ritmo struktūrą (2/2, 3/3, 4/4, 6/8 ir tt). Virš 8 šviesos diodų, toliau besisukančių pagal laikrodžio rodyklę, bus įjungtas pagrindinis akcentas, o pirmasis šviesos diodas tai parodys raudonai. Pagrindinis akcentas taip pat turės girdimą grįžtamąjį ryšį. Jį galima išjungti sukant prieš laikrodžio rodyklę. Paspaudus rankenėlę, ritmo reguliavimo režimas grįš į metronomo režimą.

2 žingsnis: dalių sąrašas

Jums reikės dėklo. Galima nusipirkti bet kokios formos ar dydžio, bet mes turėjome gražų juodo metalo dėklą su senu rankiniu VGA jungikliu, atsikratęs draugo. Likusios dalys yra išvardytos žemiau.

  • 9 V baterija, 1,50 USD
  • Akumuliatoriaus jungties kabelis, USD 0, 16
  • „Arduino Nano“su kaiščių antgaliais, 2,05 USD
  • „Nano IO“prailginimo skydas, 1 USD, 05 USD
  • Mažas slydimo jungiklis, skirtas maitinimui, 0,15 USD
  • Pjezo garsinis signalas, 0 USD, 86 USD
  • „Adafruit Neopixel WS2812“8 bitų, 1 USD, 01
  • OLED ekranas 128x64, 1 USD, 53 USD
  • Rotacinis kodavimo įrenginys, 0 USD, 50 USD
  • Dupont kabeliai F/F, USD 0, 49

Bendra komponentų kaina yra mažesnė nei 10 USD,

3 žingsnis: laidų schema

Elektros schema
Elektros schema

Naudokite „Nano IO“prailginimo plokštę, kad nesivargintumėte lituojant kelias GND ir VCC jungtis. Minimaliai lituoti reikės „Nano“kaiščių antgaliams ir „Neopixel“modulio jungtims. Naudojant „Dupont“laidus, galima stabiliai prijungti likusius laidus, kaip parodyta diagramoje. 9 V baterija prijungta prie GND ir VIN, pastaroji - per maitinimo slankiklį. Sukamojo kodavimo modulis turi integruotą jungiklio mygtuką, kuris diagramoje parodytas atskirai, kad būtų lengviau suprasti, kaip juos prijungti. Rotacinė dalis (CLK ir DT) prijungta atitinkamai prie PIN2 ir PIN3, nes tai yra vieninteliai NANO kaiščiai, galintys pertraukti tvarkymą. Žinoma, „Rotary GND“yra prijungtas prie „Nano“GND PIN kodo. Integruotas jungiklio mygtukas prijungtas prie PIN4. Pjezo garsinis signalas prijungtas prie PIN5 ir GND. „Adafruit Neopixel“modulis yra prijungtas prie PIN7, o jo VIN ir GND - atitinkamai prie „Nano“5V ir GND. Mažas OLED ekranas prijungtas prie I2C magistralės sąsajos, kuri yra PIN A4 ir A5, skirta SDA ir SDL. Žinoma, VCC ir GND eina į „Nano“5V ir GND. Tai baigia mūsų „Dupont“laidus.

4 žingsnis: „Arduino“šaltinio kodas

„Arduino“šaltinio kodas
„Arduino“šaltinio kodas

// Metronomas, pagrindinis akcentas, vizualus ir girdimas taktas - 2019 Peter Csurgay

#include #include #include #include #include "TimerOne.h" #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 // Iš naujo nustatyti kaištį #(arba -1, jei bendrinate „Arduino“nustatymo kaištį) Adafruit_SSD1306 ekranas (SCREEN_WIDH, & Viela, 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 bpmPirmas = 0; // Šviesos diodas iš pradžių įjungtas, likus - išjungtas … int tack = 4; bool leadTack = false; int pos = 0; int curVal = 0; int prevVal = 0; void setup () {pixels.begin (); pinMode (pin_buzzer, OUTPUT); Timer1.inicialize (1000000*60/bpm/2); Laikmatis1.attachInterrupt (buzztick); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); pinMode (kaiščio jungiklis, INPUT_PULLUP); attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Adresas 0x3D, skirtas 128x64 (;;); // Negalima tęsti, ciklas amžinai} display.clearDisplay (); display.display (); } void loop () {if (digitalRead (pin_switch) == LOW) {delay (100); while (digitalRead (pin_switch) == LOW); vėlavimas (100); Laikmatis1.detachInterrupt (); showGreenTacks (); while (digitalRead (pin_switch) == HIGH) {if (curVal> prevVal) {tack+= 1; if (tack> 8) {if (leadTack) tack = 8; else {leadTack = tiesa; lipnumas = 1; }}} kitaip, jei (curValprevVal) {bpm+= 2; jei (bpm> 240) bpm = 240; } else if (curVal = 100) display.print (""); else display.print (""); ekranas.spaudas (bpm); display.display (); } void buzztick () {if (bpmFirst == 0) {int volume = 4; if (leadTack && pos == 0) tūris = 8; už (int i = 0; i

Rekomenduojamas: