본문 바로가기

개발자/부품

Capacitive Touch Sensor(정전 용량 터치 센서)

반응형

 

요즘 가전기기를 보면 정겹던 똑딱이 버튼은 사라지고 있다는 것을 느끼실 겁니다. 대신 터치 버튼이 사용되면서 더욱 편리하고 더욱 고급스러운 가전 제품이 나오고 있습니다.

 

아두이노를 처음 접하신 분들이'버튼으로 LED 제어하기'를 실습하면서 왠만한 선택형 스위치는 일반 버튼으로 사용하시는 분들이 많습니다. "아두이노는 일반 버튼만 사용할수 있다!!"는 고정관념을 벗겨드리기 위해 오늘은 라이브러리 만으로 정전 용량 터치 센서를 구현 할 수 있는 방법을 알려드리겠습니다.

 

이번 튜토리얼의 가장 핵심은, 저항과 아두이노만으로 할 수 있다는 점이 되겠습니다.^^ 앞서 정전 용량 터치 방식의 원리에 대해서 아주 간단히 살펴보겠습니다. 이름 그대로 정전 용량의 변화를 인식하여 특정 변화 이상일 경우 다른 기능을 수행 할 수 있도록 하는 원리입니다. 

 

 

 

 

 

 

하나의 핀(Send Pin)에서 출력신호를 보내고 다른 한쪽(Receive Pin)에서는 그 신호를 받음으로써 발생한 전하량을 체크합니다. 여기서 신호를 받는 쪽에서 인체(접지역할)가 접촉 할 경우 인체는 전하를 끌어 충전하는 하나의 커패시터 역할을 하게 됩니다.

 

새롭게 발생한 인체 커패시턴스는 Receive Pin쪽의 커패시턴스와 병렬형태가 되고 커패시턴스 병렬 연결 법칙에 따라 정전용량은 더욱 커지게 됩니다. 따라서 커패시터가 갖게되는 저항성분(임피던스)이 증가하여 결과적으로 Receive Pin에 입력되는 전류량이 감소하게 되어 아두이노가 그 변화를 감지하게 되는 원리입니다. 

 

 

 

 

터치 패드를 따로 사용하지 않고 점퍼 케이블에 접점을 만들어 테스트

 

 

Arduino Code

 

#include <CapacitiveSensor.h>

CapacitiveSensor   cs_8_9 = CapacitiveSensor(8,9);     // 8번이 송신핀, 9번이 수신핀 <1번 터치패드>
CapacitiveSensor   cs_10_11 = CapacitiveSensor(10,11); // 10번이 송신핀, 11번이 수신핀 <2번 터치패드>

void setup() 
{
  Serial.begin(9600);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
}

void loop() 
{
  long SEN1 = cs_8_9.capacitiveSensorRaw(30);    // 1번 터치패드 값 수신 <접촉시 55~60의 정수값 출력>
  long SEN2 = cs_10_11.capacitiveSensorRaw(30);  // 2번 터치패드 값 수신 <접촉시 55~60의 정수값 출력>
  Serial.print( SEN1 );
  Serial.print(" ");
  Serial.println( SEN2 );
  digitalWrite(2,LOW);
  digitalWrite(3,LOW);

  if(SEN1 > 50)    // 1번 터치패드 접촉시 1번 LED 점등
  {
    digitalWrite(2,HIGH);
  }
  if(SEN2 > 50)    // 2번 터치패드 접촉시 2번 LED 점등
  {
    digitalWrite(3,HIGH);
  }
}

 

 

소스코드는 매우 간단합니다. 일반 버튼 대신 CapacitiveSensor 라이브러리를 사용하시면 됩니다. 

 

정전식 터치는 터치 스크린과 스마트폰에 사용되는 일반적인 도구이며, 아두이노에는 정전식 터치 센서를 활용할 수 있는 쉬운 라이브러리가 있습니다! 이 튜토리얼에서는 가벼운 터치와 단단한 터치용 두 가지 LED 센서를 켜는 방법을 보여줍니다! 이 프로젝트에 표시된 코드는 여기에서 확인할 수 있습니다: 

 

참고 유튜브 링크, 아래는 아두이노 코드

 

/*
 Touch Sensor Lamp
  Parts required:
  - 1 megohm resistor
  - metal foil or copper mesh
  - 220 ohm resistor x 2
  - LED x 2
  Software required :
  - CapacitiveSensor library by Paul Badger
    https://www.arduino.cc/reference/en/libraries/capacitivesensor/
*/

// import the library (must be located in the Arduino/libraries directory)
#include <CapacitiveSensor.h>

// create an instance of the library
// pin 4 sends electrical energy
// pin 2 senses senses a change
CapacitiveSensor capSensor = CapacitiveSensor(4, 2);

// threshold for turning the lamp on
int threshold = 2000;
int threshold2 = 1000;

// pin the LED is connected to
const int ledPin = 12;
const int ledPin2 = 13;


void setup() {
  // open a serial connection
  Serial.begin(9600);
  // set the LED pin as an output
  pinMode(ledPin, OUTPUT);
  pinMode(ledPin2, OUTPUT);
}

void loop() {
  // store the value reported by the sensor in a variable
  long sensorValue = capSensor.capacitiveSensor(30);

  // print out the sensor value
  Serial.println(sensorValue);

  // if the value is greater than the threshold
  if (sensorValue > threshold) {
    // turn the LED on
    digitalWrite(ledPin, HIGH);
  }
  // if it's lower than the threshold
  else {
    // turn the LED off
    digitalWrite(ledPin, LOW);
  }

// if the value is greater than the threshold
  if (sensorValue > threshold2) {
    // turn the LED on
    digitalWrite(ledPin2, HIGH);
  }
  // if it's lower than the threshold
  else {
    // turn the LED off
    digitalWrite(ledPin2, LOW);
  }
  delay(10);
}

 

 

 

반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^