Close
0%
0%

MiniWI woodwind MIDI controller

Small and light Arduino Pro Mini based wind controller with DIN-5 MIDI output and fingering based on the AKAI EWI.

Similar projects worth following
The Akai EWI4000s is a nice instrument to play, and I've been a proud owner of one for years now. However, its size and weight has always bothered me. Dealing a bit with small Arduinos lately, I got thinking – I should make my own small and light MIDI wind controller!
I set the primary goals early on:

• Size should be not much larger than a soprano or alto recorder. I chose a strip of oak 30 cm long and 4 cm wide as a base for the project. Weight would follow size.

• Fingering should be based on the Akai EWI. Then I would not have to learn new fingerings.

• It should be battery powered and rechargeable.

• Output should be DIN-5 MIDI to suit my hardware synths, not USB MIDI.

• Controls for octave switching, modulation and pitch bend should be easy to use.

• Cost should be kept to a minimum, meaning no fancy and expensive components.

• Looks and functionality should be good enough for actual performance.

Current state of project: Finished playable prototype with modifications for touch sensing, easier octave switching, extended range and portamento (glide) control.

Intended use: As MIDI controller for hardware synthesizers with patches set up for breath control on MIDI CC#2, e.g. Patchman Music wind controller patches. Can also be used with software synths using a MIDI USB adapter.

Main advantages over existing products: Small size (300x40x35 mm main body) and light weight (210 grams). Also low cost as a DIY project (you can get the components for under $50) and not very hard to build. To be compared with the original Akai EWI4000s/EWI5000 (670x61x69 mm, 874 grams batteries excluded) or the EWI USB (590x70x70 mm, 590 grams).

Demonstration videos:

ino - 16.06 kB - 06/15/2016 at 16:30

Download

LICENSE.txt

GNU GENERAL PUBLIC LICENSE

plain - 34.32 kB - 05/25/2016 at 10:56

Download

MiniWI-power-schematic.png

Schematic for MiniWI rechargable battery, booster and power switch circuit. Position 1: OFF/charge Position 2: ON

Portable Network Graphics (PNG) - 19.84 kB - 05/24/2016 at 20:25

Preview
Download

MiniWI-cap-pmt-schematic.png

Schematic for the playable prototype version with reduced key set and capacitive touch switches, modified for added portamento functionality and one axis octave stick

Portable Network Graphics (PNG) - 50.25 kB - 05/24/2016 at 20:03

Preview
Download

MiniWI-cap-schematic.png

Schematic for the playable prototype version with reduced key set and capacitive touch switches

Portable Network Graphics (PNG) - 47.06 kB - 05/24/2016 at 15:09

Preview
Download

View all 6 files

  • 1 × Arduino Pro Mini ATmega 328 5V/16MHz, version with breakouts for A6 and A7
  • 1 × MPX5010GP Pressure sensor, 5V
  • 1 × Adafruit MPR121 Capacitive touch tensor board
  • 2 × PS2 style Arduino joysticks for octave, pitch bend and modulation
  • 1 × Conductive metal tape I used copper for the solderability and matching color with the oak wood

View all 18 components

  • Part 5: Casio 2nd octave modification

    Johan Berglund05/31/2016 at 11:13 0 comments

    I was considering ripping the guts out of my broken Casio DH-200 Digital Horn and replacing them with a MiniWI circuitry. Keeping the octave switching as is would be very limiting if using the reduced EWI fingering of the MiniWI, so I had another look at the Casio fingering chart because I had a vague recollection of some differences in the higher note fingerings.

    Actually, it turned out to be like this – if LH1 isn't pressed while LH2 and LH3 are, you play the 2nd octave. For example LH2+LH3+RH1 would be F in the 2nd octave. To make this work with the existing fingering formula I had to change the conditions for the bis key, removing LH1 from that part, otherwise the bis key would affect the Casio fingerings. Don't see any drawbacks in doing that so far.

    So, what I did was to put a define in the beginning of the code for easy choosing between the EWI or the Casio modified fingerings...

    #define casioMod 1      // Extra notes on top Casio DH style

    ...then I replaced the calculation in the readSwitches function with this:

    //calculate midi note number from pressed keys
    if (casioMod){
        fingeredNote=startNote-2*LH1-(LHb && !LH2)-LH2-(LH2 && LH1)-2*LH3+LHp1-LHp2+(RHs && !LHp1)-RH1-(RH1 && LH3)-RH2-2*RH3+RHp1-RHp2-2*RHp3+12*OCTup-12*OCTdn+9*(!LH1 && LH2 && LH3);
    } else {
        fingeredNote=startNote-2*LH1-(LHb && !(LH1 && LH2))-LH2-(LH2 && LH1)-2*LH3+LHp1-LHp2+(RHs && !LHp1)-RH1-(RH1 && LH3)-RH2-2*RH3+RHp1-RHp2-2*RHp3+12*OCTup-12*OCTdn;
    }

    Seems to work just fine. It will probably be a very nice addition when I build the touch key control only TeensieWI later on. And of course a given should I decide to modify my broken Casio horn.

    I put together a chart with the most useful fingerings including the new Casio fingerings using Bret Pimentel's Fingering Diagram builder:

    Also made a chart more representative of the MiniWI look. Less friendly to the eyes? I don't know... putting it here anyways.

    If you note the look of the pinky finger keys is different from before, this is how they will look in the next prototype. I'm wrapping them around the other side and cutting them shorter to avoid accidentally touching LH pinky key with my right hand.

    The fingering changes have been added to the MiniWI-cap-pmt.ino on Github.

  • ​Part 4: Ideas for further development

    Johan Berglund05/25/2016 at 10:52 0 comments

    Along the way several ideas have popped up, and some of them I'm very likely to explore. These are:

    • A TeensieWI using the built in touch sense of the Teensy LC. This would also use the built in USB MIDI compatibility of the Teensy, and also draw power from the USB. I would use only touch keys and no joysticks or potentiometers, making this controller incredibly small. Thinking of sandwiching the components between two UV reactive translucent perspex sheets and put some UV/purple LEDs inside... just for the cool look :) More MPX5010GPs and a Teensy LC already ordered... :)

    • A MiniVI, as in Valve Instrument, based on the EVI1000 and the Steiner MIDI EVI. Already begun writing the firmware for this.

    • Built in sound capabilities. Possibly as a snap-on module for the MiniWI. I've bought a clever little MIDI synth chip programmed by fellow Swede Jan Östman, the dsp-G1. No problem to fit inside the already cramped MiniWI housing. Also got some small 5V amp boards and a variety of tiny speakers to work with.

    • Instead of conductive tape, make metal inlays in the wood. A bit more work, but could look awesome.

    • DIY kits? Maybe, if people want them.

  • Part 3: Evaluation and modification

    Johan Berglund05/24/2016 at 19:47 0 comments

    In general, the playable prototype was a success! Fingers fell naturally on the touch pads with only three minor instances where the pads should be altered or moved. One was the bis key between LH1 and LH2, where the LH2 finger would go across the bottom corner of the bis pad. This was easily solved with an x-acto knife. Another problem was the LH pinky key being a bit to close to RH1. Slight risk for glitching there. To be solved in later versions. Not too big a problem at the moment. Then there was a minor issue with the RH pinky keys being a bit too close to each other. This was mainly caused by one of the pads being a tad too big. Also solved with the x-acto.

    The choice of copper tape had an obvious backside to it – the oxidation. Using aluminium tape instead, or in combination with copper, could be a good alternative. I've also been looking at making metal inlays in the wood.

    Playability with the breath was no problem, as that was already tuned well from the breadboard prototype. Pitch bend and modulation joystick was also very well placed and it felt natural to use. Pitch bend needed to be scaled down a bit though, so I added a pitch bend sensitivity parameter in the firmware. With the present setting it will go only 50% of the value for full pitch bend. Much better.

    Octave shifting was not as easy to play as I had hoped. Using both X and Y of the joystick to control the octaves got kind of weird. I often slipped to the sides during play, and the sideways motion was generally not as intuitive as the up and down motion that on the other hand felt very similar to using the octave rollers on the "real" EWI. I decided to fix this by disabling the sideways motion and putting in a potentiometer for setting the base octave in five steps (-2 to +2) instead. This way I would get a wider range for the controller in total, but a more narrow range instantly accessable during play.

    A feature I realized was missing was control for portamento (glide), and as there was an unused analog input on the Pro Mini and unused inputs on the MPR121 board I could easily add a potentiometer for portamento rate setting and a touch pad by the mod stick at the same time as I did the octave stick modifications. When adding these new features in the firmware I also changed the playing mode to legato when changing fingering while a note is already playing. That means the new note gets a MIDI note on before the old one gets a MIDI note off. This of course to make the portamento work. So far there have been no issues playing my wind controller patches with this change, but there might be instances where the legato mode could use a disable function. Might look into that later.

    The firmware now feels pretty final, and the controller hardware is actually really nice to play! It is so light (200 grams) and small (300x40x35 mm for the main body) it feels more like playing a recorder than an EWI, and now when I switch to the EWI... well the EWI feels like an elephant in my hands :) I can without hesitation say: mission accomplished! :D

  • Part 2: The playable prototype with touch keys

    Johan Berglund05/24/2016 at 11:06 0 comments

    After a failed attempt to create a compact board with moving keys and switches, I got another push in the right direction by the Gordophone blog. Gordon had just published an example using capacitive touch switches, and of course I had to try that.

    I adapted my design and firmware for use with the Adafruit MPR121 capacitive touch sensor breakout board. At the same time I reduced the key setup a bit by removing keys I never or rarely use, just to get the instrument more compact and somewhat simplified. For a recorder or flute player moving to EWI this would still be a good setup.

    I cut the keys from adhesive copper tape (to my surprise marketed as anti-slug tape!) mounted them on my piece of oak with one end of the tape wrapping over the edge to the backside where I soldered in connection wires to the MPR121 board.

    With the hand placing marked out like that, I could proceed with the placement of joystick controllers for octave, pitch bend and modulation, putting them where my thumbs ended up and securing them with small wood screws (the kind that comes with micro servos).

    Then there was the matter of fitting everything else on the board, leaving some room on the sides for some 2 mm plywood walls.

    A bit tight, but it would work. The Pro Mini got a nice placement in front on a piece of perfboard with screw holes and soldered in headers for all the inputs plus a bunch of extra VCC and GND pins in the back.

    Frontmost I put the pressure sensor, for connection directly to a silicone tube mouthpiece. I kept the closed system (no air flowing through the instrument) as that proved to work very good. I actually prefer it over the flow through system in the EWI.

    In the back with the MPR121 board there was some free space for the connectors (MIDI jack and Micro USB charge board), and the battery plus the 5V step-up boost converter board were squeezed in between the joysticks.

    With the wiring in place I could still fit the plywood sides, so that was a success :) So, I just glued the housing together with some support bars and made a bottom for it. With removal of the two frontmost screws, the bottom could be pried open enough to connect the programmer to the Pro Mini for firmware updates.

    The playable prototype controller was completed! Time for evaluation! :)

  • Part 1: The breadboard prototype

    Johan Berglund05/23/2016 at 11:02 0 comments

    I started with very basic solutions. The only fancy component was the Freescale MPX5010GP pressure sensor. The rest was just switches and potentiometers (while waiting for the joysticks I was planning to use). From all the available pressure sensors on the market I went with the MPX5010 based on what other people had been using for the same purpose, and the GP version for the side mounted tube connection, the practical housing with screw holes and the through hole pins that could also be used with Dupont connector cables.

    The Arduino Pro mini would allow me to connect enough switches and potentiometers to recreate the EWI key set and some controls for octave, pitch bend and modulation, so I could stick to my plan there. Small size, low cost.

    For writing the firmware I first had a look at the page of Tom Scarff, midikits.net. I had ordered some stuff from him years ago and I remembered he had some examples on how to send MIDI with Arduino. I found he had also made wind controllers, and I had a look at his midi trombone code. It was rudimentary at best, so I just borrowed the midi routines and the comment style and figured I'd write the rest myself. I had a pretty good idea in my head how it should all come together, so I went ahead.

    My main concern was how to work out the decoding of the fingering. Most people seemed to use switch case functions where all thinkable fingering combinations were listed, but knowing my EWI I thought that could not be how the decoding was made. It seemed more like there were logical conditions for each individual key. Looking around a bit for answers I found the blog of Bret Pimentel and his post on flexible EWI fingerings.

    He had it all figured out. Each key changes the note value a certain number of semitones up or down, some of them with conditions. Let's list them here as variable declarations for the Arduino sketch:

    // Key variables, TRUE (1) for pressed, FALSE (0) for not pressed
    byte LH1;  // LH key 1 (pitch change -2)
    byte LHb;  // LH bis key (pitch change -1 unless LH1 and LH2 are pressed)
    byte LH2;  // LH key 2 (with LH1 pressed pitch change is -2, else -1)
    byte LH3;  // LH key 3 (pitch change -2)
    byte LHp1; // LH pinky key 1 (pitch change +1)
    byte LHp2; // LH pinky key 2 (pitch change -1)
    byte RHs;  // RH side key (pitch change -2 unless LHp1 is pressed)
    byte RH1;  // RH key 1 (with LH3 pressed pitch change is -2, else -1)
    byte RH2;  // RH key 2 (pitch change -1)
    byte RH3;  // RH key 3 (pitch change -2)
    byte RHp1; // RH pinky key 1 (pitch change +1)
    byte RHp2; // RH pinky key 2 (pitch change -1)
    byte RHp3; // RH pinky key 3 (pitch change -2)
    byte OCTup; // Octave switch key (pitch change +12) 
    So all that needed to be done was to get the TRUE or FALSE values from reading the switches into those variables and make those conditions work in C code to add or subtract from the MIDI note number stated as startNote. In this case it is C#-3 with note number 61, the note playing if no keys are pressed on the controller.

    fingeredNote=startNote-2*LH1-(LHb && !(LH1 && LH2))-LH2-(LH2 && LH1)-2*LH3+LHp1-LHp2+(RHs && !LHp1)-RH1-(RH1 && LH3)-RH2-2*RH3+RHp1-RHp2-2*RHp3+12*OCTup;
    Now, that was it! I had confidence in this now and went ahead full steam :)

    After wiring everything up on a breadboard and trying the controller out I realized most stuff was working just as I wanted it to, but there were serious issues with my main loop making notes stick and whatnot.

    Trying to make the flow work, I did some additional internet searches on the matter and then I found the Gordophone blog by Gordon Good.

    His step by step instructions on how to make Teensy/Arduino wind controllers included a very easy to follow state machine flow for the main loop. It seemed perfect, so I just inserted my code in his state machine and it all worked! I was thrilled, and immediately contacted him to say thanks and to let him know. I also wanted to share my thoughts on fingering to note calculation with him. He was very glad to hear from me, and he asked...

    Read more »

View all 5 project logs

Enjoy this project?

Share

Discussions

Giacomo.lazzerini wrote 05/16/2018 at 11:38 point

hi Johan. I have already a Mpx2010dp instead of mpx5010gp. Can I use 2010dp anyway or I'm forced to buy that particular 5010gp? If 2010dp is good, should I change the project and how? Thx a lot! Your work is awesome!!;)

  Are you sure? yes | no

Oddgeir wrote 07/05/2017 at 15:54 point

Very inspiring. I ordered the parts right away, and will build my own. I have some ideas.

I concider first to build with an ethernet port and use a single CAT-cable for both power and MIDI. This will be connected to a baseunit that will have powersupply and MIDI out. When I get this working I want to add another arduino to the baseunit and add 2.4ghz wireless on both. To power it wirelessly I will make a compartment for a usb powerbank. The house is full of them anyway.

I want to add another MPR121 and have 5  areas of copper on the back for choosing octave. The last used will be remembered so you don't have to hold your thumb there. I still want two joysticks. But use one for resonance/cutoff.

I also want to use a mouthpiece from a saxophone and make some kind of adjustable air resistance. 

Thank you so much for sharing your project. When I searched for "DIY MIDI wind controller" I didn't expect complete schematics and source code. 

  Are you sure? yes | no

Johan Berglund wrote 08/11/2017 at 12:35 point

Hej Oddgeir! :) I didn't see your comment until now.. sorry! Sounds like a nice project you've got there. How is it coming? Any progress? At the moment I'm involved in another wind controller project that you might wanna check out... https://hackaday.io/project/25756-diy-evi-style-windcontroller

  Are you sure? yes | no

Steve Ankel wrote 10/02/2016 at 13:40 point

A great project Johan , its making my fingers itchy as I have an EWI5000 and think it would have been much better with a reed sensor like the new Roland Aerophone . Shame I cant hack the software . Look forward to seeing more.

  Are you sure? yes | no

Johan Berglund wrote 10/03/2016 at 15:26 point

Thanks, Steve! I've never tried those reed style sensors of the WX and the new Aerophone, but I do know biting the mouthpiece of my EWI4000s gives me toothache. Maybe a reed sensor could work better for me. As for this project I have some other enhancements in the pipeline for it, like a USB MIDI mode and wood inlay  keys (for the next build). Also check out my TeensieWI project if you are interested. :)

  Are you sure? yes | no

Ken Landers wrote 06/28/2016 at 01:25 point

Johan, thanks for putting this together.  I play a Steiner MIDI EVI and have been somewhat paranoid about playing out with it as replacements are so hard to come by.  In the next few months I think I'll try adapting your system over to a trumpet-style controller.  thanks

  Are you sure? yes | no

Johan Berglund wrote 06/28/2016 at 06:05 point

Ken, thank you for your interest in my build! I'd love to see your trumpet style take on this! I actually made a EVI version of the firmware, but I haven't had the time to build the actual EVI based instrument for it and try it out. Also, I'm not a trumpet player, nor an EVI player, so I wouldn't even be truly qualified to tell if my design would be sensible. My EVI adapted firmware is available at https://github.com/Trasselfrisyr/MiniWI/tree/master/MiniVI-cap

You are most welcome to use it :)

  Are you sure? yes | no

J. M. Hopkins wrote 06/02/2016 at 02:09 point

Awesome to see others developing electronic woodwinds!

If you haven't seen it yet, my Hopkins Electronic Aerophone is here: https://hackaday.io/project/2992-hopkins-electronic-aerophone and some build videos here: https://www.youtube.com/user/jeffreymhopkins/videos


Regrettably I need to put a lot more work into it. I stalled at adding custom built pressure sensors under each button to add the ability to change CC messages by finger pressure like a violin or guitar effect.

Key highlights for my instrument is an onboard synthesizer and wireless MIDI. I haven't gotten around to developing a non-prototype version (get the PCBs manufactured and do a nice body) yet, but have plans to do so when life isn't so busy (ha!).

Anyway, good job!

edit//

Also, I played around with fingering a lot, similar fingering to the EWI on my instrument, but I extended it so that you played a high C (o@oPP oooPPP) and then lowered your right hand fingers it played a high D (o@oPP @@@PPP) to high F (o@oPP @ooPPP) this allows significant reduction in octave related glitching in fast runs.

And then for a lower octave starts at low C fingered like (o@oPP oo@PP@) to low F (@@@PP @oPP@) and even a low Eb possible by fingering in the two pinky keys (@@@P@ @oP@@)

I hope the fingering representation made sense.... I have two left hand pinky buttons (note++ and note--) on both hands, with the note - 2 key on the bottom right hand.

But this way the full scale within one thumb octave setting can be a low Eb to high G (o@o@P @oo@PP)

Some simple boolean switching to check for each upper or lower register configurations with each key on the instrument being note++, note--, or note+2 to be similar to EWI fingeing.

I didn't like the playing of upper register like Casio (high G o@@PP oooPPP) because I play my Bb that way most of the time if that makes sense

  Are you sure? yes | no

Johan Berglund wrote 06/02/2016 at 06:57 point

Thank you for your most excellent comment! :D I've seen some of your videos on YouTube before, and I've read a bit about it on the Patchman forum. Possibly here too. 

Interesting that you went with the dsp-G1 synth chip! I've bought one of those too to try out. (Jan Östman is a Swede too, so obvious choice :)) Haven't had time to try it yet though. Has it worked fine for you? Output from it enough for line or headphone connection, or du you use some amplification for it?

Also I find your extended fingering range interesting. Not sure I understand the lower octave part, though. Do you have a fingering chart?

Oh, and the wireless MIDI – does it work well? Low latency? I'd love to put Bluetooth MIDI in mine for directly connecting to an iPad, but I've heard the latency is horrible with those.

Sorry for all the questions.. :D

  Are you sure? yes | no

J. M. Hopkins wrote 06/04/2016 at 12:27 point

Sorry for the delay in responding, my employer isn't known for allowing a good work/life balance :)

As far as fingerings goes I'll see if I can't find a chart (I just moved and most of my stuff is in storage to include the computer system I do my development on) And that should help.

The DSP-G1 worked really well for me, I ran it through both headphones and an amp (keyboard and guitar) without issue. It can't do some things like glide etc, but makes a decent synth particularly with response if you map and scale the CCs right to take advantage of filters etc.

As far as wireless goes, don't go bluetooth, way too much latency. Use a dedicated RF module. I've used a 2.4ghz sorry range transceiver and now a 70cm long range transceiver with no notable added delay. Being truly wireless is so nice.

  Are you sure? yes | no

danjovic wrote 06/01/2016 at 15:33 point

Very cool project! Congratulations!

  Are you sure? yes | no

Johan Berglund wrote 06/01/2016 at 18:29 point

Thank you! :D

  Are you sure? yes | no

mailcabe wrote 05/27/2016 at 07:34 point

Nice write up Johan, some really useful stuff.

I have been considering building a midi ocarina interface, and its nice to know I am making the same design decisions as someone with an actual EWI.

How is the mouthfeel on the pressure sensor? I've been looking into wind speed sensors for an "open" chamber with tunable back pressure, but not getting much control (tonguing is definitely out).

  Are you sure? yes | no

Johan Berglund wrote 05/27/2016 at 11:10 point

Thanks! While losing the feeling of really blowing through the instrument, the pressure sensor is really the best choice for this in terms of responsiveness. While the EWI retains a small degree of air throughput, my design, like the original Steiner EVI/EWI design, uses a fully closed system. In either case you must apply the use of letting air slip out by the sides of the mouthpiece, and the closed system becomes slightly more responsive and takes up less space. It also eliminates any risk for erratic pressure readings caused by venturi effect at the tube junction. Recommended pressure sensors would be the Freescale MPX5010GP (or similar in same series) that I'm using or the even more close to human breath pressure range Freescale MPXV4006GP that Gordon is using for his controllers. You should check out his blog at http://gordophone.blogspot.com

  Are you sure? yes | no

krkl wrote 05/27/2016 at 11:47 point

For further inspiration you might want to look at this project: http://www.schlimme-gegend.de/schlimme-ideen/nibbletronic/

It too uses a Freescale MPX5010 family sensor and an Arduino but relies on channel volume instead of CC#2 to make it compatible with the synth used for sound generation.

The 'blow through' feeling is achieved by having two tubes in the mouthpiece of which one completely bypasses the sensor. This is not ideal and the next generation will feature some way of adjusting the bypass flow.

  Are you sure? yes | no

Gordon Good wrote 05/27/2016 at 06:55 point

Excellent work, Johan, thanks for sharing.

  Are you sure? yes | no

Johan Berglund wrote 05/27/2016 at 07:15 point

Thank you, Gordon! And thanks for all the help through your blog :)

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates