Spisu treści:

Metronom Arduino: 4 kroki
Metronom Arduino: 4 kroki

Wideo: Metronom Arduino: 4 kroki

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

Ucząc się nowego instrumentu muzycznego jako dziecko, jest tak wiele nowych rzeczy, na których należy się skupić. Jednym z nich jest utrzymywanie odpowiedniego tempa. Nie znalezienie funkcjonalnie kompletnego i wygodnego metronomu oznaczało najlepszą wymówkę, aby ponownie zacząć budować z moimi dziećmi. W tym poście Instructables znajdziesz opis funkcjonalny, listę części z linkami do sklepu internetowego i cenami, schemat połączeń do montażu oraz kompletny kod źródłowy Arduino.

Krok 1: Opis funkcjonalny

Lista części
Lista części

Byłoby miło mieć urządzenie metronomu z następującymi funkcjami, aby wygodnie używać go w domu lub w szkole muzycznej.

  • Kompaktowa obudowa, aby zmieścić małe miejsca na górze lub obok instrumentów muzycznych,
  • Zasilany bateryjnie, wytrzymały i przenośny do noszenia,
  • Łatwa konfiguracja nawet dla dzieci, wartość BPM zawsze wyświetlana,
  • Regulowane uderzenia na minutę za pomocą pokrętła, do 240 BPM
  • słyszalny takt z regulacją głośności,
  • Tryb cichy do nocnych ćwiczeń na słuchawkach,
  • Wizualna informacja zwrotna o bitach (1/4, 2/4, 3/3, 4/4, 6/8 itd.) do 8 diod LED,
  • Z wiodącym akcentem lub bez, z wizualnym i dźwiękowym sprzężeniem zwrotnym.

Włączenie trybu metronomu rozpocznie się od 60 BPM, pokazując się na małym wyświetlaczu i pozwalając na dostrojenie tempa za pomocą pokrętła od 10 do 240. Neopiksele pokazują rytm na niebieskich diodach LED, podczas gdy brzęczyk tyka. Naciśnięcie pokrętła spowoduje przejście do trybu regulacji rytmu, a zielone diody LED wskażą ustawioną strukturę rytmu. Pokrętło zwiększa lub zmniejsza strukturę bitu (2/2, 3/3, 4/4, 6/8 itd.). Powyżej 8 diod, dalej obracając się zgodnie z ruchem wskazówek zegara, wiodący akcent zostanie włączony, a pierwsza dioda wskaże to na czerwono. Główny akcent będzie miał również słyszalne sprzężenie zwrotne. Można go wyłączyć, obracając przeciwnie do ruchu wskazówek zegara. Naciśnięcie pokrętła spowoduje powrót z trybu regulacji rytmu do trybu metronomu.

Krok 2: Lista części

Będziesz potrzebować etui. Można kupić dowolny kształt i rozmiar, ale mieliśmy ładną czarną metalową obudowę starego ręcznego przełącznika VGA, który został wyrzucony znajomemu. Pozostałe części są wymienione poniżej.

  • Bateria 9 V, 1,50 USD
  • Kabel do podłączenia akumulatora, 0, 16 USD
  • Arduino Nano z pinami, 2,05 USD
  • Osłona przedłużająca Nano IO, 1, 05 USD
  • Mini przełącznik suwakowy do zasilania, 0,15 USD
  • Brzęczyk piezo, 0, 86 USD
  • Adafruit Neopixel WS2812 8-bitowy, 1 USD, 01
  • Wyświetlacz OLED 128x64, 1, 53
  • Enkoder obrotowy, 0,50 USD
  • Kable Dupont F/F, 0, 49

Całkowita cena komponentów to mniej niż 10 USD, -

Krok 3: Schemat połączeń

Schemat połączeń
Schemat połączeń

Użyj karty rozszerzeń Nano IO, aby nie zawracać sobie głowy lutowaniem wielu połączeń GND i VCC. Wymagane będzie minimalne lutowanie dla nagłówków Nano pin i dla złącz modułu Neopixel. Korzystanie z przewodów Dupont umożliwia stabilne połączenie reszty okablowania, jak pokazano na schemacie. Bateria 9V jest podłączona do GND i VIN, ten ostatni przez suwak zasilania. Moduł enkodera obrotowego ma zintegrowany przycisk przełącznika, który jest pokazany osobno na schemacie, aby ułatwić zrozumienie sposobu ich podłączenia. Część obrotowa (CLK i DT) jest podłączona odpowiednio do PIN2 i PIN3, ponieważ są to jedyne piny NANO zdolne do obsługi przerwań. Obrotowy GND jest oczywiście podłączony do GND PIN Nano. Zintegrowany przycisk przełącznika jest podłączony do PIN4. Brzęczyk piezo jest podłączony do PIN5 i GND. Moduł Adafruit Neopixel jest podłączony do PIN7, a jego VIN i GND do odpowiednio 5V i GND Nano. Mały wyświetlacz OLED jest podłączony do interfejsu magistrali I2C, czyli PIN A4 i A5 dla SDA i SDL. VCC i GND idzie oczywiście do 5V i GND Nano. To kończy nasze okablowanie Dupont.

Krok 4: Kod źródłowy Arduino

Kod źródłowy Arduino
Kod źródłowy Arduino

// Metronom, główny akcent, takt wizualny i dźwiękowy - 2019 Peter Csurgay

#include #include #include #include #include "TimerOne.h" #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 // Reset pin # (lub -1 jeśli udostępniasz pin resetowania Arduino) Wyświetlacz Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN &Przewód, OLED_RESET); #define pin_neopixel 7 #define LICZBA PIKSELI 8 #define JASNOŚĆ 32 Adafruit_NeoPixel piksele = 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 bpmPierwsza = 0; // dioda LED włączona na początku, wyłączona na pozostałym… int tack = 4; bool prowadzącyTack = false; int poz = 0; int curVal = 0; int prevVal = 0; void setup() { piksele.początek(); pinMode(pin_buzzer, WYJŚCIE); 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), rotacyjnyCLK, CHANGE); attachInterrupt(digitalPinToInterrupt(DT), rotacyjnyDT,CHANGE); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Adres 0x3D dla 128x64 for(;;); // Nie kontynuuj, pętla w nieskończoność } display.clearDisplay(); display.display(); } void loop() { if (digitalRead(pin_switch)==LOW) { delay (100); while(digitalRead(pin_switch)==NISKI); opóźnienie (100); Timer1.detachInterrupt(); pokażGreenTacks(); while(digitalRead(pin_switch)==HIGH) { if (curVal>prevVal) { tack+=1; if (hals>8) { if (przód hals) hals = 8; else { WiodącyTack = prawda; przyczepność = 1; } } } else if (curValprevVal) { bpm+=2; jeśli (bpm>240) bpm = 240; } else if (curVal=100) display.print(" "); else display.print(" "); display.print(bpm); display.display(); } void buzztick() { if (bpmFirst==0) { int volume = 4; if (leadingTack && pos==0) objętość = 8; dla (int i=0; i

Zalecana: