Vorstellung: DIY MIDI Mini 3 Button Controller (HX Stomp)

LustigePerson
LustigePerson
Registrierter Benutzer
Zuletzt hier
21.10.24
Registriert
13.12.04
Beiträge
418
Kekse
830
Ort
Bonn
Hallo,

ich dachte ich stelle hier mal ganz kurz meinen MIDI-Controller Eigenbau auf basis eines Arduino Mikrocontrollers vor. Er ist natürlich universell einsetzbar, wurde für mir aber als Erweiterung für meinen HX Stomp gebaut.
Das Ganze ist auf meine Bedürfnisse zugeschnitten und auch das Design sollte ein bisschen speziell aussehen. ;)
Lasst mir gerne Feedback da, oder stellt Fragen. Das war auch mein erster Versuch. Funktion, Aufbau und ein paar Hinweise gibt es unten auch noch.
01_midi.jpg
02_midi_back.jpg
03_midi_arduino.jpg
04_midi_inside.jpg


Auf dem Board macht er sich ganz gut:

board.jpg

Inspiration kam von folgenden Quellen:

Funktionen​

Ich nutze 3 Bänke (Rosa, Grün, Blau) und jedem Taster ist jeweils ein kurzer und ein langer Druck zugeordnet.

Die Funktion beim langen Druck ist dabei immer gleich:
  • Links: HC Stomp Modes Durchschalten (Stomp, Scroll, Preset, Snapshot)
  • Mitte: "Boost" a.k.a. Custom Funktion (Sendet CC100 abwechselnd an/aus. Meine Idee ist es hier in meinem Presets IMMER einen Soloboost drauf zu legen)
  • Rechts: Nächste Bank
Ein kurzer Tastendruck hat je nach Bank andere Funktionen und beim Aufrufen einer Bank passieren Dinge:

Bank 0

Snapshot Mode (Rosa)

Beim Aufruf: HX Stomp wechselt in Stomp Mode
  • Links: Snapshot 1
  • Mitte: Snapshot 2
  • Rechts: Snapshot 3

Bank 1

Tap / Tuner Mode (Grün)

Beim Aufruf: HX Stomp wechselt in Snapshot Mode
  • Links: Tuner An/Aus
  • Mitte: Tap Tempo
  • Rechts: HX Stomp Bypass An/Aus

Bank 2

FS Mode (Blau)

Beim Aufruf: HX Stomp wechselt in Snapshot Mode
  • Links: Footswitch 4 Funktion
  • Mitte: Footswitch 5 Funktion
  • Rechts: Toggle midi CC 101 (frei belegbar im Stomp)
Hier auch noch mal als Übersicht:

Bank​
0​
Description
Snapshot Mode​
On Bank Enter
Stomp to Stomp mode​
Button
A
B
C
Short Press
Snapshot 1​
Snapshot 2​
Snapshot 3​
Long Press
FS Mode Up​
Boost CC 100​
Bank Up​





Bank​
1​
Description
Tap/Tuner​
On Bank Enter
Stomp to Snap mode​
Button
A
B
C
Short Press
Toggle tuner​
Tap Tempo​
Toggle Bypass​
Long Press
FS Mode Up​
Boost CC 100​
Bank Up​





Bank​
2​
Description
FS Mode​
On Bank Enter
Stomp to Snap mode​
Button
A
B
C
Short Press
FS4​
FS5​
Toggle CC 101​
Long Press
FS Mode Up​
Boost CC 100​
Bank Up​

Bau & Pläne​

Das ganze war als Eigenbau recht billig, mit Komponenten vom freundlichen Chinamann (Aliexpress) und z.T. von Musikding.
Im Wesentlichen braucht es:
  • Gehäuse (hier Typ A Alu-Guss)
  • 3 Taster (keine Schalter)
  • Midi-Buchse
  • DC Buchse
  • LED (Hier Neopixel 5mm LED um beliebige Farben darstellen zu können)
  • Mikrocontroller (Hab mich für einen Arduino Pro Mini entschieden)
  • Kabel, Widerstände etc.
Quellcode, Bankbeschreibung / Switchbelegung und Verkabelung findet sich hier: https://github.com/LustigePerson/HXstomp_Midi

Die Verkabelung sieht so aus:

HX_Stomp_Midi_Steckplatine.png

HX_Stomp_Midi_Schaltplan.png

Besonderheiten / Watch Outs​

  • Das Gehäuse ist schön kompakt dadurch sind die Taster natürlich auch nah beisammen. Der mittlere steht höher, was für mich OK ist. Man könnte das Ganze aber sich auch mit 2 Tastern realisieren bzw. ein größeres Gehäuse wählen wenn man im Eifer des Gefechts nicht mehr so zielsicher ist.
  • Ich habe den Arduino zur Sicherheit mit einem Verpolschutz (Diode) versehen. Er läuft ganz normal mit 9V (center negative), kommt aber mit bis zu 12 volt klar
  • Es ist auch Möglich einen "langen Tastendruck" zu nutzen, das hat aber IMMER einen Nachteil. Da nach dem ersten Druck gewartet werden muss ob noch ein Zweiter kommt, können "Einfachsignale" nicht SOFORT ausgelöst werden sondern erst nach einer definierten Wartezeit
  • Weiterhin ist es möglich auch das Drücken zweier Tasten gleichzeitig zu nutzen. Mein Code ist dafür nicht ausgelegt, das war mir auch nicht praxistauglich genug. Wenn man aber mit Zwei dtat Drei Tastern arbeitet könnte das ein guter Weg sein
  • Ein "Problem" des Stomps ist es dass man nicht einfach so "Toggle Bypass" Befehle schicken kann. das geht nur wenn man FS4/5 per midi emuliert, ich hoffe da tut sich nochmal was. Aus diesem Grund sendet bei mir CC100/CC101 immer abwechselnd an/aus. Schaltet man in der Zwischenzeit den entsprechenden Block am Stomp um weiß der Switch davon natürlich nichts. Das betrifft aber ALLE Midiswitches, da Unidirektional. Man KÖNNTE natürlich den Switch auch noch mit einem MIDI Input versehen, aber das ist den Aufwand wohl nicht wert
  • Man könnte natürlich auch mehr Taster in ein größeres Gehäuse bauen, dem Ganzen ein Display spendieren und komplexe Presets etc hier ablegen, für mich sollte es aber einfach sein und ich wollte es "schnell" mal bauen und testen
  • Eine generelle "Lessons Learned" für mich war: Es genügt nicht die Taster Klug auf dem Gehäuse zu verteilen. Man sollte auch früh genug überlegen/prüfen WO auf dem Board das ganze sein soll und wie gut man dann noch an die Taster kommt
  • EDIT: Es gibt übrigens auch Adapter für Midi auf 3,5mm Stereoklinke. Das wird auch oft für MIDI genutzt. Vorteil ist die kleinere Bauform der Buchsen und die Drehbarkeit des Kabels; wäre also eine mögliche Alternative zur MIDI Buchse
  • EDIT: Ich sammle hier weitere Dinge. @boisdelac hätte darauf hingewiesen: Man kann auch "einfache" RGB LEDs nutzen. Oder 2-farbige LEDs. Das KANN etwas günstiger sein, braucht dann aber mehr Pins, entsprechende Vorwiderstände und man muss selbst schauen das die einzelnen Helligkeiten passen. Und da ich evtl. mehr als eine LED nutzen wollte funktioniert das mit den Neopixel/WS2812b ganz ohne weitere Pins einfach in Serie

Ich freue mich auf eure Rückmeldung!
 
Grund: + / - vertauscht im Schaltplan
Zuletzt bearbeitet:
  • Gefällt mir
  • Interessant
Reaktionen: 16 Benutzer
Tolle Vorstellung!!!

Kostenlose Ideen für weitere MIDI-Controller....

Ersetz die NEO-Pixel-RGB-Led durch eine einfache RGB-LED mit Vorwiderständen und schließe die an drei Analog-PWD-Ausgänge an. Das ist eventuell preisgünstiger
Die Spannungsversorgung könntest Du beim HX-Stomp mit einem Y-Kabel abzwacken.
Ein MIDI-Eingang hätte den Charme, dass man den Fußschalter mit dem HX-Stomp z.B. bei PC-Befehlen oder beim Tap-Tempo synchronisieren könnte

Und wenn Du jetzt auch noch das scetch postest, gibts noch Kekse :great:
 
  • Gefällt mir
Reaktionen: 2 Benutzer
Und wenn Du jetzt auch noch das scetch postest, gibts noch Kekse :great:
Liegt doch alles im verlinkten Repo:
https://github.com/LustigePerson/HXstomp_Midi

Grund für den Neopixel war, dass ich zunächst mit dem Digispark arbeiten wollte, der hat nicht genug PINs, und da ich evtl. plane doch in ein größeres Gehäuse zu gehen und mehr LEDs zu nutzen kann man die einfach chainen und braucht keine weiteren PINs.

Was meinst du mit der Spannungsversorgung? Einfach von der HX Stomp Versorgung? Das ist natürlich wurscht wie man es macht, ich hatte noch Ausgänge am Palmer PWT frei. Oder meinst du Poer über die freien Adern des Midikabels senden? Darüber hatte ich auch mal nachgedacht.

Ja, das mit dem MIDI Eingang wäre wie gesagt nett, braucht dann aber ein größeres Gehäuse für die weitere Buchse und man muss natürlich dem Stomp auch noch mal erklären was er senden soll. Was sehr fancy wäre, insb. LED in sync mit midi clock, aber der Gesamtaufwand war mir erst mal doch zu groß.
Sehr schade dass MIDI halt nur Unidirektional ist und doch so ein bisschen oll... Ich frage mich ob man statt der Midibuchse auch das Midi-über-USB des Stomps nutzen könnte. Das wäre natürlich noch eine Möglichkeit.
 
Repo ... hab ich übersehen. Verzeih

Spannungsversorgung ... das HX Stomp braucht ja auch 9VDC und es hat auch die gleiche Polung. Dann könnte man da mit einem Y-Kabel ran.
So Extragedöns wie Spannungsversorgung über ein MIDI-Kabel würde ich persönlich lassen, weil das nicht Standard ist.
 
  • Gefällt mir
Reaktionen: 1 Benutzer
So Extragedöns wie Spannungsversorgung über ein MIDI-Kabel würde ich persönlich lassen, weil das nicht Standard ist.
Genau aus dem Grund hab ich es gelassen.

Y-Kabel: geht ja eigentlich immer. Auf dem Board bei mir hat alles 9v Center negative.
Solange ich aber am Netzteil noch freie Pins hab mache ich es lieber so, da galvanisch getrennt. Y-Kabel bzw. Daisy chains sind da ja manchmal problematisch. Aber wenn man nur HX Stomp + Midi controller nutzt ist es natürlich eine optimale Lösung mit Y-Kabel.

Ich glaube man kann so ein Projekt sehr weit treiben. Freue mich wenn Andere ihre Controller und Ideen teilen.
 
Achso, was natürlich noch möglich ist: man kann den Loper mir erweiterten Funktionen per Midi Steuern. Auf dem Stomp selbst geht ja nur die One-Button Variante, während die großen Helixe ja mehrere Buttons nutzen. Die Funktionen sind aber auch im Stomp vorhanden. Bisher habe ich den Boss RC1 genutzt, aber Mal sehen ob ich nicht da auch auf den Stomp setze.
 
Wie ist das mit dem Entprellen der Fußtaster? Macht das die von Dir genutzte Library?

Ich hab mal eine MIDI-Clock mit Fuß-Tap-Funktion gebaut und das Prellen war ein ziemliches Problem. Hab's dann aber doch hingepfuscht… das Ding hat auch gleichzeitig einen Tap-Output für mein Delay-Pedal, letzteren hatte ich über ein Reed-Relais umgesetzt.
 
*Überflüssiges Vollzitat des direkt vorangegangenen Beitrages entfernt*

Genau, das ist ja bei mechanischen Buttons immer ein Thema, das überniummt aber die Library. Allerdings kann man die "Entprellzeit" mit setDebounceTicks setzen.
Je niedriger mand ie setzen kann desto schneller reagieren die Switches natürlich. Ich bin jetzt bei 25ms.
Ganz ähnlihc kann man auch definieren ab wann ein Tastendruck ein "langer Druck" ist, mit setPressTicks, das sind bei mir 300ms.
Steht aber alles recht gut und übersichtlich in der Library readme: https://github.com/mathertel/OneButton
Ich denke mal die minimale Einstellung für's Entprellen hängt auch von den verwendeten Schaltern ab.
 
Zuletzt bearbeitet von einem Moderator:
Man muss sich mit der Minimierung der Debounce Zeit gar nicht so viel Stress machen.

Die Debounce Zeit hat mit der Reaktionszeit des Mikrocontrollers nichts zu tun.
Der Schaltvorgang wird direkt durch den ersten Kontakt des Tasters ausgelöst.

Der Schalteingang wird lediglich für die eingestellte Zeit gesperrt, um weitere Auslösungen durch das Nachprellen des Tasters zu verhindern.
Innerhalb der Debounce Zeit, kann man also keinen weiteren Schaltvorgang auslösen.

Innerhalb von 40 - 50 ms zweimal Schalten können sollte für einen Effekt Fußschalter wahrscheinlich in der Praxis vollkommen ausreichend.

... und das muss man ja auch erstmal schaffen, ohne beim Spielen aus der Kurve zu fliegen :)
 
  • Gefällt mir
Reaktionen: 1 Benutzer
*Überflüssiges Vollzitat des direkt vorangegangenen Beitrages entfernt*

Stimmt, aber wegen des (möglichen) "Doppelklicks" wird es (zumindest theoretisch) relevant.
Denn wenn die Debounce Zeit z.B. bei 50ms steht wird das Signal an den Stomp auch erst danach gesendet, da ja theoretisch noch ein Doppelklick folgen kann. Ich wollte aber sicher gehen dass die Änderung schnellstmöglich an den stomp geht, wenn man z.B. sauber zum Taktwechsel einen Effekt (de-)aktivieren möchte. Aber klar, 50ms sollten da auch genügen ;) Meine Switches haben aber kein Problem mit "false fire" bei 25ms.
In dem code hier nutze ich ja keine Doppelklicks, ich hatte aber damit experimentiert. Was man da noch beachten muss: Die maximale "Tap Tempo" Geschwindigkeit bevor der Switch von einem Doppelklick ausgeht. ;)

EDIT: Wenn ich drüber nachdenke muss die Debounce Zeit aber auch so abgewartet müssen, da ja nach deren ablauif geprüft wird ob der Switch noch "gehalten" wird. Also auch wegen des "Long Clicks" "relevant".
 
Zuletzt bearbeitet von einem Moderator:
Hallo Zusammen,
es gibt ein Update. Der Stand wie oben beschrieben findet sich weiterhin als Version v1.0 im Git Repository.

Version 2.0 bietet nun aber auch die Möglichkeit den Looper des HX Stomp zu steuern und damit dessen Funktionsumfang zu erweitern.

Dazu kam nun eine Bank (rote LED) dazu:

Bank​
3​
Description
Looper Mode​
On Bank Enter
Stomp to Snap mode​
Button
A
B
C
Short Press
Rec/OverD​
Play/Stop​
Undo/Redo​
Long Press
FS Mode Up​
Boost CC 100​
Bank Up​

Während der Aufnahme / des Overdups blinkt die LED schnell, während der Wiedergabe langsam. Wie immer ist es natürlich so, dass Veränderungen am Stomp dem Midi Controller nicht bekannt sind. D.h. wenn ein Preset gewechselt wird oder der Looper direkt am Stomp deaktiviert wird, wird die LED ggf. weiter blinken. Dann muss man diese natürlich abschalten.

Da ich nicht sicher bin ob ich immer 4 Bänke brauche kann man die Looperfunktion beim Booten (de)aktivieren.
Während die LED weiß leuchtet hält man eine der Tasten gedrückt. ein 3-maliges blinken zeigt den Status an: 3x weiß = Looperfunktion nicht vorhanden; 3x rot = Looperfunktion vorhanden. Diese Einstellung bleibt auch gespeichert und wird, wenn man keine taste drückt während des bootens, ebenfalls durch 3-maliges Blinken angezeigt.
 
  • Gefällt mir
Reaktionen: 1 Benutzer
Hallo LustigePerson,

ich wollte mich bei dir für diesen hervorragenden Beitrag sehr bedanken.
Konnte den Midi-Controller 1:1 als Amateur hervorragend umsetzen.
Wahnsinn ein paar kleine Euros und schon ist das gewünschte Midi-Pedal gebaut.
Lass es mich gerne wissen wenn es Updates im Code gibt :)

Anbei ein paar Bilder.

Vielen Dank :)

20230113_225805.jpg
20230114_025835.jpg
20230114_025840.jpg
20230114_025847.jpg
20230114_021743.jpg
 
  • Gefällt mir
Reaktionen: 2 Benutzer
@Guitarplayer1985 Hey! Das freut mich riesig, dass meine Dokuemntation wirklich genutzt wurde und das Alles bei dir gut geklappt hat! Wenn du Feature Wünsche /Ideen hast sag gerne Bescheid!
 
Hi, hätte eine Frage: der Arduino Nano sollte doch auch klappen mit deinem code oder? Nutzt ja auch den Atmega328...
Wie würde der code aussehen, wenn man noch den Doppelklick integrieren möchte???
Hat hier jemand eine Idee, steige durch die Programmierung nämlich nicht wirklich durcho_O
 
*edit*
Hey, Nano ist kein Problem. Das macht eigentlich keinen Unterschied, Mal abgesehen von der Größe.
Doppelklick stellt ein kleines.problem dar. Das hab ich oben falsch geschrieben. Dort steht "langer Tastendruck", dort meinte ich den Doppelklick. Das "Problem " ist, es gibt in jedem Fall eine Verzögerung weil der arduino ja warten muss ob innerhalb eines Intervalls noch ein zweiter Druck kommt. Das müsste man dann bei Tap Tempo, oder Funktionen die sofort ausgeführt werden sollen, abschalten oder in der Bedienung bedenken. Es gibt ja auch die Möglichkeit Signale bei "Release" auszulösen.

Was genau hast du denn vor? Bzw. Kann ich dir bei einer konkreten Frage helfen?
 
Grund: edit by C_Lenny -> Vollzitat Vorpost
Zuletzt bearbeitet von einem Moderator:
Ich möchte den Drei-Taster Controller benutzen um ein Looper plugin (Damage Audio Enno) zu steuern. Da das Ganze sehr handlich bleiben soll, finde ich es praktisch mit mehreren Befehlen pro Taster arbeiten zu können.
Das mit der Verzögerung leuchtet ein, müsste man dann entsprechend berücksichtigen. Den Doppelklick würde ich entsprechend für nicht so "genaue" befehle benutzen, wie z.b. loop reverse oder 1/2 Geschwindigkeit.
Ich fang glaube ich einfach mal an, zu bauen, den code kann man ja immer noch nachträglich optimieren.
Da ich zum jetzigen Zeitpunkt von der Codierung keinen Plan habe, möchte ich erstmal etwas funktionierendes übernehmen ;-)
Ich bin halt absolut planlos, wo im code ich den doppelklick einbauen müsste und was alles am Zeilen rein muss. Das dort z.b. die pins definiert werden müssen und die entsprechenden befehle, kriege ich so gerade noch hin...

Kann man eigentlich einen Controller so programmieren, dass er mehrere Befehle gleichzeitig sendet??? Bsp. CC 55 und gleichzeitig 66?
 
Ich bin halt absolut planlos, wo im code ich den doppelklick einbauen müsste und was alles am Zeilen rein muss.
Das Monitoring der Switches übernimmt ja die OneButton library (https://github.com/mathertel/OneButton).
Bei mir im Code gibt es im setup (void setup()) ja folgenden Absatz:

Code:
  // link the button functions
  // Button A
  SwitchA.attachClick(SwitchAclick);
  SwitchA.attachLongPressStart(ModeUp);

  // Button B
  SwitchB.attachClick(SwitchBclick);
  SwitchB.attachLongPressStart(ToggleBoost);

  // Button C
  SwitchC.attachClick(SwitchCclick);
  SwitchC.attachLongPressStart(BankUp);

Dort wird jedem Switch zugewiesen auf WAS er reagiert und WIE. Allen Switches wird ein einfacher Klick (attachClick) und ein langer Klick (attachLonhPressStart -> Start am Ende bedeutet es wird getriggert sobal der longpress erkannt wird. LongPressStop würde z.B. getriggert sobald nach dem langen Druck der Schlater gelöst wird) zugewiesen.
Dann wird für jeden switch gesagt welche Funktion (z.b: SwitchAclick) mit dieser Aktion verbunden ist.
Deinen Doppleklick könntest du mit "attachDoubleClick" realisieren, also z.B. "SwitchA.attachDoubleClick(meineFunktion);"
Kann man eigentlich einen Controller so programmieren, dass er mehrere Befehle gleichzeitig sendet??? Bsp. CC 55 und gleichzeitig 66?
Das ist gar kein Problem. Bei jedem Klick wird eine Funktion ausgeführt, die beliebig komplex sein kann.
 
Ah ok, danke.
Ich stelle gerade meine Bestellung zusammen und werde dann erstmal mit deinem Code starten. Danach werde ich mich mal an den Doppelklick wagen und spätestens da wieder mit Fragen um die Ecke kommen...
 
  • Gefällt mir
Reaktionen: 1 Benutzer
Servus,
ich möchte mich erstmal für die wahnsinnig gute Anleitung etc. bedanken! Sowas online zu finden ist überragend. Vielen Dank dafür!
Ich baue ihn gerade nach. Ich möchte kurz was zur Stromversorgung fragen denn mir hat es nun zwei Platinen gehimmelt. Das eine mal mit einem scheinbar defekten Netzteil. Netzteil getauscht. Hernach haben alle Tests wirklich super funktioniert - auch über nen längeren Zeitraum. Nun ab der Steomversorgung meines Pedalboards angesteckt. Zunächst hat alles funktioniert und nach ca 5 Minuten wurde der Arduino extrem heiß. Hast du dazu einen Tipp?
Grüße Gigi
 
  • Gefällt mir
Reaktionen: 1 Benutzer
Hey @gigi16, danke erstmal.
Lad' doch gerne mal ein paar Bilder hoch. Wie heiß er bei mir wird müsste ich mal schauen. "Extrem" klingt aber nicht normal. Könnte es evtl. irgendwo eine Lötstelle geben die nicht ok ist und nen Kurzschluss verursacht? Ich gehe mla davon aus, dass die Spannung deiner Stromversorgung stimmt? Welchen Chip nutzt du denn? Was ich mir bei dem Fehlerbild vorstellen kann: 5V an VCC statt Raw? Raw geht an den integrierten Spannungswandler, an VCC muss die richtige Spannung von 3,3V anliegen. Aber es gibt halt auch Boards mit 3,3V und solche mit 5V.
 

Ähnliche Themen


Unser weiteres Online-Angebot:
Bassic.de · Deejayforum.de · Sequencer.de · Clavio.de · Guitarworld.de · Recording.de

Musiker-Board Logo
Zurück
Oben