All started with an idea for a Midi Switch 18 years ago - at this time standalone components like microcontrollers (8051), EEPROMs, etc. existed but combining them was complicated and time consuming. As a student of electrical engineering at the University of Stuttgart, I ran out of time and was not able to finish the project. After graduation I started working for IBM R&D in Böblingen which did not fix my time problem for personal side projects either...
Last year my brother sent me a book about the Maker Movement and this reminded me about my passion for inventing things and while reading thru the book I came across the Arduino platform. It was an interesting looking microcontroller platform using Atmels ATmega328p. Searching on youTube, there were so many great Arduino projects and the same day I saw those, I ordered my first Arduino Uno R3.
The first hello world blinking LED example was successful and so I continued diving deeper into the fascinating world of Arduino and the microprocessors. After completing all the nice tutorials I asked myself: What's next? I remembered the Midi Switch I wanted to build long time ago and decided to use this project as my learning vehicle. The winter holidays were arriving and I was enthusiastic about picking up where I struggled 18 years ago...
Since I was working on this project anyhow, my goal was to create something competitive, adapt to established standards but even go beyond what's available and become the most advanced, simpliest to use midi switch ever. First task was to do some research on the internet for similar projects and what's out on the consumer music market. I found some professional midi switches and maker projects, but either they were expensive (~329$), were lacking features or seemed to be very complicated to work with. My philosophy is to start thinking about a product from the consumer side and to approach the product from the angle "how would the product look in a perfect world". Intuition and Usability are key for me and handling should be as simple as possible having the the best defaults. The underlying engine has to be powerful, modular and maintainable - but first is the customer experience.
So I knew what the features should look like and started on the electrical part first on a breadboard. I started with buttons, LEDs, relays, and drivers. Since the microcontroller did not have enough ports for 9 buttons, 8 relays, 8 channel LEDs, and a status RGB LED I had to multiplex the inputs (buttons) and latch the outputs (relay, LED). I decided to use a 1:8 multiplexer (CD4051) that require a 3-bit address, a data input and an enable pin for the channel buttons - so instead of using 8 pins of the Arduino I reduced the count to 5. Not much saving you might say, however the same 3-bit address and same data can be used for the output LEDs and relays. The outputs for LEDs and relays need to remain their state, thus need to be "latched". I used a CD4099 for this purpose which again receive the 3-bit address, data and an enable pin. So effectively the pin count is reduced from 24 (3x8) to 8 (3 Adresses + 1 Enable for channel LEDs + 1 Enable for relays + 1 enable for buttons +1 Data Input for Buttons + 1 Data Output for Relays and LED) pins.
I was fascinated by how quickly I moved forward with the help of the forums and all kind of resources on the internet. We live in an extremely interesting time where information is right at your finger tips - you can achieve everything if you have the drive to learn. Compare this to what I did when I first started the project, spending hours in the library searching by keywords for books that might match what I was looking for and realizing later that the part I needed was not covered...
In parallel to the electronic design I was working on the firmware, or "sketch" like it is called in the Arduino world. The buttons should support short press and long press to execute different functions. The channel LEDs should reflect the state of the relay (closed/open) but should also be used independent of the relay state to show different operation modes during the setup procedure - so relay and LED state need to be independently controllable.
After the design on the breadboard connected to the Arduino worked well I moved ahead and created the first standalone schematic and PCB layout with the free version of Eagle. MISWINO was born - decoupled from the "mother" - a true device . The firmware still needed more work but the electrical part was finalized. A lot of care has been taken in placement of components to prevent crossing connections. The key is to swap equivalent ports of the microprocessor until everything lines up. This time consuming procedure at the end allowed me to survive with a single sided PCB! Next step was exposing, etching and drilling the PCB and finally soldering the components on the board.
Since I had a certain form factor for the case in mind I split the PCB into an upper and a lower portion that were sandwiched on top of each other. In the picture you can see the first version of the prototype in the back, and the more compact version with optimized component placement in the front.
As for any prototype some things work and some don't - and the most we learn from things that do not work! An oscilloscope is a nice help in debugging and I got them all ;-)
A thorough design deserves a cool case!
The time was come to spend some thoughts on the case. I started thinking about a metal enclosure like I usually did in the past for any kind of electronic devices. However 3D printing really fascinated me and I decided to start designing my own case and send the 3D STL files to Shapeways for processing.
I tried 3D programs in the past, but most of them were not very intuitive to use and needed a lot of time to get familiar with the features. Google SketchUp is a nice tool, however I was not convinced that it would be suitable for designing the case. Finally I decided to use Blender, an open source tool that seemed to have a suitable feature set.
After doing some sketching on paper I started to build a 3D model of the prototype first - this is important in order to know where the holes for the buttons, LEDs and other interfaces should be located later on. To have a good understanding of the component placement, I imported the PCB layouts into Blender.
Blender has some good documentation, lots of youTube tutorials and after getting familiar with the keyboard shortcuts, I was getting closer to my desired case. The relays consume quite some power when enabled and initially I had a standard voltage regulator (7805) that could get quite hot depending on the input voltage - This is why the case has some air holes. However later on I replaced it by a DC/DC Converter that is very effective and do not heat up at all. Since I liked the look of the air holes I left them in.
Another problem I had, were the different heights of the switch connectors and the LEDs/buttons. This was solved by this rounded 45° edges introducing another level on the front pannel.
A cool product deserves a logo!
Since MISWINO is a midi switch, the logo should contain both pieces - midi, represented by its typical 5-pole connector - and the switch by the established power symbol. The logo can be found on the PCBs and on the case.
Carefully I was double checking a last time the sizes between the prototype and the case, printed the different angles of the case on transparent foil and everything seemed to be at the right spot.
I was ordering the case at Shapeways!
Two weeks later the case arrived - it was right at the birthday of my daughter, April 17.
The marriage!
Can you imagine the moment when the prototype first meets its case? Does everything fit? Did I overlook something? I did not!
The prototype smoothly slided into the case - the LEDs, buttons and switch jacks were at the right places.
Mission accomplished!
07.09.2013 Arduino Uno Arrived
01.11.2013 Project Research
25.11.2013 Input/Output Multiplexing on breadboard verified
16.12.2013 Main Project Start (start of winter vacations)
17.12.2013 Electronic Design on breadboard & Firmware Development
03.01.2014 Initial PCB
04.01.2014 Initial Prototype
09.01.2014 Compacted Prototype
10.01.2014 Main Project End - (end of winter vacations) - Hardware Design completed!
25.01.2014 Case Design with Blender
17.04.2014 Case arrived from Shapeways
18.04.2014 MISWINO Completed
01.05.2014 Website Design on Google Sites
20.08.2014 Demo Video