ControllerMan S6 - Arduino Midi Programmable Stomp

2,357

14

13

Introduction: ControllerMan S6 - Arduino Midi Programmable Stomp

The moment you start looking for a midi controller is the same as you start having to study how the midi protocol works. Normal people would look for the midi controller that suits them but the Maker is not satisfied and wants to do more: this is why we are here. Arduino is a great platform to control the midi protocol and you just need few more components to make it working. Then, you have to choose what to do to get the best.

You need to choose the right size to get the best compromise between space and functionality. I can say that more is better but not everything is necessary at the same time so I decided to create the Layouts. In this project you have six buttons but switching trough four layouts you can have 24 virtual buttons! Every layout is identified by a color (red, green, cyan and purple) and the RGB led lets you know anytime where do you are. And this is just the begin because every button can be configured to support Double-tap and Long-tap functions so, in a single layout you can access up to 18 functions as well.

You also need to know what a button does and this is the begin of the problems so becomes necessary to use a display. A large display lets you read everithing when you are standing.

Every component has been purposely choosen to be easily available on the web.

Supplies

  • Arduino nano with terminal adapter;
  • 1590DD alluminum chassis (187x119x33);

  • LCD Display 128x64 ST7920 5v;

  • 6 momentary stomp box buttons;

  • 1 RGB led common cathode;

  • sockets for Midi and power;

  • socket for 9v power and a 1N4001 diode for for reverse power protection (any 1n400x series will be fine);
  • screws and PCB spacers;

  • drill and fretsaw

  • The source program: https://github.com/mrandisi/controllerman

Step 1: Let's Get It Started!

Once you've got the components, you need to do a great job to drill the aluminum box. It needs a lot of manuality to do it so I decided to give only the major guidelines.

To begin, sign with a pencil the button positions to make the hole. Make sure that internally you have space for the bolts: the box has the beams for his screws! Afterwards you can choose the right position for the display keeping in mind to left space for the Arduino socket on one side and the RGB led on the other. Make the same for the sockets on the back panel. A new set of drill bits for metals will be you best friend to cross the aluminum without effort.

Step 2: Drilling the Box

To make the holes begin from a small one. Enlarging it will let you keep the center with more precision.

The worst comes with the display's hole. You need a fretsaw and a lot of patience. I suggest to divide the work in two or three days. Make sure to design well the footprint, you will not have a second chance! To begin you must first make a hole with the drill. Then remove the blade from the hacksaw and reassemble it by passing it through the hole.

Installing the display, make sure that is in line with the surface of the box. To protect the display, cut out a phone film large enough to cover the entire hole. Apply some strips of double-sided tape around the display frame, then attach the film - dust will no longer be a problem.

You can download here the graphics: https://bit.ly/CMS6Graph

Print a low quality preview before the final sticker, to make sure it fits well. You can edit it with Gimp to let your printer realize the perfect size. Take the cutter and make a hole for the display. Don't be in a hurry to attach it - make sure all the front screws have been mounted.

Step 3: Install the Source Program on Arduino

To proceed you need the Arduino IDE: go to https://www.arduino.cc/en/software and get the right one for your platform if you haven't done so yet.

You also need the controllerman program. Get it on https://github.com/mrandisi/controllerman . It contains the main program controllerman.ino and two library headers with the implementation inside: DeviceSettings.h and Display.h .

Copy the controllerman folder to your arduino projects folder and open it into the IDE. Some libraries are missing, install them clicking the top menu Tools > Manage Libraries. If no error occurs you will be able to upload the sketch using the top-left arrow. If upload fails instead check that the right board is selected on both Tools>Board and Tools>Processor

The program is completely ready to run but if you need to understand the logic, begin with the manageAction() function, which checks the buttons and calls the following:

  • singlePress() - the simplest click;
  • singlePress_hold() - the long press;
  • doublePress() - simple click on two buttons simultaneously;
  • doublePress_hold() - long press on two buttons;
  • doubleClick() - two subsequent clicks.

Step 4: Assemble the Wires

Below you can find the Fritzing .fzz document with the wirings.

You may connect the display wires directly to the Arduino's socket but you would get a clew. You need a matrix board to connect the pins, then just the necessary wires will reach the microcontroller.

All the other wirings are set at the top of the arduino schetch as follows:

- buttons: one pin on the ground, the other: 14, 15, 16, 17, 18, 19 from 1st to 6th button.

- RGB Led: 5, 8, 9. and the ground. Sold the resistors on each anode, 150ohm for red and 100ohm for green and blue.

The midi out at the TX serial pin. Sold two resistors near the midi socket before connect: https://bit.ly/NotePlay

The Vin pin on arduino will let you power the controller directly with a daisy chain cable, as a 9v common effect pedal, according to the documentation it accepts from 7 to 12 volts. The diode 1n400x in series will protect in case of wrong reverse powering.

Step 5: Configure the GT1000 and Set the Controller.

The controllerman stores the effect state (on/off) for the first 125 patches. Every patch change loads all the states to the device. Make sure to use the button combination 2+3 and 5+6 to move up and down between the patches.

Using the combination 1+4 and 3+6 you can move between the layouts (red > cyan > green > purple > red) as shown in the third video. The central buttons combination 2+5 resets the layout to red wherever you are. Keep this buttons pressed for at least two seconds to enter the menu.

The combination 1+2 and 4+5 is reserved to control an analog parameter on the CC 95. Starts from 80% and increase/decrease with a step of 10%.

In the next video you can se how to configure the GT1000 to read the messages. Going to menu > control assign > assign settings you can choose a slot, select your preferred target and assign a Control Change Number. Make sure that the mode is set to "moment". If nothing works check that both devices are using the same channel number.

Following you can see how to configure the controller. More in depth links the double click function to another button. In the same screen you can see the other features of the single button: the CC assigned, short name, long name and the link for the long press function.

I hope you liked this project and my Instructable. If you have feedback or questions feel free to leave a comment.

Thanks for reading,

Marco Randisi

Be the First to Share

    Recommendations

    • New Year, New Skill Student Design Challenge

      New Year, New Skill Student Design Challenge
    • Jewelry Challenge

      Jewelry Challenge
    • Photography Challenge

      Photography Challenge

    13 Comments

    0
    craighissett
    craighissett

    8 weeks ago

    This is amazing! It's exactly what I need to add to my Tiny effects Rig project, although I'd need to incorporate USB MIDI for use with my Raspberry Pi.
    Would switch the Nano out for a Pro Micro or similar board and updating that midi line in the code be enough to use it?
    I could also add a Pro Micro in the pedal as well, establish a software serial on the Nano and use a Pro Micro as nothing more than a Serial>USB MIDI converter.
    I'm excited ha ha ha!

    0
    mrandisi
    mrandisi

    Reply 6 weeks ago

    I don't know about the Pro Micro, I just tested with the Nano. If you try let me know it! :)

    0
    craighissett
    craighissett

    Reply 6 weeks ago

    I certainly will! I've dug out an official arduino Micro, will try loading the code on next week hopefully, and try switching out that USB MIDI line too.
    Once I get a 6 button one worming I'd love to expand on your great code and put an Arduino Mega (or Due, with its native USB port again) and add a whole lot more buttons.
    I'd also like to mess around with the display and try and get something more basic for lcd screens.

    0
    mrandisi
    mrandisi

    Reply 6 weeks ago

    Wonderful idea to use the Mega! Nano is really small and more space is needed to write more code. I used it just to find an easy and cheap solution for everyone. But Mega is necessary to write more functions. Then I would like to solve the issues on the midi input. If you need support to understand the code just let me know.

    0
    craighissett
    craighissett

    Reply 6 weeks ago

    Thank you, 8 will certainly let you know when I start looking at code changes. The nano is an amazing little thing and can be easily expanded using multiplexer chips for more pins, but the mega is just easier for folks to use as it has all those pins and extra memory.
    Plus it may also be possible to use a midi shield with it and still have enough pins for everything else.

    0
    dkbass
    dkbass

    2 months ago

    Thanks for sharing this project, I needed something like this to connect my stomp.
    Currently I have everything ready waiting to receive the arduino one to complete the project but I see that there are two holes for midi and in the scheme only comes out the wiring for one, how is the other midi connector connected?

    Thank you again for your work.

    0
    mrandisi
    mrandisi

    Reply 2 months ago

    The project has started with the aim to create a generic platform to develop on but after creating the necessary for my needs I decided to stop develop and publish this project as open source to provide a base to develop something more.
    I started developing some code to read the input but I had some electrical noise problems and I stopped. In the code there are parts for midi reading which are commented.
    So currently the midi input port and the expression pedal jack are not used but if someone will make some improvements I'll be happy to link here his work.

    0
    Baranork
    Baranork

    2 months ago

    Hey, this project it's awesome! Could there be a way to control a DAW via MIDI input with something like this?
    Thanks!

    0
    mrandisi
    mrandisi

    Reply 2 months ago

    The menu lets you customise the control change number for each button to activate/deactivate something. Depends on what you need to do...

    0
    ginopelle
    ginopelle

    2 months ago

    Ciao
    Possibile sapere il jack (che immagino per il pedale di espressione) dove lo hai collegato?
    Non è presente nello schema.
    Ti chiederei anche un aiuto per un controller che ho fatto io (semplicissimo)
    Vorrei il double tap e press e hold
    Grazie

    0
    mrandisi
    mrandisi

    Reply 2 months ago

    La funzione doubleclick è un po' complicata. Per ridurre al minimo il timeout inizio a contare sulla fase di rilascio del 1° clic e si attiva nella fase di pressione del 2° clic.
    La lettura analogica sul jack non è implementata, per questo non è collegato. Comunque controlla la funzione manageAction() per capire meglio, è la parte cruciale del programma.

    0
    ginopelle
    ginopelle

    Reply 2 months ago

    Ok grazie ma troppo complicato per me.
    Ciò che ho fatto va bene per adesso (ed è anche troppo per le mie capacita)
    La lascerò così la mia e proverò a costruire la tua.
    Grazie ancora

    0
    StumpChunkman
    StumpChunkman

    3 months ago

    Very cool. Thanks for sharing.