Electronic Product Design Progress Report: Weeks 8 & 9

Finished Product


Before the boards arrived, I made the final version of the case in Fusion 360. In order to ensure that I had the correct dimensions, I exported the board from KiCAD as a STEP file. Other components such as switches, USB ports, and LEDs were imported into Fusion from a website called GrabCAD. This website is a community website similar to Thingiverse, but contains mostly engineering components.

I printed the buttons in NinjaFlex 85A TPU, which leaves the buttons tactile but feeling soft and reduces noise. The phone clamp connects to the case utilizing a ball joint which allows the keyboard to be used without the phone attached.


The side of the case contains an indentation that allows a USB micro cable to be plugged into the Adafruit feather for charging. The charging LED is visible through one hole near the port and a programmable LED is visible through another.

3D Printing Challenges

After creating the case, I discovered some difficulty 3D printing the panel. The design contains engraved lettering for the name of the device and the functions of the buttons and switches. At first I discovered that the letters for the functions were too small and attempted to reprint. The reprint was warped and squashed and still had an “ashy” color. To compensate for this problem, I ensured the bed was level by installing a glass bed and re-adjusting the bed.

While this corrected the squashing and color issues, the red PLA still warped. After a bit of research, I discovered that this was an adhesion issue with the PLA itself. This was confirmed when printing with other brands and colors as it only happened with the red PLA. I found that printing the face plate with a brim instead of a skirt corrected the issue with warping.

Software Updates

Since I changed the design of the circuit board to use a 5mm Adafruit Neopixel, I had to update the code in order to accommodate. The LED now blinks blue upon starting to indicate the need for pairing, then immediately changes to a color corresponding to the current octave in use:

switch (octaveMultiplier){
    case 0 :
       pixel.clear(); // off
    case 1 :
      pixel.setPixelColor(0, 255, 0, 0); // red

    case 2 :
      pixel.setPixelColor(0, 255, 127, 0); // orange
    case 3 :
      pixel.setPixelColor(0, 255, 255, 0); // yellow
    case 4 : 
      pixel.setPixelColor(0, 0, 230, 0); // green
    case 5 : 
      pixel.setPixelColor(0, 0, 255, 255); // aqua

    case 6 : 
      pixel.setPixelColor(0, 0, 42, 255); // blue

    case 7 :
      pixel.setPixelColor(0, 221, 51, 255); // purple

    case 8: 
      pixel.setPixelColor(0, 255, 25, 255); // fuchsia

    default :
      pixel.setPixelColor(0, 255, 255, 255); // white


After receiving the printed circuit boards from OSH Park, I soldered up one of the boards. I soon discovered the same problem plaguing prior incarnations of the board: the MCP23017 would stop working after a few seconds. Considering that I changed the entire design to accommodate a larger version of the IC, I was frustrated. However, after some research I ran across a Feather wiring schematic for an MCP23017 and discovered that they had used a pull-up resistor for SDA and SCL lines. After soldering up another board with two resistors bodged into the circuit, I discovered that the product worked without any issues!

Next Steps

This week, I will work on making the manual. Meanwhile, I will send it with two of my friends for overnight testing.