Picture of Multitouch Music Controller
Screen Shot 2013-11-29 at 1.58.27 PM.jpg
IMG_8841 copy.jpg
IMG_8852 copy.jpg
This project is an Arduino-powered infrared touchscreen / coffee-table interface that I've been using to control various music and graphics applications on my computer. This is an old project that I've recently had time to go back and document/fix up; this project is a little more special to me than most because it was my first Arduino/electronics project, and while I was doing research for it I ended up on Instructables for the very first time. I've been using this controller primarily to drive music and graphics applications running in MaxMSP. Here's a short demo:

The touchscreen uses infrared (IR) sensing to detect fingers and other objects on the screen. An IR laser at each corner shines IR light across the surface of the screen. When a finger or other object touches the surface, it causes the IR light to scatter in many directions. Some of this light is directed down into the screen, towards an array of 64 IR sensors. By scanning through the sensors, you can determine the x and y position of the touch event(s) and use this to control a variety of apps.

An array of 64 LEDs underneath the display provides visual feedback for the interface via rear projection. The LED array operates completely independently from the sensor array - this means the LEDs may be used in more ways that just displaying the current touch positions.

This interface is a controller, it does not run apps that are stored in its memory (though that is possible). Instead, it connects to a computer via USB and sends a series of touch messages to control applications running on the computer (similar to how a computer keyboard sends keystrokes to a computer). The computer processes the input data and determines the configuration of the output display, then it sends a series of LED messages back to the interface (similar to how the computer drives an LCD display). This way, the controller is very simple and does not need to handle any processing outside of the basic tasks of getting the states of its inputs (IR sensors) and setting the states of its outputs (LEDs); the computer is doing all the heavy lifting in this scenario.

As I said before, this device relies on IR sensing as input information, I found out by accident that it does some cool stuff when you put it outside while the intensity of sunlight is changing rapidly (sunrise/sunset). I had some fun trying to find interesting ways of transforming seemingly random noise from the inputs into sound/lights:

Although the project was done a while ago, I've taken it apart recently to refinish the wood and fix a few things that were bugging me. I've still written this Instructable as if I was building it from scratch, but it will be obvious at times that this is, in fact, a finished project.

Hot tip: the schematic and firmware used in this project is a modified version of the Arduinome project, which is a modified version of the Monome project. If you run into problems during any stage of this project, you might find what you are looking for in one of those forums.

Safety note: this project uses laser diodes strong enough to permanently damage your eyes (or the eyes of those around you), do not use lasers if you don't know how to handle them properly.


Various Sources
(x4) 25 milliwatt 780nm laser diodes with 89 degree line lens Aixis AIX-780-25-8 - really important note here, even though these lasers are labelled "3.2V," they are actually 5V, this took me a really long time to figure out.
(x1) rosco black projection screen (a ~2' by 2' piece at least) Rose Brand
(x1) Arduino Uno (I used a Duemilanova, but an Uno should work too) Sparkfun DEV-11021
(x1) 20"x20" phenolic sheet (for installing LEDs and IR sensors)
(x1) wood 2x4 (for enclosure- I used some redwood that was laying around
(x1) 1mm aluminum sheet (for light-tight partitions underneath screens) enough to make 14 20" x 2.5" pieces - I used black anodized aluminum, but regular un-anodized aluminum should work fine too.
(x1) 20"x20"x¼” glass pane

(x64) 800nm IR phototransistors Digikey 511-1357-ND
(x64) white wide angle LEDs Digikey C535A-WJN-CS0V0231-ND - I found that the quality control on these LEDs is not so great, and they each turned out to be slightly different shades of white. I thought the effect actually looked pretty cool, but if that's not what you're into, I'd try to find some other wide angle LEDs.
(x1) MAX7219 LED driver Digikey MAX7219CNG -ND
(x1) 24 pin socket Digikey 3M5466-ND
(x1) 10uf capacitor Digikey P828-ND
(x1) 0.1uf capacitor Digikey 490-5401-ND
(x1) 74HC595 shift register Digikey 296-1600-5-ND
(x1) 16 pin socket Digikey A100206-ND
(x10) 10kOhm 1/4 watt resistors Digikey CF14JT10K0CT-ND
(x1) 1/4 watt 7219 resistor (value determined here depending on your LEDs)

(x2) usb cable male type A to male type b Amazon
(x1) usb adapter female type a to female type b Amazon
(x1) perfboard with copper Amazon
(x1) polycrylic clear coat Amazon
(x1) silicon adhesive Amazon
(x1) black electrical tape Amazon

(x1) 16 pin ribbon cable Jameco 643532
(x1) 16 pin crimp socket Jameco 1578111 (I didn't actually use this but I wish I had)
(x5) male header pins Jameco 103393
(x1) 22 gauge solid core wire Jameco 36792

hot glue gun
table saw
wood mill/router
aluminum mill
aluminum sheet cutter
soldering iron
infrared/nightvision camera (optional, but useful)
Remove these adsRemove these ads by Signing Up
steveastrouk3 months ago

If you modulated the laser, and synchronously demodulate at the detector, you will eliminate sensitivity to DC sources, like sunlight.

amandaghassaei (author)  steveastrouk2 months ago

yeah I always wanted to do that but never got to it. I think it would help a lot with ambient room light interference. For removing sunlight interference you might have trouble with saturation - the sun emits a ton of ir, I'm not sure you could measure any signal above that noise.

I did something similar many years ago - an outdoor rated laser game, where my sensors were wired in anti-parallel sets into the summing node of inverting amplifiers. Full sun cancelled out at the output of the amp.

Amanda, you wrote, "and the light in the room can only be fluorescent - no incandescent bulbs." Surely LED's are not a problem? They are becoming more and more common in household lighting. I would love to build one of these. It's on a list!

amandaghassaei (author)  stringstretcher2 months ago

I think LEDs will probably work. It really depends on how much they're emitting at 700nm, but usually they are fairly low in that range. The white leds in my project do not interfere with the ir sensing at all.

S0N_0F_A_S0N3 months ago

Yes but can it play Tetris

amandaghassaei (author)  S0N_0F_A_S0N2 months ago


those instructions are currently written for OSX only, Can i use them for win?

I doubt it. can you find a mac to do this step? you only have to do it once. Other option is to get a duemilanove board instead of an uno. I'm searching google for "uno arduinome flash serial" but I'm having a hard time finding a windows+uno solution.

HI, I can't flash the arduino uno.

did you follow the instructions for the uno?

they are a little different than what I did for the duemilanove arduino. Looks like it also only supports mac right now.

you might also look through this thread:

Yes, but the arduino is not detected by the Mprog
javier gomez10 months ago

hi, could i use an arduino leonardo for this project?, i´m not sure if will work the step 23: flash new serial number. thanks and great work.

amandaghassaei (author)  javier gomez9 months ago

no it will only work for atmega 328 (and maybe 168) arduinos. The leonardo uses an atmega32u4

Too cool ! Going to try it out for my Opto project

amandaghassaei (author)  yasir.shahzad1 year ago

awesome, post a video when you're done! I'd love to see how it works out

About how much did it cost to make this
amandaghassaei (author)  CRASH MA5TER1 year ago

depending on how resourceful you are (I used scrap material for the enclosure, the glass surface, the LED pcb - you could use cardboard for this, the laser mounts, grid partitions...) I think it was around $200 for the lasers, projection screen, arduino, cables, electronics, epoxy, wire, tape and other stuff needed to get the thing together.

hablaster1 year ago
Really cool, I'll make one for sure..
Have just a question, what did you use as Led diffuser with the rosco black screen ?
amandaghassaei (author)  hablaster1 year ago
cool! the only diffuser is the rosco black screen, the LEDs are positioned about an inch and a half under it, and I used wide angle LEDs so that the light would be spread more evenly across the surface of the screen.
Lindie1 year ago
Very nice instructable!
ArvidJense1 year ago
Great work once again!
paplaukias1 year ago
Pure awesomeness :) Great instructable! Thanks
lebowski1 year ago
So cool!
amandaghassaei (author)  lebowski1 year ago