택트 스위치 개조 - taegteu seuwichi gaejo

전자제품에서 가장 많이 사용하는 스위치가 뭘까요? 저는 택트스위치라고 생각합니다. 터치방식이 아닌 이상 누르는 스위치는 대부분 이 택트스위치를 사용합니다. 전기전자 관련 회로에 꼭 들어가는 이 택트스위치의 구조와 동작원리, 회로 결선 방법 알아보겠습니다.

택트 스위치 개조 - taegteu seuwichi gaejo
  

택트스위치란?

소형의 스위치로 버튼을 눌렀을 때만 동작하는 스위치입니다. 마우스, 전자제품의 전원버튼, 기능 버튼 등 대부분 전자제품의 버튼으로 사용됩니다. 

영문이름은 Tactile Switch입니다. Tactile은 "촉각의"란 뜻입니다. 한국에서는 텍타일 스위치, 택트 스위치, Tact Switch로 불립니다.

택트스위치의 구조

텍트 스위치는 Cover, Plunger, Contact Dome, Base, Contacts, Terminals로 이루어져 있습니다. 

텍트스위치 구조

얇은 금속판인 Contact Dome(똑딱이 금속판)을 누르면 아래쪽의 Contact와 접촉하여 전기적으로 신호가 전달됩니다. 버튼에서 손을 떼면 Contact Dome은 반대방향으로 움직이며 접점과 떨어집니다. 뜯어보니 구조가 정말 간단하네요. 

텍타일 스위치 결선방법

이상하게 저는 이게 항상 헷갈립니다. 대기 상태에서 ①과 ②, ③과 ④는 항상 서로 연결되어 있습니다. 대신 ①②와 ③④는 서로 떨어져 있는 상태입니다. 버튼을 누르면 ①②③④ 모두 연결되는 것이죠.

텍타일 스위치 결선방법

아두이노나 라즈베리파이로 프로젝트를 하는데 버튼이 안 먹는다? 샘플보드 제작했는데 버튼이 안먹는다? 그러면 택트스위치 방향도 확인해 보세요.  이거 은근히 실수 많이 한답니다.

이전 글 에서 택트 스위치(Tact Switch)를 이용해서 LED를 제어해 보았습니다. 스위치의 버튼을 누르고 있을때만 LED가 켜지고 스위치에서 손을 떼면 LED가 꺼졌었는데요. 이번에는 한 번 누르면 LED가 켜지는 것이 유지되고 다시 누르면 LED가 꺼진 상태로 유지되도록 해 보겠습니다. 그런데 이번에는 Debounce 라는 개념이 들어갑니다. 스위치는 기계적인 장치이므로 켜거나 끌 때 기계적인 진동이나 접촉에 의해서 스위치가 짧은 시간에 여러번 ON/OFF 된 것으로 인식할 수 있습니다. 이런 현상을 Bounce 현상이라고 하고 이것을 없애 주는것이 Debounce 입니다. 즉, 소프트웨어 적으로 Debounce 시간을 설정해두고 이 시간보다 짧은 시간에 일어나는 스위치의 ON/OFF 는 무시하도록 하는 것입니다.

택트 스위치 (Tact Switch) -출처 http://grobotronics.com

택트 스위치 입니다. 위와 같은 것을 사용 합니다. 스위치를 누를 시 초록색 또는 주황색 다리(Lead)끼리 대각선으로 전류가 흐르게 됩니다. 이 글에서는 한 쌍의 Lead 만 사용하면 되므로 쓰지 않는 쌍은 브레드보드에 꼽지 않았습니다.

■ 연결

택트 스위치 개조 - taegteu seuwichi gaejo
_2xSwitch_2xLED_ON_OFF_2.fzz

택트 스위치 개조 - taegteu seuwichi gaejo

위와 같이 연결했습니다. 실제로는 LED 저항은 연결하지 않았지만 LED 보호를 위해서 220Ω 정도의 저항을 연결해 주는 것이 좋습니다.

스위치에도 풀업 10kΩ 정도의 저항을 달아주어야 하나 아두이노의 자체 풀업저장 기능을 사용하면 되므로 소프트웨어적으로 해결 했습니다. (스위치 핀모드 설정에 INPUT_PULLUP 사용)

■ 소스

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

int sw = 10;       // 스위치(SW) 핀 설정

int led = 6;       // LED 핀 설정

int state = LOW;      // LED 상태

int reading;          // SW 상태

int previous = LOW;   // SW 이전 상태

long time = 0;        // LED가 ON/OFF 토글된 마지막 시간

long debounce = 100;  // Debounce 타임 설정

void setup()

{

pinMode(sw, INPUT_PULLUP); // SW 를 설정, 아두이노 풀업저항 사용

pinMode(led, OUTPUT);      // LED 설정

}

void loop()

{

reading = digitalRead(sw);  // SW 상태 읽음

//SW 가 눌려졌고 스위치 토글 눌림 경과시간이 Debounce 시간보다 크면 실행

if (reading == HIGH && previous == LOW && millis() - time > debounce) {

if (state == HIGH)    // LED 가 HIGH 면 LOW 로 바꿔준다.

state = LOW;

else                  // LED 가 LOW 면 HIGH 로 바꿔준다.

state = HIGH;

time = millis();

}

digitalWrite(led, state);

previous = reading;

}

cs

소스를 보면 위에서 설명한 Debounce 시간을 100ms 로 주었습니다. 자신의 사정에 따라 적정 시간을 부여하면 되겠습니다.  그 이외 자세한 설명은 주석에 써 놓았습니다.

동작하는 모습 입니다. 잘 됩니다. Debounce 설정 때문에 100ms 보다 빠르게 스위치를 ON/OFF 하면 LED에는 변화가 없을 것입니다. 손가락 빠른 분들은 도전해 보세요.