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 ~1/16" (for installing LEDs and IR sensors) Amazon
(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 Amazon
(x1) 20"x20"x¼” glass pane (acrylic works too Amazon)

(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 shear
soldering iron
infrared/nightvision camera (optional, but useful)

Step 1: LLP (Laser Light Plane)

Infrared (IR) multitouch is an inexpensive alternative to the capacitive multitouch found in smartphones and tablets. There are a few popular techniques for building an IR multitouch system, all of which are outlined very nicely at the nuigroup wiki.

I used a technique called Laser Light Plane (LLP) for my touchscreen; the diagram above gives an overview of how it works. Several lasers positioned on top of the screen create a very thin layer or infrared (IR) light that completely covers the screen's surface. When a finger touches the screen, it breaks this plane of light and scatters some of the IR light into the screen. I partitioned the underside of the screen with pieces of aluminum sheet and placed one IR sensor in each partition. By measuring each of the sensors, you can determine the x and y coordinates of the touch event. I also added a white LED to each partition, so that the screen could be used as a projection surface. The diffuser material on the bottom of the screen (light grey) helps the LED more evenly distribute light across the surface of the screen.

This is what LLP looks like with red lasers, IR will work the same, but it is not visible to the human eye:

Here's what it looks like to a camera that's been modified to see IR:

This is what my final project looks like with night vision:

I won't get into the specifics of every IR multitouch technique here (again, check nuigroup for that info), but I'll say a few things about why I chose LLP:
zero force - no downward pressure on the screen is necessary to register a touch.
glass - I wanted to use glass as my screen surface (looks/feels nicer, less scratch prone than acrylic), but some IR multitouch methods (total internal reflection) require acrylic.
thin - many IR multitouch techniques us a camera to do the finger tracking, this means that the camera must be positioned so that it has an unobstructed view of the entire screen. Usually this means making the enclosure of the multitouch surface very deep so that the camera is sufficiently far away. By contrast, my method of using an array with LLP can be scaled down to thicknesses of less than an inch.
scalable - the unit piece of this touchscreen - the cell containing one LED and one IR sensor - can be repeated many times to make larger or denser arrays.

Some downsides to LLP:
- anything that breaks the surface of the screen will trigger the sensors - sleeves, elbows... sometimes that is annoying. It could be a good thing though, you can use regular objects to trigger the touch.
- the downfall of all IR touchscreens is that they are sensitive to IR light. This screen only works at night or in a room with no windows, and the light in the room can only be fluorescent - no incandescent bulbs.

Another good resource for LLP information is at the nuigroup llp page.
Image source: parts of the above image are taken from nuigroup
<p>Can you tell me which camera you use to check LLP setup?</p>
<p>great stuff</p>
I Love You
<p>I'm trying to build something similar to this. As a musician, I'm constantly tapping out beats and rhythms with my fingers.</p><p>Basically, I'm trying to build a velocity-sensitive midi controller that ties into my drum machines. One button per finger. (Right thumb=bass drum, Right fingers=toms pinkie finger= highest tom and down, Left pointer finger= snare, Left thumb= closed high hat, Left middle finger= claps, Left pinkie= open high hat.)</p><p>Do you know of any projects like this I could use for inspiration? Thanks.</p>
<p>If you modulated the laser, and synchronously demodulate at the detector, you will eliminate sensitivity to DC sources, like sunlight. </p>
<p>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.</p>
<p>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. </p>
<p>Amanda, you wrote, &quot;and the light in the room can only be fluorescent - no incandescent bulbs.&quot; 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!</p>
<p>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.</p>
<p>Yes but can it play Tetris</p>
those instructions are currently written for OSX only, Can i use them for win?
<p>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.</p>
<p>HI, I can't flash the arduino uno.</p>
<p>did you follow the instructions for the uno?</p><p><a href="http://flipmu.com/work/arduinome/instructions/uno-atmega-8u2-serial-number/">http://flipmu.com/work/arduinome/instructions/uno-...</a></p><p>they are a little different than what I did for the duemilanove arduino. Looks like it also only supports mac right now.</p><p>you might also look through this thread:</p><p>http://monome.org/community/discussion/10201/arduinome-and-arduino-uno/p1</p>
Yes, but the arduino is not detected by the Mprog
<p></p><p>hi, could i use an arduino leonardo for this project?, i&acute;m not sure if will work the step 23: flash new serial number. thanks and great work.</p>
<p>no it will only work for atmega 328 (and maybe 168) arduinos. The <a target="_blank" href="http://arduino.cc/en/Main/arduinoBoardLeonardo">leonardo</a> uses an atmega32u4</p>
<p>Too cool ! Going to try it out for my Opto project</p>
<p>awesome, post a video when you're done! I'd love to see how it works out</p>
About how much did it cost to make this
<p>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.</p>
Really cool, I'll make one for sure.. <br>Have just a question, what did you use as Led diffuser with the rosco black screen ?
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.
Very nice instructable!
Great work once again!
Pure awesomeness :) Great instructable! Thanks
So cool!

About This Instructable




Bio: I'm a grad student at the Center for Bits and Atoms at MIT Media Lab. Before that I worked at Instructables, writing code for ... More »
More by amandaghassaei:OTCA Metapixel - Conway's Game of Life "9 Degrees of Freedom" IMU Twitter Controlled Pet Feeder 
Add instructable to: