Inhaltsverzeichnis:

Arduino Metronom - Gunook
Arduino Metronom - Gunook

Video: Arduino Metronom - Gunook

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

Wenn man als Kind ein neues Musikinstrument lernt, gibt es so viele neue Dinge, auf die man sich konzentrieren sollte. Das Tempo im richtigen Tempo zu halten ist eine davon. Kein funktional vollständiges und praktisches Metronom zu finden, war die beste Ausrede, um mit meinen Kindern wieder zu bauen. In diesem Instructables-Beitrag finden Sie die Funktionsbeschreibung, die Teileliste mit Webshop-Links und Preisen, den Schaltplan für die Montage und den vollständigen Arduino-Quellcode.

Schritt 1: Funktionsbeschreibung

Liste der Einzelteile
Liste der Einzelteile

Es wäre schön, ein Metronomgerät mit den folgenden Funktionen zu haben, um es bequem zu Hause oder in der Musikschule verwenden zu können.

  • Kompakter Formfaktor für kleine Plätze auf oder neben Musikinstrumenten,
  • Batteriebetrieben, robust und tragbar zum Mitnehmen,
  • Einfache Einrichtung auch für Kinder, BPM-Wert wird immer angezeigt,
  • Einstellbare Beats pro Minute mit einem Drehknopf, bis zu 240 BPM
  • Hörbarer Takt mit Lautstärkeregler,
  • Silent-Modus für Kopfhörer-Übungen über Nacht,
  • Visuelles Feedback von Beats (1/4, 2/4, 3/3, 4/4, 6/8, etc.) bis zu 8 LEDs,
  • Mit oder ohne führendem Akzent, mit optischem und akustischem Feedback.

Beim Einschalten startet der Metronom-Modus bei 60 BPM, die auf dem kleinen Display angezeigt wird und das Tempo mit dem Drehknopf zwischen 10 und 240 eingestellt werden kann. Neopixel zeigen den Beat in blauen LEDs an, während der Summer tickt. Durch Drücken des Knopfes wird in den Beat-Einstellmodus gewechselt und grüne LEDs zeigen die eingestellte Beat-Struktur an. Der Drehknopf erhöht oder verringert die Beat-Struktur (2/2, 3/3, 4/4, 6/8 usw.). Über 8 LEDs, die sich weiter im Uhrzeigersinn drehen, wird der führende Akzent eingeschaltet, und die erste LED zeigt dies in Rot an. Der führende Akzent hat auch ein hörbares Feedback. Sie kann durch Drehen gegen den Uhrzeigersinn ausgeschaltet werden. Durch Drücken des Knopfes wird vom Beat-Einstellmodus in den Metronom-Modus zurückgeschaltet.

Schritt 2: Teileliste

Sie brauchen einen Koffer. Jede Form und Größe kann gekauft werden, aber wir hatten ein schönes schwarzes Metallgehäuse eines alten manuellen VGA-Schalters, der von einem Freund entsorgt wurde. Die restlichen Teile sind unten aufgeführt.

  • 9V Batterie, USD 1,50
  • Batterieanschlusskabel, USD 0, 16
  • Arduino Nano mit Stiftleisten, USD 2,05
  • Nano IO-Erweiterungsschild, USD 1, 05
  • Mini-Schiebeschalter für Strom, USD 0,15
  • Piezo-Summer, USD 0, 86
  • Adafruit Neopixel WS2812 8-Bit, USD 1, 01
  • OLED-Display 128x64, USD 1, 53
  • Drehgeber, USD 0, 50
  • Dupont-Kabel F/F, USD 0, 49

Der Gesamtpreis der Komponenten beträgt weniger als USD 10,-

Schritt 3: Schaltplan

Schaltplan
Schaltplan

Verwenden Sie das Nano IO Extension Board, um sich nicht mit dem Löten mehrerer GND- und VCC-Anschlüsse zu beschäftigen. Für die Nano-Stiftleisten und für die Neopixel-Modulanschlüsse sind nur minimale Lötarbeiten erforderlich. Die Verwendung von Dupont-Kabeln ermöglicht stabile Verbindungen für den Rest der Verkabelung, wie im Diagramm gezeigt. Die 9V-Batterie wird an GND und VIN angeschlossen, letztere über den Power-Schiebeschalter. Das Drehgebermodul verfügt über einen integrierten Schalttaster, der zum besseren Verständnis des Anschlusses separat in der Abbildung dargestellt ist. Der Drehteil (CLK und DT) ist mit PIN2 bzw. PIN3 verbunden, da dies die einzigen NANO-Pins sind, die Interrupt-Handhabung ermöglichen. Rotary GND ist natürlich mit Nanos GND PIN verbunden. Der integrierte Schalttaster ist mit PIN4 verbunden. Piezo-Summer ist mit PIN5 und GND verbunden. Das Adafruit Neopixel-Modul ist an PIN7 und seine VIN und GND an Nanos 5V bzw. GND angeschlossen. Das kleine OLED-Display wird an die I2C-Bus-Schnittstelle angeschlossen, die PIN A4 und A5 für SDA und SDL ist. VCC und GND gehen natürlich zu Nanos 5V und GND. Damit ist unsere Dupont-Verkabelung abgeschlossen.

Schritt 4: Arduino-Quellcode

Arduino-Quellcode
Arduino-Quellcode

// Metronom, führender Akzent, visueller und hörbarer Takt - 2019 Peter Csurgay

#include #include #include #include #include "TimerOne.h" #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 // Reset Pin # (oder -1 wenn Arduino Reset Pin geteilt) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Draht, OLED_RESET); #define pin_neopixel 7 #define NUMPIXELS 8 #define HELLIGKEIT 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 #define DT 3 #define pin_switch 4 #define pin_buzzer 5 int bpm = 60; int bpmFirst = 0; // LED zuerst an, ansonsten aus… int tack = 4; bool führenderTack = false; intpos = 0; int curVal = 0; int prevVal = 0; Void setup () {pixel.begin (); pinMode (pin_buzzer, AUSGANG); 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)) { // Adresse 0x3D für 128x64 for(;;); // Nicht fortfahren, Endlosschleife } display.clearDisplay(); display.display(); aufrechtzuerhalten. Void Schleife () { if (digitalRead (pin_switch) = = LOW) { Verzögerung (100); while(digitalRead(pin_switch)==LOW); Verzögerung (100); Timer1.detachInterrupt(); showGreenTacks(); while(digitalRead(pin_switch)==HIGH) { if (curVal>prevVal) {tack+=1; if (tack>8) { if (leadingTack) tack = 8; else { führenderTack = wahr; Klebrigkeit = 1; } } } sonst if (curValprevVal) { bpm + = 2; wenn (bpm > 240) bpm = 240; } else if (curVal=100) display.print(" "); sonst display.print(" "); display.print (bpm); display.display(); aufrechtzuerhalten. Void Buzztick () { if (bpmFirst = = 0) { Int Volume = 4; if (leadingTack && pos==0) volume = 8; für (int i=0; i

Empfohlen: