Tuesday, June 8, 2010

Embedded Keyboard Project, Part 6

Since my last post, our team has completed the final project. On Monday, we conducted the final demo, and just today, we submitted the lab report. Here is the final layout of the keyboard:

Completed keyboard project

As you could see, my lab partner Whitney did a fine job organizing all the electronics, securing them to the keyboard. He made a nifty stand for the LCD display using plastic risers and hot glue. As you can see, we're now using a Seeeduino board instead of the Arduino board -- which is for the most part the same circuit, except it has a few added features and a slightly different board design. Also, note the use of the infrared optoelectronic distance sensor on the lower left side of the board. We decided to make the circuit a little more complex, so we added what is known as a D-beam, and it is used in a lot of Roland synthesizers, for instance, the Lucina AX-09 (video -- WARNING: click only if you can handle extremely cheesy product infomercials). We implemented the D-beam using a Sharp 2Y0A21 distance sensing device, and we freed up an analog input on the keyboard controller for the analog sensor signal. We programmed the keyboard to process the same range of pitch bend as the Roland model in the video clip I posted above, which is about a whole step of range. The analog data coming from the sensor is really noisy, so it adds kind of like a chorus effect to the sound quality which we really couldn't filter out very well.

We reconfigured the entire keyboard to run off of USB power, which is 5 volts, 2.5 watts. The entire circuit ended up only running off of 1.2 watts. We could probably cut down on power even more, especially with the LCD, which consumed a half a watt.

Since our synthesizer output standard MIDI out, it was compatible with another group's project, which was designing the actual synthesis. In the following video, I used our project as a keyboard interface to their synthesizer using our MIDI output. Here is a video I shot of us connecting our projects together:

The overall cost of all the circuit components is just short of $100, which is more than the original keyboard was worth. We actually probably had the cheapest circuit out of all the groups. If we had more time, ideas I had for further developing our design would be to add a recording / playback feature, which I could very easily do with an SRAM chip, integrating the controls into the LCD menu. Since we ended up getting the synthesizer chip working in serial mode, all the parallel signals could be freed up to drive an SRAM chip. Here are the files that we created for our project:

final_presentation.ppt - Class presentation (Microsoft PowerPoint)
final_report.pdf - Final lab report (Adobe Acrobat)
source_code.zip - Project source code (zipped)

Some of the other groups in the class ended up creating really cool embedded projects. Perhaps the most expensive project implemented was a series of robots which implemented swarm intelligence. The robots would scan an area for a target of a specific color, and when it found the target, it would wirelessly broadcast a message the other robots that it found the target, and emit infrared radiation in all directions. The other robots would then turn and locate the robot, and move in towards it. Here are some photos I took of their project:

IMG_0095 IMG_0106

Another cool project was one group that worked with a touch-screen LCD, which had applications which allowed you to draw pictures, play music, and operate a remote-controlled toy car. Here are some images of their project:

IMG_0115 IMG_0119

Another group designed an automatic plant watering system, which allows you to automatically water your plants when it senses the soil is too dry. You can also monitor if your plants are being watered on Twitter. I thought this was a really creative design idea.


Also notice the very creative white-board artwork. Over the weekend, there was an art competition in the lab. Here are some examples of peoples' creativity:

IMG_0100 IMG_0124
IMG_0092 IMG_0096

Notice that sleep is a common theme in the artwork. No doubt, many groups had to pull overnighters this weekend on their projects, and sleep deprivation seems to be a common theme in classes like this. Working on these projects, you completely lose perspective of time, and can easily spend over 10 hours on a project in one sitting. Well, continuing on with the artwork... One group decided to take their artwork a little further and etch their artwork onto a circuit board.

IMG_0121 IMG_0122

And here is my team's artwork, which my lab partner drew. It isn't nearly as creative, simply because we didn't have to spend overnighters in the lab this weekend, since we had our entire circuit working last Monday and completed on Friday.


One of the most amusing pieces of art in the embedded classroom is the "Wall of Death", which is a hodgepodge of broken microcontrollers, comic strips, and student artwork.


There were some other cool projects created this quarter, some which worked others that didn't. Dr. Peckol usually publishes all of our embedded projects on his web page. Our projects should be up and running on his site within a week or two. You could visit our class project showcase here (if it is even up yet). More photographs can be found on my Flickr page.


Miroslaw said...

Great project, by the way what would it take to implement a velocity sensitive keyboard?

Feuchtster said...

I was trying to figure that out myself. I believe there's a couple ways it's commonly done.

One way I think it's done is through pressure sensing (example). In that case, key data would be read in as an analog signal instead of as a digital signal.

A more common way it's done is by using two switches for each key, one which is activated when the key is maybe a quarter-way down, and the other when the key hits the bottom. The velocity is calculated by measuring the time between the two button presses. You would probably need twice as many matrix rows to implement this, but the data would be read in exactly the same way as a touch-insensitive keyboard.

Miro said...


I myself have started a project using ATSAM2195 and Arduino Duemilanove. My problem is that I am struggling making the conversation between the Arduino and the ATSAM2195. I have almost adapt your C code to Arduino but after I am sending the 3F to switch in parallel mode, the reply is not the one I expect. Would you please tell me which bit from the DATA8 you used for LSB and which for MSB, this might be my problem ?! Or if you have any other ideas where might be the problem, or tips, advices ? I would really appreciate your help.
Thanks in advance