Inhoudsopgave:

Arduino metronoom: 4 stappen
Arduino metronoom: 4 stappen

Video: Arduino metronoom: 4 stappen

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

Als je als kind een nieuw muziekinstrument leert, zijn er zoveel nieuwe dingen om je op te concentreren. Het juiste tempo bijhouden is er daar één van. Het niet vinden van een functioneel complete en handige metronoom betekende het beste excuus om weer met mijn kinderen te gaan bouwen. In deze Instructables-post vindt u de functionele beschrijving, onderdelenlijst met webshop-links en prijzen, bedradingsschema voor montage en complete Arduino-broncode.

Stap 1: Functionele beschrijving

Onderdelen lijst
Onderdelen lijst

Het zou leuk zijn om een metronoomapparaat te hebben met de volgende functies om het thuis of op de muziekschool gemakkelijk te gebruiken.

  • Compacte vormfactor om kleine plaatsen bovenop of naast muziekinstrumenten te passen,
  • Werkt op batterijen, robuust en draagbaar om mee te nemen,
  • Eenvoudig in te stellen, zelfs voor kinderen, BPM-waarde altijd weergegeven,
  • Instelbare beats per minuut met een draaiknop, tot 240 BPM
  • Hoorbare tact met volumeregeling,
  • Stille modus om 's nachts met een koptelefoon te oefenen,
  • Visuele feedback van beats (1/4, 2/4, 3/3, 4/4, 6/8, etc.) tot 8 LED's,
  • Met of zonder hoofdaccent, met visuele en hoorbare feedback.

Als de metronoom wordt ingeschakeld, begint de metronoommodus bij 60 BPM, weergegeven op het kleine display en kan het tempo worden afgesteld met de draaiknop tussen 10 en 240. Neopixels tonen de beat in blauwe LED's terwijl de zoemer tikt. Door op de knop te drukken, wordt overgeschakeld naar de beat-aanpassingsmodus en groene LED's geven de ingestelde beat-structuur aan. Draaiknop verhoogt of verlaagt de beatstructuur (2/2, 3/3, 4/4, 6/8, enz.). Boven 8 LED's, verder met de klok mee draaiend, wordt het leidende accent ingeschakeld, en de eerste LED geeft dit in rood aan. Hoofdaccent krijgt ook hoorbare feedback. Het kan worden uitgeschakeld door tegen de klok in te draaien. Door op de knop te drukken, wordt teruggeschakeld van de beat-aanpassingsmodus naar de metronoommodus.

Stap 2: Onderdelenlijst

Je hebt een zaak nodig. Elke vorm of maat kan worden gekocht, maar we hebben een mooie zwarte metalen behuizing van een oude handmatige VGA-schakelaar weggegooid door een vriend. De overige onderdelen staan hieronder vermeld.

  • 9V-batterij, USD 1,50
  • Batterij connector kabel, USD 0, 16
  • Arduino Nano met pin-headers, USD 2,05
  • Nano IO-uitbreidingsschild, USD 1, 05
  • Mini schuifschakelaar voor stroom, USD 0,15
  • Piëzo-zoemer, $ 0, 86
  • Adafruit Neopixel WS2812 8-bit, USD 1, 01
  • OLED-scherm 128x64, USD 1, 53
  • Roterende encoder, USD 0, 50
  • Dupont kabels F/F, USD 0, 49

Totale prijs van de componenten is minder dan USD 10,-

Stap 3: Bedradingsschema

Schakelschema
Schakelschema

Gebruik het Nano IO-uitbreidingsbord om niet lastig te vallen met het solderen van meerdere GND- en VCC-verbindingen. Er is minimaal solderen nodig voor de Nano-pin-headers en voor de Neopixel-moduleconnectoren. Het gebruik van Dupont-draden zorgt voor stabiele verbindingen voor de rest van de bedrading, zoals weergegeven in het diagram. De 9V-batterij is verbonden met GND en VIN, de laatste via de stroomschuifschakelaar. De roterende encodermodule heeft een geïntegreerde schakelknop, die afzonderlijk in het diagram wordt weergegeven voor een beter begrip van hoe ze moeten worden aangesloten. Het roterende deel (CLK en DT) is verbonden met respectievelijk PIN2 en PIN3, omdat dit de enige NANO-pinnen zijn die kunnen worden onderbroken. Rotary GND is natuurlijk verbonden met Nano's GND PIN. De geïntegreerde schakelknop is verbonden met PIN4. Piëzo-zoemer is verbonden met PIN5 en GND. Adafruit Neopixel-module is verbonden met PIN7 en zijn VIN en GND met respectievelijk Nano's 5V en GND. Klein OLED-display is aangesloten op de I2C-businterface, dat is PIN A4 en A5 voor SDA en SDL. VCC en GND gaan natuurlijk naar Nano's 5V en GND. Dat concludeert onze Dupont-bedrading.

Stap 4: Arduino-broncode

Arduino-broncode
Arduino-broncode

// Metronoom, toonaangevend accent, visuele en hoorbare tactiek - 2019 Peter Csuray

#include #include #include #include #include "TimerOne.h" #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 // Reset pin # (of -1 als Arduino reset pin wordt gedeeld) Adafruit_SSD1306 display (SCREEN_WIDTH, SCREEN_HEIGHT, &Draad, OLED_RESET); #define pin_neopixel 7 #define NUMPIXELS 8 #define HELDERHEID 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 bpmEerste = 0; // LED eerst aan, de rest uit … int tack = 4; bool leadingTack = false; int pos = 0; int curVal = 0; int prevVal = 0; void setup() { pixels.begin(); pinMode (pin_buzzer, UITGANG); 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 voor 128x64 voor (;;); // Ga niet verder, loop voor altijd } display.clearDisplay(); weergave.weergave(); } void loop() {if (digitalRead(pin_switch)==LOW) {vertraging(100); while(digitalRead(pin_switch)==LAAG); vertraging (100); Timer1.detachInterrupt(); toonGreenTacks(); while(digitalRead(pin_switch)==HIGH) {if (curVal>prevVal) { tack+=1; if (tack>8) { if (leadingTack) tack = 8; anders { leadingTack = waar; tack = 1; } } } else if (curValprevVal) { bpm+=2; als (bpm>240) bpm = 240; } else if (curVal=100) display.print(" "); anders display.print(" "); display.print(bpm); weergave.weergave(); } void buzztick() { if (bpmFirst==0) { int volume = 4; if (leadingTack && pos==0) volume = 8; voor (int i=0; i

Aanbevolen: