Arduino Based ZOOM MS70-cdr Midi Program Changer

11,347

21

40

Introduction: Arduino Based ZOOM MS70-cdr Midi Program Changer

This project is based on Lawrence Doss 's one. The only difference is on the choice of the usb host device (in this case a USBHOST2 from Hobby Tronic with Midi firmware on. If you haven't or cannot afford this device, please see my other instructable to try other shield. Here is an exemple of what you can generally make with an Arduino bord, here a Uno one and 2 switches. The number of presets depending of how many switches you need and the capacity of the Arduino board obviously.

Step 1: MS70 Arduino Midi Program Change

material:

1. arduino UNO - chinese one they're cheaper

2. USBHost from Hobby Tronic

3. two momentary spst footswitches (or more than two depending on which example you'll take)

4. spare electrical cable

5. a box to fit all

6. a usb cable between usb shield and Zoom pedal + another one to program the arduino (different type)

7. spare arduino's male pins

8. nine to twelve volts transformator (positive center pin) for the Arduino

9. ZOOM MS70-cdr obviously / with its own power supply (negative center 9V.)

tools:

1. soldering device

2. iron

3. drilling tools if you want to fix all in the box

4. some hot glue always help!

5. Arduino simulator free @ https://www.tinkercad.com (optional)

.

Step 2:

Solder cables with the male pins and the instant switches (see schematic), the choice of the pins is yours just adapt the code and send it thru your Arduino ide (mine is version 1.8.5). Pay attention that these chinese Arduinos need a proper driver.

Connect the usb host to your Zoom pedal, it doesn't need proper power when connected to USB but it's less noisy .

Plug your Arduino board to power transformer (wait a moment)

Test all the thing, it must do work! If not, check out all cables and wiring.

.

Step 3:

if it works disconnect it all, fix it all in your case (some drill work needed here)

drill a hole for power plug and another for the usb host, ensuring that it all fits in your box before.

Don't forget to drill holes for your switches, except if you plan to make'em externals...

I suggest to put a little hot glue on the soldered males pin and to NOT solder anything directly on your Arduino board.

.

Step 4:

Upload the exemple code here below but pay attention that they are two different schematics as two different projects like exemples... Connect it all again and enjoy!

You normally do have in the exemple 1 below, one switch to increase preset and another to decrease . For any other kind of controls just adapt your ino sketch. If you need help just ask.

------------------------------------------------------------------------------------

Arduino example code (see below):

added: the sketch named MS70_4patches_2banks is an example suggested by a follower that involved 4 switches (4 patches) and 1 switch to select bank A or B, by ex: 1 to 4 = A / 5 to 8 = B.

Just adapt code to hardware (pin numbers etc...)

------------------------------------------------------------------------------------

Step 2: Personal Links of Interest

check out the most outstanding band I actually play on !

ZeK

Microcontroller Contest 2017

Participated in the
Microcontroller Contest 2017

Be the First to Share

    Recommendations

    • Microcontroller Contest

      Microcontroller Contest
    • Automation Contest

      Automation Contest
    • Make it Glow Contest

      Make it Glow Contest

    40 Comments

    0
    hextreem77
    hextreem77

    5 months ago

    Can you control boss me 25?

    0
    CarraN
    CarraN

    Reply 5 months ago

    Hi !
    not tested but probably yes...

    0
    aave21158
    aave21158

    Question 6 months ago

    Hi! So which code am I going to upload to my UNO? Sorry, I'm a bit Slow.

    0
    oetzi1977
    oetzi1977

    Question 2 years ago on Step 1

    Hi, I've realized your arduino based controller for Zoom ms70cdr, and it works great!
    I was wandering if it could be "expanded" with more functions. Unfortunately I'm not a programmer, and I don't know how to modify Arduino code to add more switches.
    Is it possible to recall a specific patch instead of slide one step up/down?

    I've seen a project where you got 4 stomp - like the two in your project - to recall 4 different specific patches, and another stomp (3pdt?) to switch between bank A/B, so you can have 8 patches to recall.

    1
    CarraN
    CarraN

    Answer 2 years ago

    Hi!

    yes it could be used as an example but more important it sould be used to expand it, depending on the kind of arduino you choose and the final project you want ! In your case it's very simple to do, the key of the code are the program change numbers and which switch act to change 'em. If you own a Uno you can built until 17 switches and choose what you want they do. Theorically you can even built an arduino based programmer but I don't recommend you to do it at this stage, more skills are needed!

    Feel free to ask for more if it's too general...

    edit:

    your code->

    int presetSwitch[] = {14,15,16,17}; // presets 1 to 4

    const int rangeSwitch = 18; // add or disminish +4 (range)

    int range = 0;

    int programChangeValue = 0; // if you want to begin from preset 1

    int dlay = 100; // adjust this to taste

    /******************************************************/

    void setup()

    {

    for(int i=0; i<5; i++)

    {

    pinMode(presetSwitch[i], INPUT_PULLUP);

    }

    pinMode(rangeSwitch, INPUT_PULLUP);

    Serial.begin(31250); /* for midi communication - pin 1 TX */

    }

    /*********************************************************/

    void midiProg(byte pcNum)

    {

    Serial.write(0xC0); //midi program change status

    Serial.write(pcNum);

    }

    /*********************************************************/

    void rangeValue() //select presets 1 to 4 or 5 to 8

    {

    if (digitalRead(rangeSwitch)!= HIGH)

    {

    range = range +4; // add 4

    if(range >4)

    {

    range = 0; // minus 4

    delay(dlay);

    }

    }

    }

    /*********************************************************/

    void loop()

    {

    rangeValue();

    for(int i=0; i<5; i++)

    {

    if(digitalRead(presetSwitch[i])!= HIGH)

    {

    programChangeValue = programChangeValue + i + range;

    midiProg(programChangeValue);

    delay(dlay);

    }

    }

    }//end

    cheers

    0
    oetzi1977
    oetzi1977

    Answer 2 years ago

    Great! Thank you so much!

    The board I'm using is the one you linked into your instructable, with the usb shield from hobbytronics.

    In order to "miniaturize" it all I was wandering if this board can be used instead of the UNO:

    https://www.aliexpress.com/item/MINI-USB-Nano-V3-0...

    About the code you sent me:
    I have to copy/paste this code into Arduino IDE and Load to the board, right?

    Just a question: this setup will let me select between 1,2,3,4 patches WITH bank a/b switching?
    so it will be: BANK A - Patch 1,2,3,4 / BANK B - Patch 1,2,3,4

    I'll attach an incomplete image of PIN Usage: is it necessary to use a 3pdt (or 2pdt) for bank switching, or a soft touch 1spst like the other 4 can be mounted using only pin 4?

    I was thinking about 3pdt or 2pdt to insert a led that gives you visual feedback about the bank you are using, but maybe this can be done from the arduino board...

    Thank you so much!

    Schematic-Patch-Switcher.jpg
    1
    CarraN
    CarraN

    Answer 2 years ago

    Hi!

    sure you can use other Arduino boards including the nano one and it's simple as with the UNO to upload the sketch. Pay attention to select the right board in your IDE. The banks are disposed as 1 2 3 4 and 5 6 7 8 depending on how many times you push down your "soft touch switch" like you say. By default, there are 1 2 3 4 selected but it's up to you by changing the value of

    int programChangeValue = 0;

    You can also add leds, here is the sketch:

    /******************************************************/

    int presetSwitch[] = {14,15,16,17}; // presets 1 to 4

    const int rangeSwitch = 18; // add or disminish +4 (range)

    const int patchLed[] = {2,3,4,5}; //led per patch

    const int bankLed = 6; // led for bank on/off

    int range = 0;

    int programChangeValue = 0; // if you want to begin from preset 1

    int dlay = 100; // adjust this to taste

    /******************************************************/

    void setup()

    {

    for(int i=0; i<4; i++)

    {

    pinMode(presetSwitch[i], INPUT_PULLUP);

    pinMode(patchLed[i], OUTPUT);

    digitalWrite(patchLed[i], LOW);

    }

    digitalWrite(bankLed, LOW);

    pinMode(rangeSwitch, INPUT_PULLUP);

    Serial.begin(31250); /* for midi communication - pin 1 TX */

    }

    /*********************************************************/

    void midiProg(byte pcNum)

    {

    Serial.write(0xC0); //midi program change status

    Serial.write(pcNum);

    }

    /*********************************************************/

    void rangeValue() //select presets 1 to 4 or 5 to 8

    {

    if (digitalRead(rangeSwitch)!= HIGH)

    {

    range = range +4; // add 4

    digitalWrite(bankLed, HIGH);

    if(range >4)

    {

    range = 0; // minus 4

    digitalWrite(bankLed, LOW);

    delay(dlay);

    }

    }

    }

    /*********************************************************/

    void clearAllLeds(int except)

    {

    for(int j=0; j<4; j++)

    {

    digitalWrite(patchLed[j], LOW);

    digitalWrite(patchLed[except], HIGH);

    }

    }

    /*********************************************************/

    void loop()

    {

    rangeValue();

    for(int i=0; i<4; i++)

    {

    if(digitalRead(presetSwitch[i])!= HIGH)

    {

    programChangeValue = programChangeValue + i + range;

    midiProg(programChangeValue);

    clearAllLeds(i);

    delay(dlay);

    }

    }

    } //end

    /******************************************************/

    cheers

    0
    limavinicius88
    limavinicius88

    Reply 8 months ago

    Oi CarraN, è possivel usar esse codigo como base para um loop de 8 pedais com display como ha em outro post seu?
    gostaria de em vez de 8 botoes para selecionar usar somente esses 4, e alternalos atraves do botao bank.
    desde ja agradeço

    0
    Username2020
    Username2020

    11 months ago

    Hi, Nice work and thanks for sharing.

    a couple of questions...

    I've bought a USB host shield and I assume there's no need to connect 5V/GND but no idea how to deal with the TX (I have zero arduino knowledge)

    Do you have any photo of your project before any assembly? so I can take a look at the connections.

    Thank you
    PD> I'm starting with the increase/decrease example

    uno + shield + proto.jpgusb host shield.jpg
    0
    Username2020
    Username2020

    Reply 10 months ago

    Hi Carranen,

    Went there at Lawrence's forum but seems like a dead thread. What happened to your project?

    0
    CarraN
    CarraN

    Reply 10 months ago

    My project involves a shield that is (apparently) not available anymore, sorry. I let it for those who already own it. Just in case it seems that Kenton done it to sell :


    cheers

    0
    Username2020
    Username2020

    Reply 11 months ago

    Sure, thanks for your fast reply, have a nice day!

    0
    coaqii
    coaqii

    Question 1 year ago

    How can I use the ino file with a different usb host?
    I have one which needs this library: https://github.com/felis/USB_Host_Shield_2.0
    And cant seem to use your project...
    Ive tried to include usbh_midi.h but that doesnt seem to help.. Can you help me out?

    0
    SpiffyBiscuits
    SpiffyBiscuits

    1 year ago

    Hi

    This is an amazing resource. I’ve been looking for ages for something like this and tried lots (including Lawrence’s) and this is by far the simplest.

    I’ve got the increase/decrease working just fine but when I use the patches some of the buttons skip a random amount of presets then stop working altogether.

    Anyone got any clues for a fix or had this happen to them?

    0
    CarraN
    CarraN

    Reply 1 year ago

    Hi!

    if you post your code (and a schem) maybe we'll can help...

    cheers

    0
    SpiffyBiscuits
    SpiffyBiscuits

    Reply 1 year ago

    Hi! Thanks for replying!

    I just used the patches 2 bank code unedited from the download above and copied the circuit from the schematic above. It worked perfectly for the up and down change with the other code and I just added a few more switches for the patch change code and it acted not quite as I was expecting!

    Thanks