Close
0%
0%

Cheap Expandable Floor Piano

Fully functional floor piano, with midi in/out, leds and training mode.

Similar projects worth following
I created design to build a big and expandable floor piano (1 to 8 or more octaves) with learning mode (led will light the keys), driven by phone (first with midi file and great sound banks only). The project must be cheap (I'm doing it for free, but it will be used in a music school and i'd like to have it used in more than one), strong (we will have hundreds of kids that will play on it, it can't be made of materials that will not last in time), and expandable (size and price matter, 3 octave makes it more than 3 meters long and around 500$). I'd like to be able to keep price under 500$ for 4 octaves using open source and as cheap as possible hardware.

They were plenty of challenges with this piano.

I wanted  all bullet ticked:

- Cheap

- Big but could fit in a car (from 1 to 8 meters long)

- Expandable (from 1 to 8 octaves now)

- Strong (it's for kids, even if adults love to play too)

- No moving parts (same reason as above)

- Easy to use.

Keypad.ino

To control the octave number and the tone played by each note.

ino - 5.54 kB - 10/14/2018 at 06:39

Download

ino - 20.33 kB - 09/01/2018 at 07:24

Download

ino - 12.90 kB - 09/01/2018 at 07:24

Download

MOV_20160410_2155573.mp4

One octave first test

MPEG-4 Video - 20.91 MB - 08/30/2018 at 05:44

Download

MOV_20161120_1639303.mp4

Music from "Big" movie with Tom Hanks.

MPEG-4 Video - 18.93 MB - 08/30/2018 at 05:44

Download

  • 1 × - Plywood birch plywood for rigidity, thickness 1.2cm, 105x100 cm
  • 1 × - Acrilyc translucent sheets (white) 105x90cm for each octave, 6 to 8mm thickness
  • 5 × Acrilyc translucent black sheets 40x10 cm 3mm thickness
  • 1 × Wood 2.5x1cm plenty for inside structure (see pictures)
  • 1 × Arduino to drive the octave, send and receive data to/from master

View all 9 components

  • Keypad as first start before bluetooth connection

    Frederic10/14/2018 at 07:06 0 comments

    Hi,

    I added a keypad on the master. allowing to enter a number for octave height and to change tone played by each note.

    Hardware : One more arduino inserted on the serial bus between the master and the first piano keyboard. This arduino has a keypad and a 4digit LED attached to it, but the end goal is to also add a bluetooth module that would be driven by an app in the end.

    Software : I uploaded the ino file that control the keypad. I already prepared the Master.ino file, so no update on this side. You have 2 command, A and B, A will change tone, B will change pitch.

    How it works : 

    Instrument : 

    Press 'A'  and type the number of the instrument in General Midi code (01 for grand piano, or 67 if you want a sax to play pink panter for example). Then touch a note on the piano. then press '#'. After that, all notes below the one touched will use the instrument you choosed. 

    You can repeat the process as many time as you want, you can basically have one instrument per touch if you want...

    You just need to start by lowest note as all subsequent will be changed by a new command.

    Pitch:

    Press 'B', then the number of the octave you want to use. then touch a note, then '#' and all notes below will be changed according to your modification.

    In Master, there is a table for each note fixing its pitch and its instrument. At initialization, the first octave number is computed depending on the number of octaves found attached (for exemple, with 4 octaves, the first note will be a "C3". 

    Thanks to this method, you can change it even in the middle of and octave: You can have the first octave starts on "C2", then on the second octave, you can keep C3 & D3, then change to E4 depending on your needs.

    You can also have multiple players that will play different instruments on different tones. 

    As general Midi also allow drums, you can even define some drums...

    I started to work on the version 2, I will take more pictures, will try to explain more the different parts of the build and to add more pictures. 

    The other goal is to have Master driven with a RasPI instead of the arduino to allow for it to play a midi file, and display keys that should be played at the same time (tutor mode).

    With my colleague, I also plan to create better PCB to remove plenty of wires. 

    Expect new posts along the way.

  • Playing now...

    Frederic09/05/2018 at 08:40 0 comments

    My son was home for few days, so we decided to take on this piece, some guys played it on their piano (BTW they do far more elegant playing than we do) and lots of friends asked us to do it too. This is done, even if we would have needed more time to really work on it. We don't really see the lights because of the sun, and because this is outside with a small amplifier, the sound is not very good too.

  • First part of project completed

    Frederic09/01/2018 at 07:22 0 comments

    The project in its first state is now completed. It's been used for more than one year in music school with no real problem (only e few leds on one led strip that were dead).

    Each octave is less than 20kg, and with a finished size of 105x100 each, it can fit very easily in most of the cars.

    The Ethernet connection is very simple to plug in and the full piano is assembled in less than 5 minutes.

    The master part can be drastically improved (and will be).

    You can see on this last picture the whole 4 octaves keyboard, The small box on the left is the Master. I created a site http://www.grand-piano.fr/ and will create soon a blog for further discussions and explanations. It's not ready yet, but I also have a daily job that I need to do.

    Feel free to make any suggestion about how to improve and what functionalities you'd like to see added.

    My friend was also saying that we may sell it or at least sell kits when electronic boards will have a better design.

    Thanks

  • Electric/Electronic and a bit of software

    Frederic09/01/2018 at 07:12 0 comments

    Here is a picture of one octave assembled. I'll cover more in detail each parts.

    Below is each extremity of the thing. You can see the Main Power line that is used to bring power to the Leds, and the Category 5 cable and outlets that are used to bring 5V, Ground, RX0, TX0, RX1, TX1. A Small door allow access when the keyboard is assembled.

    Below is the Power source and a Led driver. The Power source is 12V/5A, This is by far more than I need to lit all LEDs.

    The Led driver has been replaced, At first I had TLC5940, then a friend of mine created a new prototype card with another chip PCA9685 AFAIR. My friend wanted to do CMS, I can tell he succeeded as all 12 boards he provided me are fully functionnals. The point is it can drive 12 lines (actually 16 but only 12 are used), 4 notes each x 3 colors for RGB. By reading the arduino sketch, you can tell it's using "Adafruit_PWMServoDriver" library.

    Then Arduino + MPR121 + 2 remaining Led Drivers

    Things are very messy here, and I need to create board of my own to remove all this cables. You can see on top of the arduino on the picture, the MPR121 with cables coming from all keys.

    One more Thing, You can see that the arduino has a USB cable going to the visible part of the octave so that I can flash it without even need to open it.

    That's pretty much it now. I could describe how Arduino is tied to MPR and PCA or keys, but they are plenty of tutorials explaining it on the net.

    Last Software point. I do not use the "official" MPR121 libray, instead, I'm using the one of the BareConductive Touch Board that is easier to use with good predefined functions (I actually kept it from my first tests done with Touch Board).

  • Time to move to electronic part of the project

    Frederic08/31/2018 at 06:36 0 comments

    So, I told you already, I'll use master/slave method to drive this thing and already explained a bit of the technic. what does it translate to when we move to electronic...

    Right now, I'm using arduino for control box and keyboard simply because it was cheapest and fastest way to have something working.

     In the future to expand capabilities I will indtroduce RasPI for that mater allowing the ability to select midi music, play all staves but one that should be played by the kid, also using training mode where the key will light before the note should be played... but this is for later.

    So Arduino for all.

    You'll find in project file list the slave, and master files. For me, they are self explainable, but I'll give you some hint to understand them.

    Slave

    - Setup is initializing the MPR121, and Led driver.

    - Loop is :

        1 - checking MPR

    When Interruption arise, it will create a message NoteOn/NoteOff that will be sent on master bus.

        2 - Check for message on Slave Bus.

    First message received should be "init" with octave number. When octave has been associated, there are only 2 other messages. LedOn and LedOff.

    Master :

    Setup is initializing VS (midi driver) and send message "Init Octave" on Slave Bus till there is no more answer.

    At the time, it will know how many octave are plugged to it, and will use an array to define notes and instrument associated to keys in each octave.

    About this, I also have a part that will allow changing note, instrument and pitch. It's done thanks to another arduino that will send message to master too, but I can also create an app that can use bluetooth to drive the piano. Let's get this for later, but you can already see the code for it in the master.ino file.

    Once all keys have been setup, the master is just waiting for data.

    When an octave send a noteOn message it will simply send a midi message to play it, and when the note is released, it will receive a noteOff message.

    Simple enough.

  • The inspiration and the tests...

    Frederic08/30/2018 at 10:43 0 comments

    So for the record, I saw in around 1994 a movie called "Big" with Tom Hanks, and abolutely loved this part of the movie.

    When I saw that, I said myself I will do one for my house at some point. And now is the time.

    My son playing 

    And with me...

    Sorry for the "added percussions". These are my son's key.

  • Building

    Frederic08/30/2018 at 09:49 0 comments

    You can see a few steps from the pictures.

    Basically, there is a bottom made of wood. I will layout the sketch later with all dimensions I used. but it's pretty straightforward. 

    A sheet of plywood (105x100), on it is glued support for each note (each note has 15cm width).

    on the side, the supports are 1.3 cm width, and  for each note, the supports are 2.5 cm. The height is 1cm.

    The notes will be 90 cm in height, so there is a 10cm gap for the electronic on top of the octave.

    Then we need to add leds. These are simple RGB non adressable 5050 led strips. You need about 25 meters for each octave. This is with the Acrilyc the most expensive part of the piano, but thanks to alibaba, I was able to source 200 meters for a very good price (to build 8 octaves).

    BTW, you can see the acrilyc in the background with the white sheets and already cut black sheets

    Then we need to add cloth felts on each support to attenuate the noise made by the jumps on the acrilyc.

    You can also see I already soldered the wire for LEDs.

    On the picture, you can see that the leds are not going to the lower part. It's because I'll glue  wood on the Acrilyc and use this to fix the acrilyc on top of this.

    Bottom is done now. moving to the acrilyc part.

    I don't really have pictures of the process. I simply mark a cut in the acrilly (1 mm depth) to create the white notes, and glued the black ones on top of the white acrilyc.

    here it is :

    You can see on the picture, I used USB connectors for led strip connections (4 wires).

    I forgot to mention, I also glued on the bottom of the acrilyc (not visible here, the silver fabric that will be used for detection. Each note as its own sheet cut to size. You can also see the wires in the center of the picture.

    and the full thing. Only first octave had acrilyc protection removed hence the strange color, but you can see the cut line on the acrilyc giving a sense of real piano with notes instead of a flat sheet.

  • Next step, expandable...

    Frederic08/30/2018 at 09:07 0 comments

    So I wanted to have something as modular as possible. If you look at the pictures you can see all octaves are independant. How did I achieve that?

    First I put in place a master/slave system. I want a master that in the end will play notes, so each octave need to bring its information to the master.

    Given the tests from the touch board, I was thinking to use Arduino + MPR in each octave. I2C was taken by MPR, So I thought about using serial as my communication bus.

    I will create 2 serials one up to the master, and one down to the slave, so that the master can drive leds. The arduino has only one serial so I'll use SoftwareSerial library for the second one.

    BTW, I can also use less cheaper arduino with 2 hardware serials. I may do this for future ones.

    For the communication to be as reliable as possible, I used Category 5 ethernet cable. between each octave and the master.

    Instead of having all cable that start from the master to each slave, the serial bus is used to pass data from one octave to the next (or the prev depending the way data are flowing). I'll add picture of the workflow when I have more time.

    The process is :

    During the init phase, the master send a message to the bus. the first octave that respond will get n°0, then the master send the same message. the first octave already have an Id, so it passes the message to the next one that will answer it took number 1, and so on till there's no more answer.

    At this time each octave has a number and know where it fits in the chain.

    When master want to light a note, it will send a message on the down bus. this message will have a letter saying light note, the number of the octave (between 0 and 8), and the number of the note in the octave (between 0 and 11). A message looks like "L1310". L is for light, 1 is for on, the the 3 means octave 3, and finally, the 10 is for note 10.

    The first octave will receive this message, look at octave number, it's not for it, so it will pass it to next till the message reach its destination and is processed accordingly.

    For note playing it's the same but the other way. when a note is touched, the octave will send a message on up bus. this message will be something like "N1202" meaning N:Note, 1:On, Octave:2, Note:02.

    It works pretty well even if I had to tweak speed on serial bus.

    The master is also an arduino, with a midi board attached to it and a alphanumeric keyboard attached to it. Keyboard allow selection of music instrument and a few other stuff. but basically when it get the message as described, it process it by sending a midi code (So, Yes the big piano can also be used as a midi input and drive a full fledge midi synth).

  • First feedback from kids

    Frederic08/30/2018 at 08:10 0 comments

    So I had my first octave working and I put it in a music school for kids to play with it and have some feedback.

    Actually the feedback was far better than expected, kids absolutely loved it.

    The remarks were mostly on hardware design : basically the noise...

    There was no protection between acrilyc and wood creating kind of tick-tick noise, the fact that all notes were separated were also adding to this each one touching others. 

    The detection was a little bit odd sometimes (for adults, having the foot at 3cm of the note was already playing it where for younger children they had to remove their socks for it to work)

    And biggest complaint from the kids, it was not big enough. Sometimes they were 3 kids on these 12 notes...

    Overall the test was good: after 3 month of abuse by the kids, there was nothing broken and it was still in very good shape and working as day one.

    Now I need to take this into account and move forward.

  • Tests, decisions, and first try.

    Frederic08/30/2018 at 06:40 0 comments

    So I started by experimenting plenty of solution for detection of the note. First thing first, I tested springs, it worked but had many constraints (especially weight handling and durability). 

    I then looked at pressure detection, but again, I had problems to tweack it to work for a range between 15 and 120 Kg.

    Then I came to the touch board (from a hackaday post BTW). this is a small board embedding an arduino, a mpr121, and a midi sound player. My first octave was born in my head.

    I then searched what I can do for the conductive part for detection. i found plenty of very expensive solution, and finally came to this https://fr.aliexpress.com/item/Hot-Sale-100-Silver-Fiber-Fabric-Shielding-Fabric-Silver-Fiber-Conductive-Mesh-Fabric-Anti-static-Mesh/32762274779.html?isOrigTitle=true.

    This is a sheet of fabric that is not blocking the light.

    I tried to make this work, and created my first octave 

    This was really a first run, all notes were separated, the design was almost there, but it helped me to understand what I need to do and more important what I need not to.

View all 10 project logs

Enjoy this project?

Share

Discussions

Ronin wrote 09/06/2018 at 23:14 point

lovely project, how dou conect Mpr121 s btw ? with aliminum leaf/foil ?

  Are you sure? yes | no

Frederic wrote 09/07/2018 at 06:14 point

It's written in the logs (there's a link to it). I'm using silver fabric it's very thin and allow the light to go through. 

Thanks,

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates