Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Minimales MIDI-Drum-Kit mit 3D-Drucker

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
Adafruit Standard LCD - 16x2 Weiß auf Blau
× 1
SparkFun Piezo
× 1
Adafruit Force Sensitive Resistor (FSR)
× 1
Widerstand 10k Ohm
× 1
Widerstand 1 M Ohm
× 1
SparkFun Zenerdiode - 5,1 V 1 W
× 1
SparkFun Drucktastenschalter 12 mm
× 1
Schiebeschalter
× 1
TRS-Sockel
× 1
USB-A-zu-B-Kabel
× 1
Apple Lightning-auf-USB-Kamera-Adapter
× 1

Notwendige Werkzeuge und Maschinen

3D-Drucker (generisch)
Laserschneider (generisch)
nicht erforderlich, extra
Lötkolben (generisch)
Kreisschneider

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

Hallo.

Dies ist ein minimales Schlagzeug mit Arduino UNO.

Bitte überprüfen Sie zunächst diese Anleitungsseite.

https://blog.arduino.cc/2017/01/19/a-3d-printed-e-drum-pad/

Seit ich damit angefangen habe, war ich von Piezo und elektronischen Drums gefesselt.

Ich war fasziniert von einem sehr einfachen Mechanismus elektronischer Drums und der großartigen Erfindung namens MIDI.

Mit anderen Worten, ich konnte mich nicht damit zufrieden geben, nur Pads herzustellen.

Dieses Schlagzeug ist grob in zwei Produktionen unterteilt.

1.Pad mit einem 3D-Drucker und dickem Papier.

2.Trigger Midi-Konverter mit Arduino UNO .

Das vom Pad von „1“ gesendete Signal wird von Arduino von „2“ verarbeitet und in ein MIDI-Signal umgewandelt. Und das MIDI-Signal wird von Arduino an iPhone, Laptop usw. übertragen und der Ton wird ausgegeben.

Sie müssen keine andere Stromversorgung als ein Smartphone oder einen PC vorbereiten.

Was Sie brauchen

Tools

・3D-Drucker

・Laserschneider (Extra)

・Inbusschlüssel

・Cuttermesser

・Kreisschneider

・Lötkolben

Rohrschneider

・Schraubendreher

・Bohrer 9mm / 10mm

Material

・1mm dickes Papier

・PLA-Filament

・Schwammschaumplatten 5mm / 10mm

・MDF 2,5 mm / 5,5 mm (Extra)

・M6 - 70mm Schraube und Muttern

・M6 - 50mm Schraube und Muttern

・M3 - 10mm Schraube und Muttern

・M3 - 15mm Schraube und Muttern

・M3 - 25mm Schraube und Muttern

・M2 Schraube

・13 mm Durchmesser Edelstahlrohr

Drum-Hardware

・Mesh-Kopf 10 Zoll / 8 Zoll

・Snare-Ständer (Alles ist in Ordnung. Ich verwende YAMAHA SS662.)

・Hi-Hat-Ständer (Alles ist in Ordnung. Ich verwende YAMAHA HS650A)

・Kick-Pedal (Alles ist in Ordnung. Ich verwende YAMAHA FP7210A)

・Drum-Stick

Schritt 1:3D-Druck

Alle Daten befinden sich auf Thingiverse und GitHub.

Bitte verwenden Sie Ver.2 für die Felge.

Ich habe Teile mit 20% Füllung gedruckt. Die Dicke der Schicht beträgt 0,3 mm.

Sie können auch einen Laserschneider zum Herstellen von Pads verwenden.

https://github.com/RyoKosaka/drums/tree/master/vector

Schritt 2:Zusammenbau

Verwenden Sie M3-10mm Schrauben und Muttern, um die Teile miteinander zu verbinden.

Verwenden Sie die Schrauben M3-15 mm oder M3-25 mm für das Mittelteil, um das Unterteil aneinander zu befestigen.

Schritt 3:Shell erstellen

Erstens beträgt die Höhe der Schale 55 mm.

Bitte machen Sie drei Bänder mit einer Breite von 55 mm.

Die Länge ist etwas länger als die Länge, die das Pad bedeckt.

Da unten eine Lücke ist, versuchen Sie, ein Band in diese Lücke einzufügen.

Schneiden Sie das Band so zu, dass es die perfekte Kreislänge hat.

Wiederholen Sie dies 3 Mal und überlagern Sie es mit Klebstoff.

Wenn die Schale getrocknet ist, bohren Sie mit fixiertem Netzkopf ein Loch von 9 mm Durchmesser für die Fassung.

Sie können Flügelmuttern verwenden, aber ich habe auch Stimmschlüssel hergestellt, die sogar mit gewöhnlichen Muttern festgezogen werden können, also verwenden Sie sie bitte auf jeden Fall.

Verwenden Sie zur Befestigung des Gitterkopfes M6-70 mm Schrauben.

Sobald Sie ein Loch gemacht haben, entfernen Sie den Netzkopf wieder, um einen Piezo zu setzen

Schritt 4:Anbringen des Piezo

SNARE

Im Falle einer Snare verwenden Sie zwei Piezos wie im Bild gezeigt.

Schließen Sie das rote Kabel des Piezos an Spitze und Ring an.

Beide schwarzen Kabel werden mit der Hülse verbunden.

Vergessen Sie beim Löten nicht, die Kabel durch die Löcher in der Sensorplatte zu führen.

Piezo für den Kopf (Piezo mit Spitze verbunden) muss wie im Bild gezeigt mit 10 mm dickem Schwammschaum eingeklemmt werden.

Einer unten, drei oben. Und mache die oberen 3 Kegel wie auf dem Bild.

Dann auf die Sensorplatte legen.

KICK

Da das Kickpad nur einen Piezo verwendet, kann nur die Spitze verwendet werden.

Es wird keine Sensorplatte benötigt.Zwei Schwammschäume unter dem Piezo

Platzieren Sie den Sensor versetzt von der Mitte.

Dies liegt daran, dass Arduino die Stärke des Treffers nicht beurteilen kann, wenn der Schläger den Sensor direkt trifft.

HI-HAT

Die Schaltung ist die gleiche wie beim Kickpad.

Legen Sie ein Stück 10 mm dicken Schwammschaum unter den Piezo.

Piezo ist empfindlich. Passen Sie auf, dass Sie sich nicht verbiegen oder verletzen.

Schritt 5:10-Zoll-Snare-Pad

Bringen Sie zuerst den Sensor für die Felge an.

Befestigen Sie die Sensorplatte. Repariere es fest. Machen Sie das Ende des Konus von der Seite gesehen 2-3 mm sichtbar.

Das gleiche Verfahren wird natürlich auch angewendet, wenn ein 8-Zoll-Pad als Snare verwendet wird.

Schritt 6:8 Zoll Kick PAD

Schneiden Sie zuerst ein Edelstahlrohr mit einem Durchmesser von 13 mm.

Machen Sie zwei 200 mm und zwei 365 mm.

Da die Länge angepasst werden kann, ist es auch bei einem Fehler in der Länge in Ordnung.

Montieren Sie sie anhand von Bildern.

Um das Rohr zu fixieren, ist es so konstruiert, dass die M3-Mutter in das Teil eingelegt werden kann.

Befestigen Sie das Rohr sicher. Verwenden Sie M3-15 mm Schrauben und Muttern.

Schritt 7:12-Zoll-Hi-Hat

Nachdem ich die Muschel mit dickem Papier hergestellt hatte, dachte ich, dass ich mit dickem Papier Becken herstellen kann.

Zuerst. Schneiden Sie aus dickem Papier einen Kreis mit einem Durchmesser von 300 mm. Machen Sie drei daraus.

Machen Sie als Nächstes eine Kerbe von der Mitte aus.

Schließlich wird eine zweite Kerbe von der Spitze aus 10 mm parallel zur ersten Kerbe angebracht.

Auf diese Weise werden drei Pac-Mans mit kleinem geöffnetem Mund hergestellt.

Schließen Sie dann den Mund des Pac Man vorsichtig mit Klebeband, um ihn in eine Beckenform zu bringen.

Kleber auftragen und übereinander legen. Kleber sauber und dünn verstreichen nicht vergessen

Halten Sie es mit Ihren Händen fest, legen Sie das Gewicht dann herum und trocknen Sie es ab.

Zur Schalldämpfung einen 5 mm dicken Schwamm auflegen und ein Loch bohren. Sie können das Loch nicht sauber öffnen, aber Sie können das Loch verstecken, damit es in Ordnung ist.

Komplett durch Anbringen von Sensorhalterung und Kabelführung mit doppelseitigem Klebeband. Es könnte einfacher sein, wenn Sie eine Klebepistole verwenden.

Schritt 8:Hi-Hat-Controller

Hi-Hat Controller sendet das Öffnen und Schließen der Hi-Hat an Arduino.

Die Schaltung ist sehr einfach.

Es wird durch die Kombination von drei Teilen hergestellt.

Befestigen Sie den FSR am Unterteil und befestigen Sie die Buchse. FSR kann auch verwendet werden, wenn ein Loch geöffnet ist.

Befestigen Sie einen 10 mm Schwamm wie ein Foto am FSR.

Befestigen Sie die Abdeckung mit M3 - 10 mm Schrauben.

Auch wenn es nur HIGH und LOW ist, fragen Sie sich vielleicht, warum ich FSR verwendet habe.

Ich verwende FSR, um Soundmodulen wie Roland und Yamaha zu entsprechen.

Und in der Klangquelle exklusiv für Schlagzeug wie EZ DRUMMER 2 gibt es mehrere Stufen im Öffnungsgrad der Hi-Hat.

Wenn es sich um FSR handelt, kann möglicherweise nur durch Ändern des Codes reagiert werden. Ich habe es jedoch nicht ausprobiert.

Schritt 9:USB - MIDI

Was können wir in diesem Schritt tun?

Mit einem USB-Kabel allein können Sie Midi-Signale von Arduino senden.

Mit anderen Worten, arduino wird vom iPhone usw. ohne zusätzliche Hardware als Midi-Gerät erkannt.

Überprüfen Sie zunächst diese Seite.

http://morecatlab.akiba.coocan.jp/lab/index.php/aruino/midi-firmware-for-arduino-uno-moco/

https://github.com/kuwatay/mocolufa

Wenn Sie normales Arduino UNO direkt mit dem iPhone verbinden, erhalten Sie eine Fehlermeldung wie "Arduino UNO ist nicht kompatibel".

Sie müssen also den in Arduino UNO verwendeten USB-Chip (ATmega16U2) neu schreiben.

https://www.arduino.cc/en/Hacking/DFUProgramming8U2

Diese Anweisung beschreibt, wie die Hex-Datei neu geschrieben wird.

Bitte verfahren Sie gemäß dieser Seite bis zur Beschreibung unten.

sudo dfu-programmer atmega16u2 flash Arduino-usbserial-uno.hex

Ersetzen Sie einfach "Arduino-usbserial-uno.hex" durch "dualMoco.hex".

Daher

sudo dfu-programmer atmega16u2 flash dualMoco.hex

Nach dem Umschreiben wird Ihr Arduino als MIDI-Gerät erkannt.

Wenn Sie den Pin wie im Bild gezeigt kurzschließen, wird er als normaler Arduino erkannt.

Wenn nicht (wenn nicht kurzgeschlossen), wird arduino UNO als MIDI-Gerät erkannt.

Mit anderen Worten, wenn Sie Code mit der Arduino-IDE schreiben, müssen Sie die Pins wie im Bild gezeigt kurzschließen.

Schritt 10:Trigger-zu-MIDI-Konverter

Es gibt Arduino UNO und Schild in der Box.

Beziehen Sie sich auf das Bild von Fritzing für die Schaltung des Schildes.

Dioden dienen dem Schutz, aber ich habe die Information gesehen, dass Arduino UNO eine Schutzschaltung hat, Dioden sind möglicherweise nicht erforderlich. Weiß jemand davon?

Nachdem Sie zuerst das Modell des Gehäuses und des Covers gedruckt haben, ist es gut, das Schild danach zu machen.

Es gibt auch ein 3D-Modell des Covers, aber ich habe ein Cover mit einem Laserschneider gemacht. Bitte wählen Sie, was Ihnen gefällt.

Schritt 11:Mit GarageBand spielen

Einfach Garageband starten und verbinden. Es gibt keine besonders schwierige Einstellung.

Es gibt eine Reihe von DAWs für PCs, die mit diesem Schlagzeug verwendet werden können, einschließlich GarageBand.

Unter anderem ist Wasserstoff kostenlos und Sie können Ton hinzufügen.

Schritt 12:Einstellung

Bei der Erstellung des Codes war es mühsam, den Code jedes Mal neu zu schreiben, wenn sich der Wert änderte, daher wollte ich den Wert nur mit Arduino ändern können.

Mit anderen Worten, dies ist zum Debuggen von Code gedacht, daher gibt es Elemente, die nicht geändert werden müssen.

Trotzdem ist je nach Größe des Piezos, der Größe des Pads, der Härte des Schwammschaums eine Einstellung notwendig.

Wählen Sie ein Instrument mit der INC / DEC-Taste und wählen Sie das Einstellungselement mit der NEXT / BACK-Taste. Wenn die EDIT-Taste gedrückt wird, während die einzustellenden Instrumente und Elemente angezeigt werden, können Sie den Wert mit der INC / DEC-Taste ändern. Durch erneutes Drücken der EDIT-Taste wird die Änderung bestätigt.

Wenn Sie sich den letzten Teil des Videos ansehen, werden Sie die Bedienung verstehen.

SCHWELLE

Der niedrigste Wert, bei dem ein Ton ausgegeben wird

EMPFINDLICHKEIT

Sensorempfindlichkeit. Wenn Sie ihn senken, erhalten Sie eine hohe Geschwindigkeit, selbst wenn Sie sanft schlagen.

HINWEIS

Nummer der Notiz. Durch Wechseln können Sie Instrumente wechseln. Bitte beachten Sie das Bild.

FLAGGE

Ein Wert, um zu beurteilen, dass das Schlagen vorbei ist. Sie müssen es nicht zu sehr ändern. Es wäre schön, den Wert von 1 bis 10 einzustellen. Wenn Sie den Wert zu stark erhöhen, erhalten Sie mit einem einzigen Schlag zweimal einen Ton. Wenn Sie ihn zu weit absenken, kann es sein, dass Sie bei wiederholtem Schlag keinen Ton mehr hören.

SCANZEIT

Bei der Suche nach Peaks werden nach Überschreiten des Schwellenwerts für mehrere Millisekunden nacheinander Werte erfasst. Der höchste Wert unter ihnen wird seinen Höhepunkt erreichen. Diese mehreren Millisekunden sind SCANTIME. Es besteht keine Notwendigkeit, es zu ändern.

KOPF / FELGE

Stellen Sie die Leichtigkeit der Felge ein. Wenn Sie es anheben, ist es schwierig zu klingen. Wenn Sie ihn zu stark absenken, ertönt der Rand, wenn Sie das Fell treffen. Bei der Beurteilung des Kopfes und der Felge kann es erforderlich sein, den Code zu verbessern

PEDAL VELO

Im Gegensatz zu anderen Pads ist die Velocity des Pedals konstant. Der Anfangswert ist 100. Bitte ändern Sie Ihren Lieblingswert.

MASKENZEIT

Dies ist ein Wert, der sich auf FLAG bezieht. Es besteht keine Notwendigkeit, es zu ändern. Wenn Sie ihn anheben, hören Sie möglicherweise keinen Ton, wenn Sie kontinuierlich schlagen.

Schritt 13:Fusion 360

Einige Teile sind möglicherweise nicht verwendbar, es sei denn, ihre Abmessungen werden geändert. Es ist schwierig, STL-Daten zu bearbeiten. Also habe ich Fusion 360-Daten hochgeladen. Da ich jedoch Daten während des Versuchs und Irrtums bearbeite, ist es besser, sich nicht zu sehr auf die Verlaufsfunktion zu verlassen.

https://github.com/RyoKosaka/drums/tree/master/Fusion360

ZUSÄTZLICH

Zusätzliche Schritte sind auf instructables.

https://www.instructables.com/id/Arduino-Minimal-Drum-Kit/

Der detaillierte Produktionsprozess wird auf diesem Blog veröffentlicht.

Überprüfen Sie es, wenn Sie interessiert sind.

Bitte zögern Sie nicht, alles zu fragen.

Viel Spaß!

Code

  • Hallo Drum v2
Hallo Drum v2Arduino
Geändert:05.12.2019 von George Brotherston
/* Drum MIDI Controller Erstellt:28.06.2017 von Ryo Kosaka als " HELLO DRUM " Ver.1.0 Geändert:05.12.2019 von George Brotherston*/// Bibliothek enthält // #include  // Arduino-Bibliothek (automatisch enthalten) // LOW (Zeile 41) // HIGH (Zeile 40) // INPUT_PULLUP (Zeile 47) // digitalRead() (Zeile 177) / / analogRead() (Line 178) #include  // MIDI Library - Version:4.3.1 // enthält  // class MIDI (Line 30) // class method 'begin' (Line 55) #include  // LiquidCrystal - Version:1.0.7 // lcd-Objekt instanziiert (im Abschnitt Variablen unten) aus der LiquidCrystal-Klasse (Zeile 45) // Variablen - Deklarieren und Initialisieren // Variablen - Boolesches bSnareFlag programmieren =falsch; boolescher Wert bHihatFlag =false; boolean bKickFlag =false; boolesches bPedalFlag =false; boolean bButtonState =true; boolean bButtonState_set =true; int iUPDOWN =0; int iNEXTBACK =0; // Arrays - Programm // InstrumentSensor[6] ={threshold, Sensitivity, Note, Flag, Velocity, iPeakValue} // 'iPeakValue' und 'velocity' müssen für alle InstrumentSensor-Arrays null sein // Alle 'aHIHAT[]' and 'aHIHAT_CLOSE[]' Array-Elemente sollten den gleichen Wert haben, mit Ausnahme des 'note'-Elements. int aSNARE[6] ={150, 950, 38, 3, 0, 0}; int aSNARE_RIM[6] ={5, 500, 37, 3, 0, 0}; int aHIHAT[6] ={100, 800, 46, 1, 0, 0}; int aHIHAT_CLOSE[6] ={100, 800, 42, 1, 0, 0}; int aKICK[6] ={200, 700, 36, 1, 0, 0}; // Instrument_ContinuousController[4] ={scantime, snare/rim, pedalVelocity , masktime} int aHIHAT_PEDAL[4] ={600, 0, 44, 0}; // InstrumentSensor_ParameterValue[4] ={Threshold, Sensitivity, Note, Flag} int aSETTING[4] ={4, 500 ,100 ,1}; // Bibliotheken // LiquidCrystal.h // Konstanten (bereits in Bibliothek definiert, noch im Gültigkeitsbereich? Wenn nicht, dann unten definieren) // const int rs =12, en =11, d4 =5, d5 =4, d6 =3 , d7 =2; // lcd-Objekt instanziiert von der LiquidCrystal-Klasse (LiquidCrystal.h Zeile 45) LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // LCD-Schnittstellenpins der zugehörigen Arduino-Pinnummer zuordnen // MIDI.h // Initialisieren der Bibliothek MIDI_CREATE_DEFAULT_INSTANCE (); // Programmcode // Programmausführung - Initial (Programmeinrichtung) void setup () { MIDI.begin (10); // beginnen (MIDI.h Zeile 55) lcd.begin(16, 2); // beginnen (LiquidCrystal.h Zeile 62) lcd.print("INITIALIZING..."); // drucken (LiquidCrystal.h Zeile 45) lcd.setCursor(0, 1); // setCursor (LiquidCrystal.h Line 82) lcd.print ("DRUM MIDI CONTROLLER"); pinMode(6, INPUT_PULLUP); // PinMode (Arduino.h Zeile 175); INPUT_PULLUP (Arduino.h Zeile 47) pinMode (7, INPUT_PULLUP); pinMode(8, INPUT_PULLUP); pinMode(9, INPUT_PULLUP); pinMode(10, INPUT_PULLUP); } // Programmausführung - Steadystate (kontinuierliche Schleife, bis die Stromversorgung unterbrochen wird) Void loop () { // Drum-MIDI-Controller-Schaltung // Deklarieren und Initialisieren von Variablen int iButton_set =digitalRead (6); // Schaltfläche setzen // digitalRead () (Arduino.h Zeile 177) int iButton_up =digitalRead (7); // Aufwärts-Taste int iButton_down =digitalRead(8); // Abwärtstaste int iButton_next =digitalRead (9); // Nächster Button int iButton_back =digitalRead(10); // Zurück-Taste int iPiezoValue_A0 =analogRead (A0); // Piezo - Snare Head // analogRead () (Arduino.h Line 178) int iPiezoValue_A1 =analogRead (A1); // Piezo - Snare Rim int iPiezoValue_A2 =analogRead (A2); // Hi-Hat int iPiezoValue_A3 =analogRead (A3); // Kickdrum int iFSRValue_A4 =analogRead (A4); // Hi-Hat-Pedal // Bearbeitungsmodus int aUP[4] ={5, 50, 1,1}; // {Threshold, Sensitivity, Note, Flag} int aUP_ADVANCE[4] ={1, 50, 1,1}; // {Scantime, Rim/Head, Pedal Velocity, Masktime} // Hinweis:aINSTRUMENT[] Array wurde nicht in 'Arrays' über char* deklariert aINSTRUMENT[] ={ "SNARE HEAD", "SNARE RIM", "HIHAT OPEN ", "HIHAT SCHLIESSEN", "HIHAT-PEDAL", "KICK", "ERWEITERTE EINSTELLUNG" }; // Hinweis:aSETTING[] Array WURDE in 'Arrays' oben deklariert char* aSETTING[] ={ "THRESHOLD", "SENSITIVITY", "NOTE", "FLAG" }; // Hinweis:aSETTING_ADVANCE[] wurde nicht in 'Arrays' oben deklariert char* aSETTING_ADVANCE[] ={ "SCAN TIME", "HEAD / RIM ","PEDAL VELO", "MASK TIME" }; if (iUPDOWN <0) { iUPDOWN =6; aufrechtzuerhalten. Wenn (iUPDOWN> 6) {iUPDOWN =0; } if (iNEXTBACK <0) { iNEXTBACK =3; } if (iNEXTBACK> 3) { iNEXTBACK =0; } // Drucktaste EDIT // LOW (Arduino.h Zeile 41) if (iButton_set ==LOW &&bButtonState ==true &&bButtonState_set ==true) { lcd.clear(); lcd.print("BEARBEITEN"); bButtonState =false; bButtonState_set =false; Verzögerung (500); } if (iButton_set ==LOW &&bButtonState ==true &&bButtonState_set ==false) {lcd.clear(); lcd.print("EDIT FERTIG"); bButtonState =false; bButtonState_set =true; Verzögerung (500); } if (iButton_up ==LOW &&bButtonState ==true &&bButtonState_set ==false) { switch (iUPDOWN) { case 0:aSNARE[iNEXTBACK] =aSNARE[iNEXTBACK] + aUP[iNEXTBACK]; brechen; Fall 1:aSNARE_RIM[iNEXTBACK] =aSNARE_RIM[iNEXTBACK] + aUP[iNEXTBACK]; brechen; Fall 2:Schalter (iNEXTBACK) { Fall 2:aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] + aUP[iNEXTBACK]; brechen; Standard:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] + aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] + aUP[iNEXTBACK]; } brechen; Fall 3:Schalter (iNEXTBACK) { Fall 2:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] + aUP[iNEXTBACK]; brechen; Standard:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] + aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] + aUP[iNEXTBACK]; } brechen; Fall 4:Schalter (iNEXTBACK) { Fall 0:aHIHAT_PEDAL[iNEXTBACK] =aHIHAT_PEDAL[iNEXTBACK] + aUP[iNEXTBACK]; brechen; Fall 2:aHIHAT_PEDAL[iNEXTBACK] =aHIHAT_PEDAL[iNEXTBACK] + aUP[iNEXTBACK]; brechen; } brechen; Fall 5:aKICK[iNEXTBACK] =aKICK[iNEXTBACK] + aUP[iNEXTBACK]; brechen; Fall 6:aSETTING[iNEXTBACK] =aSETTING[iNEXTBACK] + aUP_ADVANCE[iNEXTBACK]; brechen; } bButtonState =false; Verzögerung (30); } if (iButton_down ==LOW &&bButtonState ==true &&bButtonState_set ==false) { switch (iUPDOWN) { case 0:aSNARE[iNEXTBACK] =aSNARE[iNEXTBACK] - aUP[iNEXTBACK]; brechen; Fall 1:aSNARE_RIM[iNEXTBACK] =aSNARE_RIM[iNEXTBACK] – aUP[iNEXTBACK]; brechen; Fall 2:Schalter (iNEXTBACK) { Fall 2:aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] - aUP[iNEXTBACK]; brechen; Standard:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] - aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] - aUP[iNEXTBACK]; } brechen; case 3:switch (iNEXTBACK) { case 2:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] - aUP[iNEXTBACK]; brechen; default:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] - aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] - aUP[iNEXTBACK]; } brechen; case 4:switch (iNEXTBACK) { case 0:aHIHAT_PEDAL[iNEXTBACK] =aHIHAT_PEDAL[iNEXTBACK] - aUP[iNEXTBACK]; brechen; case 2:aHIHAT_PEDAL[iNEXTBACK] =aHIHAT_PEDAL[iNEXTBACK] - aUP[iNEXTBACK]; brechen; } brechen; case 5:aKICK[iNEXTBACK] =aKICK[iNEXTBACK] - aUP[iNEXTBACK]; brechen; case 6:aSETTING[iNEXTBACK] =aSETTING[iNEXTBACK] - aUP_ADVANCE[iNEXTBACK]; brechen; } bButtonState =false; delay(30); } // Pushbuttons UP; DOWN; NEXT; BACK if (iButton_up ==LOW &&bButtonState ==true &&bButtonState_set ==true) { iUPDOWN =++iUPDOWN; bButtonState =false; delay(30); } if (iButton_down ==LOW &&bButtonState ==true &&bButtonState_set ==true) { iUPDOWN =--iUPDOWN; bButtonState =false; delay(30); } if (iButton_next ==LOW &&bButtonState ==true &&bButtonState_set ==true) { iNEXTBACK =++iNEXTBACK; bButtonState =false; delay(30); } if (iButton_back ==LOW &&bButtonState ==true &&bButtonState_set ==true) { iNEXTBACK =--iNEXTBACK; bButtonState =false; delay(30); } if (bButtonState ==false &&iButton_up ==HIGH &&iButton_down ==HIGH &&iButton_next ==HIGH &&iButton_back ==HIGH &&iButton_set ==HIGH) { // HIGH is defined in Arduino.h Line 40 switch (iUPDOWN) { case 0:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aSNARE[iNEXTBACK]); brechen; case 1:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aSNARE_RIM[iNEXTBACK]); brechen; case 2:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aHIHAT[iNEXTBACK]); brechen; case 3:lcd.clear();lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aHIHAT_CLOSE[iNEXTBACK]); brechen; case 4:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aHIHAT_PEDAL[iNEXTBACK]); brechen; case 5:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aKICK[iNEXTBACK]); brechen; case 6:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING_ADVANCE[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aSETTING[iNEXTBACK]); brechen; } bButtonState =true; } // Instrument Sensors // Snare Drum if (iPiezoValue_A0> aSNARE[0] &&bSnareFlag ==false) { for (int i =0; i  aSNARE[4]) { aSNARE[4] =iPeak_A0; } if (iPeak_A1> aSNARE_RIM[4]) { aSNARE_RIM[4] =iPeak_A1; } } aSNARE[5] =aSNARE[4]; aSNARE_RIM[5] =aSNARE_RIM[4]; aSNARE[4] =map(aSNARE[4], aSNARE[0], aSNARE[1], 0, 127); aSNARE_RIM[4] =map(aSNARE_RIM[4], aSNARE_RIM[0], aSNARE_RIM[1], 0, 127); aSNARE[4] =(aSNARE[4] * aSNARE[4]) / 127; // Curve setting //aSNARE_RIM[4] =(aSNARE_RIM[4] * aSNARE_RIM[4]) / 127; if (aSNARE[4] <=1) { aSNARE[4] =1; } if (aSNARE[4]> 127) { aSNARE[4] =127; } if (aSNARE_RIM[4] <=0) { aSNARE_RIM[4] =0; } if (aSNARE_RIM[4]> 127) { aSNARE_RIM[4] =127; } if (aSNARE_RIM[5]> aSETTING[1]) { MIDI.sendNoteOn(aSNARE_RIM[2], aSNARE_RIM[4], 1); //(note, velocity, channel) MIDI.sendNoteOn(aSNARE_RIM[2], 0, 1); lcd.clear(); lcd.print("SNARE RIM"); lcd.setCursor(0, 1); lcd.print(aSNARE_RIM[4]); bSnareFlag =true; } //else if (aSNARE[5]> aSNARE_RIM[5]) else { MIDI.sendNoteOn(aSNARE[2], aSNARE[4], 1); //(note, velocity, channel) MIDI.sendNoteOn(aSNARE[2], 0, 1); lcd.clear(); lcd.print("SNARE HEAD"); lcd.setCursor(0, 1); lcd.print(aSNARE[4]); //lcd.setCursor(10, 1); //lcd.print(aSNARE_RIM[5]); bSnareFlag =true; } } // Hi-Hat Cymbal if (iPiezoValue_A2> aHIHAT[0] &&bHihatFlag ==false) { for (int i =0; i  aHIHAT[4]) { aHIHAT[4] =iPeak_A2; } } aHIHAT[5] =aHIHAT[4]; aHIHAT[4] =map(aHIHAT[4], aHIHAT[0], aHIHAT[1], 0, 127); aHIHAT[4] =(aHIHAT[4] * aHIHAT[4]) / 127; if (aHIHAT[4] <=1) { aHIHAT[4] =1; } if (aHIHAT[4]> 127) { aHIHAT[4] =127; } if (iPiezoValue_A0 =aHIHAT_PEDAL[0]) { MIDI.sendNoteOn(aHIHAT_CLOSE[2], aHIHAT[4], 1); MIDI.sendNoteOn(aHIHAT_CLOSE[2], 0, 1); lcd.clear(); lcd.print("HIHAT CLOSE"); lcd.setCursor(0, 1); lcd.print(aHIHAT[4]); bHihatFlag =true; } } // Hi-hat Pedal if (iPiezoValue_A0> aHIHAT_PEDAL[0] &&bPedalFlag ==false) { MIDI.sendNoteOn(aHIHAT_PEDAL[2], aSETTING[2], 1); // (note, velocity, channel) MIDI.sendNoteOn(aHIHAT_PEDAL[2], 0, 1); lcd.clear(); lcd.print("HIHAT PEDAL"); lcd.setCursor(0, 1); lcd.print(aSETTING[2]); bPedalFlag =true; } // Kick Drum if (iPiezoValue_A3> aKICK[0] &&bKickFlag ==false) { for (int i =0; i  aKICK[4]) { aKICK[4] =iPeak_A3; } } aKICK[5] =aKICK[4]; aKICK[4] =map(aKICK[4], aKICK[0], aKICK[1], 0, 127); aKICK[4] =(aKICK[4] * aKICK[4]) / 127; if (aKICK[4] <=1) { aKICK[4] =1; } if (aKICK[4]> 127) { aKICK[4] =127; } MIDI.sendNoteOn(aKICK[2], aKICK[4], 1); MIDI.sendNoteOn(aKICK[2], 0, 1); lcd.clear(); lcd.print("KICK"); lcd.setCursor(0, 1); lcd.print(aKICK[4]); bKickFlag =true; }// --- BEGIN 'Code in Progress' --- //// --- I could be wrong, but this is what it appears to be --- and out of curiousity what is purpose of this sequence? -- // // I=(A0); // Previous Code // -- DOES iSensorValue_A0 need to be declared as an integer? How does this relate to iPiezoValue_A0? -- // if (iSensorValue_A0 <(aSNARE[5] * (0.01 * aSNARE[3]))) { bSnareFlag =false; } if (iPiezoValue_A0 <=aHIHAT_PEDAL[0] &&iPiezoValue_A2 <(aHIHAT[5] * (0.01 * aHIHAT[3])) &&bHihatFlag ==true) { delay(aSETTING[3]); // iSensorValue_A1 is reading analogRead(A2), but this is aHIHAT_PEDAL (which is analogRead(A2) int iSensorValue_A1 =analogRead(A2); if (iSensorValue_A1 <(aHIHAT[5] * (0.01 * aHIHAT[3]))) { bHihatFlag =false; } } if (iPiezoValue_A0>=aHIHAT_PEDAL[0] &&iPiezoValue_A2 <(aHIHAT[5] *(0.01 * aHIHAT[3])) &&bHihatFlag ==true) { delay(aSETTING[3]); int iSensorValue_A2 =analogRead(A2); if (iSensorValue_A2 <(aHIHAT[5] * (0.01 * aHIHAT[3]))) { bHihatFlag =false; } } if (iPiezoValue_A3 <(aKICK[5] * (0.01 * aKICK[3])) &&bKickFlag ==true) { delay(aSETTING[3]); // -- Should declared iSensorValue_A3 be iPiezoValue_A3? iSensorValue_A3 is declared but not used anywhere?? int iSensorValue_A3 =analogRead(A3); if (iPiezoValue_A3 <(aKICK[5] * (0.01 * aKICK[3]))) { bKickFlag =false; } } if (iPiezoValue_A0 <=aHIHAT_PEDAL[0] &&bPedalFlag ==true) { bPedalFlag =false; }// --- END 'Code in Progress' --- // }
Hello Drum

Schaltpläne

circuit_nZotR7rJMM.fzz

Herstellungsprozess

  1. Trommel
  2. Chinesische Chirurgen stellen Titanknochen mit einem 3D-Drucker her
  3. Design-Kit misst den Blutdruck mit optischem Sensor
  4. So verbinden Sie GrabCAD Print mit Ihrem Stratasys 3D-Drucker
  5. Was kann man mit einem 3D-Drucker herstellen?
  6. Gyroskop-Spaß mit NeoPixel-Ring
  7. Wolkenkostüm
  8. Unopad - Arduino MIDI-Controller mit Ableton
  9. Einfacher Hindernissensor mit Arduino
  10. Spracherkennung und -synthese mit Arduino