A MIDI Harmonica

MIDI, or Musical Instrument Digital Interface, has been the standard for computer control of musical instruments since the 1980s. It is most often associated with electronic instruments such as synthesisers, drum machines, or samplers, but there is nothing to stop it being applied to almost any instrument when combined with the appropriate hardware.

[phearl3ss1] pushes this to the limit by adding MIDI to the most unlikely of instruments. A harmonica might seem to be the ultimate in analogue music, yet he’s created an ingenious Arduino-powered mechanism to play one under MIDI control.

The harmonica itself is mounted on a drawer slide coupled to a wheel taken from a pool sweeper and powered by a motor  that can move the instrument from side to side with a potentiometer providing positional feedback to form a simple servo. The air supply comes from a set of three bellows driven via a crank from another motor, and is delivered by what looks like a piece of PVC pipe to the business end of the harmonica.

The result is definitely a playable MIDI harmonica, though it doesn’t quite catch the essence of the human-played instrument. Judge for yourselves, he’s posted a build video which we’ve placed below the break.

This isn’t the first automated harmonica we’ve shown you. There was this one that also used a slide, and another with a note selector using multiple air pipes.

Harmonica header image: Grassinger [CC BY-SA 3.0].


12 thoughts on “A MIDI Harmonica

    1. Yes, the video is a little… low res, isn’t it. That’s why I had to use the Wikimedia Commons header image. Tip: if you want to make a Hackaday writer’s day, include images in your project that look good when cropped to 800×250 and 600×600 pixels.

  1. How about a harmonica MIDI controller? Put a row of 470R bead thermistors just by the holes. Pass a few milliamps thorugh each with a current source/mirror setup. Thermistors will get slightly warm, lowering their voltage drop – unless the passing air cools them down. I wonder if the inertia would make it playable and how to solve the blow/suck detection – maybe a single pressure sensor to detect under/overpressure? Added to to-do list.

    1. I thought it would be about a controller, too. Aren’t there pressure sensitive devices that would output something related to how hard you blow?


        1. Midi note 60 is C3 the Frequency in Hz for is min = 26012 Ideal = 261.63 and Max = 236.14 see http://www.paleotechnologist.net/wp-content/uploads/2012/03/Musical-Note-Frequencies.jpg. I don’t understand why you would need sensors or pressure sensitive devices. Couldn’t you listen for a freq within a range and if detected send midi Note On command, the midi note identified, and the velocity? If this is repeated you would have a range of velocities for the duration of the note. Midi runs at 31250 bits a second that equals 500 notes a second. A guitar tuning App can identify the frequency and note being played what else would you capture from a sensor for each hole?

    2. I have used the smallest, fastest responding thermistor I could find at a reasonable cost in a design at work. It’s way to slow for this. You would need to use pressure sensors.

      1. Right now the code states, Int value = 0; if(velocity > 10) { value = 185; }else{ value = 0; analogWrite(air, value); delay(90); // The “air” designates the pin that changes the motor direction to blow or suck. Since midi first sends a note on command, then the note to turn on, followed by the velocity, it seems like I could use figure out the minimum analogWrite necessary to turn the bellows and use the “map” function to then change the velocity and speed of the motor, And since I am using a separate ardunino to move the harmonica I could also move between notes while the bellows are speeding up or slowing down. This link is my most resent success https://youtu.be/jxAqAMVhKms

  2. Harmonica playing isn’t just about the blowing – most harmonica playing you hear is played “cross harp” to at least some degree, where the shape of the tongue and mouth are used to shift the tone into different harmonics. Simple “is there air passing over this?” sensors and simple blowers aren’t going to capture/reproduce any of that…

    1. Almost all harmonicas produce different notes when a hole is blown into as opposed to drawing breath in, cross harp is merely a technique for getting a different set of notes relative to the key being played – http://www.wildflowerharmonica.com/cross-harp-vs-straight-harp/
      you can bend notes in either direction of breath and the only thing that effects the harmonic content is a technique used in both straight and cross harp of cupping the hands to change the resonant aspect of the reeds vibration in the air. The original spec for MIDI includes a breath control dedicated channel and several early MIDI keyboard instruments came with a breath control tube which could be assigned to control volume, timbre, vibrato, etc. I agree that it would be difficult to create a MIDI controller that would be sensitive to all the nuances of the “Mississippi Saxophone” but not impossible. I have been a harp player for 50 years and I’m from Chicago and have seen most of the great blues harp players in my day.

      1. If you look at the slider, there are actually two different harmonicas attached, one is a “C” and the other “F”. I could add several harmonicas and have all the notes that are needed making it unnecessary to cross-harp.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.