Arduino - Touch Sensor

Touch sensor (also called touch button or touch switch) is widely used to control devices (e,g. touchable lamp). It has the same functionality as a button. It is used instead of the button on many new devices because it makes the product look neat.

In this tutorial, we will learn how to use the touch sensor with Arduino.

About Touch Sensor

Pinout

Touch sensor has 3 pins:

  • GND pin needs to be connected to GND (0V)
  • VCC pin needs to be connected to VCC (5V or 3.3v)
  • SIGNAL pin is an output pin: LOW when it is NOT touched, HIGH when it is touched. This pin needs to be connected to Arduino's input pin.
  • Touch Sensor Pinout

How It Works

  • When the sensor is NOT touched, the sensor's SIGNAL pin is LOW
  • When the sensor is touched, the sensor's SIGNAL pin is HIGH

Arduino - Touch Sensor

The touch sensor's SIGNAL pin is connected to an Arduino's input pin.

By reading the state of Arduino's pin (configured as an input pin), we can detect whether the touch sensor is touched or not.

Wiring Diagram

Arduino Touch Sensor Wiring Diagram

Image is developed using Fritzing

How To Program

  • Initializes the Arduino pin as an input. For example, pin 7
pinMode(7, INPUT_PULLUP);
  • Reads the state of the Arduino pin
int inputState = digitalRead(7);

※ NOTE THAT:

There are two wide-used use cases:

  • The first: If the input state is HIGH, do something. If the input state is LOW, do another thing in reverse.
    • The second: If the input state is changed from LOW to HIGH (or HIGH to LOW), do something.
    • Depending on the application, we choose one of them. For example, in case of using a touch sensor to control an LED:

      • If we want the LED to be ON when the sensor is touched and OFF when the sensor is NOT touched, we SHOULD use the first use case.
        • If we want the LED to be toggle between ON and OFF each time we touch the sensor, we SHOULD use the second use case.
  • How to detect the state change from LOW to HIGH
// constants won't change. They're used here to set pin numbers: const int SENSOR_PIN = 7; // the Arduino's input pin that connects to the sensor's SIGNAL pin // Variables will change: int lastState = LOW; // the previous state from the input pin int currentState; // the current reading from the input pin void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // initialize the Arduino's pin as aninput pinMode(SENSOR_PIN, INPUT); } void loop() { // read the state of the the input pin: currentState = digitalRead(SENSOR_PIN); if(lastState == LOW && currentState == HIGH) Serial.println("The sensor is touched"); // save the the last state lastState = currentState; }

Arduino - Touch Sensor Code

We will run four example codes:

  • Reads the value from the touch sensor and print to the Serial Monitor.
  • Controls LED according to the sensor's state.
  • Detects the sensor is touched or released.
  • Toggles LED when the sensor is touched (This is the most common-used).

Reads the value from the touch sensor and print to the Serial Monitor

/* * Created by ArduinoGetStarted.com * * This example code is in the public domain * * Tutorial page: https://arduinogetstarted.com/tutorials/arduino-touch-sensor */ // constants won't change. They're used here to set pin numbers: const int SENSOR_PIN = 7; // the Arduino's input pin that connects to the sensor's SIGNAL pin void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // initialize the Arduino's pin as aninput pinMode(SENSOR_PIN, INPUT); } void loop() { // read the state of the the input pin: int state = digitalRead(SENSOR_PIN); // print state to Serial Monitor Serial.println(state); }

Quick Steps

  • Copy the above code and open with Arduino IDE
  • Click Upload button on Arduino IDE to upload code to Arduino
  • Touch your finger to the sensor and release.
  • See the result on Serial Monitor.
  • COM6
    Send
    0 0 0 1 1 1 1 1 1 0 0
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

Controls LED according to the sensor's state

If the sensor is touched, turn LED on. If the sensor is not touched, turn LED off.

/* * Created by ArduinoGetStarted.com * * This example code is in the public domain * * Tutorial page: https://arduinogetstarted.com/tutorials/arduino-touch-sensor */ // constants won't change. They're used here to set pin numbers: const int SENSOR_PIN = 7; // the Arduino's input pin that connects to the sensor's SIGNAL pin void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // initialize the Arduino's pin as aninput pinMode(SENSOR_PIN, INPUT); // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); } void loop() { // read the state of the the input pin: int state = digitalRead(SENSOR_PIN); // control LED according to the sensor's state digitalWrite(LED_BUILTIN, state); }

Quick Steps

  • Copy the above code and open with Arduino IDE
  • Click Upload button on Arduino IDE to upload code to Arduino
  • Touch your finger to the sensor and keep touching.
  • See LED state ⇒ LED should be on.
  • Release your finger from the sensor.
  • See LED state ⇒ LED should be off.

Detects the sensor is touched or released

// constants won't change. They're used here to set pin numbers: const int SENSOR_PIN = 7; // the Arduino's input pin that connects to the sensor's SIGNAL pin // Variables will change: int lastState = LOW; // the previous state from the input pin int currentState; // the current reading from the input pin void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // initialize the Arduino's pin as aninput pinMode(SENSOR_PIN, INPUT); } void loop() { // read the state of the the input pin: currentState = digitalRead(SENSOR_PIN); if(lastState == LOW && currentState == HIGH) Serial.println("The sensor is touched"); else if(lastState == HIGH && currentState == LOW) Serial.println("The sensor is is released"); // save the the last state lastState = currentState; }

Quick Steps

  • Copy the above code and open with Arduino IDE
  • Click Upload button on Arduino IDE to upload code to Arduino
  • Touch your finger to the sensor and keep touching.
  • See the result on Serial Monitor.
  • COM6
    Send
    The sensor is touched
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  
  • Release your finger from the sensor.
  • See the result on Serial Monitor.
  • COM6
    Send
    The sensor is touched The sensor is is released
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

Toggles LED when the sensor is touched.

/* * Created by ArduinoGetStarted.com * * This example code is in the public domain * * Tutorial page: https://arduinogetstarted.com/tutorials/arduino-touch-sensor */ // constants won't change. They're used here to set pin numbers: const int SENSOR_PIN = 7; // the Arduino's input pin that connects to the sensor's SIGNAL pin // Variables will change: int lastState = LOW; // the previous state from the input pin int currentState; // the current reading from the input pin int ledState = LOW; // the current LED state void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // initialize the Arduino's pin as aninput pinMode(SENSOR_PIN, INPUT); // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); } void loop() { // read the state of the the input pin: currentState = digitalRead(SENSOR_PIN); if(lastState == LOW && currentState == HIGH){ // toggle LED state if(ledState == LOW) ledState = HIGH; else if(ledState == HIGH) ledState = LOW; // control LED digitalWrite(LED_BUILTIN, ledState); } // save the the last state lastState = currentState; }

Quick Steps

  • Copy the above code and open with Arduino IDE
  • Click Upload button on Arduino IDE to upload code to Arduino
  • Touch your finger to the sensor and release.
  • See LED state ⇒ LED should be on.
  • Touch your finger to the sensor and release.
  • See LED state ⇒ LED should be off.
  • Touch your finger to the sensor and release.
  • See LED state ⇒ LED should be on.

Video

incoming

Challenge Yourself

Use touch sensor to do one of the following projects:

Alternative Touch Sensors

The above code also works with the following touch sensors:

Comments

If you have any questions or suggestions, please comment on our YouTube channel