Final Project: MIDI Controller – Arun Abraham
For my final project, I sought to create a Piano MIDI controller that I could potentially use with a DAW (digital audio workstation) when producing/recording music for myself in the future. MIDI controllers are typically somewhat pricey, so I thought this would be a cool alternative.
Some of the challenges I faced when creating this project were with executing on the initial project conception with using a Raspberry Pi. I found a lot of difficulty with setting up the Raspberry Pi and had to continuously get more and more equipment for it to fully work, and even then, I had to scrap the idea because it wouldn’t have worked as smoothly as an Arduino would. I lost a lot of time trying to setup the Raspberry Pi before switching to an Arduino.
Another challenge I faced was with soldering, something I was relatively new to. I had soldered once before 7 years ago and had decided at that time that I would never do it again because it was difficult for me. Luckily, it turned out mostly fine this time, but one of the wires that was soldered didn’t have a great connection to the Adafruit MPR121 board. Another challenge I faced was with getting the touch capacitive data from the Adafruit MPR121 to be translated to MIDI messages that would be read by the computer and any MIDI software or DAW. I tried to do this originally all with the Arduino code but found that I needed a Python script to translate the Serial input from the Arduino into MIDI messages instead. In the videos below, you can see how I experimented with MIDI messages apart from the touch sensors, in order to get that working first. In the first video, I was able to get MIDI data to send from the Arduino but it wasn’t connect to the MIDI player. In the second video, it played through the MIDI player by means of a virtual MIDI port created using the LoopMIDI software and Hairless MIDI <-> Serial Bridge to send the Serial data to the port, which was then set as the MIDI input for the MIDI software I used (Virtual MIDI Piano Keyboard).
The last challenge that I faced was with getting the MIDI messages to go to the MIDI output device of choice. I was easily able to have the computer output sound when I touched the sensors, but it needed to play through the device, where I would see the piano keys on it being pressed down as I touched it. I had to use a variety of different software to get this work, including a virtual MIDI port, but it ended up connecting smoothly after trying out the different settings and figuring out what worked!
I am most proud of the fact that I was able to use my prior programming knowledge in Python to process the data from the Arduino! I found it cool that I could use the skills I learned from this class and combine it with my prior skills to create something that was even useful for my own music projects!
Learning Goal 1: I want to challenge myself to incorporate a Raspberry Pi into my project because even though I am a computer science student, I do not feel comfortable dealing with circuits, wires, and microcontrollers/microcomputers (I avoided hardware and ECE classes).
Unfortunately, I was unable to meet this goal because of unexpected circumstances with the Raspberry Pi and the corresponding equipment for it. However, I was still able to use a microcontroller in the Arduino and used libraries that I had not used before in order to make this project work. Likewise, I was able to face my discomfort with using circuits and wires and even soldering as I used the Adafruit MPR121, a new sensor, with the Arduino. I learned that the Arduino is capable of doing a lot more than I originally thought! While I thought it was a very basic computer simply by the fact that it runs a continuous loop, I was surprised to see the sheer number of libraries for it. It was cool to experiment with the different MIDI libraries and learn more about the Serial library as well. It was definitely for the best that I used the Arduino rather than the Raspberry Pi because I think the Raspberry Pi would have added a complexity that wasn’t really needed for the scope of this project. As a result, I am happy with the outcome and the implementation!
Learning Goal 2: I want to personalize the design by adding my own touches to a standard design so that I can push my creativity.
I feel that I was able to personalize the design by creating the piano keys completely from scratch in Inkscape. It was very simple to design, but it was cool to have used the Epilog Laser to raster the piano keys onto plywood for the MIDI controller. Most designs online used aluminum foil or conductive ink, so they were usually constructed on paper, so it was cool to see how it would look on a piece of engraved wood. I would have liked to add color to it somehow, but likewise, the black keys were done with raster, which would have been covered up if I had included a sticker or cardstock by using the Silhouette cutter. Likewise, the foil covered up most of the wood, but it was necessary in order to have the alligator clips attach to it and have the keys be conductive. Though I had a picture of what the board would ideally look like in my head, I learned that it is near impossible to have it look exactly like a design concept simply because all of the tools and material might not be in place. I learned that there is a great need for flexibility, adaptability, and compromise when it comes to the design process!
As I already stated, I think I learned that there is a great need for flexibility and adaptability when it comes to designing and making something. As a computer science student, I’ve seen it as I’ve written code and worked on different projects, but when it has come to this class and the mostly hands-on work, I’ve come to see even more how ideas may need to be scrapped and I have to start over from the beginning when things go awry. It really takes a lot of patience and planning in order to make a good product, and it may even take multiple prototypes to get something working as you originally planned. It may even require tweaks to the original design and omission of things that just aren’t feasible with time, material, or equipment constraints.
One thing that I’ve definitely become more comfortable with is working with hands-on projects. In the past, I steered clear of these projects because I feared the attention to detail that was necessary for these sorts of projects, but I found myself enjoying the projects in these classes (especially the Arduino units) as I became more accustomed to working with my hands. I definitely feel more confident as a maker and feel like my creativity really developed this semester.
I think this course definitely has caused me to think about myself and my potential differently. Apart from coding, I was very hesitant with other forms of engineering, but now, I feel more adventurous and willing to try out new things related to making. Likewise, I felt like my creative capacities were always limited to the arena of coding, but now, I see how I can be creative with other things, like when using Inkscape for laser cutting and stickers or the different sensors and outputs for the Arduino. I think I feel a lot more confident when it comes to potential independent projects in the future, and I would be more willing to do craft work in the future as well.
I think I considered myself a maker before because of my computer science background and the numerous projects and apps I worked on before, but I definitely would identify more as maker now after this class because I’ve had the opportunity to work on several different kinds of projects to expand my skill set.
I think that the term maker really can be a broad term to refer to anyone who can create or recreate an item by their own hands, starting at the design process and then progressing to construction and testing until a final product is achieved. I feel like this is definitely in line with Seymour Papert’s quotation as well because being a maker requires a person to do a lot of hands-on work and requires them to be original in their ideas, which usually makes it personally meaningful. This quotation definitely means more to me now in the context of making because having to design my own projects and think about how they would benefit me or be interesting to me was directly correlated with how driven I would be to complete the project. Unlike with required projects in past classes, I found myself much more interested in these projects once I had come up with an idea. The drive to complete the project that came with the idea would prompt me to learn new things in order to complete these projects and do them well, so I feel like I definitely learned a lot as a result of that. The hands-on nature definitely played a big part because it somewhat forced me out of my comfort zone and forced me to experiment with different ideas so that there would be a learning by trial and error.