Non-contact touch panel

Clean machine operation with non-contact touch panel.
This sensor is a science fiction prototyping designed by imagining the future.

Public Chat
Similar projects worth following
Even if covid-19 converges, the next infectious disease will come. Don't you think modern machine input is filthy? Is it possible to operate ticket vending machines without contact?

I want to control with cleaner and more intuitive movements
I want a sensor that can be easily used by children and people with physical disabilities

"Interactive Hand Sensor" is a motion sensor that I invented.
It can detect distance, speed and direction.
It covers a distance of about 7.9 inch (20 cm) at a high speed of 1.2 milliseconds.
( The distance is about 1 inch for non-contact touch panel )

In 2020, I invented the principle and designed the printed circuit board by myself. Its unique feature is that it intentionally exceeds the absolute rating of infrared LEDs by 10 microseconds.

I'm a little worried about reliability, but it's a technology that will become more stable over time. I think it will be used in daily life in 2030.

Interactive Hand Sensor

"Interactive Hand Sensor" can be detected with a resolution of 0.4~0.8 inch (1~2 cm).Can be applied to non-contact switches, non-contact touch panels, motion detection, etc.

8 sensors from 0 to 7 channels can be sensed in the shortest 1.2 milliseconds

Photo reflector

A photo reflector is a sensor that emits infrared light and detects the reflected light. They are used for line tracing in robots.

How it works

The principle of this sensor is an application of a photo reflector, which I call a "switching photo reflector".
An infrared LED emits infrared light, and a phototransistor converts the light into an electric current, and the resistor converts it into voltage.

When reading the voltage with the AD converter, the infrared LED is lit at the SCLK timing of SPI Interface. It is driven for 10 microseconds without a current limiting resistor and emits strong light at a current of about 1.5A.

The sensor is not accurate in measuring distance. The intensity of the reflected light is not proportional to the distance. I'm throwing away accuracy of distance and taking speed.

The 12-bit AD converter number contains a lot of noise, so it's processed by a micro controller.
V = (A - B) - C
V: distance approximation
A: Reflected light from turning on the infrared LED
B: Reflected light with infrared LED turned off
C: Ambient brightness measured at startup

Block diagram

Sensor Operation

Before starting sensing, select the sensor with the SEL_SEN pin and set the channel. The first sensing session reads the ambient light intensity with an AD converter without emitting infrared light.

The second time, infrared light is emitted and detected in the same way, triggered by the SPI interface SS that is generated before reading the AD converter, which generates a 10 microsecond infrared LED drive signal, causing infrared light to be emitted. The AD converter reads the input value of the same number as the channel.

The infrared LED emission ends at the timing after the AD converter detects it. The difference between the second and first values is used to determine the approximate distance to the object.

Color LED Operation

Before starting the color LED operation, select the color LED with the SEL_SEN pin. Next, calculate the (8X3=)24-bit value for the color corresponding to the detected value. This value is written to the shift register via SPI, and when the output is turned on, the color LED glows.

Circuit diagram

Parts list


Logic analyzer

Logic Explanation

The AD converter reads the light intensity twice. Then, the infrared LEDs will emit light only for the second reading. Infrared LEDs draw currents that exceed their absolute ratings, so the on-time should be kept as short as possible. The MOSFETs that switch the LEDs switch ideally as in the simulation with zero delay. The distance value is the difference between his second value and the first value of the AD converter, minus the ambient brightness (calibration value).

Why sensors are now possible

I have worked in semiconductor failure analysis and am familiar with SEM and TEM photos of semiconductor failure areas. Most failures are caused by tiny distortions or cracks in the crystal. A device without crystal distortion or scratches can be said to be less likely to break.

Unlike LSI chips, infrared LEDs may not be subject to miniaturization of semiconductor processes, but as the precision of semiconductors is improving worldwide, I think they are becoming more difficult to break every year.

Recent semiconductors have a gray zone of about 100 microseconds. In the gray zone range, even if the current exceeds the absolute maximum rating, it will not be damaged. The sensor has been tested continuously for more than 2 years and 4 months without any deterioration. 

This is on sale in Japan. 

Non-contact touch panel

The sensor's infrared light passes through a transparent OLED...

Read more »

Gerber data of Interactive Hand Sensor

Zip Archive - 3.53 MB - 10/08/2023 at 06:23


Circuit design document of Interactive Hand Sensor

Zip Archive - 6.24 MB - 10/08/2023 at 06:22



User Manual of Interactive Hand Sensor

Adobe Portable Document Format - 4.74 MB - 08/15/2023 at 12:01


Arduino example of the sensor, C++

Zip Archive - 4.68 MB - 08/15/2023 at 11:59


Non-contact touch panel program, Raspberry pi 4, Python

Zip Archive - 4.80 MB - 08/15/2023 at 11:56


  • Phototransistor characteristic graph

    Takahiro10/09/2023 at 04:59 0 comments

    One of the core technologies of the sensor that has not been disclosed until now is the characteristics of the phototransistor.

    The output of the AD converter is compared as a curve when the hand is moved closer or farther away under the same conditions. The LTR-209 sensor used has good sensitivity when the object is far away. On the other hand, when the object is close, the sensitivity is poor and once it is saturated, the distance cannot be detected. What is important is the performance at long distances, and this characteristic directly determines the sensor's performance. It is thanks to this phototransistor that it can detect a distance of 8 inches.

  • Video2

    Takahiro08/19/2023 at 06:48 0 comments

    Draw letters with cube type

    This is an experiment to detect characters in a cube shape.
    I want to make it possible for anyone to use advanced machines with intuitive machine operation.

    motion detection

    Video that detects hand movement direction, speed, and position
    It is characterized by speed exceeding AI camera

    dynamic exhibition

    It would be interesting to be able to display models and pictures that move without contact.
    It is expected to be realized by 2030.

    sensing basket

    A basket that lights up to let you know when something is inside. Effective for preventing forgotten items, etc., and can be used in shops, etc.

    Rock paper scissors detection

    If this is used as a cipher, it will be difficult to decipher.

    N/8 switch

    It is a non-contact switch that can input numerical values without erroneous detection.

    False detection prevention contactless switch

    It is a type that operates with two fingers that I was thinking about first.

  • Development history of Interactive Hand Sensor

    Takahiro08/15/2023 at 07:21 0 comments


    This dynamic art I made in 2019 is what inspired me to come up with the sensor idea.

    The LEDs are likened to small creatures, and when a pencil is brought close to them, they gather. Scatters when moved.

    New Interface

    This is an early work I took in 2019.
    The mode selection method, which selects from 6 glowing dots, is inspired by the Japanese animation Kemurikusa. It is interesting that the cube type can create new interfaces such as selection methods as well as control.

    Improved sensor cover

    In the first prototype, such as the paper airplane video above, aluminum foil was wrapped. Now I cut the PVC cap and use it. One of the reasons why photo reflectors have not evolved is that it takes time and effort to cover the sensor, but this has now been resolved.

    The second from the left is a prototype with two infrared LEDs. I stopped using this because it didn't work.

    Non-contact switch

    I have several ideas for non-contact switches, but I think the following insertion type is the easiest and does not cause false positives.

    Intrusion detection

    You can also do this by arranging sensors under the floor.

    Antenna device

    The last is the antenna device that I am going to experiment from now on. The sensing content is transmitted to the fingertips with a vibration motor. It is convenient because it can detect a wider range faster than a cane. I also hope that this sensor will be useful for visually impaired people.

View all 3 project logs

  • 1

    Power-supply voltage5VAssuming USB power supply
    controller voltage5V, 3.3V
    consumption current180mA (scan time 1.2mS)Typical value for a single sensor board, 
    power consumption1WTypical value for a single sensor board, 
    Scan time board alone1.2mS or more, 1 channel 150uS or more
    Scan time parallel continuation800uS or more, 1 channel 100uS or more*
    Cost price$67
    • In order not to reduce the detection distance, it is desirable to use 150uS or more per channel.
    • The measured distance of the sensor varies slightly depending on the microcontroller. Since the distance accuracy is poor, the distance cannot be determined by specifications. However, most microcontrollers can detect a distance of 8 inches.
  • 2
    Hardware of the sensor

    Main board

    Main board pinout (JP1)

    pin numberPIN nameexplanation
    1+5VVcc 5V
    3ASensor channel 0bit
    4BSensor channel 1bit
    5CSensor channel 2bit
    6SSSPI Slave-Select (active-Low) Substrate selection when connecting in parallel.
    7MOSISPI Input
    8MISOSPI Output (3.3V/5V switching JP2)
    9SCLKSPI Clock. Sometimes also "SCK" is used.
    10SEL_SENDetermine if SPI is for sensor or CLED
    High: Sensor (AD converter), Low: CLED
    11OE_ILEDILED Output Enable *ILED: Infrared LED 
    ILED enable/disable * The AD converter is read both when the ILED is on and when it is off.
    12FIX_CLEDCLED Shift Register Latch *CLED: color LED
    Reflect the value of the shift register to the output
    13OE_CLEDCLED Output Enable
    CLED output ON/OFF
    14PWM_CLEDAdjust the brightness of the CLED with PWM (Pulse Wide Modulation) control Short to 13pin or 5V when not using PWM


    • SEL_SEN pin for SPI switching of sensor (AD converter) and CLED.
    • Set the ILED channel with ABC.
    • After CLED transfers data to the shift register, it is reflected in the output with a FIX_CLED pulse.
    • CLED ON can adjust the brightness with AND output of 13pin and 14pin and PWM of 14pin.

    Sensor sensitivity adjustment method

    ILED and PhTr You can adjust the sensitivity of the sensor by moving the black cover up and down, but please be careful as it may deviate from the optimum sensitivity.

    *ILED: Infrared LED,  PhTr: Phototransistor, CLED: color LED

    If the black cover is too high and cannot be lowered, cut the black cover as shown below. Priority is in the order of A and B in the figure below.

    Precautions when sensing through transparent plates such as acrylic and transparent OLED

    • Close to the sensor or less than 0.4 inch away from the sensor. Otherwise, the sensitivity will drop significantly.
    • Before turning on the power, set the board so that it does not move. The sensor stores the surrounding brightness as a calibration value when the power is turned on. If the board is moved after the power is turned on, the calibration values will no longer match and accurate sensing will not be possible.
    • If you use acrylic, the sensitivity will be about 5% lower than without. With transparent OLED, the sensitivity is significantly reduced by about 1/7.

    Main board circuit diagram

    Sensor board circuit diagram

    SPI and ILED drive timing

    The infrared LED drive is triggered by SPI SS. Please note that this timing will vary slightly depending on the microcontroller and software library. The library has been confirmed to work on Raspberry Pi 3 and 4, Arduino Uno and Nano Every, and mbed Nucleo.

    SPI and ADC read timing

    The reading timing of the AD converter is near the center of the diagram. The on time of an infrared LED is 10 microseconds, but even when it is turned off, the output voltage of the phototransistor does not drop immediately. The sensor readings are therefore relatively stable.


    The sensor's infrared LED is fragile, so please do not touch it unless it is in danger of falling out or if it is unavoidable.

    Please turn off the power before inserting or removing the sensor. If you insert or remove it during operation, it may be damaged.

    If the sensor is operated directly under the air conditioner, the air conditioner remote control may not work due to the effects of infrared rays. In that case, you can avoid it by changing the location or angle.

  • 3
    Software and interface of the sensor

    SPI interface setting (AD converter/shift register)

    • SPI-MODE:0
    • CLOCK:2MHz 
    • One cycle (time interval between accesses to the same ILED) is 1.2mS or more

    AD converter reading procedure

    1. OE_CLED:LOW
    2. A,B,C      :Sensor channel setting
    3. SEL_SEN: HIGH Select sensor, do not select CLED

    4. OE_ILED:LOW ILED OFF  * ILED: Infrared LED
    5. SS          :LOW
    6. SPI-read AD read value:vOff
    7. SS           :HIGH

    9. SS           :LOW
    10. SPI-read AD read value:from
    11. SS           :HIGH
    12. Temporary sensor value:fromOn - fromOff Save in an array

    * The value obtained by subtracting the ambient brightness measured at startup from the temporary sensor value is the sensor value.

    Logic analyzer sensor reading diagram

    • Select the channel with A,B,C
    • Select the sensor by setting SEL_SEN to High
    • Turn on OE_ILED and emit infrared rays only during the second reading
    • Make the AD converter channel the same as A, B, and C channels.

    Read code of AD converter (Arduino C++)

    8 sensor readings

    void Sensor::setAd(bool bInit) {// bInit:add val to adAryInit[]
        for (int col = 0; col < COL_LEN; col++) {// COL_LEN:8
            setCol(col, bInit);    // *** sensing ***
        if (!bInit)                // *** set CLED ***
            cled.set(val);        // sensor-data, indicator

    Reading of a single sensor

    void Sensor::setCol(int col, bool bInit) {
        int ledSta = digitalRead(OE_CLED);
        digitalWrite(OE_CLED, LOW);
        out3bit(abc, col);
        digitalWrite(SEL_SEN, HIGH);
        digitalWrite(OE_ILED, LOW);   // ILED-OFF
        int vOff =getAdc(col);        // *** read ADC ***
        digitalWrite(OE_ILED, HIGH);  // ILED-ON
        int ofOn =getAdc(col);        // *** read ADC ***
        digitalWrite(SEL_SEN, LOW);
        digitalWrite(OE_ILED, LOW);   // ILED-OFF
        digitalWrite(OE_CLED, ledSta);
        if (bInit)
            adAryInit[col] += vOn - vOff - (vOff >> 2) + (vOn >> 4);
            adAry[col] = noMinus(vOn - vOff - (vOff >> 2) + (vOn >> 4)- adAryInit[col]);
        val[col] = ad2val(adAry[col]);    // adAryInit[col]: Ambient brightness measured at startup
    unsigned int Sensor::getAdc(int col) {
        digitalWrite(SS, LOW);
        SPI.transfer(6 | (col >> 2));
        unsigned char r1 = SPI.transfer(col << 6);
        unsigned char r2 = SPI.transfer(0);
        digitalWrite(SS, HIGH);
        return ((r1 & 0x0f) << 8) + r2;

View all 4 instructions

Enjoy this project?



Similar Projects

Does this project spark your interest?

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