Difference between revisions of "Rainboard - DIY Dynamic Rainbow Isomorphic Keyboard"

(Rainboard DIY Isomorphic Keyboard - Version Beta)
Line 1: Line 1:
 +
The goal of the Rainboard is to create an Isomorphic Musix Keyboard that is easy to reconfigure and provides visual feedback to the user.
 +
== Current State of the Rainboard ==
 +
 +
{{#widget:YouTube|id=xI7E-ic-2TM}}
 +
 +
[[File:Rainboard Focused with Musix.JPG|200px|Close Shot of the Buttons]]
 +
[[File:Rainboard Colored Lit.JPG|200px|Top shot of the Rainboard]]
 +
 +
The Rainboard is a 61 button isomorphic keyboard. Each button contains a RGB led in order to light up the button. A midi value is also mapped to each button. The colours and midi values of the buttons are set from an external source (currently the [http://www.shiverware.com Musix] iOS application, but could easily be set by any serial midi device) using sysex messages. This allows the layout to be change very rapidly. All that needs to be done is to use Musix to select the desired layout on screen and push a button to send the data to the Rainboard. The Rainboard then sets all the LEDs and midi values then stores these values in EEPROM to save settings across resets so the external device is not needed after the desired layout is set. When buttons are pressed the note values are sent to an onboard midi instrument shield in order to produce sound via a 1/8 inch audio jack. As well, the midi values are sent to Musix (with note identifier values rather than midi values). This allows Musix to know exactly which button was pressed if multiple notes of the same midi value are present on the board. Musix can then use it's built in synthesizer to play the music or it can send the data on to other iOS apps to synthesize the audio (such as NLogSynth, Arctic Keys, or SampleWiz).
 +
 +
== Hardware List ==
 +
The current hardware for the rain board uses standard DIY parts off of the internet.
 +
 +
<ul>
 +
<li>64 - LED Pixel RGB 8mm Naked PCB <ref>http://www.bliptronics.com/item.aspx?ItemID=114</ref> from Bliptronics</li>
 +
<li>64 - Arcade Button - 30mm Translucent Clear <ref>https://www.adafruit.com/products/471</ref> from Adafruit</li>
 +
<li>64 Button Shield <ref>http://spikenzielabs.com/SpikenzieLabs/Button64Shield.html</ref> from SpenzieLabs</li>
 +
<li>Arduino Uno Board <ref>http://arduino.cc/en/Main/arduinoBoardUno</ref></li>
 +
<li>Musical Instrument Shield <ref>http://www.sparkfun.com/products/10587</ref></li>
 +
<li>iOS Serial Cable <ref>http://redpark.com/c2db9.html</ref> - Redpark Serial Cable</li>
 +
<li>0.220" (0.559 cm) thick x 24" x 24" piece of acrylic (plexiglass)</li>
 +
</ul>
 +
 +
== Acrylic Cutting and Moulding ==
 +
 +
A 48" x 24" x 0.220" piece of clear acrylic (plexiglass) was purchased to be the body of the rain board. This piece could easily be substituted with a piece of plywood or any other sturdy material. We only needed ~ 2' x 2' of the material for the board so we cut the sheet in half. The design for the Rainboard was developed as a CAD drawing and printed to scale. It was then taped to the acrylic.
 +
 +
Each button hole was punched in order to ensure accuracy. Each punch hole was then drilled twice with two different bits in order to ensure not to crack the acrylic. An adjustable hole saw was then used to drill each hole. This process proved to be difficult using a hand drill. A drill press would have likely been easier to use, however the one that we had access to did not offer enough room between the drill location and the back of the press in order to reach the inside of the acrylic. As well, the drilling of the holes caused the acrylic to melt and stick to the side of the holes. This forced use to use a Dremol in order to grind away the excess plastic. It was originally decided not to use a hole saw as  they generally only come in 1 1/8" and 1 1/4" sizes and we needed a size of ~ 1 3/16". However, it might be able to use a 1 1/8" hole saw and then Dremol the hole slightly larger.
 +
 +
After all the holes were created the rest of the acrylic was cut with a skill saw using a metal cutting blade. The process was loud but worked well. Although the cuts were not perfectly on the line, the end result was acceptable.
 +
 +
The acrylic was then placed on the edge of a table. For the first edge, a computer case door was placed on the acrylic with some weight on it to keep it flat. A heat gun was used slowly heat the acrylic so it could be bent down at a 90 degree angle. After this process was done it was noticed that a large bubble had formed on the acrylic top. A propane torch was used to head up the bubbled area. Weight was then put on it using the computer case door in order to flatten the area back out. For the other 5 sides the propane torch was used. The quicker heating appeared to work better. After all sides were folded down, the edges of the Rainboard were flamed with the torch in order to get ride of the edges caused by cutting. The end result is that the edges are clear and smooth.
 +
 +
== Button Drilling ==
 +
In order to fit the LEDs into the buttons a hole was drilled into the bottom of each button casing. The top portion and plunger of each LED was removed. A 5/16" bit was used to drill a hole in the casing.
 +
 +
== Button Insertion ==
 +
Each button was then inserted into the housing (still without the tops and plungers). Each was inserted with the same orientation. A large majority of the buttons fit well into the housing, however, about 1 out of 6 had an issue with the housing hole being too large. This caused the button to rotate easily or in a few cases, fall right through the acrylic. In order to remedy this issue hot glue was used to secure these buttons in place.
 +
 +
== LED Wiring ==
 +
 +
The LEDs were soldered in a chain the length of each button row using 4 wire ribbon cable. Sadly, we ran across a fair number (1 in 10) LEDs where the board was missing a capacitor. After soldering, each strand was tested to ensure all of the solder points were correct. All of the segments were then soldered into one long strand. Each light was inserted into the bottom of the  button casing through the hole drilled. A couple dabs of hot glue was added to each side to secure the LEDs.
 +
 +
== Button Wiring ==
 +
 +
Before starting to wire the buttons, some care and consideration was given to the proposed wiring schematic.
 +
 
=== Daily Update: ===
 
=== Daily Update: ===
  
Line 25: Line 72:
 
[[File:Lights_oct24_2011.jpg|200px|Testing Lights]]
 
[[File:Lights_oct24_2011.jpg|200px|Testing Lights]]
 
[[File:Breadboard_Oct24_2011.jpg|200px|Arduino and Breadboard]]
 
[[File:Breadboard_Oct24_2011.jpg|200px|Arduino and Breadboard]]
 
== Hardware List ==
 
The current hardware for the rain board uses standard DIY parts off of the internet.
 
 
<ul>
 
<li>64 - LED Pixel RGB 8mm Naked PCB <ref>http://www.bliptronics.com/item.aspx?ItemID=114</ref> from Bliptronics</li>
 
<li>64 - Arcade Button - 30mm Translucent Clear <ref>https://www.adafruit.com/products/471</ref> from Adafruit</li>
 
<li>64 Button Shield <ref>http://spikenzielabs.com/SpikenzieLabs/Button64Shield.html</ref> from SpenzieLabs</li>
 
<li>Arduino Uno Board <ref>http://arduino.cc/en/Main/arduinoBoardUno</ref></li>
 
<li>iOS Serial Cable <ref>http://redpark.com/c2db9.html</ref> - Redpark Serial Cable</li>
 
</ul>
 
  
 
== Overall Connectivity Plan ==
 
== Overall Connectivity Plan ==

Revision as of 01:16, 10 November 2011

The goal of the Rainboard is to create an Isomorphic Musix Keyboard that is easy to reconfigure and provides visual feedback to the user.

Current State of the Rainboard

Close Shot of the Buttons Top shot of the Rainboard

The Rainboard is a 61 button isomorphic keyboard. Each button contains a RGB led in order to light up the button. A midi value is also mapped to each button. The colours and midi values of the buttons are set from an external source (currently the Musix iOS application, but could easily be set by any serial midi device) using sysex messages. This allows the layout to be change very rapidly. All that needs to be done is to use Musix to select the desired layout on screen and push a button to send the data to the Rainboard. The Rainboard then sets all the LEDs and midi values then stores these values in EEPROM to save settings across resets so the external device is not needed after the desired layout is set. When buttons are pressed the note values are sent to an onboard midi instrument shield in order to produce sound via a 1/8 inch audio jack. As well, the midi values are sent to Musix (with note identifier values rather than midi values). This allows Musix to know exactly which button was pressed if multiple notes of the same midi value are present on the board. Musix can then use it's built in synthesizer to play the music or it can send the data on to other iOS apps to synthesize the audio (such as NLogSynth, Arctic Keys, or SampleWiz).

Hardware List

The current hardware for the rain board uses standard DIY parts off of the internet.

  • 64 - LED Pixel RGB 8mm Naked PCB [1] from Bliptronics
  • 64 - Arcade Button - 30mm Translucent Clear [2] from Adafruit
  • 64 Button Shield [3] from SpenzieLabs
  • Arduino Uno Board [4]
  • Musical Instrument Shield [5]
  • iOS Serial Cable [6] - Redpark Serial Cable
  • 0.220" (0.559 cm) thick x 24" x 24" piece of acrylic (plexiglass)

Acrylic Cutting and Moulding

A 48" x 24" x 0.220" piece of clear acrylic (plexiglass) was purchased to be the body of the rain board. This piece could easily be substituted with a piece of plywood or any other sturdy material. We only needed ~ 2' x 2' of the material for the board so we cut the sheet in half. The design for the Rainboard was developed as a CAD drawing and printed to scale. It was then taped to the acrylic.

Each button hole was punched in order to ensure accuracy. Each punch hole was then drilled twice with two different bits in order to ensure not to crack the acrylic. An adjustable hole saw was then used to drill each hole. This process proved to be difficult using a hand drill. A drill press would have likely been easier to use, however the one that we had access to did not offer enough room between the drill location and the back of the press in order to reach the inside of the acrylic. As well, the drilling of the holes caused the acrylic to melt and stick to the side of the holes. This forced use to use a Dremol in order to grind away the excess plastic. It was originally decided not to use a hole saw as they generally only come in 1 1/8" and 1 1/4" sizes and we needed a size of ~ 1 3/16". However, it might be able to use a 1 1/8" hole saw and then Dremol the hole slightly larger.

After all the holes were created the rest of the acrylic was cut with a skill saw using a metal cutting blade. The process was loud but worked well. Although the cuts were not perfectly on the line, the end result was acceptable.

The acrylic was then placed on the edge of a table. For the first edge, a computer case door was placed on the acrylic with some weight on it to keep it flat. A heat gun was used slowly heat the acrylic so it could be bent down at a 90 degree angle. After this process was done it was noticed that a large bubble had formed on the acrylic top. A propane torch was used to head up the bubbled area. Weight was then put on it using the computer case door in order to flatten the area back out. For the other 5 sides the propane torch was used. The quicker heating appeared to work better. After all sides were folded down, the edges of the Rainboard were flamed with the torch in order to get ride of the edges caused by cutting. The end result is that the edges are clear and smooth.

Button Drilling

In order to fit the LEDs into the buttons a hole was drilled into the bottom of each button casing. The top portion and plunger of each LED was removed. A 5/16" bit was used to drill a hole in the casing.

Button Insertion

Each button was then inserted into the housing (still without the tops and plungers). Each was inserted with the same orientation. A large majority of the buttons fit well into the housing, however, about 1 out of 6 had an issue with the housing hole being too large. This caused the button to rotate easily or in a few cases, fall right through the acrylic. In order to remedy this issue hot glue was used to secure these buttons in place.

LED Wiring

The LEDs were soldered in a chain the length of each button row using 4 wire ribbon cable. Sadly, we ran across a fair number (1 in 10) LEDs where the board was missing a capacitor. After soldering, each strand was tested to ensure all of the solder points were correct. All of the segments were then soldered into one long strand. Each light was inserted into the bottom of the button casing through the hole drilled. A couple dabs of hot glue was added to each side to secure the LEDs.

Button Wiring

Before starting to wire the buttons, some care and consideration was given to the proposed wiring schematic.

Daily Update:

Oct 28, 2011

When pressing several keys in the same column things don't work too well. According the people that make the button shield everything should work fine. We tried removing the diodes and things appear to work slightly better (although we don't know why). It's possible that the problem exists with the way that the button SPI code is implemented as it uses an interrupt without any sort of buffer. So if two button press were to occur between one cycle of the arduino a button press could be lost or mangled. As well we grabbed a large sheet of acrylic to make the case of the instrument. There was some concern about sturdiness, but hopefully the beefy 5.6mm thick acrylic should do it.

Oct 27, 2011

Played around with the LEDs today. Started using the Fast SPI [7] from google code and it seemed to alleviate the hardware serial receive issue. As well, put the 64 button shield not the arduino and everything seems to be a go. Wired in 7 buttons (with diodes) to test how things are going to work. Not too bad, however they delay between press in the button and audio playing on the iPad is quite substantial, perhaps 300ms. In order to see if the issue is with the iPad serial connection or just arduino latency I wired in a musical instrument shield from spark fun[8]. Turns out the latency has something to do with the connection to the iPad as the audio form the shield appears to be almost instantaneus. Will need to do some more testing to see if the issue is the with the serial output, red park cable, or iPad external accessory api.

High Contrast Colors for LEDS Buttons and Diodes 64 Button Shield

Oct 26, 2011 - Buttons and Diodes have arrived. The LEDs should be in soon.

Buttons Buttons Pressed Diodes

Oct 24, 2011 - Converted Midi to Use Software Serial. Fixed a software serial timing issue.

Testing Lights Arduino and Breadboard

Overall Connectivity Plan

The arduino Uno will be used as the brains of the Rainboard. It will take all input from the buttons and encode any input button presses to a unique number. The numbering system starts in the upper left corner of the Rainboard and increases through to the right side. At the end of the row, the number will continue on the next lower row starting at the left side. The button press will be sent to Musix [9] where the press will be translated to audio via an internal sound engine or transferred to another synthesizer via midi. The lights on the Rainboard will also be controlled from Musix [10]. Upon connection of Musix to the Rainboard, the buttons on the Rainboard will be coloured in correlation to the layout selected within Musix. This allows the Rainboard to be quickly configured using the Musix iPad/iPhone interface.


Proposed Hex Numbering

Proposed Note Numbering

Current Issues / Limitations

Bliptronics lights / SPI / Serial breaking

The Arduino library [11] that comes with the bliptronics lights uses SPI [12] in order to send data to the lights quickly. It was found that once the blip library was included with the project and init was called, hardware serial data receive (rx pin 0) on the arduino would not work. The current explanation is that the blip library spends a large quantity of time inside an interrupt. This is causing the serial rx interrupt to not be fired and the receive data is lost. So cercumvent this issue, SoftwareSerial is used instead of hardware serial. For more details on the issue please visit Rainboard SPI LED Serial Conflict page.

SerialSoftware (NewSerialSoftware v11b)

In order to work around the broken hardware serial rx, a software serial solution called NewSoftSerial [13] was used. The version currently being used is version 11 beta [14]. This library will like replace the SoftwareSerial library included with the Arduino software. The serial connection is used to talk to the red park serial cable. It appears that connections from the Rainboard to the iPad worked fine, but data would get corrupted from the iPad to the Rainboard when sending more than a few bytes. This issue has been fixed by altering the timing of the serial receive delays. For more details on the issue please visit Rainboard NewSoftSerial.

External Links

  1. http://www.bliptronics.com/item.aspx?ItemID=114
  2. https://www.adafruit.com/products/471
  3. http://spikenzielabs.com/SpikenzieLabs/Button64Shield.html
  4. http://arduino.cc/en/Main/arduinoBoardUno
  5. http://www.sparkfun.com/products/10587
  6. http://redpark.com/c2db9.html
  7. http://code.google.com/p/fastspi/
  8. http://www.sparkfun.com/products/10587
  9. http://www.shiverware.com
  10. http://www.shiverware.com
  11. http://bliptronics.com/Arduinocode/BLIP_LEDS_SPI_LPD6803.zip
  12. http://www.arduino.cc/en/Reference/SPI
  13. http://arduiniana.org/libraries/newsoftserial/
  14. http://arduiniana.org/2011/01/newsoftserial-11-beta/


Comments

blog comments powered by Disqus