Themabewertung:
  • 1 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Midi-Controller MIDI Controller selber bauen!
#1
MIDI Controller selber bauen!
Tagchen!

Ich habe mich kürzlich entschieden einen Midi Controller selber zu bauen. Er soll 4 Schieberegler, 2 Drehregler, 8 Knöpfe und LEDs für jedes Steuerelement haben.
   
Das hier soll eine kleine Hilfe für alle sein, die sich selbst einen Controller bauen wollen, aber nicht recht wissen, wo sie anfangen sollen. Ich möchte zunächst aber darauf eingehen, was ich zusammengestellt habe. Weiter unten ist alles enthalten, was man braucht um es sich selbst zu machen BigSmile .
Wenn ihr in irgendeiner Form Hilfe braucht - einfach fragen. Ich helfe gerne! (nicht beleidigt sein, wenn ich nicht am selben Tag antworte, ich bin nicht andauernd im Forum :* ) Meine Mail ist aber subbestionix@gmail.com. Da kann man mich fast immer erreichen (Sync auf Android ist einfach geil #offtopic). Aber egal - LOS GEHTS!

Mein Controller:
Einkaufsliste
Meine Einkaufsliste sieht wie folgt aus:
1 x Arduino Uno
1 x Gehäuse
2 x 10 Arcade Knöpfe
15 x LED Fassungen
1 x 10 Drehpotis (Ich brauche nur zwei aber so billig wie die sind...)
1 x 10 Drehpoti-Kappen
4 x Schieberegler
4 x Schieberegler-Kappen
1 x Shift In Register
1 x Shift Out Register
2 x DIP 16 IC Sockel
1 x Lochraster- oder Streifenrasterplatine a je 20 x 10 cm
15 x LEDs (Ich nutze weiße, rote, grüne, gelbe und blaue)
und nen Haufen Kabel, Lötzinn und Gedult.
Aufbau & Verschaltung
Plan ist es die Potis direkt an die sechs analogen Eingänge des Arduinos anzuschließen. Deren indikator LEDs werden selbstverständlich mit Schutzwiderstand (~220 Ohm müsste reichen) über die PWM Pinne des Arduinos (3, 5, 6, 9, 10, 11) angeschlossen, damit sie dimmbar sind.
Die Knöpfe werden über das Shift In Register (74HC165) an den Arduino angeschlossen, was die Summe von acht Pinnen der Knöpfe auf drei Datenpinne (2, 4, 7) für das Shift Register reduziert.
Alle weiteren LEDs werden über das Shift Out Register (74HC595) an angeschlossen, was aus ach wiederum drei (8, 12, 13) macht.
Die Vcc und Gnd Leitungen, sowie den Kondensator lasse ich hier der Übersicht halber jedoch aus. (ist aber auf Schaltplan vorhanden)
   

DEIN eigener Controller:
Selber machen: Wo und wie fange ich an?
Heutzutage ist es nicht mehr besonders schwer sich einen Controller selber zu bauen. Arduino und ein paar Komponenten, ein bisschen programmieren (auch für Anfänger machbar - alternativ das Skript benutzen, das ich geschrieben hab) und fertig.
1. Steuerelemente
Der Erste Schritt sollte jedoch sein, dass man sich klar mach: "Was brauche ich und wozu?". Mein Controller (oben) soll für das live mischen von vorbereiteten Tracks (z.B. mit FL-Studio oder Ableton) sein. Er ist aber kein DJ Mischpult mit Turntables/Jogwheels etc. Sucht euch also zunächst Komponenten raus, die ihr benutzen wollt:
- Knöpfe (1 digitaler Pin)
- Taster (1 Digitaler Pin)
- Potis (Schiebe- oder Dreh- oder sogar Joysticks!) (1 Analoger Pin)
- Jogwheels (2 Digitale Pinne)
- LEDs (1 Digitaler Pin (mit oder ohne PWM = dimmbar))
- Enfernungssensoren, Lagesensoren, und was euch noch so einfällt - Der Kreativität sind keine Grenzen gesetzt!!!
2. Wie anschließen?
Wenn ihr das habt müsst ihr euch Gedanken machen, wie ihr die ganzen Dinge anschließt: Jede Komponente braucht unterschiedliche Anzahlen von Pinnen und auch unterschiedliche Arten. Potis beispielsweise brauchen einen analogen Eingang zur Messung. Der Arduino Uno hat davon 6. 
Wenn ihr wisst, was ihr alles für Pinne braucht fällt schnell auf, dass die Pinne vom Arduino schnell nicht mehr reichen. Die kann man zum Glück aber erweitern, indem man Shift Register oder Multiplexer benutzt. Für jeden Fall gibt es eine Lösung:
Mehr analoge Eingänge? Multiplexer (74HCT4051) (erfordert 1 analogen und 2 digitale Pinne)
Mehr digitale Eingänge? Shift In Register (74HC165) (erfortert 3 digitale Pinne, beliebig erweiterbar)
Mehr digitale Ausgänge? Shift Out Register (74HC595) (erfordert 3 digitale Pinne, beliebig erweiterbar)
Mehr analoge (PWM) Ausgänge? Das ist etwas komplizierter. Googelt es mal... Möglich wäre evtl der MAX6954.
Wenn ihr das habt empfehle ich ein Platinenlayout mit Fritzing zu erstellen. Es ist einigermaßen Intuitiv und umsonst - probiert es mal aus Zwinker
3. Gehäuse
Wenn ihr alle Komponenten und Anschlussmöglichkeiten habt, sucht euch ein Gehäuse aus, NACHDEM ihr euch ein funktionsfähiges Layout überlegt habt. Gehäuse gibt es überall:
- Conrad
- Amazon
- Reichelt, ELV etc. Googelt einfach danach
Bevor ihr das ganze einbaut, probiert es aber erst mal aus. Das ist wichtig, um nicht alles noch mal auseinandernehmen zu müssen, wenn etwas nicht funktioniert oder ihr einen Fehler mit der Verschaltung gemacht habt.
4. Die Programmierung
Ich möchte nicht detailiert auf alles eingehen, was programmiert werden kann. (Für Hilfe siehe dieses Tutorial speziell für DIY Midi Controller) Ich habe jedoch für mich selbst ein Skript geschrieben, womit ich Potis und Taster / Knöpfe anschließen kann ohne alles einzeln programmieren müssen. Pro Komponente eine neue Zeile - fertig.. Ich werde vielleicht (wenn gewünscht) das Programm noch erweitern, wenn ihr das wollt.
Um das Programm zu modifizieren müsst ihr für jedes Steuerelement in der setup() Funktion AddControl() ausführen. Dabei gibt es die Modi
- Poti (Schiebe: oder Drehregler)
- InversePoti (das selbe wie Poti nur umgekehrt)
- Button (Taster)
- ToggleDown (Umschalter beim Drücken)
- ToggleUp (Umschalter beim loslassen)
Danach muss der Eingangspin folgen (A0 bis A5, 2 bis 13), worauf der Ausgangspin für die LED folgt. Wenn keine LED genutzt wird einfach -1 schreiben. Zuletzt folgt die MIDI Control Nummer der Komponente. 
Wie immer: Wenn ihr Hilfe braucht - ich bin da BigSmile
MIDI.ino
Code:
enum ControlType{
 Poti,
 InversePoti,
 Button,
 ToggleDown,
 ToggleUp
};
int midiChannel;
int controlCount = 0;
int*controls; // ctrl num, inpin, outpin, old, new, toggled
void setup() {
 // Start communication
 Serial.begin(115200);
 
 // Setup midi channel
 midiChannel = 1;
 // Add controls (AddControl())
 //    Poti:           analog input pin    pwm LED pin       Midi Control number
 //    InversePoti:    analog input pin    pwm LED pin       Midi Control number
 //    Button:         digital input pin   digital LED pin   Midi Control number
 //    ToggleDown:     digital input pin   digital LED pin   Midi Control number
 //    ToggleUp:       digital input pin   digital LED pin   Midi Control number
 AddControl(Poti, A0, -1, 21);
 AddControl(Poti, A1, -1, 22);
 AddControl(ToggleDown, 2, 8, 23);
 AddControl(ToggleDown, 7, 13, 24);
 AddControl(Button, 3, 9, 23);
 AddControl(Button, 6, 12, 24);
 AddControl(ToggleUp, 4, 10, 23);
 AddControl(ToggleUp, 5, 11, 24);
 // Setup controls (pin modes)
 SetupControls();
}
void loop() {
 UpdateControls();
}
void AddControl(ControlType type, int inPin, int outPin, int MidiControlNumber)
{
 controlCount++;
 controls = (int*) realloc(controls, controlCount * 6 * sizeof(int));
 controls[7 * (controlCount - 1)] = type;                  // 0 = Type
 controls[7 * (controlCount - 1) + 1] = inPin;             // 1 = Input pin
 controls[7 * (controlCount - 1) + 2] = outPin;            // 2 = LED pin
 controls[7 * (controlCount - 1) + 3] = MidiControlNumber; // 2 = Midi control number
 controls[7 * (controlCount - 1) + 4] = 0;                 // 3 = Old value
 controls[7 * (controlCount - 1) + 5] = 0;                 // 4 = New value
 controls[7 * (controlCount - 1) + 6] = 0;                 // 5 = Tggled
}
void SetupControls()
{
 for(int i = 1; i<=controlCount; i++)
 {
   if(controls[7 * (i - 1)] != Poti && controls[7 * (i - 1)] != InversePoti)
   {
     pinMode(controls[7 * (i - 1) + 1], INPUT);  // Input Pin
   }
   if(controls[7 * (i - 1) + 2] != -1)
     pinMode(controls[7 * (i - 1) + 2], OUTPUT); // LED Pin
 }
}

void UpdateControls()
{
 for(int i = 1; i<=controlCount; i++)
 {
   int pi, po, n, o, t, m;
   pi = controls[7 * (i - 1) + 1];
   po = controls[7 * (i - 1) + 2];
   m = controls[7 * (i - 1) + 3];
   o = controls[7 * (i - 1) + 4];
   n = controls[7 * (i - 1) + 5];
   t = controls[7 * (i - 1) + 6];
   
   switch(controls[7 * (i - 1)])
   {
     case Poti:
       n = map(analogRead(pi), 0, 1023, 0, 127);
       if(o != n)
       {
         Serial.write(175 + midiChannel);
         Serial.write(m);
         Serial.write(n);
         if(po!=-1)
         {
           analogWrite(po, n * 2);
         }
       }
       break;
     case InversePoti:
       n = map(analogRead(pi), 0, 1023, 127, 0);
       if(o != n)
       {
         Serial.write(176 + midiChannel);
         Serial.write(m);
         Serial.write(n);
         if(po!=-1)
         {
           analogWrite(po, n * 2);
         }
       }
       break;
     case Button:
       n = digitalRead(pi);
       if(o != n)
       {
         Serial.write(176 + midiChannel);
         Serial.write(m);
         Serial.write(n * 127);
         if(po!=-1)
           digitalWrite(po, n);
       }
       break;
     case ToggleDown:
       n = digitalRead(pi);
       if(o == LOW && n == HIGH)
       {
         t = !t;
         digitalWrite(po, t);
       }
       break;
     case ToggleUp:
       n = digitalRead(pi);
       if(o == HIGH && n == LOW)
       {
         t = !t;
         digitalWrite(po, t);
       }
       break;
     default:
       break;
   }
   o = n;
   controls[7 * (i - 1) + 4] = o;
   controls[7 * (i - 1) + 5] = n;
   controls[7 * (i - 1) + 6] = t;
 }
}


PS: Die AddControls, die da im Script schon sind müsst ihr natürlich weg machen, die sind nur als Beispiel da BigSmile


5. Platine Löten
Wenn ihr eure Platine löten wollt beachtet folgendes:
1. Nutzt den Arduino und verbindet ihn mit Kabeln mit der Platine, damit ihr ihn noch anderweitig nutzen könnt und neue Software aufspielen könnt.
2. Benutzt die IC Sockel, um die Multiplexer und Shift-Register zu befestigen! Die Pinne sind empfindlich und Schaltungen vertragen keine Hitze.
3. ÜBERPRÜFT DIE VERSCHALTUNG VOR DEM LÖTEN. Sonst kann es sein, dass die komplette Platine neu gemacht werden muss! Das ist extrem wichtig.
4. Verkabelt Vcc (+) und Gnd (-) nicht immer einzeln sondern Brücke zu Komponente 1, Brücke, Komponente 2, Brücke, usw. Das Spart Zeit, Draht und Aufwand.


6. Mit PC verbinden
Um den Controller mit dem PC zu verbinden braucht man nur ein USB Kabel. Außerdem muss man Hairless installieren (das benötigt eventuell MIDI Joke, einen Midi Passthrough). Ohne Hairless würde der PC das gesülze vom USB Port nämlich net verstehen BigSmile

Wie man FL Studio mit nem Midi Controller verbindet muss ich in diesem Forum wohl nicht erklären BigSmile

7. Spaß mit dem neuen Controller haben!

Eine Nachricht vom Autor...

Ich hoffe euch hat dieses kleine mini-Tutorial geholfen. Es ist recht simpel gehalten und soll eigentlich nur zeigen, was alles wichtig zu beachten ist, wenn man so ein Projekt vor hat. Natürlich habe ich einiges Feinheiten ausgelassen. Aber der eigentliche Spaß dabei ist ja das selber machen - und wo wäre der Spaß wenn ich euch alles erzählen würde?  BigSmile BigSmile BigSmile .

Sendet doch einfach mal die Controller, die ihr selber gebaut hier rein - andere können bestimmt noch von euren Erfahrungen lernen!

Viele Grüße und viel Spaß,
Subbestionix

PS: Ich weiß ich hab andauernd zwischen du und euch gewechselt... naja egal xD
PPS: Ich hoffe das ist das richtige unterforum :O
Zitieren
#2
Hallo Subbestionix,

VIELEN dank für diesen Thread. Ich bin mit dem Götzi leider etwas verzweifelt, da er nie genau den richtigen Code in den Videos angibt und im Folgenden Video immer mit einem anderen Code weitermacht, etwas verwirrend.

Bei mir funktioniert nun endlich mein Midi Controller mit 4 Potis und 2 Schiebereglern.

Eine Frage habe ich jedoch, Der Götz Müller sagt in einem Video, dass es möglich ist, den Controller direkt über USB als Midi gerät anzuschließen ohne die Hairless midibridge etc. zu aktivieren. Das entsprechende "Tool" ( den umgebauten usb - > Midi adapter) habe ich bereits gelötet und er wäre einsatzbereit. Windows erkennt ihn sogar als USB midi controller. Aber mehr auch nicht.

Hast du ne Idee wie das gehen könnte? oder ist das mit deinem Code nicht möglich? oder mit dem Arduino UNO gar nicht möglich?

über eine Antwort freue ich mich sehr.

MFG

totem
Zitieren
#3
(01.02.2017, 17:33)totemsteiner schrieb: Hallo Subbestionix,

VIELEN dank für diesen Thread. Ich bin mit dem Götzi leider etwas verzweifelt, da er nie genau den richtigen Code in den Videos angibt und im Folgenden Video immer mit einem anderen Code weitermacht, etwas verwirrend.

Bei mir funktioniert nun endlich mein Midi Controller mit 4 Potis und 2 Schiebereglern.

Eine Frage habe ich jedoch, Der Götz Müller sagt in einem Video, dass es möglich ist, den Controller direkt über USB als Midi gerät anzuschließen ohne die Hairless midibridge etc. zu aktivieren. Das entsprechende "Tool" ( den umgebauten usb - > Midi adapter) habe ich bereits gelötet und er wäre einsatzbereit. Windows erkennt ihn sogar als USB midi controller. Aber mehr auch nicht.

Hast du ne Idee wie das gehen könnte? oder ist das mit deinem Code nicht möglich? oder mit dem Arduino UNO gar nicht möglich?

über eine Antwort freue ich mich sehr.

MFG

totem
das is schon relativ alt. der ist schon garnicht mehr im forum wie man oben sieht "unregristriert"

Red

(27.04.2015, 22:24)Fleshdiet schrieb:
[...]Aber wo ist der Song?[...]
[Bild: X7xqcAd.png]

Zitieren
#4
Schade, hätte ihm gerne seine Lorbeeren überreicht :BigSmile

Habe es aber selbst hinbekommen. Für diejenigen die es interessiert, man muss die Baudrate im Code auf 31250 setzen, statt 115200.

Lg
Zitieren
#5
ironie on:

möglich das er jetzt für 'm-audio' arbeitet und folgende 'Code Series' entstand!

[Bild: maudio_code_main(1).png]

ironie off:   LOL  LOL  LOL
~greetz~
Zitieren
#6
BigSmile

---
Der gute hat oben seine Mail@ hinterlassen, vtl. ist das ja eine Hilfe für Steiner
Zitieren
#7
schade auch, dass kein mensch auf den thread geantwortet hatte, als der TE noch da war :/
(18.06.2016, 15:46)Musik Magier schrieb: IMMER DRAUF HÄMMERN !!!  DYNAMIC IST WAS FÜR WEICHEIER !!!  IMMER DOLLE DRUFF DA !!!
Discord-Infos auf meinem Profil!
Soundcloud
Zitieren
#8
Wieso sehe ich das erst jetzt?! Ist ja total geil...
Danke dafür subbestionix.. auch, wenn du es wahrscheinlich niemals lesen wirst Traurig
_________________________________________________________________________________________________________________
http://soundcloud.com/AlfredDope
Zitieren


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Midi Eingabe direkt in Piano Roll anzeigen lassen Qbird 12 1.995 10.07.2017, 18:47
Letzter Beitrag: Qbird
  Controller für Knobs in beispielsweise Morphine Qbird 5 615 24.06.2017, 01:07
Letzter Beitrag: dENIZ sOUNDZ
  Hilfe bei Midi Controler monumentos 4 950 01.06.2017, 16:51
Letzter Beitrag: Lkas86
  DJ-Controller bis 300 Euro Calli 7 3.487 15.12.2016, 18:37
Letzter Beitrag: dENIZ sOUNDZ
  Roland TB-3 mit FL11 über Midi synchronisieren Frequenzberater 30 17.027 14.11.2016, 22:03
Letzter Beitrag: DJ Bluebull



Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste