$50 Infrared Touch Surface




About: I am a junior at Jefferson Highschool in West Virginia, USA. I enjoy building various devices and I just recently started sharing my creations with the world.

Hello, and welcome to my first instructable, an instructable based around building a cheap infrared touch interface that anyone can build, given they are willing to put time and effort into it. In this instructable, I will teach you how to build the touch interface, upload the programs necessary for its function, and show you how to troubleshoot and test it.

The Touch Surface functions like an interactive touch display such as a SmartBoard. This means that when wirelessly connected to a computer, touching within the touch area will move the mouse on the computer. The wireless factor means that it can also be placed within any area it fits in. The interface is also relatively cheap, costing < $50 to assemble. All of the programs are provided.

Update 12/6/16: Please vote for this instructable in the contests it is involved in if you find it interesting or at least helpful. Thank you very much.

This is a primary prototype of an interactive touch interface and it is the prototype I have currently entered into numerous science fairs. This is the first prototype and it is capable of responding to touches accurately to a certain degree (you may watch the video attached to this instructable for a demonstration), I am currently working on a prototype with a larger touch resolution and with greater accuracy. I will make another instructable at a later date, teaching how to build the 2nd prototype.

Before getting into the instructions it is important to understand how infrared touch systems work. A quick overview of the function of these devices is as follows. A simple infrared touch system is composed of multiple infrared emitters (led or lasers) and infrared receivers. The purpose of the emitters is to emit infrared light to the receivers, a virtual grid system or similar formed by the emitters and receivers. The grid system is composed of x and y components, made by the receivers. The system is controlled by microcontrollers made by companies such as ARM and ATMEL. In this instructable, we will use Arduino boards as the microcontrollers which are made by ATMEL. The programs running on the microcontroller detect when a touch is encountered by one of the receivers when the said receiver sends a signal. The microcontrollers then analyze the positioning of the receiver and send a connected computer a signal with information on where the touch occurred relative to the screen.

Step 1: Compatibility

Touch interfaces usually require drivers on the PCs they are to be used on, but once this device is programmed, it can be plugged into any computer with a USB port, running any operating system and achieve normal functionality. When changing between computers of different resolutions make sure you install the appropriate file that corresponds to your screen resolution. The files for the different resolution will be uploaded on my GitHub as I get resolution requests. The default program for hub 5 supports 1600x900 resultion, if your resolution is any different, please feel free to email me your resolution so I can give you the right program for hub 5.

Email: addyirankunda@mail.com

Step 2: Parts List & Requirements

One of my main goals within this instructable is to keep the project super low-cost. With this in mind, I was able to order all the parts that I needed on Ebay for no more than $50. To meet this price point it might be necessary to specifically seek out Chinese sellers for these items, the shipping time is usually 2 weeks. It is also important to keep in mind that it is always good practice to buy a few extra parts (especially for the small components such as resistors).

Parts List:

480 - Breadboard Male to Male Connectors Ebay

96 - 5mm Infrared Emitters (940nm) Ebay

96 - 5mm Infrared Phototransistors (940nm) Ebay

96 - 100k Ohm Resistors Ebay

12 - 4051 Texas Instruments Multiplexers Ebay

8 - 840 pin Breadboards Ebay

7 - Breadboard Female to Female Connectors Ebay

6 - 100 Ohm Resistors Ebay

5 - nrf24l01 Wireless Transceivers Ebay

4 - 10uF Capacitors Ebay

4 - Mini USB Type B Connectors Ebay

4 - Arduino Nano v 3.0 Ebay

1 - Arduino Pro Micro 3.3V/8Mhz Ebay

1 - Micro USB Type B Connector Ebay

Step 3: Setting Up Arduino IDE (Build Computer Only)

The build computer is the computer we use to upload programs to the Arduino and calibrate the devices, it can be the same or seperate from the computer we test/use the device on. In order to upload the pre-written programs on the Arduino boards, we are required to use the Arduino IDE. The IDE lets us interface with the Arduino boards, upload programs unto them, and later troubleshoot and calibrate the microntrollers. It is important to mention that the mentioned processes need to only be carried out once, one the computer we will be using to upload the programs onto the Arduino boards. If the computer we test/use the device on is different from the one we use to upload and calibrate the programs, we do not need to install the following programs and drivers.

Downloading the IDE:

We can download the Arduino IDE from the official Arduino website: https://www.arduino.cc/en/Main/Software

After Downloading the IDE, please install and open it.

Installing CH340G Drivers:

In order for our computers to interface with the Arduino Nano, we will need to install the necessary drivers, ( the CH340G) drivers. The file marked as DCcduino_ch340-drivers.zip contains the necessary drivers, use an extraction software to extract the files and run Setup.exe in the following directory: ~\DCcduino_ch340-drivers\CH341SER_WIN\CH341SER. Now when you plug in your Arduino Nanos they will be recognized by the computer and you can upload programs to them.

Installing Pro Micro in Arduino IDE:

In order to upload the Pro Micro program, we first need to install the Pro Micro in the Arduino IDE.

The instructions on how to install the Pro Micro on the Arduino IDE can be found on the sparkfun website (they are simple and easy to follow): https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide/installing-windows

Step 4: Building Required Circuits: Hubs 1 & 2

In order for the programs we will upload onto the Arduinos to function, we need to build circuits for them to interface with. In total there are 5 "complex" circuits in this project (they are not complex to build, the complexity comes from the fact that they are connected to the Arduinos which make them one huge circuit with processors and all sorts of other components). There are 4 sensor hubs and 1 receiver/command circuit. In order to build any of these circuits, we need to use breadboards and the aforementioned components. Each sensor hub uses 2 breadboards, 24 (emitters, receivers, and 100k Ohm resistors), 1 nrf24L01 module, 1 capacitor, 3 multiplexers, 6 100 Ohm resistors, and 120 male to male breadboard wires. The images below appear blurry in the Instructables photo viewer, please download them and view them in programs such as paint for clearer resolution, THIS IS IMPORTANT FOR ACCURATE CONNECTIONS.

Building the first 2 Sensor Hubs

The process of building the sensor hubs is relatively the same so I used Fritzing to show the important steps of building as it is relatively straightforward this way.

Hub 1 & 2 Step 1 (refer to annotation on Image):

Connect the Arduino, multiplexers, nrf transmitter, capacitor, resistors and emitters in the same fashion as the one below. Be Make sure your connections to the Arduino are the same as the ones in the images.

Hub 1 & 2 Step 2 (refer to annotation on Image):

Connect the Infrared Receivers, and 100kOhm resistors onto the second breadboard and make the necessary wire connections as depicted in the images. The emitters are bright blue because Fritzing didn't have the right dark blue color that the 940nm receivers arrive in.

Hub 1 & 2 Step 3 (refer to annotation on Image):
Connect 8 infrared receivers to their respective positions on the multiplexers by using a wire from the pin between the resistor and receiver, going to the multiplexer. The connections are clearly depicted on the images.

Hub 1 & 2 Step 4 (refer to annotation on Image):
Connect another 8 infrared receivers to their respective positions on the multiplexers. The connections are detailed on the images.

Hub 1 & 2 Step 5 (refer to annotation on Image):
Connect the remaining 16 infrared receivers to the remaining 2 multiplexers. Make sure the connections for each set of eight receivers is similar to the way the first 8 were connected (which is detailed in the images for steps 3 and 4).

Step 5: Building Required Circuits: Hubs 1 & 2

Hubs 3 & 4 are nearly identical to hubs 1 & 2 in the way they are built but there are some subtle differences you may not have noticed while comparing the images for the two different types of hubs. The receivers on hubs 3 & 4 have different connections on the multiplexers. The grey, white, and orange lines on the multiplexers also have switched positions. Please pay attention to these subtle differences when building the 3rd and 4th hubs, failure to do so will result in circuits that do not correspond to the programs on the Arduino.

Step 6: Building Required Circuits: Hub 5

So far we have built the 4 sensor hubs that will send information to the receiver hub, now we have to build the receiver hub. The receiver hub has the most simple circuit out of the five as it requires only the Arduino Pro Micro 3.3V/8MHz and the only nrf24L01 module left. The included image shows how to build the circuit, we can use the female to feUsemale breadboard pins to directly connect the nrf24L01's pins and the Arduino's pins. We do not need a breadboard.

Disclaimer: This image of the pro micro hooked up to the transceiver module was not created by me, it is from the following forum: https://forum.mysensors.org/topic/1790/pro-micro-h...

I apologize, I could not make the image as there is no Arduino Pro Micro within Fritzing software.

Step 7: Uploading Programs

Now that we have successfully built our 5 circuits (4 sensor hubs, and 1 receiver hub) we will need to upload programs to the different hubs. It is important to note that each hub receives each own program. The code for each one of the hubs can be found on my GitHub page: https://github.com/Ultimatefire54/Arduino-Infrared...

Please download the zipped folder and unzip it, then follow the instructions below to upload the instructions below to upload the programs onto the respective hubs. The hub programs can also be downloaded directly from the instructable.

Step 1:

Plug all of the hubs into your computer using their respective USB connectors (Mini USB for Nanos and Micro USB for Pro Micro) and open up the Arduino IDE. Open up device manager as you plug in the hubs and note which hub is assigned which COM port.

Step 2:

Move each one of the "Hub.ino" files we downloaded into their own folders of the same name (in total there should be 5 folders now).

Step 3:

Open each one of the "Hub.ino" files using the Arduino IDE and select the board (Arduino Nano) and COM Port of the hub you want to upload the respective program on first. You may then upload each respective hub's code onto its hub, except for Hub 5. Hub 5's program requires us to select the Pro Micro from the Boards Manager (be sure you select the right version which in this case is the 3.3V/8MHz version).

Step 8: Calibrating and Operation

Now that the programs of each hub are uploaded, we can calibrate the Hubs and start the testing. The programs that I wrote for each hub have a debug mode that can be accessed through the Arduino Serial Monitor. The Serial Monitor allows for the program to output data from the microcontroller it is connected to, effectively giving us a debugging tool. The program has been written to accept specific commands for specific functions such as calibrating, resetting, and other debugging functions. In this step, we will cover only the commands necessary to calibrate the hubs properly and have them function in the way an infrared touch interface would.


Arrange the Hubs so that they form a square formation. Looking on one side of the square, the bottom-left hub should be hub 1, on the bottom-right hub should be hub 3. The top-left hub should be hub 2, and the top-right hub should be hub 4. Throughout the following steps make sure that hub 5 is plugged in.

Lining Up Sensors:

In order for the main hubs (hubs 1-4) to receive information from their sensors, the sensors must be lined up correctly with emitters from some other hub. In order to test whether the hubs are lined up, we can use the Serial Monitor tool within the Arduino IDE. After opening up the serial monitor of a certain hub we can check to see if the sensors are aligned by typing the letter "n" in the serial window and pressing Enter. If all of the values between 0-23 are above the value of 50, the emitters are aligned with the receivers. If not you may adjust the position of the receiver or emitter hub to receive full coverage.


After we have confirmed that all of the receivers on hubs 1-4 have full coverage we can then calibrate the programs on each hub, by entering the letter "a" into the serial monitor of each hub and pressing Enter. The receivers are now calibrated, but we now need to filter out shadows from the operation of the hubs so we send the "r" command and create as much shade over the 4 hubs to set a base light level. During the "r" operation, do not make any touches within the touch area until a data stream starts to flow from the serial monitor. After all of these steps we are ready to connect the 4 hubs to the 5th hub.

Wireless Communication:

The 4 primary hubs send information wirelessly to the 5th hub so the hubs do not need to be connected to the same computer. Now that you have calibrated the hubs please E-mail me the screen resolution of the PC you plan on using the touch interface on to control the cursor. my email is: addyirankunda@mail.com

Step 9: Contests: Arduino, and First Time Author

This Instructable has been entered into the following Instructables contests:

  • Arduino
  • First Time Author

Please Vote for this Instructable in the categories it is competing in, this really helps me out a lot.



    • Sensors Contest

      Sensors Contest
    • 1 Hour Challenge

      1 Hour Challenge
    • Beauty Tips Contest

      Beauty Tips Contest

    15 Discussions


    1 year ago

    Hello there,

    I went through your project and I must say it is a huge accomplishment. My reason for writing to you is that i am currently trying to put together a cheap smartboard system for myself. And for the touchscreen i was planning to adopt your idea as it seems quite inexpensive and at the same time responsive and efficient. I am trying to build a touchboard of 86 inches diagonally ie. roughly 75" x 42", 16:9 ratio for 1280 x 720 widescreen hd projection. Can u suggest me what r the modifications that i need to do to the existing project of yours to suit my needs?


    Sandeep Sarkar

    1 reply

    Sorry for the late reply, it has been a busy week so far. I appreciate your interest in the project, and from what you described, I think this instructable ( https://www.instructables.com/id/Inexpensive-Wireless-Interactive-Board/ )would be more useful for the scale of what you are trying to build. The Instructable I am referring you to is the follow-up of this instructable and it has wireless capabilities as well as the ability to make the touch board a wider area. Please let me know if you have any questions or need more guidance (addyirankunda@gmail.com).

    Adellar IrankundaDARSHAN M S

    Reply 2 years ago

    Hello, I can send you the code for 8 multiplexers with 1 mux, I just ask that you message me privately at: addyirankunda@gmail.com Through my e-mail, I will send you the code.

    Adellar IrankundaDARSHAN M S

    Reply 2 years ago

    Here is the circuit diagram, some of the connections are auto routed but others, I had to connect myself due to the complex nature of the circuit. This is the diagram for hub 1. Hub 2, 3, and 4 are nearly identical and Hub 5 is simple enough as it is only two components. In addition to this, one member on Instructables has managed to recreate a miniature version of this project with my help, they will be posting a "I made it" comment on this page soon!


    2 years ago

    I was looking at the list of things to buy going, "146... that must be a typo.. 96, 96... must still be a typo... 12 multiplexers? Nope, he's for real!!"
    This is a massive project! Well done! Got my votes.


    2 years ago

    Hello - I don't know if this the right space to ask this question but maybe you know where to look for

    I'm looking to buy an arduino system which I can connect led lights to flicker between 35 - 45 hz or more wide range with some degreee of precision

    Any idea if someone can custom build it and have it available for purchase?


    1 reply

    2 years ago

    Hi, this is cool. I see how it works but my question is; What is it for? What can you do with it. Will it record and play back you hand movements and to what end? Still cool though.

    1 reply
    Adellar IrankundaCaryBrace

    Reply 2 years ago

    Hello CaryBrace, I appreciate your interest and your curiosity. The touch interface above is made to act essentially as an interactive whiteboard. Much like the ones used in classrooms today. It records finger movements within the given area and wirelessly sends them to a module no bigger than a flash drive connected to a computer. That device then moves the mouse in relation to where the finger was placed within the touch area. I hope that explains it, if you need a more thorough explaination please let me know. Thank you again.

    Adellar Irankundastudleylee

    Reply 2 years ago

    Thank you! The video of the first prototype has been moved to the very beginning of the Instructable. Thank you for your interest.

    Adellar Irankunda

    2 years ago

    Please feel free to ask questions about the instructable. I am going to add a youtube video depicting the output of the infrared touch surface later today.